|
[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 |