|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v3 09/11] tmem: Use 'struct tmem_oid' in tmem_handle and move it to sysctl header.
Instead of the three member uint64_t structure.
The structure is used by the control stack for
XEN_SYSCTL_TMEM_OP_SAVE_GET_NEXT_[PAGE|INV] only so
moving it to the sysctl header.
Also modified tmemc_save_get_next_page to deal with
the new type - and converted some of the on-stack
usage of the array to use an pointer.
Further work will be to make the xen_sysctl_tmem_op have
an union with proper type for the two: ..GET_NEXT_[PAGE|INV]
operations.
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
---
tools/libxc/xc_tmem.c | 6 +++---
xen/common/tmem.c | 12 ++++++------
xen/include/public/sysctl.h | 11 +++++++++++
xen/include/public/tmem.h | 6 ------
4 files changed, 20 insertions(+), 15 deletions(-)
diff --git a/tools/libxc/xc_tmem.c b/tools/libxc/xc_tmem.c
index 425f51d..70a8e11 100644
--- a/tools/libxc/xc_tmem.c
+++ b/tools/libxc/xc_tmem.c
@@ -304,7 +304,7 @@ int xc_tmem_save(xc_interface *xch,
} else {
/* page list terminator */
h = (struct tmem_handle *)buf;
- h->oid[0] = h->oid[1] = h->oid[2] = -1L;
+ h->oid.oid[0] = h->oid.oid[1] = h->oid.oid[2] = -1L;
if ( write_exact(io_fd, &h->oid, sizeof(h->oid)) )
return -1;
break;
@@ -341,8 +341,8 @@ int xc_tmem_save_extra(xc_interface *xch, int dom, int
io_fd, int field_marker)
if ( write_exact(io_fd, &handle.index, sizeof(handle.index)) )
return -1;
count++;
- checksum += handle.pool_id + handle.oid[0] + handle.oid[1] +
- handle.oid[2] + handle.index;
+ checksum += handle.pool_id + handle.oid.oid[0] + handle.oid.oid[1] +
+ handle.oid.oid[2] + handle.index;
}
if ( count )
DPRINTF("needed %d tmem invalidates, check=%d\n",count,checksum);
diff --git a/xen/common/tmem.c b/xen/common/tmem.c
index f06823e..4071dc0 100644
--- a/xen/common/tmem.c
+++ b/xen/common/tmem.c
@@ -2434,7 +2434,7 @@ static int tmemc_save_get_next_page(int cli_id, uint32_t
pool_id,
struct tmem_pool *pool = (client == NULL || pool_id >=
MAX_POOLS_PER_DOMAIN)
? NULL : client->pools[pool_id];
struct tmem_page_descriptor *pgp;
- struct tmem_oid oid;
+ struct tmem_oid *oid;
int ret = 0;
struct tmem_handle h;
@@ -2466,10 +2466,10 @@ static int tmemc_save_get_next_page(int cli_id,
uint32_t pool_id,
pgp = list_entry((&pool->cur_pgp->us.pool_pers_pages)->next,
struct tmem_page_descriptor,us.pool_pers_pages);
pool->cur_pgp = pgp;
- oid = pgp->us.obj->oid;
+ oid = &pgp->us.obj->oid;
h.pool_id = pool_id;
- BUILD_BUG_ON(sizeof(h.oid) != sizeof(oid));
- memcpy(h.oid, oid.oid, sizeof(h.oid));
+ BUILD_BUG_ON(sizeof(h.oid) != sizeof(*oid));
+ memcpy(&(h.oid), oid, sizeof(h.oid));
h.index = pgp->index;
if ( copy_to_guest(guest_handle_cast(buf, void), &h, 1) )
{
@@ -2477,7 +2477,7 @@ static int tmemc_save_get_next_page(int cli_id, uint32_t
pool_id,
goto out;
}
guest_handle_add_offset(buf, sizeof(h));
- ret = do_tmem_get(pool, &oid, pgp->index, 0, buf);
+ ret = do_tmem_get(pool, oid, pgp->index, 0, buf);
out:
spin_unlock(&pers_lists_spinlock);
@@ -2517,7 +2517,7 @@ static int tmemc_save_get_next_inv(int cli_id,
tmem_cli_va_param_t buf,
}
h.pool_id = pgp->pool_id;
BUILD_BUG_ON(sizeof(h.oid) != sizeof(pgp->inv_oid));
- memcpy(h.oid, pgp->inv_oid.oid, sizeof(h.oid));
+ memcpy(&(h.oid), &(pgp->inv_oid), sizeof(h.oid));
h.index = pgp->index;
ret = 1;
if ( copy_to_guest(guest_handle_cast(buf, void), &h, 1) )
diff --git a/xen/include/public/sysctl.h b/xen/include/public/sysctl.h
index 3656c7f..bbcc96f 100644
--- a/xen/include/public/sysctl.h
+++ b/xen/include/public/sysctl.h
@@ -738,6 +738,17 @@ DEFINE_XEN_GUEST_HANDLE(xen_sysctl_psr_cat_op_t);
#define XEN_SYSCTL_TMEM_OP_RESTORE_PUT_PAGE 32
#define XEN_SYSCTL_TMEM_OP_RESTORE_FLUSH_PAGE 33
+/*
+ * XEN_SYSCTL_TMEM_OP_SAVE_GET_NEXT_[PAGE|INV] override the 'buf' in
+ * xen_sysctl_tmem_op with this structure - sometimes with an extra
+ * page tackled on.
+ */
+struct tmem_handle {
+ uint32_t pool_id;
+ uint32_t index;
+ tmem_oid_t oid;
+};
+
struct xen_sysctl_tmem_op {
uint32_t cmd; /* IN: XEN_SYSCTL_TMEM_OP_* . */
int32_t pool_id; /* IN: 0 by default unless _SAVE_*, RESTORE_* .*/
diff --git a/xen/include/public/tmem.h b/xen/include/public/tmem.h
index 57d5601..5dd2399 100644
--- a/xen/include/public/tmem.h
+++ b/xen/include/public/tmem.h
@@ -109,12 +109,6 @@ struct tmem_op {
};
typedef struct tmem_op tmem_op_t;
DEFINE_XEN_GUEST_HANDLE(tmem_op_t);
-
-struct tmem_handle {
- uint32_t pool_id;
- uint32_t index;
- uint64_t oid[3];
-};
#endif
#endif /* __XEN_PUBLIC_TMEM_H__ */
--
2.1.0
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |