[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 20/21] xen: replace XEN_GUEST_HANDLE with XEN_GUEST_HANDLE_PARAM when appropriate
On Fri, 2012-10-05 at 11:38 +0100, Ian Campbell wrote: > diff --git a/xen/include/public/tmem.h b/xen/include/public/tmem.h > index 74bd1c6..7bd29ba 100644 > --- a/xen/include/public/tmem.h > +++ b/xen/include/public/tmem.h > @@ -96,7 +96,7 @@ > > #ifndef __ASSEMBLY__ > typedef xen_pfn_t tmem_cli_mfn_t; > -typedef XEN_GUEST_HANDLE(char) tmem_cli_va_t; > +typedef XEN_GUEST_HANDLE_PARAM(char) tmem_cli_va_t; > struct tmem_op { > uint32_t cmd; > int32_t pool_id; This worked on ARM but not on x86_64 (or rather, not with the compat layer), and looking at the below was rather optimistic ;-) This probably ought to be folded into the original patch rather than kept separate. Reviewers, opinions on xen/include/xen/compat.h would be particularly appreciated. 8<-------------------------------------------------- >From b095a4414f146ec6ec7eff6c990bef49deac776b Mon Sep 17 00:00:00 2001 From: Ian Campbell <ian.campbell@xxxxxxxxxx> Date: Fri, 5 Oct 2012 11:28:34 +0000 Subject: [PATCH] xen: correct usage of guest handle paramters in tmem Broken by "xen: replace XEN_GUEST_HANDLE with XEN_GUEST_HANDLE_PARAM when appropriate". Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx> --- xen/common/tmem.c | 45 ++++++++++++++++++++++++------------------- xen/common/tmem_xen.c | 8 +++--- xen/include/public/tmem.h | 3 +- xen/include/xen/compat.h | 4 ++- xen/include/xen/tmem_xen.h | 15 ++++++++----- 5 files changed, 43 insertions(+), 32 deletions(-) diff --git a/xen/common/tmem.c b/xen/common/tmem.c index ed322b6..1280537 100644 --- a/xen/common/tmem.c +++ b/xen/common/tmem.c @@ -1444,7 +1444,7 @@ static inline void tmem_ensure_avail_pages(void) /************ TMEM CORE OPERATIONS ************************************/ static NOINLINE int do_tmem_put_compress(pgp_t *pgp, tmem_cli_mfn_t cmfn, - tmem_cli_va_t clibuf) + tmem_cli_va_param_t clibuf) { void *dst, *p; size_t size; @@ -1488,7 +1488,7 @@ out: static NOINLINE int do_tmem_dup_put(pgp_t *pgp, tmem_cli_mfn_t cmfn, pagesize_t tmem_offset, pagesize_t pfn_offset, pagesize_t len, - tmem_cli_va_t clibuf) + tmem_cli_va_param_t clibuf) { pool_t *pool; obj_t *obj; @@ -1579,7 +1579,7 @@ cleanup: static NOINLINE int do_tmem_put(pool_t *pool, OID *oidp, uint32_t index, tmem_cli_mfn_t cmfn, pagesize_t tmem_offset, - pagesize_t pfn_offset, pagesize_t len, tmem_cli_va_t clibuf) + pagesize_t pfn_offset, pagesize_t len, tmem_cli_va_param_t clibuf) { obj_t *obj = NULL, *objfound = NULL, *objnew = NULL; pgp_t *pgp = NULL, *pgpdel = NULL; @@ -1722,7 +1722,7 @@ free: static NOINLINE int do_tmem_get(pool_t *pool, OID *oidp, uint32_t index, tmem_cli_mfn_t cmfn, pagesize_t tmem_offset, - pagesize_t pfn_offset, pagesize_t len, tmem_cli_va_t clibuf) + pagesize_t pfn_offset, pagesize_t len, tmem_cli_va_param_t clibuf) { obj_t *obj; pgp_t *pgp; @@ -2066,8 +2066,8 @@ static int tmemc_flush_mem(cli_id_t cli_id, uint32_t kb) */ #define BSIZE 1024 -static int tmemc_list_client(client_t *c, tmem_cli_va_t buf, int off, - uint32_t len, bool_t use_long) +static int tmemc_list_client(client_t *c, tmem_cli_va_param_t buf, + int off, uint32_t len, bool_t use_long) { char info[BSIZE]; int i, n = 0, sum = 0; @@ -2119,7 +2119,7 @@ static int tmemc_list_client(client_t *c, tmem_cli_va_t buf, int off, return sum; } -static int tmemc_list_shared(tmem_cli_va_t buf, int off, uint32_t len, +static int tmemc_list_shared(tmem_cli_va_param_t buf, int off, uint32_t len, bool_t use_long) { char info[BSIZE]; @@ -2159,8 +2159,8 @@ static int tmemc_list_shared(tmem_cli_va_t buf, int off, uint32_t len, } #ifdef TMEM_PERF -static int tmemc_list_global_perf(tmem_cli_va_t buf, int off, uint32_t len, - bool_t use_long) +static int tmemc_list_global_perf(tmem_cli_va_param_t buf, int off, + uint32_t len, bool_t use_long) { char info[BSIZE]; int n = 0, sum = 0; @@ -2194,7 +2194,7 @@ static int tmemc_list_global_perf(tmem_cli_va_t buf, int off, uint32_t len, #define tmemc_list_global_perf(_buf,_off,_len,_use) (0) #endif -static int tmemc_list_global(tmem_cli_va_t buf, int off, uint32_t len, +static int tmemc_list_global(tmem_cli_va_param_t buf, int off, uint32_t len, bool_t use_long) { char info[BSIZE]; @@ -2226,7 +2226,7 @@ static int tmemc_list_global(tmem_cli_va_t buf, int off, uint32_t len, return sum; } -static int tmemc_list(cli_id_t cli_id, tmem_cli_va_t buf, uint32_t len, +static int tmemc_list(cli_id_t cli_id, tmem_cli_va_param_t buf, uint32_t len, bool_t use_long) { client_t *client; @@ -2338,7 +2338,7 @@ static NOINLINE int tmemc_shared_pool_auth(cli_id_t cli_id, uint64_t uuid_lo, } static NOINLINE int tmemc_save_subop(int cli_id, uint32_t pool_id, - uint32_t subop, tmem_cli_va_t buf, uint32_t arg1) + uint32_t subop, tmem_cli_va_param_t buf, uint32_t arg1) { client_t *client = tmh_client_from_cli_id(cli_id); pool_t *pool = (client == NULL || pool_id >= MAX_POOLS_PER_DOMAIN) @@ -2427,7 +2427,7 @@ static NOINLINE int tmemc_save_subop(int cli_id, uint32_t pool_id, } static NOINLINE int tmemc_save_get_next_page(int cli_id, uint32_t pool_id, - tmem_cli_va_t buf, uint32_t bufsize) + tmem_cli_va_param_t buf, uint32_t bufsize) { client_t *client = tmh_client_from_cli_id(cli_id); pool_t *pool = (client == NULL || pool_id >= MAX_POOLS_PER_DOMAIN) @@ -2479,7 +2479,7 @@ out: return ret; } -static NOINLINE int tmemc_save_get_next_inv(int cli_id, tmem_cli_va_t buf, +static NOINLINE int tmemc_save_get_next_inv(int cli_id, tmem_cli_va_param_t buf, uint32_t bufsize) { client_t *client = tmh_client_from_cli_id(cli_id); @@ -2522,7 +2522,7 @@ out: } static int tmemc_restore_put_page(int cli_id, uint32_t pool_id, OID *oidp, - uint32_t index, tmem_cli_va_t buf, uint32_t bufsize) + uint32_t index, tmem_cli_va_param_t buf, uint32_t bufsize) { client_t *client = tmh_client_from_cli_id(cli_id); pool_t *pool = (client == NULL || pool_id >= MAX_POOLS_PER_DOMAIN) @@ -2566,7 +2566,8 @@ static NOINLINE int do_tmem_control(struct tmem_op *op) ret = tmemc_flush_mem(op->u.ctrl.cli_id,op->u.ctrl.arg1); break; case TMEMC_LIST: - ret = tmemc_list(op->u.ctrl.cli_id,op->u.ctrl.buf, + ret = tmemc_list(op->u.ctrl.cli_id, + guest_handle_cast(op->u.ctrl.buf, char), op->u.ctrl.arg1,op->u.ctrl.arg2); break; case TMEMC_SET_WEIGHT: @@ -2589,20 +2590,24 @@ static NOINLINE int do_tmem_control(struct tmem_op *op) case TMEMC_SAVE_GET_POOL_UUID: case TMEMC_SAVE_END: ret = tmemc_save_subop(op->u.ctrl.cli_id,pool_id,subop, - op->u.ctrl.buf,op->u.ctrl.arg1); + guest_handle_cast(op->u.ctrl.buf, char), + op->u.ctrl.arg1); break; case TMEMC_SAVE_GET_NEXT_PAGE: ret = tmemc_save_get_next_page(op->u.ctrl.cli_id, pool_id, - op->u.ctrl.buf, op->u.ctrl.arg1); + guest_handle_cast(op->u.ctrl.buf, char), + op->u.ctrl.arg1); break; case TMEMC_SAVE_GET_NEXT_INV: - ret = tmemc_save_get_next_inv(op->u.ctrl.cli_id, op->u.ctrl.buf, + ret = tmemc_save_get_next_inv(op->u.ctrl.cli_id, + guest_handle_cast(op->u.ctrl.buf, char), op->u.ctrl.arg1); break; case TMEMC_RESTORE_PUT_PAGE: ret = tmemc_restore_put_page(op->u.ctrl.cli_id,pool_id, oidp, op->u.ctrl.arg2, - op->u.ctrl.buf, op->u.ctrl.arg1); + guest_handle_cast(op->u.ctrl.buf, char), + op->u.ctrl.arg1); break; case TMEMC_RESTORE_FLUSH_PAGE: ret = tmemc_restore_flush_page(op->u.ctrl.cli_id,pool_id, diff --git a/xen/common/tmem_xen.c b/xen/common/tmem_xen.c index 9dc2a1d..25fbd6c 100644 --- a/xen/common/tmem_xen.c +++ b/xen/common/tmem_xen.c @@ -146,7 +146,7 @@ static inline void cli_put_page(void *cli_va, pfp_t *cli_pfp, EXPORT int tmh_copy_from_client(pfp_t *pfp, tmem_cli_mfn_t cmfn, pagesize_t tmem_offset, - pagesize_t pfn_offset, pagesize_t len, tmem_cli_va_t clibuf) + pagesize_t pfn_offset, pagesize_t len, tmem_cli_va_param_t clibuf) { unsigned long tmem_mfn, cli_mfn = 0; char *tmem_va, *cli_va = NULL; @@ -194,7 +194,7 @@ EXPORT int tmh_copy_from_client(pfp_t *pfp, } EXPORT int tmh_compress_from_client(tmem_cli_mfn_t cmfn, - void **out_va, size_t *out_len, tmem_cli_va_t clibuf) + void **out_va, size_t *out_len, tmem_cli_va_param_t clibuf) { int ret = 0; unsigned char *dmem = this_cpu(dstmem); @@ -227,7 +227,7 @@ EXPORT int tmh_compress_from_client(tmem_cli_mfn_t cmfn, EXPORT int tmh_copy_to_client(tmem_cli_mfn_t cmfn, pfp_t *pfp, pagesize_t tmem_offset, pagesize_t pfn_offset, pagesize_t len, - tmem_cli_va_t clibuf) + tmem_cli_va_param_t clibuf) { unsigned long tmem_mfn, cli_mfn = 0; char *tmem_va, *cli_va = NULL; @@ -265,7 +265,7 @@ EXPORT int tmh_copy_to_client(tmem_cli_mfn_t cmfn, pfp_t *pfp, } EXPORT int tmh_decompress_to_client(tmem_cli_mfn_t cmfn, void *tmem_va, - size_t size, tmem_cli_va_t clibuf) + size_t size, tmem_cli_va_param_t clibuf) { unsigned long cli_mfn = 0; pfp_t *cli_pfp = NULL; diff --git a/xen/include/public/tmem.h b/xen/include/public/tmem.h index 7bd29ba..91f3a7d 100644 --- a/xen/include/public/tmem.h +++ b/xen/include/public/tmem.h @@ -96,7 +96,8 @@ #ifndef __ASSEMBLY__ typedef xen_pfn_t tmem_cli_mfn_t; -typedef XEN_GUEST_HANDLE_PARAM(char) tmem_cli_va_t; +typedef XEN_GUEST_HANDLE(char) tmem_cli_va_t; +typedef XEN_GUEST_HANDLE_PARAM(char) tmem_cli_va_param_t; struct tmem_op { uint32_t cmd; int32_t pool_id; diff --git a/xen/include/xen/compat.h b/xen/include/xen/compat.h index 857cbc7..5a51ce0 100644 --- a/xen/include/xen/compat.h +++ b/xen/include/xen/compat.h @@ -21,7 +21,9 @@ __DEFINE_COMPAT_HANDLE(name, name); \ __DEFINE_COMPAT_HANDLE(const_ ## name, const name) #define COMPAT_HANDLE(name) __compat_handle_ ## name - +/* NB: it is assumed that if an arch uses the compat layer it does not + * distinguish handles from parameter handles. */ +#define COMPAT_HANDLE_PARAM(name) __compat_handle_ ## name /* Is the compat handle a NULL reference? */ #define compat_handle_is_null(hnd) ((hnd).c == 0) diff --git a/xen/include/xen/tmem_xen.h b/xen/include/xen/tmem_xen.h index c31220a..ef720ed 100644 --- a/xen/include/xen/tmem_xen.h +++ b/xen/include/xen/tmem_xen.h @@ -466,8 +466,9 @@ static inline int tmh_get_tmemop_from_client(tmem_op_t *op, tmem_cli_op_t uops) #define tmh_cli_buf_null guest_handle_from_ptr(NULL, char) -static inline void tmh_copy_to_client_buf_offset(tmem_cli_va_t clibuf, int off, - char *tmembuf, int len) +static inline void tmh_copy_to_client_buf_offset(tmem_cli_va_param_t clibuf, + int off, + char *tmembuf, int len) { copy_to_guest_offset(clibuf,off,tmembuf,len); } @@ -482,15 +483,17 @@ static inline void tmh_copy_to_client_buf_offset(tmem_cli_va_t clibuf, int off, #define tmh_cli_id_str "domid" #define tmh_client_str "domain" -int tmh_decompress_to_client(tmem_cli_mfn_t, void *, size_t, tmem_cli_va_t); +int tmh_decompress_to_client(tmem_cli_mfn_t, void *, size_t, + tmem_cli_va_param_t); -int tmh_compress_from_client(tmem_cli_mfn_t, void **, size_t *, tmem_cli_va_t); +int tmh_compress_from_client(tmem_cli_mfn_t, void **, size_t *, + tmem_cli_va_param_t); int tmh_copy_from_client(pfp_t *, tmem_cli_mfn_t, pagesize_t tmem_offset, - pagesize_t pfn_offset, pagesize_t len, tmem_cli_va_t); + pagesize_t pfn_offset, pagesize_t len, tmem_cli_va_param_t); int tmh_copy_to_client(tmem_cli_mfn_t, pfp_t *, pagesize_t tmem_offset, - pagesize_t pfn_offset, pagesize_t len, tmem_cli_va_t); + pagesize_t pfn_offset, pagesize_t len, tmem_cli_va_param_t); extern int tmh_copy_tze_to_client(tmem_cli_mfn_t cmfn, void *tmem_va, pagesize_t len); -- 1.7.9.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |