Hi all,
this patch series makes the necessary changes to make sure that the
current ARM hypercall ABI can be used as-is on 64 bit ARM platforms:
- it defines xen_ulong_t as uint64_t on ARM;
- it introduces a new macro to handle guest pointers, called
XEN_GUEST_HANDLE_PARAM (that has size 4 bytes on aarch and is going to
have size 8 bytes on aarch64);
- it replaces all the occurrences of XEN_GUEST_HANDLE in hypercall
parameters with XEN_GUEST_HANDLE_PARAM.
On x86 and ia64 things should stay exactly the same.
On ARM all the unsigned long and the guest pointers that are members of
a struct become size 8 byte (both aarch and aarch64).
However guest pointers that are passed as hypercall arguments in
registers are going to be 4 bytes on aarch and 8 bytes on aarch64.
It is based on Ian''s arm-for-4.3 branch.
Changes in v2:
- do not use an anonymous union in struct xen_add_to_physmap;
- do not replace the unsigned long in x86 specific calls;
- do not replace the unsigned long in multicall_entry;
- add missing include "xen.h" in version.h;
- use proper printf flag for xen_ulong_t in python/xen/lowlevel/xc/xc;
- add 2 missing #define _XEN_GUEST_HANDLE_PARAM for the compilation of
the compat code;
- add a patch to limit the maximum number of extents handled by
do_memory_op;
- remove the patch "introduce __lshrdi3 and __aeabi_llsr" that is
already in the for-4.3 branch.
Stefano Stabellini (5):
xen: improve changes to xen_add_to_physmap
xen: xen_ulong_t substitution
xen: change the limit of nr_extents to UINT_MAX >>
MEMOP_EXTENT_SHIFT
xen: introduce XEN_GUEST_HANDLE_PARAM
xen: replace XEN_GUEST_HANDLE with XEN_GUEST_HANDLE_PARAM when appropriate
tools/firmware/hvmloader/pci.c | 2 +-
tools/python/xen/lowlevel/xc/xc.c | 2 +-
xen/arch/arm/domain.c | 2 +-
xen/arch/arm/domctl.c | 2 +-
xen/arch/arm/hvm.c | 2 +-
xen/arch/arm/mm.c | 4 +-
xen/arch/arm/physdev.c | 2 +-
xen/arch/arm/sysctl.c | 2 +-
xen/arch/x86/cpu/mcheck/mce.c | 2 +-
xen/arch/x86/domain.c | 2 +-
xen/arch/x86/domctl.c | 2 +-
xen/arch/x86/efi/runtime.c | 2 +-
xen/arch/x86/hvm/hvm.c | 26 +++++++-------
xen/arch/x86/microcode.c | 2 +-
xen/arch/x86/mm.c | 24 +++++++-------
xen/arch/x86/mm/hap/hap.c | 2 +-
xen/arch/x86/mm/mem_event.c | 2 +-
xen/arch/x86/mm/paging.c | 2 +-
xen/arch/x86/mm/shadow/common.c | 2 +-
xen/arch/x86/physdev.c | 2 +-
xen/arch/x86/platform_hypercall.c | 2 +-
xen/arch/x86/sysctl.c | 2 +-
xen/arch/x86/traps.c | 2 +-
xen/arch/x86/x86_32/mm.c | 2 +-
xen/arch/x86/x86_32/traps.c | 2 +-
xen/arch/x86/x86_64/compat/mm.c | 14 ++++++--
xen/arch/x86/x86_64/domain.c | 2 +-
xen/arch/x86/x86_64/mm.c | 2 +-
xen/arch/x86/x86_64/platform_hypercall.c | 1 +
xen/arch/x86/x86_64/traps.c | 2 +-
xen/common/compat/domain.c | 2 +-
xen/common/compat/grant_table.c | 2 +-
xen/common/compat/memory.c | 2 +-
xen/common/compat/multicall.c | 1 +
xen/common/domain.c | 2 +-
xen/common/domctl.c | 2 +-
xen/common/event_channel.c | 2 +-
xen/common/grant_table.c | 36 ++++++++++----------
xen/common/kernel.c | 4 +-
xen/common/kexec.c | 16 ++++----
xen/common/memory.c | 6 ++--
xen/common/multicall.c | 2 +-
xen/common/schedule.c | 2 +-
xen/common/sysctl.c | 2 +-
xen/common/xenoprof.c | 8 ++--
xen/drivers/acpi/pmstat.c | 2 +-
xen/drivers/char/console.c | 6 ++--
xen/drivers/passthrough/iommu.c | 2 +-
xen/include/asm-arm/guest_access.h | 2 +-
xen/include/asm-arm/hypercall.h | 2 +-
xen/include/asm-arm/mm.h | 2 +-
xen/include/asm-x86/hap.h | 2 +-
xen/include/asm-x86/hypercall.h | 24 +++++++-------
xen/include/asm-x86/mem_event.h | 2 +-
xen/include/asm-x86/mm.h | 8 ++--
xen/include/asm-x86/paging.h | 2 +-
xen/include/asm-x86/processor.h | 2 +-
xen/include/asm-x86/shadow.h | 2 +-
xen/include/asm-x86/xenoprof.h | 6 ++--
xen/include/public/arch-arm.h | 30 +++++++++++++----
xen/include/public/arch-ia64.h | 9 +++++
xen/include/public/arch-x86/xen.h | 9 +++++
xen/include/public/memory.h | 11 ++++--
xen/include/public/version.h | 4 ++-
xen/include/xen/acpi.h | 4 +-
xen/include/xen/hypercall.h | 52 +++++++++++++++---------------
xen/include/xen/iommu.h | 2 +-
xen/include/xen/tmem_xen.h | 2 +-
xen/include/xsm/xsm.h | 4 +-
xen/xsm/dummy.c | 2 +-
xen/xsm/flask/flask_op.c | 4 +-
xen/xsm/flask/hooks.c | 2 +-
xen/xsm/xsm_core.c | 2 +-
73 files changed, 228 insertions(+), 181 deletions(-)
Cheers,
Stefano
Stefano Stabellini
2012-Aug-10 12:10 UTC
[PATCH v2 1/5] xen: improve changes to xen_add_to_physmap
This is an incremental patch on top of
c0bc926083b5987a3e9944eec2c12ad0580100e2: in order to retain binary
compatibility, it is better to introduce foreign_domid as part of a
union containing both size and foreign_domid.
Changes in v2:
- do not use an anonymous union.
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
---
tools/firmware/hvmloader/pci.c | 2 +-
xen/arch/arm/mm.c | 2 +-
xen/arch/x86/mm.c | 10 +++++-----
xen/arch/x86/x86_64/compat/mm.c | 6 ++++++
xen/include/public/memory.h | 11 +++++++----
5 files changed, 20 insertions(+), 11 deletions(-)
diff --git a/tools/firmware/hvmloader/pci.c b/tools/firmware/hvmloader/pci.c
index fd56e50..6375989 100644
--- a/tools/firmware/hvmloader/pci.c
+++ b/tools/firmware/hvmloader/pci.c
@@ -212,7 +212,7 @@ void pci_setup(void)
xatp.space = XENMAPSPACE_gmfn_range;
xatp.idx = hvm_info->low_mem_pgend;
xatp.gpfn = hvm_info->high_mem_pgend;
- xatp.size = nr_pages;
+ xatp.u.size = nr_pages;
if ( hypercall_memory_op(XENMEM_add_to_physmap, &xatp) != 0 )
BUG();
hvm_info->high_mem_pgend += nr_pages;
diff --git a/xen/arch/arm/mm.c b/xen/arch/arm/mm.c
index 08bc55b..2400e1c 100644
--- a/xen/arch/arm/mm.c
+++ b/xen/arch/arm/mm.c
@@ -506,7 +506,7 @@ static int xenmem_add_to_physmap_once(
paddr_t maddr;
struct domain *od;
- rc = rcu_lock_target_domain_by_id(xatp->foreign_domid, &od);
+ rc = rcu_lock_target_domain_by_id(xatp->u.foreign_domid, &od);
if ( rc < 0 )
return rc;
maddr = p2m_lookup(od, xatp->idx << PAGE_SHIFT);
diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c
index 9f63974..f5c704e 100644
--- a/xen/arch/x86/mm.c
+++ b/xen/arch/x86/mm.c
@@ -4630,7 +4630,7 @@ static int xenmem_add_to_physmap(struct domain *d,
this_cpu(iommu_dont_flush_iotlb) = 1;
start_xatp = *xatp;
- while ( xatp->size > 0 )
+ while ( xatp->u.size > 0 )
{
rc = xenmem_add_to_physmap_once(d, xatp);
if ( rc < 0 )
@@ -4638,10 +4638,10 @@ static int xenmem_add_to_physmap(struct domain *d,
xatp->idx++;
xatp->gpfn++;
- xatp->size--;
+ xatp->u.size--;
/* Check for continuation if it''s not the last interation
*/
- if ( xatp->size > 0 && hypercall_preempt_check() )
+ if ( xatp->u.size > 0 && hypercall_preempt_check() )
{
rc = -EAGAIN;
break;
@@ -4651,8 +4651,8 @@ static int xenmem_add_to_physmap(struct domain *d,
if ( need_iommu(d) )
{
this_cpu(iommu_dont_flush_iotlb) = 0;
- iommu_iotlb_flush(d, start_xatp.idx, start_xatp.size -
xatp->size);
- iommu_iotlb_flush(d, start_xatp.gpfn, start_xatp.size -
xatp->size);
+ iommu_iotlb_flush(d, start_xatp.idx, start_xatp.u.size -
xatp->u.size);
+ iommu_iotlb_flush(d, start_xatp.gpfn, start_xatp.u.size -
xatp->u.size);
}
return rc;
diff --git a/xen/arch/x86/x86_64/compat/mm.c b/xen/arch/x86/x86_64/compat/mm.c
index f497503..5bcd2fd 100644
--- a/xen/arch/x86/x86_64/compat/mm.c
+++ b/xen/arch/x86/x86_64/compat/mm.c
@@ -59,10 +59,16 @@ int compat_arch_memory_op(int op, XEN_GUEST_HANDLE(void)
arg)
{
struct compat_add_to_physmap cmp;
struct xen_add_to_physmap *nat = COMPAT_ARG_XLAT_VIRT_BASE;
+ enum XLAT_add_to_physmap_u u;
if ( copy_from_guest(&cmp, arg, 1) )
return -EFAULT;
+ if ( cmp.space == XENMAPSPACE_gmfn_range )
+ u = XLAT_add_to_physmap_u_size;
+ if ( cmp.space == XENMAPSPACE_gmfn_foreign )
+ u = XLAT_add_to_physmap_u_foreign_domid;
+
XLAT_add_to_physmap(nat, &cmp);
rc = arch_memory_op(op, guest_handle_from_ptr(nat, void));
diff --git a/xen/include/public/memory.h b/xen/include/public/memory.h
index b2adfbe..7d4ee26 100644
--- a/xen/include/public/memory.h
+++ b/xen/include/public/memory.h
@@ -208,8 +208,12 @@ struct xen_add_to_physmap {
/* Which domain to change the mapping for. */
domid_t domid;
- /* Number of pages to go through for gmfn_range */
- uint16_t size;
+ union {
+ /* Number of pages to go through for gmfn_range */
+ uint16_t size;
+ /* IFF gmfn_foreign */
+ domid_t foreign_domid;
+ } u;
/* Source mapping space. */
#define XENMAPSPACE_shared_info 0 /* shared info page */
@@ -217,8 +221,7 @@ struct xen_add_to_physmap {
#define XENMAPSPACE_gmfn 2 /* GMFN */
#define XENMAPSPACE_gmfn_range 3 /* GMFN range */
#define XENMAPSPACE_gmfn_foreign 4 /* GMFN from another guest */
- uint16_t space;
- domid_t foreign_domid; /* IFF gmfn_foreign */
+ unsigned int space;
#define XENMAPIDX_grant_table_status 0x80000000
--
1.7.2.5
There is still an unwanted unsigned long in the xen public interface:
replace it with xen_ulong_t.
Also typedef xen_ulong_t to uint64_t on ARM.
Changes in v2:
- do not replace the unsigned long in x86 specific calls;
- do not replace the unsigned long in multicall_entry;
- add missing include "xen.h" in version.h;
- use proper printf flag for xen_ulong_t.
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
---
tools/python/xen/lowlevel/xc/xc.c | 2 +-
xen/include/public/arch-arm.h | 4 ++--
xen/include/public/version.h | 4 +++-
3 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/tools/python/xen/lowlevel/xc/xc.c
b/tools/python/xen/lowlevel/xc/xc.c
index 7c89756..e220f68 100644
--- a/tools/python/xen/lowlevel/xc/xc.c
+++ b/tools/python/xen/lowlevel/xc/xc.c
@@ -1439,7 +1439,7 @@ static PyObject *pyxc_xeninfo(XcObject *self)
if ( xc_version(self->xc_handle, XENVER_commandline,
&xen_commandline) != 0 )
return pyxc_error_to_exception(self->xc_handle);
- snprintf(str, sizeof(str), "virt_start=0x%lx",
p_parms.virt_start);
+ snprintf(str, sizeof(str), "virt_start=0x%"PRI_xen_ulong,
p_parms.virt_start);
xen_pagesize = xc_version(self->xc_handle, XENVER_pagesize, NULL);
if (xen_pagesize < 0 )
diff --git a/xen/include/public/arch-arm.h b/xen/include/public/arch-arm.h
index 14ad0ab..2ae6548 100644
--- a/xen/include/public/arch-arm.h
+++ b/xen/include/public/arch-arm.h
@@ -122,8 +122,8 @@ typedef uint64_t xen_pfn_t;
/* Only one. All other VCPUS must use VCPUOP_register_vcpu_info */
#define XEN_LEGACY_MAX_VCPUS 1
-typedef uint32_t xen_ulong_t;
-#define PRI_xen_ulong PRIx32
+typedef uint64_t xen_ulong_t;
+#define PRI_xen_ulong PRIx64
struct vcpu_guest_context {
#define _VGCF_online 0
diff --git a/xen/include/public/version.h b/xen/include/public/version.h
index 8742c2b..c7e6f8c 100644
--- a/xen/include/public/version.h
+++ b/xen/include/public/version.h
@@ -28,6 +28,8 @@
#ifndef __XEN_PUBLIC_VERSION_H__
#define __XEN_PUBLIC_VERSION_H__
+#include "xen.h"
+
/* NB. All ops return zero on success, except XENVER_{version,pagesize} */
/* arg == NULL; returns major:minor (16:16). */
@@ -58,7 +60,7 @@ typedef char xen_changeset_info_t[64];
#define XENVER_platform_parameters 5
struct xen_platform_parameters {
- unsigned long virt_start;
+ xen_ulong_t virt_start;
};
typedef struct xen_platform_parameters xen_platform_parameters_t;
--
1.7.2.5
Stefano Stabellini
2012-Aug-10 12:10 UTC
[PATCH v2 3/5] xen: change the limit of nr_extents to UINT_MAX >> MEMOP_EXTENT_SHIFT
Currently do_memory_op has a different maximum limit for nr_extents on
32 bit and 64 bit.
Change the limit to UINT_MAX >> MEMOP_EXTENT_SHIFT, so that it is the
same in both cases.
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
---
xen/common/memory.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/xen/common/memory.c b/xen/common/memory.c
index 5d64cb6..7e58cc4 100644
--- a/xen/common/memory.c
+++ b/xen/common/memory.c
@@ -553,7 +553,7 @@ long do_memory_op(unsigned long cmd, XEN_GUEST_HANDLE(void)
arg)
return start_extent;
/* Is size too large for us to encode a continuation? */
- if ( reservation.nr_extents > (ULONG_MAX >>
MEMOP_EXTENT_SHIFT) )
+ if ( reservation.nr_extents > (UINT_MAX >> MEMOP_EXTENT_SHIFT)
)
return start_extent;
if ( unlikely(start_extent >= reservation.nr_extents) )
--
1.7.2.5
Stefano Stabellini
2012-Aug-10 12:10 UTC
[PATCH v2 4/5] xen: introduce XEN_GUEST_HANDLE_PARAM
Note: this change does not make any difference on x86 and ia64.
XEN_GUEST_HANDLE_PARAM is going to be used to distinguish guest pointers
stored in memory from guest pointers as hypercall parameters.
Changes in v2:
- add 2 missing #define _XEN_GUEST_HANDLE_PARAM for the compilation of
the compat code.
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
---
xen/arch/x86/x86_64/platform_hypercall.c | 1 +
xen/common/compat/multicall.c | 1 +
xen/include/asm-arm/guest_access.h | 2 +-
xen/include/public/arch-arm.h | 24 ++++++++++++++++++++----
xen/include/public/arch-ia64.h | 9 +++++++++
xen/include/public/arch-x86/xen.h | 9 +++++++++
6 files changed, 41 insertions(+), 5 deletions(-)
diff --git a/xen/arch/x86/x86_64/platform_hypercall.c
b/xen/arch/x86/x86_64/platform_hypercall.c
index 188aa37..f577761 100644
--- a/xen/arch/x86/x86_64/platform_hypercall.c
+++ b/xen/arch/x86/x86_64/platform_hypercall.c
@@ -38,6 +38,7 @@ CHECK_pf_pcpu_version;
#define COMPAT
#define _XEN_GUEST_HANDLE(t) XEN_GUEST_HANDLE(t)
+#define _XEN_GUEST_HANDLE_PARAM(t) XEN_GUEST_HANDLE(t)
typedef int ret_t;
#include "../platform_hypercall.c"
diff --git a/xen/common/compat/multicall.c b/xen/common/compat/multicall.c
index 0eb1212..72db213 100644
--- a/xen/common/compat/multicall.c
+++ b/xen/common/compat/multicall.c
@@ -24,6 +24,7 @@ DEFINE_XEN_GUEST_HANDLE(multicall_entry_compat_t);
#define call compat_call
#define do_multicall(l, n) compat_multicall(_##l, n)
#define _XEN_GUEST_HANDLE(t) XEN_GUEST_HANDLE(t)
+#define _XEN_GUEST_HANDLE_PARAM(t) XEN_GUEST_HANDLE(t)
#include "../multicall.c"
diff --git a/xen/include/asm-arm/guest_access.h
b/xen/include/asm-arm/guest_access.h
index 0fceae6..7a955cb 100644
--- a/xen/include/asm-arm/guest_access.h
+++ b/xen/include/asm-arm/guest_access.h
@@ -30,7 +30,7 @@ unsigned long raw_clear_guest(void *to, unsigned len);
/* Cast a guest handle to the specified type of handle. */
#define guest_handle_cast(hnd, type) ({ \
type *_x = (hnd).p; \
- (XEN_GUEST_HANDLE(type)) { _x }; \
+ (XEN_GUEST_HANDLE(type)) { {_x } }; \
})
#define guest_handle_from_ptr(ptr, type) \
diff --git a/xen/include/public/arch-arm.h b/xen/include/public/arch-arm.h
index 2ae6548..9db3c81 100644
--- a/xen/include/public/arch-arm.h
+++ b/xen/include/public/arch-arm.h
@@ -51,18 +51,34 @@
#define XEN_HYPERCALL_TAG 0XEA1
+#define uint64_aligned_t uint64_t __attribute__((aligned(8)))
#ifndef __ASSEMBLY__
-#define ___DEFINE_XEN_GUEST_HANDLE(name, type) \
- typedef struct { type *p; } __guest_handle_ ## name
+#define ___DEFINE_XEN_GUEST_HANDLE(name, type) \
+ typedef struct { type *p; } \
+ __guest_handle_ ## name; \
+ typedef struct { union { type *p; uint64_aligned_t q; }; } \
+ __guest_handle_64_ ## name;
+/*
+ * XEN_GUEST_HANDLE represents a guest pointer, when passed as a field
+ * in a struct in memory. On ARM is always 8 bytes sizes and 8 bytes
+ * aligned.
+ * XEN_GUEST_HANDLE_PARAM represent a guest pointer, when passed as an
+ * hypercall argument. It is 4 bytes on aarch and 8 bytes on aarch64.
+ */
#define __DEFINE_XEN_GUEST_HANDLE(name, type) \
___DEFINE_XEN_GUEST_HANDLE(name, type); \
___DEFINE_XEN_GUEST_HANDLE(const_##name, const type)
#define DEFINE_XEN_GUEST_HANDLE(name) __DEFINE_XEN_GUEST_HANDLE(name, name)
-#define __XEN_GUEST_HANDLE(name) __guest_handle_ ## name
+#define __XEN_GUEST_HANDLE(name) __guest_handle_64_ ## name
#define XEN_GUEST_HANDLE(name) __XEN_GUEST_HANDLE(name)
-#define set_xen_guest_handle_raw(hnd, val) do { (hnd).p = val; } while (0)
+/* this is going to be changes on 64 bit */
+#define XEN_GUEST_HANDLE_PARAM(name) __guest_handle_ ## name
+#define set_xen_guest_handle_raw(hnd, val) \
+ do { if ( sizeof(hnd) == 8 ) *(uint64_t *)&(hnd) = 0; \
+ (hnd).p = val; \
+ } while ( 0 )
#ifdef __XEN_TOOLS__
#define get_xen_guest_handle(val, hnd) do { val = (hnd).p; } while (0)
#endif
diff --git a/xen/include/public/arch-ia64.h b/xen/include/public/arch-ia64.h
index c9da5d4..e4e9688 100644
--- a/xen/include/public/arch-ia64.h
+++ b/xen/include/public/arch-ia64.h
@@ -45,8 +45,17 @@
___DEFINE_XEN_GUEST_HANDLE(name, type); \
___DEFINE_XEN_GUEST_HANDLE(const_##name, const type)
+/*
+ * XEN_GUEST_HANDLE represents a guest pointer, when passed as a field
+ * in a struct in memory.
+ * XEN_GUEST_HANDLE_PARAM represent a guest pointer, when passed as an
+ * hypercall argument.
+ * XEN_GUEST_HANDLE_PARAM and XEN_GUEST_HANDLE are the same on ia64 but
+ * they might not be on other architectures.
+ */
#define DEFINE_XEN_GUEST_HANDLE(name) __DEFINE_XEN_GUEST_HANDLE(name, name)
#define XEN_GUEST_HANDLE(name) __guest_handle_ ## name
+#define XEN_GUEST_HANDLE_PARAM(name) XEN_GUEST_HANDLE(name)
#define XEN_GUEST_HANDLE_64(name) XEN_GUEST_HANDLE(name)
#define uint64_aligned_t uint64_t
#define set_xen_guest_handle_raw(hnd, val) do { (hnd).p = val; } while (0)
diff --git a/xen/include/public/arch-x86/xen.h
b/xen/include/public/arch-x86/xen.h
index 1c186d7..0e10260 100644
--- a/xen/include/public/arch-x86/xen.h
+++ b/xen/include/public/arch-x86/xen.h
@@ -38,12 +38,21 @@
typedef type * __guest_handle_ ## name
#endif
+/*
+ * XEN_GUEST_HANDLE represents a guest pointer, when passed as a field
+ * in a struct in memory.
+ * XEN_GUEST_HANDLE_PARAM represent a guest pointer, when passed as an
+ * hypercall argument.
+ * XEN_GUEST_HANDLE_PARAM and XEN_GUEST_HANDLE are the same on X86 but
+ * they might not be on other architectures.
+ */
#define __DEFINE_XEN_GUEST_HANDLE(name, type) \
___DEFINE_XEN_GUEST_HANDLE(name, type); \
___DEFINE_XEN_GUEST_HANDLE(const_##name, const type)
#define DEFINE_XEN_GUEST_HANDLE(name) __DEFINE_XEN_GUEST_HANDLE(name, name)
#define __XEN_GUEST_HANDLE(name) __guest_handle_ ## name
#define XEN_GUEST_HANDLE(name) __XEN_GUEST_HANDLE(name)
+#define XEN_GUEST_HANDLE_PARAM(name) XEN_GUEST_HANDLE(name)
#define set_xen_guest_handle_raw(hnd, val) do { (hnd).p = val; } while (0)
#ifdef __XEN_TOOLS__
#define get_xen_guest_handle(val, hnd) do { val = (hnd).p; } while (0)
--
1.7.2.5
Stefano Stabellini
2012-Aug-10 12:10 UTC
[PATCH v2 5/5] xen: replace XEN_GUEST_HANDLE with XEN_GUEST_HANDLE_PARAM when appropriate
Note: these changes don''t make any difference on x86 and ia64.
Replace XEN_GUEST_HANDLE with XEN_GUEST_HANDLE_PARAM when it is used as
an hypercall argument.
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
---
xen/arch/arm/domain.c | 2 +-
xen/arch/arm/domctl.c | 2 +-
xen/arch/arm/hvm.c | 2 +-
xen/arch/arm/mm.c | 2 +-
xen/arch/arm/physdev.c | 2 +-
xen/arch/arm/sysctl.c | 2 +-
xen/arch/x86/cpu/mcheck/mce.c | 2 +-
xen/arch/x86/domain.c | 2 +-
xen/arch/x86/domctl.c | 2 +-
xen/arch/x86/efi/runtime.c | 2 +-
xen/arch/x86/hvm/hvm.c | 26 +++++++++---------
xen/arch/x86/microcode.c | 2 +-
xen/arch/x86/mm.c | 14 +++++-----
xen/arch/x86/mm/hap/hap.c | 2 +-
xen/arch/x86/mm/mem_event.c | 2 +-
xen/arch/x86/mm/paging.c | 2 +-
xen/arch/x86/mm/shadow/common.c | 2 +-
xen/arch/x86/physdev.c | 2 +-
xen/arch/x86/platform_hypercall.c | 2 +-
xen/arch/x86/sysctl.c | 2 +-
xen/arch/x86/traps.c | 2 +-
xen/arch/x86/x86_32/mm.c | 2 +-
xen/arch/x86/x86_32/traps.c | 2 +-
xen/arch/x86/x86_64/compat/mm.c | 8 +++---
xen/arch/x86/x86_64/domain.c | 2 +-
xen/arch/x86/x86_64/mm.c | 2 +-
xen/arch/x86/x86_64/traps.c | 2 +-
xen/common/compat/domain.c | 2 +-
xen/common/compat/grant_table.c | 2 +-
xen/common/compat/memory.c | 2 +-
xen/common/domain.c | 2 +-
xen/common/domctl.c | 2 +-
xen/common/event_channel.c | 2 +-
xen/common/grant_table.c | 36 ++++++++++++------------
xen/common/kernel.c | 4 +-
xen/common/kexec.c | 16 +++++-----
xen/common/memory.c | 4 +-
xen/common/multicall.c | 2 +-
xen/common/schedule.c | 2 +-
xen/common/sysctl.c | 2 +-
xen/common/xenoprof.c | 8 +++---
xen/drivers/acpi/pmstat.c | 2 +-
xen/drivers/char/console.c | 6 ++--
xen/drivers/passthrough/iommu.c | 2 +-
xen/include/asm-arm/guest_access.h | 2 +-
xen/include/asm-arm/hypercall.h | 2 +-
xen/include/asm-arm/mm.h | 2 +-
xen/include/asm-x86/hap.h | 2 +-
xen/include/asm-x86/hypercall.h | 24 ++++++++--------
xen/include/asm-x86/mem_event.h | 2 +-
xen/include/asm-x86/mm.h | 8 +++---
xen/include/asm-x86/paging.h | 2 +-
xen/include/asm-x86/processor.h | 2 +-
xen/include/asm-x86/shadow.h | 2 +-
xen/include/asm-x86/xenoprof.h | 6 ++--
xen/include/xen/acpi.h | 4 +-
xen/include/xen/hypercall.h | 52 ++++++++++++++++++------------------
xen/include/xen/iommu.h | 2 +-
xen/include/xen/tmem_xen.h | 2 +-
xen/include/xsm/xsm.h | 4 +-
xen/xsm/dummy.c | 2 +-
xen/xsm/flask/flask_op.c | 4 +-
xen/xsm/flask/hooks.c | 2 +-
xen/xsm/xsm_core.c | 2 +-
64 files changed, 160 insertions(+), 160 deletions(-)
diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c
index ee58d68..07b50e2 100644
--- a/xen/arch/arm/domain.c
+++ b/xen/arch/arm/domain.c
@@ -515,7 +515,7 @@ void arch_dump_domain_info(struct domain *d)
{
}
-long arch_do_vcpu_op(int cmd, struct vcpu *v, XEN_GUEST_HANDLE(void) arg)
+long arch_do_vcpu_op(int cmd, struct vcpu *v, XEN_GUEST_HANDLE_PARAM(void) arg)
{
return -ENOSYS;
}
diff --git a/xen/arch/arm/domctl.c b/xen/arch/arm/domctl.c
index 1a5f79f..cf16791 100644
--- a/xen/arch/arm/domctl.c
+++ b/xen/arch/arm/domctl.c
@@ -11,7 +11,7 @@
#include <public/domctl.h>
long arch_do_domctl(struct xen_domctl *domctl,
- XEN_GUEST_HANDLE(xen_domctl_t) u_domctl)
+ XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl)
{
return -ENOSYS;
}
diff --git a/xen/arch/arm/hvm.c b/xen/arch/arm/hvm.c
index c11378d..40f519e 100644
--- a/xen/arch/arm/hvm.c
+++ b/xen/arch/arm/hvm.c
@@ -11,7 +11,7 @@
#include <asm/hypercall.h>
-long do_hvm_op(unsigned long op, XEN_GUEST_HANDLE(void) arg)
+long do_hvm_op(unsigned long op, XEN_GUEST_HANDLE_PARAM(void) arg)
{
long rc = 0;
diff --git a/xen/arch/arm/mm.c b/xen/arch/arm/mm.c
index 2400e1c..3e8b6cc 100644
--- a/xen/arch/arm/mm.c
+++ b/xen/arch/arm/mm.c
@@ -541,7 +541,7 @@ static int xenmem_add_to_physmap(struct domain *d,
return xenmem_add_to_physmap_once(d, xatp);
}
-long arch_memory_op(int op, XEN_GUEST_HANDLE(void) arg)
+long arch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg)
{
int rc;
diff --git a/xen/arch/arm/physdev.c b/xen/arch/arm/physdev.c
index bcf4337..0801e8c 100644
--- a/xen/arch/arm/physdev.c
+++ b/xen/arch/arm/physdev.c
@@ -11,7 +11,7 @@
#include <asm/hypercall.h>
-int do_physdev_op(int cmd, XEN_GUEST_HANDLE(void) arg)
+int do_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
{
printk("%s %d cmd=%d: not implemented yet\n", __func__, __LINE__,
cmd);
return -ENOSYS;
diff --git a/xen/arch/arm/sysctl.c b/xen/arch/arm/sysctl.c
index e8e1c0d..a286abe 100644
--- a/xen/arch/arm/sysctl.c
+++ b/xen/arch/arm/sysctl.c
@@ -13,7 +13,7 @@
#include <public/sysctl.h>
long arch_do_sysctl(struct xen_sysctl *sysctl,
- XEN_GUEST_HANDLE(xen_sysctl_t) u_sysctl)
+ XEN_GUEST_HANDLE_PARAM(xen_sysctl_t) u_sysctl)
{
return -ENOSYS;
}
diff --git a/xen/arch/x86/cpu/mcheck/mce.c b/xen/arch/x86/cpu/mcheck/mce.c
index a89df6d..0f122b3 100644
--- a/xen/arch/x86/cpu/mcheck/mce.c
+++ b/xen/arch/x86/cpu/mcheck/mce.c
@@ -1357,7 +1357,7 @@ CHECK_mcinfo_recovery;
#endif
/* Machine Check Architecture Hypercall */
-long do_mca(XEN_GUEST_HANDLE(xen_mc_t) u_xen_mc)
+long do_mca(XEN_GUEST_HANDLE_PARAM(xen_mc_t) u_xen_mc)
{
long ret = 0;
struct xen_mc curop, *op = &curop;
diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c
index 5bba4b9..13ff776 100644
--- a/xen/arch/x86/domain.c
+++ b/xen/arch/x86/domain.c
@@ -1138,7 +1138,7 @@ map_vcpu_info(struct vcpu *v, unsigned long gfn, unsigned
offset)
long
arch_do_vcpu_op(
- int cmd, struct vcpu *v, XEN_GUEST_HANDLE(void) arg)
+ int cmd, struct vcpu *v, XEN_GUEST_HANDLE_PARAM(void) arg)
{
long rc = 0;
diff --git a/xen/arch/x86/domctl.c b/xen/arch/x86/domctl.c
index 135ea6e..663bfe4 100644
--- a/xen/arch/x86/domctl.c
+++ b/xen/arch/x86/domctl.c
@@ -48,7 +48,7 @@ static int gdbsx_guest_mem_io(
long arch_do_domctl(
struct xen_domctl *domctl,
- XEN_GUEST_HANDLE(xen_domctl_t) u_domctl)
+ XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl)
{
long ret = 0;
diff --git a/xen/arch/x86/efi/runtime.c b/xen/arch/x86/efi/runtime.c
index 1dbe2db..b2ff495 100644
--- a/xen/arch/x86/efi/runtime.c
+++ b/xen/arch/x86/efi/runtime.c
@@ -184,7 +184,7 @@ int efi_get_info(uint32_t idx, union xenpf_efi_info *info)
return 0;
}
-static long gwstrlen(XEN_GUEST_HANDLE(CHAR16) str)
+static long gwstrlen(XEN_GUEST_HANDLE_PARAM(CHAR16) str)
{
unsigned long len;
diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c
index 7f8a025c..e2bf831 100644
--- a/xen/arch/x86/hvm/hvm.c
+++ b/xen/arch/x86/hvm/hvm.c
@@ -3047,14 +3047,14 @@ static int grant_table_op_is_allowed(unsigned int cmd)
}
static long hvm_grant_table_op(
- unsigned int cmd, XEN_GUEST_HANDLE(void) uop, unsigned int count)
+ unsigned int cmd, XEN_GUEST_HANDLE_PARAM(void) uop, unsigned int count)
{
if ( !grant_table_op_is_allowed(cmd) )
return -ENOSYS; /* all other commands need auditing */
return do_grant_table_op(cmd, uop, count);
}
-static long hvm_memory_op(int cmd, XEN_GUEST_HANDLE(void) arg)
+static long hvm_memory_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
{
long rc;
@@ -3072,7 +3072,7 @@ static long hvm_memory_op(int cmd, XEN_GUEST_HANDLE(void)
arg)
return do_memory_op(cmd, arg);
}
-static long hvm_physdev_op(int cmd, XEN_GUEST_HANDLE(void) arg)
+static long hvm_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
{
switch ( cmd )
{
@@ -3088,7 +3088,7 @@ static long hvm_physdev_op(int cmd, XEN_GUEST_HANDLE(void)
arg)
}
static long hvm_vcpu_op(
- int cmd, int vcpuid, XEN_GUEST_HANDLE(void) arg)
+ int cmd, int vcpuid, XEN_GUEST_HANDLE_PARAM(void) arg)
{
long rc;
@@ -3137,7 +3137,7 @@ static hvm_hypercall_t
*hvm_hypercall32_table[NR_hypercalls] = {
#else /* defined(__x86_64__) */
static long hvm_grant_table_op_compat32(unsigned int cmd,
- XEN_GUEST_HANDLE(void) uop,
+ XEN_GUEST_HANDLE_PARAM(void) uop,
unsigned int count)
{
if ( !grant_table_op_is_allowed(cmd) )
@@ -3145,7 +3145,7 @@ static long hvm_grant_table_op_compat32(unsigned int cmd,
return compat_grant_table_op(cmd, uop, count);
}
-static long hvm_memory_op_compat32(int cmd, XEN_GUEST_HANDLE(void) arg)
+static long hvm_memory_op_compat32(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
{
int rc;
@@ -3164,7 +3164,7 @@ static long hvm_memory_op_compat32(int cmd,
XEN_GUEST_HANDLE(void) arg)
}
static long hvm_vcpu_op_compat32(
- int cmd, int vcpuid, XEN_GUEST_HANDLE(void) arg)
+ int cmd, int vcpuid, XEN_GUEST_HANDLE_PARAM(void) arg)
{
long rc;
@@ -3188,7 +3188,7 @@ static long hvm_vcpu_op_compat32(
}
static long hvm_physdev_op_compat32(
- int cmd, XEN_GUEST_HANDLE(void) arg)
+ int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
{
switch ( cmd )
{
@@ -3360,7 +3360,7 @@ void hvm_hypercall_page_initialise(struct domain *d,
}
static int hvmop_set_pci_intx_level(
- XEN_GUEST_HANDLE(xen_hvm_set_pci_intx_level_t) uop)
+ XEN_GUEST_HANDLE_PARAM(xen_hvm_set_pci_intx_level_t) uop)
{
struct xen_hvm_set_pci_intx_level op;
struct domain *d;
@@ -3525,7 +3525,7 @@ static void hvm_s3_resume(struct domain *d)
}
static int hvmop_set_isa_irq_level(
- XEN_GUEST_HANDLE(xen_hvm_set_isa_irq_level_t) uop)
+ XEN_GUEST_HANDLE_PARAM(xen_hvm_set_isa_irq_level_t) uop)
{
struct xen_hvm_set_isa_irq_level op;
struct domain *d;
@@ -3569,7 +3569,7 @@ static int hvmop_set_isa_irq_level(
}
static int hvmop_set_pci_link_route(
- XEN_GUEST_HANDLE(xen_hvm_set_pci_link_route_t) uop)
+ XEN_GUEST_HANDLE_PARAM(xen_hvm_set_pci_link_route_t) uop)
{
struct xen_hvm_set_pci_link_route op;
struct domain *d;
@@ -3602,7 +3602,7 @@ static int hvmop_set_pci_link_route(
}
static int hvmop_inject_msi(
- XEN_GUEST_HANDLE(xen_hvm_inject_msi_t) uop)
+ XEN_GUEST_HANDLE_PARAM(xen_hvm_inject_msi_t) uop)
{
struct xen_hvm_inject_msi op;
struct domain *d;
@@ -3686,7 +3686,7 @@ static int hvm_replace_event_channel(struct vcpu *v,
domid_t remote_domid,
return 0;
}
-long do_hvm_op(unsigned long op, XEN_GUEST_HANDLE(void) arg)
+long do_hvm_op(unsigned long op, XEN_GUEST_HANDLE_PARAM(void) arg)
{
struct domain *curr_d = current->domain;
diff --git a/xen/arch/x86/microcode.c b/xen/arch/x86/microcode.c
index bdda3f5..1477481 100644
--- a/xen/arch/x86/microcode.c
+++ b/xen/arch/x86/microcode.c
@@ -192,7 +192,7 @@ static long do_microcode_update(void *_info)
return error;
}
-int microcode_update(XEN_GUEST_HANDLE(const_void) buf, unsigned long len)
+int microcode_update(XEN_GUEST_HANDLE_PARAM(const_void) buf, unsigned long len)
{
int ret;
struct microcode_info *info;
diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c
index f5c704e..4d72700 100644
--- a/xen/arch/x86/mm.c
+++ b/xen/arch/x86/mm.c
@@ -2914,7 +2914,7 @@ static void put_pg_owner(struct domain *pg_owner)
}
static inline int vcpumask_to_pcpumask(
- struct domain *d, XEN_GUEST_HANDLE(const_void) bmap, cpumask_t *pmask)
+ struct domain *d, XEN_GUEST_HANDLE_PARAM(const_void) bmap, cpumask_t
*pmask)
{
unsigned int vcpu_id, vcpu_bias, offs;
unsigned long vmask;
@@ -2974,9 +2974,9 @@ static inline void fixunmap_domain_page(const void *ptr)
#endif
int do_mmuext_op(
- XEN_GUEST_HANDLE(mmuext_op_t) uops,
+ XEN_GUEST_HANDLE_PARAM(mmuext_op_t) uops,
unsigned int count,
- XEN_GUEST_HANDLE(uint) pdone,
+ XEN_GUEST_HANDLE_PARAM(uint) pdone,
unsigned int foreigndom)
{
struct mmuext_op op;
@@ -3438,9 +3438,9 @@ int do_mmuext_op(
}
int do_mmu_update(
- XEN_GUEST_HANDLE(mmu_update_t) ureqs,
+ XEN_GUEST_HANDLE_PARAM(mmu_update_t) ureqs,
unsigned int count,
- XEN_GUEST_HANDLE(uint) pdone,
+ XEN_GUEST_HANDLE_PARAM(uint) pdone,
unsigned int foreigndom)
{
struct mmu_update req;
@@ -4387,7 +4387,7 @@ long set_gdt(struct vcpu *v,
}
-long do_set_gdt(XEN_GUEST_HANDLE(ulong) frame_list, unsigned int entries)
+long do_set_gdt(XEN_GUEST_HANDLE_PARAM(ulong) frame_list, unsigned int entries)
{
int nr_pages = (entries + 511) / 512;
unsigned long frames[16];
@@ -4661,7 +4661,7 @@ static int xenmem_add_to_physmap(struct domain *d,
return xenmem_add_to_physmap_once(d, xatp);
}
-long arch_memory_op(int op, XEN_GUEST_HANDLE(void) arg)
+long arch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg)
{
int rc;
diff --git a/xen/arch/x86/mm/hap/hap.c b/xen/arch/x86/mm/hap/hap.c
index 13b4be2..67e48a3 100644
--- a/xen/arch/x86/mm/hap/hap.c
+++ b/xen/arch/x86/mm/hap/hap.c
@@ -690,7 +690,7 @@ void hap_teardown(struct domain *d)
}
int hap_domctl(struct domain *d, xen_domctl_shadow_op_t *sc,
- XEN_GUEST_HANDLE(void) u_domctl)
+ XEN_GUEST_HANDLE_PARAM(void) u_domctl)
{
int rc, preempted = 0;
diff --git a/xen/arch/x86/mm/mem_event.c b/xen/arch/x86/mm/mem_event.c
index d728889..d3dac14 100644
--- a/xen/arch/x86/mm/mem_event.c
+++ b/xen/arch/x86/mm/mem_event.c
@@ -512,7 +512,7 @@ void mem_event_cleanup(struct domain *d)
}
int mem_event_domctl(struct domain *d, xen_domctl_mem_event_op_t *mec,
- XEN_GUEST_HANDLE(void) u_domctl)
+ XEN_GUEST_HANDLE_PARAM(void) u_domctl)
{
int rc;
diff --git a/xen/arch/x86/mm/paging.c b/xen/arch/x86/mm/paging.c
index ca879f9..ea44e39 100644
--- a/xen/arch/x86/mm/paging.c
+++ b/xen/arch/x86/mm/paging.c
@@ -654,7 +654,7 @@ void paging_vcpu_init(struct vcpu *v)
int paging_domctl(struct domain *d, xen_domctl_shadow_op_t *sc,
- XEN_GUEST_HANDLE(void) u_domctl)
+ XEN_GUEST_HANDLE_PARAM(void) u_domctl)
{
int rc;
diff --git a/xen/arch/x86/mm/shadow/common.c b/xen/arch/x86/mm/shadow/common.c
index dc245be..bd47f03 100644
--- a/xen/arch/x86/mm/shadow/common.c
+++ b/xen/arch/x86/mm/shadow/common.c
@@ -3786,7 +3786,7 @@ out:
int shadow_domctl(struct domain *d,
xen_domctl_shadow_op_t *sc,
- XEN_GUEST_HANDLE(void) u_domctl)
+ XEN_GUEST_HANDLE_PARAM(void) u_domctl)
{
int rc, preempted = 0;
diff --git a/xen/arch/x86/physdev.c b/xen/arch/x86/physdev.c
index b0458fd..b6474ef 100644
--- a/xen/arch/x86/physdev.c
+++ b/xen/arch/x86/physdev.c
@@ -255,7 +255,7 @@ int physdev_unmap_pirq(domid_t domid, int pirq)
}
#endif /* COMPAT */
-ret_t do_physdev_op(int cmd, XEN_GUEST_HANDLE(void) arg)
+ret_t do_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
{
int irq;
ret_t ret;
diff --git a/xen/arch/x86/platform_hypercall.c
b/xen/arch/x86/platform_hypercall.c
index 88880b0..a32e0a2 100644
--- a/xen/arch/x86/platform_hypercall.c
+++ b/xen/arch/x86/platform_hypercall.c
@@ -60,7 +60,7 @@ long cpu_down_helper(void *data);
long core_parking_helper(void *data);
uint32_t get_cur_idle_nums(void);
-ret_t do_platform_op(XEN_GUEST_HANDLE(xen_platform_op_t) u_xenpf_op)
+ret_t do_platform_op(XEN_GUEST_HANDLE_PARAM(xen_platform_op_t) u_xenpf_op)
{
ret_t ret = 0;
struct xen_platform_op curop, *op = &curop;
diff --git a/xen/arch/x86/sysctl.c b/xen/arch/x86/sysctl.c
index 379f071..b84dd34 100644
--- a/xen/arch/x86/sysctl.c
+++ b/xen/arch/x86/sysctl.c
@@ -58,7 +58,7 @@ long cpu_down_helper(void *data)
}
long arch_do_sysctl(
- struct xen_sysctl *sysctl, XEN_GUEST_HANDLE(xen_sysctl_t) u_sysctl)
+ struct xen_sysctl *sysctl, XEN_GUEST_HANDLE_PARAM(xen_sysctl_t) u_sysctl)
{
long ret = 0;
diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c
index 767be86..281d9e7 100644
--- a/xen/arch/x86/traps.c
+++ b/xen/arch/x86/traps.c
@@ -3700,7 +3700,7 @@ int send_guest_trap(struct domain *d, uint16_t vcpuid,
unsigned int trap_nr)
}
-long do_set_trap_table(XEN_GUEST_HANDLE(const_trap_info_t) traps)
+long do_set_trap_table(XEN_GUEST_HANDLE_PARAM(const_trap_info_t) traps)
{
struct trap_info cur;
struct vcpu *curr = current;
diff --git a/xen/arch/x86/x86_32/mm.c b/xen/arch/x86/x86_32/mm.c
index 37efa3c..f6448fb 100644
--- a/xen/arch/x86/x86_32/mm.c
+++ b/xen/arch/x86/x86_32/mm.c
@@ -203,7 +203,7 @@ void __init subarch_init_memory(void)
}
}
-long subarch_memory_op(int op, XEN_GUEST_HANDLE(void) arg)
+long subarch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg)
{
struct xen_machphys_mfn_list xmml;
unsigned long mfn, last_mfn;
diff --git a/xen/arch/x86/x86_32/traps.c b/xen/arch/x86/x86_32/traps.c
index 8f68808..0c7c860 100644
--- a/xen/arch/x86/x86_32/traps.c
+++ b/xen/arch/x86/x86_32/traps.c
@@ -492,7 +492,7 @@ static long unregister_guest_callback(struct
callback_unregister *unreg)
}
-long do_callback_op(int cmd, XEN_GUEST_HANDLE(const_void) arg)
+long do_callback_op(int cmd, XEN_GUEST_HANDLE_PARAM(const_void) arg)
{
long ret;
diff --git a/xen/arch/x86/x86_64/compat/mm.c b/xen/arch/x86/x86_64/compat/mm.c
index 5bcd2fd..d24a324 100644
--- a/xen/arch/x86/x86_64/compat/mm.c
+++ b/xen/arch/x86/x86_64/compat/mm.c
@@ -5,7 +5,7 @@
#include <asm/mem_event.h>
#include <asm/mem_sharing.h>
-int compat_set_gdt(XEN_GUEST_HANDLE(uint) frame_list, unsigned int entries)
+int compat_set_gdt(XEN_GUEST_HANDLE_PARAM(uint) frame_list, unsigned int
entries)
{
unsigned int i, nr_pages = (entries + 511) / 512;
unsigned long frames[16];
@@ -44,7 +44,7 @@ int compat_update_descriptor(u32 pa_lo, u32 pa_hi, u32
desc_lo, u32 desc_hi)
desc_lo | ((u64)desc_hi << 32));
}
-int compat_arch_memory_op(int op, XEN_GUEST_HANDLE(void) arg)
+int compat_arch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg)
{
struct compat_machphys_mfn_list xmml;
l2_pgentry_t l2e;
@@ -266,9 +266,9 @@ int compat_update_va_mapping_otherdomain(unsigned long va,
u32 lo, u32 hi,
DEFINE_XEN_GUEST_HANDLE(mmuext_op_compat_t);
-int compat_mmuext_op(XEN_GUEST_HANDLE(mmuext_op_compat_t) cmp_uops,
+int compat_mmuext_op(XEN_GUEST_HANDLE_PARAM(mmuext_op_compat_t) cmp_uops,
unsigned int count,
- XEN_GUEST_HANDLE(uint) pdone,
+ XEN_GUEST_HANDLE_PARAM(uint) pdone,
unsigned int foreigndom)
{
unsigned int i, preempt_mask;
diff --git a/xen/arch/x86/x86_64/domain.c b/xen/arch/x86/x86_64/domain.c
index e746c89..144ca2d 100644
--- a/xen/arch/x86/x86_64/domain.c
+++ b/xen/arch/x86/x86_64/domain.c
@@ -23,7 +23,7 @@ CHECK_vcpu_get_physid;
int
arch_compat_vcpu_op(
- int cmd, struct vcpu *v, XEN_GUEST_HANDLE(void) arg)
+ int cmd, struct vcpu *v, XEN_GUEST_HANDLE_PARAM(void) arg)
{
int rc = -ENOSYS;
diff --git a/xen/arch/x86/x86_64/mm.c b/xen/arch/x86/x86_64/mm.c
index 635a499..17c46a1 100644
--- a/xen/arch/x86/x86_64/mm.c
+++ b/xen/arch/x86/x86_64/mm.c
@@ -1043,7 +1043,7 @@ void __init subarch_init_memory(void)
}
}
-long subarch_memory_op(int op, XEN_GUEST_HANDLE(void) arg)
+long subarch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg)
{
struct xen_machphys_mfn_list xmml;
l3_pgentry_t l3e;
diff --git a/xen/arch/x86/x86_64/traps.c b/xen/arch/x86/x86_64/traps.c
index 806cf2e..6ead813 100644
--- a/xen/arch/x86/x86_64/traps.c
+++ b/xen/arch/x86/x86_64/traps.c
@@ -518,7 +518,7 @@ static long unregister_guest_callback(struct
callback_unregister *unreg)
}
-long do_callback_op(int cmd, XEN_GUEST_HANDLE(const_void) arg)
+long do_callback_op(int cmd, XEN_GUEST_HANDLE_PARAM(const_void) arg)
{
long ret;
diff --git a/xen/common/compat/domain.c b/xen/common/compat/domain.c
index 40a0287..e4c8ceb 100644
--- a/xen/common/compat/domain.c
+++ b/xen/common/compat/domain.c
@@ -15,7 +15,7 @@
CHECK_vcpu_set_periodic_timer;
#undef xen_vcpu_set_periodic_timer
-int compat_vcpu_op(int cmd, int vcpuid, XEN_GUEST_HANDLE(void) arg)
+int compat_vcpu_op(int cmd, int vcpuid, XEN_GUEST_HANDLE_PARAM(void) arg)
{
struct domain *d = current->domain;
struct vcpu *v;
diff --git a/xen/common/compat/grant_table.c b/xen/common/compat/grant_table.c
index edd20c6..74a4733 100644
--- a/xen/common/compat/grant_table.c
+++ b/xen/common/compat/grant_table.c
@@ -52,7 +52,7 @@ CHECK_gnttab_swap_grant_ref;
#undef xen_gnttab_swap_grant_ref
int compat_grant_table_op(unsigned int cmd,
- XEN_GUEST_HANDLE(void) cmp_uop,
+ XEN_GUEST_HANDLE_PARAM(void) cmp_uop,
unsigned int count)
{
int rc = 0;
diff --git a/xen/common/compat/memory.c b/xen/common/compat/memory.c
index e7257cc..8e311ff 100644
--- a/xen/common/compat/memory.c
+++ b/xen/common/compat/memory.c
@@ -13,7 +13,7 @@ CHECK_TYPE(domid);
#undef compat_domid_t
#undef xen_domid_t
-int compat_memory_op(unsigned int cmd, XEN_GUEST_HANDLE(void) compat)
+int compat_memory_op(unsigned int cmd, XEN_GUEST_HANDLE_PARAM(void) compat)
{
int rc, split, op = cmd & MEMOP_CMD_MASK;
unsigned int start_extent = cmd >> MEMOP_EXTENT_SHIFT;
diff --git a/xen/common/domain.c b/xen/common/domain.c
index 4c5d241..d7cd135 100644
--- a/xen/common/domain.c
+++ b/xen/common/domain.c
@@ -804,7 +804,7 @@ void vcpu_reset(struct vcpu *v)
}
-long do_vcpu_op(int cmd, int vcpuid, XEN_GUEST_HANDLE(void) arg)
+long do_vcpu_op(int cmd, int vcpuid, XEN_GUEST_HANDLE_PARAM(void) arg)
{
struct domain *d = current->domain;
struct vcpu *v;
diff --git a/xen/common/domctl.c b/xen/common/domctl.c
index 7ca6b08..527c5ad 100644
--- a/xen/common/domctl.c
+++ b/xen/common/domctl.c
@@ -238,7 +238,7 @@ void domctl_lock_release(void)
spin_unlock(¤t->domain->hypercall_deadlock_mutex);
}
-long do_domctl(XEN_GUEST_HANDLE(xen_domctl_t) u_domctl)
+long do_domctl(XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl)
{
long ret = 0;
struct xen_domctl curop, *op = &curop;
diff --git a/xen/common/event_channel.c b/xen/common/event_channel.c
index 53777f8..a80a0d1 100644
--- a/xen/common/event_channel.c
+++ b/xen/common/event_channel.c
@@ -970,7 +970,7 @@ out:
}
-long do_event_channel_op(int cmd, XEN_GUEST_HANDLE(void) arg)
+long do_event_channel_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
{
long rc;
diff --git a/xen/common/grant_table.c b/xen/common/grant_table.c
index 9961e83..d780dc6 100644
--- a/xen/common/grant_table.c
+++ b/xen/common/grant_table.c
@@ -771,7 +771,7 @@ __gnttab_map_grant_ref(
static long
gnttab_map_grant_ref(
- XEN_GUEST_HANDLE(gnttab_map_grant_ref_t) uop, unsigned int count)
+ XEN_GUEST_HANDLE_PARAM(gnttab_map_grant_ref_t) uop, unsigned int count)
{
int i;
struct gnttab_map_grant_ref op;
@@ -1040,7 +1040,7 @@ __gnttab_unmap_grant_ref(
static long
gnttab_unmap_grant_ref(
- XEN_GUEST_HANDLE(gnttab_unmap_grant_ref_t) uop, unsigned int count)
+ XEN_GUEST_HANDLE_PARAM(gnttab_unmap_grant_ref_t) uop, unsigned int count)
{
int i, c, partial_done, done = 0;
struct gnttab_unmap_grant_ref op;
@@ -1102,7 +1102,7 @@ __gnttab_unmap_and_replace(
static long
gnttab_unmap_and_replace(
- XEN_GUEST_HANDLE(gnttab_unmap_and_replace_t) uop, unsigned int count)
+ XEN_GUEST_HANDLE_PARAM(gnttab_unmap_and_replace_t) uop, unsigned int count)
{
int i, c, partial_done, done = 0;
struct gnttab_unmap_and_replace op;
@@ -1254,7 +1254,7 @@ active_alloc_failed:
static long
gnttab_setup_table(
- XEN_GUEST_HANDLE(gnttab_setup_table_t) uop, unsigned int count)
+ XEN_GUEST_HANDLE_PARAM(gnttab_setup_table_t) uop, unsigned int count)
{
struct gnttab_setup_table op;
struct domain *d;
@@ -1348,7 +1348,7 @@ gnttab_setup_table(
static long
gnttab_query_size(
- XEN_GUEST_HANDLE(gnttab_query_size_t) uop, unsigned int count)
+ XEN_GUEST_HANDLE_PARAM(gnttab_query_size_t) uop, unsigned int count)
{
struct gnttab_query_size op;
struct domain *d;
@@ -1485,7 +1485,7 @@ gnttab_prepare_for_transfer(
static long
gnttab_transfer(
- XEN_GUEST_HANDLE(gnttab_transfer_t) uop, unsigned int count)
+ XEN_GUEST_HANDLE_PARAM(gnttab_transfer_t) uop, unsigned int count)
{
struct domain *d = current->domain;
struct domain *e;
@@ -2082,7 +2082,7 @@ __gnttab_copy(
static long
gnttab_copy(
- XEN_GUEST_HANDLE(gnttab_copy_t) uop, unsigned int count)
+ XEN_GUEST_HANDLE_PARAM(gnttab_copy_t) uop, unsigned int count)
{
int i;
struct gnttab_copy op;
@@ -2101,7 +2101,7 @@ gnttab_copy(
}
static long
-gnttab_set_version(XEN_GUEST_HANDLE(gnttab_set_version_t uop))
+gnttab_set_version(XEN_GUEST_HANDLE_PARAM(gnttab_set_version_t uop))
{
gnttab_set_version_t op;
struct domain *d = current->domain;
@@ -2220,7 +2220,7 @@ out:
}
static long
-gnttab_get_status_frames(XEN_GUEST_HANDLE(gnttab_get_status_frames_t) uop,
+gnttab_get_status_frames(XEN_GUEST_HANDLE_PARAM(gnttab_get_status_frames_t)
uop,
int count)
{
gnttab_get_status_frames_t op;
@@ -2289,7 +2289,7 @@ out1:
}
static long
-gnttab_get_version(XEN_GUEST_HANDLE(gnttab_get_version_t uop))
+gnttab_get_version(XEN_GUEST_HANDLE_PARAM(gnttab_get_version_t uop))
{
gnttab_get_version_t op;
struct domain *d;
@@ -2368,7 +2368,7 @@ out:
}
static long
-gnttab_swap_grant_ref(XEN_GUEST_HANDLE(gnttab_swap_grant_ref_t uop),
+gnttab_swap_grant_ref(XEN_GUEST_HANDLE_PARAM(gnttab_swap_grant_ref_t uop),
unsigned int count)
{
int i;
@@ -2389,7 +2389,7 @@
gnttab_swap_grant_ref(XEN_GUEST_HANDLE(gnttab_swap_grant_ref_t uop),
long
do_grant_table_op(
- unsigned int cmd, XEN_GUEST_HANDLE(void) uop, unsigned int count)
+ unsigned int cmd, XEN_GUEST_HANDLE_PARAM(void) uop, unsigned int count)
{
long rc;
@@ -2401,7 +2401,7 @@ do_grant_table_op(
{
case GNTTABOP_map_grant_ref:
{
- XEN_GUEST_HANDLE(gnttab_map_grant_ref_t) map +
XEN_GUEST_HANDLE_PARAM(gnttab_map_grant_ref_t) map
guest_handle_cast(uop, gnttab_map_grant_ref_t);
if ( unlikely(!guest_handle_okay(map, count)) )
goto out;
@@ -2415,7 +2415,7 @@ do_grant_table_op(
}
case GNTTABOP_unmap_grant_ref:
{
- XEN_GUEST_HANDLE(gnttab_unmap_grant_ref_t) unmap +
XEN_GUEST_HANDLE_PARAM(gnttab_unmap_grant_ref_t) unmap
guest_handle_cast(uop, gnttab_unmap_grant_ref_t);
if ( unlikely(!guest_handle_okay(unmap, count)) )
goto out;
@@ -2429,7 +2429,7 @@ do_grant_table_op(
}
case GNTTABOP_unmap_and_replace:
{
- XEN_GUEST_HANDLE(gnttab_unmap_and_replace_t) unmap +
XEN_GUEST_HANDLE_PARAM(gnttab_unmap_and_replace_t) unmap
guest_handle_cast(uop, gnttab_unmap_and_replace_t);
if ( unlikely(!guest_handle_okay(unmap, count)) )
goto out;
@@ -2453,7 +2453,7 @@ do_grant_table_op(
}
case GNTTABOP_transfer:
{
- XEN_GUEST_HANDLE(gnttab_transfer_t) transfer +
XEN_GUEST_HANDLE_PARAM(gnttab_transfer_t) transfer
guest_handle_cast(uop, gnttab_transfer_t);
if ( unlikely(!guest_handle_okay(transfer, count)) )
goto out;
@@ -2467,7 +2467,7 @@ do_grant_table_op(
}
case GNTTABOP_copy:
{
- XEN_GUEST_HANDLE(gnttab_copy_t) copy +
XEN_GUEST_HANDLE_PARAM(gnttab_copy_t) copy guest_handle_cast(uop,
gnttab_copy_t);
if ( unlikely(!guest_handle_okay(copy, count)) )
goto out;
@@ -2504,7 +2504,7 @@ do_grant_table_op(
}
case GNTTABOP_swap_grant_ref:
{
- XEN_GUEST_HANDLE(gnttab_swap_grant_ref_t) swap +
XEN_GUEST_HANDLE_PARAM(gnttab_swap_grant_ref_t) swap
guest_handle_cast(uop, gnttab_swap_grant_ref_t);
if ( unlikely(!guest_handle_okay(swap, count)) )
goto out;
diff --git a/xen/common/kernel.c b/xen/common/kernel.c
index c915bbc..55caff6 100644
--- a/xen/common/kernel.c
+++ b/xen/common/kernel.c
@@ -204,7 +204,7 @@ void __init do_initcalls(void)
* Simple hypercalls.
*/
-DO(xen_version)(int cmd, XEN_GUEST_HANDLE(void) arg)
+DO(xen_version)(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
{
switch ( cmd )
{
@@ -332,7 +332,7 @@ DO(xen_version)(int cmd, XEN_GUEST_HANDLE(void) arg)
return -ENOSYS;
}
-DO(nmi_op)(unsigned int cmd, XEN_GUEST_HANDLE(void) arg)
+DO(nmi_op)(unsigned int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
{
struct xennmi_callback cb;
long rc = 0;
diff --git a/xen/common/kexec.c b/xen/common/kexec.c
index 09a5624..03389eb 100644
--- a/xen/common/kexec.c
+++ b/xen/common/kexec.c
@@ -613,7 +613,7 @@ static int kexec_get_range_internal(xen_kexec_range_t
*range)
return ret;
}
-static int kexec_get_range(XEN_GUEST_HANDLE(void) uarg)
+static int kexec_get_range(XEN_GUEST_HANDLE_PARAM(void) uarg)
{
xen_kexec_range_t range;
int ret = -EINVAL;
@@ -629,7 +629,7 @@ static int kexec_get_range(XEN_GUEST_HANDLE(void) uarg)
return ret;
}
-static int kexec_get_range_compat(XEN_GUEST_HANDLE(void) uarg)
+static int kexec_get_range_compat(XEN_GUEST_HANDLE_PARAM(void) uarg)
{
#ifdef CONFIG_COMPAT
xen_kexec_range_t range;
@@ -777,7 +777,7 @@ static int kexec_load_unload_internal(unsigned long op,
xen_kexec_load_t *load)
return ret;
}
-static int kexec_load_unload(unsigned long op, XEN_GUEST_HANDLE(void) uarg)
+static int kexec_load_unload(unsigned long op, XEN_GUEST_HANDLE_PARAM(void)
uarg)
{
xen_kexec_load_t load;
@@ -788,7 +788,7 @@ static int kexec_load_unload(unsigned long op,
XEN_GUEST_HANDLE(void) uarg)
}
static int kexec_load_unload_compat(unsigned long op,
- XEN_GUEST_HANDLE(void) uarg)
+ XEN_GUEST_HANDLE_PARAM(void) uarg)
{
#ifdef CONFIG_COMPAT
compat_kexec_load_t compat_load;
@@ -813,7 +813,7 @@ static int kexec_load_unload_compat(unsigned long op,
#endif /* CONFIG_COMPAT */
}
-static int kexec_exec(XEN_GUEST_HANDLE(void) uarg)
+static int kexec_exec(XEN_GUEST_HANDLE_PARAM(void) uarg)
{
xen_kexec_exec_t exec;
xen_kexec_image_t *image;
@@ -845,7 +845,7 @@ static int kexec_exec(XEN_GUEST_HANDLE(void) uarg)
return -EINVAL; /* never reached */
}
-int do_kexec_op_internal(unsigned long op, XEN_GUEST_HANDLE(void) uarg,
+int do_kexec_op_internal(unsigned long op, XEN_GUEST_HANDLE_PARAM(void) uarg,
int compat)
{
unsigned long flags;
@@ -886,13 +886,13 @@ int do_kexec_op_internal(unsigned long op,
XEN_GUEST_HANDLE(void) uarg,
return ret;
}
-long do_kexec_op(unsigned long op, XEN_GUEST_HANDLE(void) uarg)
+long do_kexec_op(unsigned long op, XEN_GUEST_HANDLE_PARAM(void) uarg)
{
return do_kexec_op_internal(op, uarg, 0);
}
#ifdef CONFIG_COMPAT
-int compat_kexec_op(unsigned long op, XEN_GUEST_HANDLE(void) uarg)
+int compat_kexec_op(unsigned long op, XEN_GUEST_HANDLE_PARAM(void) uarg)
{
return do_kexec_op_internal(op, uarg, 1);
}
diff --git a/xen/common/memory.c b/xen/common/memory.c
index 7e58cc4..a683954 100644
--- a/xen/common/memory.c
+++ b/xen/common/memory.c
@@ -277,7 +277,7 @@ static void decrease_reservation(struct memop_args *a)
a->nr_done = i;
}
-static long memory_exchange(XEN_GUEST_HANDLE(xen_memory_exchange_t) arg)
+static long memory_exchange(XEN_GUEST_HANDLE_PARAM(xen_memory_exchange_t) arg)
{
struct xen_memory_exchange exch;
PAGE_LIST_HEAD(in_chunk_list);
@@ -530,7 +530,7 @@ static long
memory_exchange(XEN_GUEST_HANDLE(xen_memory_exchange_t) arg)
return rc;
}
-long do_memory_op(unsigned long cmd, XEN_GUEST_HANDLE(void) arg)
+long do_memory_op(unsigned long cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
{
struct domain *d;
int rc, op;
diff --git a/xen/common/multicall.c b/xen/common/multicall.c
index 6c1a9d7..5de5f8d 100644
--- a/xen/common/multicall.c
+++ b/xen/common/multicall.c
@@ -21,7 +21,7 @@ typedef long ret_t;
ret_t
do_multicall(
- XEN_GUEST_HANDLE(multicall_entry_t) call_list, unsigned int nr_calls)
+ XEN_GUEST_HANDLE_PARAM(multicall_entry_t) call_list, unsigned int nr_calls)
{
struct mc_state *mcs = ¤t->mc_state;
unsigned int i;
diff --git a/xen/common/schedule.c b/xen/common/schedule.c
index 0854f55..c26eac4 100644
--- a/xen/common/schedule.c
+++ b/xen/common/schedule.c
@@ -836,7 +836,7 @@ typedef long ret_t;
#endif /* !COMPAT */
-ret_t do_sched_op(int cmd, XEN_GUEST_HANDLE(void) arg)
+ret_t do_sched_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
{
ret_t ret = 0;
diff --git a/xen/common/sysctl.c b/xen/common/sysctl.c
index ea68278..47142f4 100644
--- a/xen/common/sysctl.c
+++ b/xen/common/sysctl.c
@@ -27,7 +27,7 @@
#include <xsm/xsm.h>
#include <xen/pmstat.h>
-long do_sysctl(XEN_GUEST_HANDLE(xen_sysctl_t) u_sysctl)
+long do_sysctl(XEN_GUEST_HANDLE_PARAM(xen_sysctl_t) u_sysctl)
{
long ret = 0;
struct xen_sysctl curop, *op = &curop;
diff --git a/xen/common/xenoprof.c b/xen/common/xenoprof.c
index e571fea..c001b38 100644
--- a/xen/common/xenoprof.c
+++ b/xen/common/xenoprof.c
@@ -404,7 +404,7 @@ static int add_active_list(domid_t domid)
return 0;
}
-static int add_passive_list(XEN_GUEST_HANDLE(void) arg)
+static int add_passive_list(XEN_GUEST_HANDLE_PARAM(void) arg)
{
struct xenoprof_passive passive;
struct domain *d;
@@ -585,7 +585,7 @@ void xenoprof_log_event(struct vcpu *vcpu, const struct
cpu_user_regs *regs,
-static int xenoprof_op_init(XEN_GUEST_HANDLE(void) arg)
+static int xenoprof_op_init(XEN_GUEST_HANDLE_PARAM(void) arg)
{
struct domain *d = current->domain;
struct xenoprof_init xenoprof_init;
@@ -609,7 +609,7 @@ static int xenoprof_op_init(XEN_GUEST_HANDLE(void) arg)
#endif /* !COMPAT */
-static int xenoprof_op_get_buffer(XEN_GUEST_HANDLE(void) arg)
+static int xenoprof_op_get_buffer(XEN_GUEST_HANDLE_PARAM(void) arg)
{
struct xenoprof_get_buffer xenoprof_get_buffer;
struct domain *d = current->domain;
@@ -660,7 +660,7 @@ static int xenoprof_op_get_buffer(XEN_GUEST_HANDLE(void)
arg)
|| (op == XENOPROF_disable_virq) \
|| (op == XENOPROF_get_buffer))
-int do_xenoprof_op(int op, XEN_GUEST_HANDLE(void) arg)
+int do_xenoprof_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg)
{
int ret = 0;
diff --git a/xen/drivers/acpi/pmstat.c b/xen/drivers/acpi/pmstat.c
index 698711e..f8d62f2 100644
--- a/xen/drivers/acpi/pmstat.c
+++ b/xen/drivers/acpi/pmstat.c
@@ -515,7 +515,7 @@ int do_pm_op(struct xen_sysctl_pm_op *op)
return ret;
}
-int acpi_set_pdc_bits(u32 acpi_id, XEN_GUEST_HANDLE(uint32) pdc)
+int acpi_set_pdc_bits(u32 acpi_id, XEN_GUEST_HANDLE_PARAM(uint32) pdc)
{
u32 bits[3];
int ret;
diff --git a/xen/drivers/char/console.c b/xen/drivers/char/console.c
index e10bed5..b0f2334 100644
--- a/xen/drivers/char/console.c
+++ b/xen/drivers/char/console.c
@@ -182,7 +182,7 @@ static void putchar_console_ring(int c)
long read_console_ring(struct xen_sysctl_readconsole *op)
{
- XEN_GUEST_HANDLE(char) str;
+ XEN_GUEST_HANDLE_PARAM(char) str;
uint32_t idx, len, max, sofar, c;
str = guest_handle_cast(op->buffer, char),
@@ -320,7 +320,7 @@ static void notify_dom0_con_ring(unsigned long unused)
static DECLARE_SOFTIRQ_TASKLET(notify_dom0_con_ring_tasklet,
notify_dom0_con_ring, 0);
-static long guest_console_write(XEN_GUEST_HANDLE(char) buffer, int count)
+static long guest_console_write(XEN_GUEST_HANDLE_PARAM(char) buffer, int count)
{
char kbuf[128], *kptr;
int kcount;
@@ -358,7 +358,7 @@ static long guest_console_write(XEN_GUEST_HANDLE(char)
buffer, int count)
return 0;
}
-long do_console_io(int cmd, int count, XEN_GUEST_HANDLE(char) buffer)
+long do_console_io(int cmd, int count, XEN_GUEST_HANDLE_PARAM(char) buffer)
{
long rc;
unsigned int idx, len;
diff --git a/xen/drivers/passthrough/iommu.c b/xen/drivers/passthrough/iommu.c
index 64f5fd1..396461f 100644
--- a/xen/drivers/passthrough/iommu.c
+++ b/xen/drivers/passthrough/iommu.c
@@ -518,7 +518,7 @@ void iommu_crash_shutdown(void)
int iommu_do_domctl(
struct xen_domctl *domctl,
- XEN_GUEST_HANDLE(xen_domctl_t) u_domctl)
+ XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl)
{
struct domain *d;
u16 seg;
diff --git a/xen/include/asm-arm/guest_access.h
b/xen/include/asm-arm/guest_access.h
index 7a955cb..bf5005b 100644
--- a/xen/include/asm-arm/guest_access.h
+++ b/xen/include/asm-arm/guest_access.h
@@ -30,7 +30,7 @@ unsigned long raw_clear_guest(void *to, unsigned len);
/* Cast a guest handle to the specified type of handle. */
#define guest_handle_cast(hnd, type) ({ \
type *_x = (hnd).p; \
- (XEN_GUEST_HANDLE(type)) { {_x } }; \
+ (XEN_GUEST_HANDLE_PARAM(type)) { _x }; \
})
#define guest_handle_from_ptr(ptr, type) \
diff --git a/xen/include/asm-arm/hypercall.h b/xen/include/asm-arm/hypercall.h
index 454f02e..090e620 100644
--- a/xen/include/asm-arm/hypercall.h
+++ b/xen/include/asm-arm/hypercall.h
@@ -2,7 +2,7 @@
#define __ASM_ARM_HYPERCALL_H__
#include <public/domctl.h> /* for arch_do_domctl */
-int do_physdev_op(int cmd, XEN_GUEST_HANDLE(void) arg);
+int do_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg);
#endif /* __ASM_ARM_HYPERCALL_H__ */
/*
diff --git a/xen/include/asm-arm/mm.h b/xen/include/asm-arm/mm.h
index b37bd35..8bf45ba 100644
--- a/xen/include/asm-arm/mm.h
+++ b/xen/include/asm-arm/mm.h
@@ -267,7 +267,7 @@ static inline int relinquish_shared_pages(struct domain *d)
/* Arch-specific portion of memory_op hypercall. */
-long arch_memory_op(int op, XEN_GUEST_HANDLE(void) arg);
+long arch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg);
int steal_page(
struct domain *d, struct page_info *page, unsigned int memflags);
diff --git a/xen/include/asm-x86/hap.h b/xen/include/asm-x86/hap.h
index a2532a4..916a35b 100644
--- a/xen/include/asm-x86/hap.h
+++ b/xen/include/asm-x86/hap.h
@@ -51,7 +51,7 @@ hap_unmap_domain_page(void *p)
/************************************************/
void hap_domain_init(struct domain *d);
int hap_domctl(struct domain *d, xen_domctl_shadow_op_t *sc,
- XEN_GUEST_HANDLE(void) u_domctl);
+ XEN_GUEST_HANDLE_PARAM(void) u_domctl);
int hap_enable(struct domain *d, u32 mode);
void hap_final_teardown(struct domain *d);
void hap_teardown(struct domain *d);
diff --git a/xen/include/asm-x86/hypercall.h b/xen/include/asm-x86/hypercall.h
index 9e136c3..55b5ca2 100644
--- a/xen/include/asm-x86/hypercall.h
+++ b/xen/include/asm-x86/hypercall.h
@@ -18,22 +18,22 @@
extern long
do_event_channel_op_compat(
- XEN_GUEST_HANDLE(evtchn_op_t) uop);
+ XEN_GUEST_HANDLE_PARAM(evtchn_op_t) uop);
extern long
do_set_trap_table(
- XEN_GUEST_HANDLE(const_trap_info_t) traps);
+ XEN_GUEST_HANDLE_PARAM(const_trap_info_t) traps);
extern int
do_mmu_update(
- XEN_GUEST_HANDLE(mmu_update_t) ureqs,
+ XEN_GUEST_HANDLE_PARAM(mmu_update_t) ureqs,
unsigned int count,
- XEN_GUEST_HANDLE(uint) pdone,
+ XEN_GUEST_HANDLE_PARAM(uint) pdone,
unsigned int foreigndom);
extern long
do_set_gdt(
- XEN_GUEST_HANDLE(ulong) frame_list,
+ XEN_GUEST_HANDLE_PARAM(ulong) frame_list,
unsigned int entries);
extern long
@@ -60,7 +60,7 @@ do_update_descriptor(
u64 desc);
extern long
-do_mca(XEN_GUEST_HANDLE(xen_mc_t) u_xen_mc);
+do_mca(XEN_GUEST_HANDLE_PARAM(xen_mc_t) u_xen_mc);
extern int
do_update_va_mapping(
@@ -70,7 +70,7 @@ do_update_va_mapping(
extern long
do_physdev_op(
- int cmd, XEN_GUEST_HANDLE(void) arg);
+ int cmd, XEN_GUEST_HANDLE_PARAM(void) arg);
extern int
do_update_va_mapping_otherdomain(
@@ -81,9 +81,9 @@ do_update_va_mapping_otherdomain(
extern int
do_mmuext_op(
- XEN_GUEST_HANDLE(mmuext_op_t) uops,
+ XEN_GUEST_HANDLE_PARAM(mmuext_op_t) uops,
unsigned int count,
- XEN_GUEST_HANDLE(uint) pdone,
+ XEN_GUEST_HANDLE_PARAM(uint) pdone,
unsigned int foreigndom);
extern unsigned long
@@ -92,7 +92,7 @@ do_iret(
extern int
do_kexec(
- unsigned long op, unsigned arg1, XEN_GUEST_HANDLE(void) uarg);
+ unsigned long op, unsigned arg1, XEN_GUEST_HANDLE_PARAM(void) uarg);
#ifdef __x86_64__
@@ -110,11 +110,11 @@ do_set_segment_base(
extern int
compat_physdev_op(
int cmd,
- XEN_GUEST_HANDLE(void) arg);
+ XEN_GUEST_HANDLE_PARAM(void) arg);
extern int
arch_compat_vcpu_op(
- int cmd, struct vcpu *v, XEN_GUEST_HANDLE(void) arg);
+ int cmd, struct vcpu *v, XEN_GUEST_HANDLE_PARAM(void) arg);
#else
diff --git a/xen/include/asm-x86/mem_event.h b/xen/include/asm-x86/mem_event.h
index 23d71c1..e17f36b 100644
--- a/xen/include/asm-x86/mem_event.h
+++ b/xen/include/asm-x86/mem_event.h
@@ -65,7 +65,7 @@ int mem_event_get_response(struct domain *d, struct
mem_event_domain *med,
struct domain *get_mem_event_op_target(uint32_t domain, int *rc);
int do_mem_event_op(int op, uint32_t domain, void *arg);
int mem_event_domctl(struct domain *d, xen_domctl_mem_event_op_t *mec,
- XEN_GUEST_HANDLE(void) u_domctl);
+ XEN_GUEST_HANDLE_PARAM(void) u_domctl);
#endif /* __MEM_EVENT_H__ */
diff --git a/xen/include/asm-x86/mm.h b/xen/include/asm-x86/mm.h
index 4cba276..6373b3b 100644
--- a/xen/include/asm-x86/mm.h
+++ b/xen/include/asm-x86/mm.h
@@ -604,10 +604,10 @@ void *do_page_walk(struct vcpu *v, unsigned long addr);
int __sync_local_execstate(void);
/* Arch-specific portion of memory_op hypercall. */
-long arch_memory_op(int op, XEN_GUEST_HANDLE(void) arg);
-long subarch_memory_op(int op, XEN_GUEST_HANDLE(void) arg);
-int compat_arch_memory_op(int op, XEN_GUEST_HANDLE(void));
-int compat_subarch_memory_op(int op, XEN_GUEST_HANDLE(void));
+long arch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg);
+long subarch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg);
+int compat_arch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void));
+int compat_subarch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void));
int steal_page(
struct domain *d, struct page_info *page, unsigned int memflags);
diff --git a/xen/include/asm-x86/paging.h b/xen/include/asm-x86/paging.h
index c432a97..1cd0e3f 100644
--- a/xen/include/asm-x86/paging.h
+++ b/xen/include/asm-x86/paging.h
@@ -215,7 +215,7 @@ int paging_domain_init(struct domain *d, unsigned int
domcr_flags);
* and disable ephemeral shadow modes (test mode and log-dirty mode) and
* manipulate the log-dirty bitmap. */
int paging_domctl(struct domain *d, xen_domctl_shadow_op_t *sc,
- XEN_GUEST_HANDLE(void) u_domctl);
+ XEN_GUEST_HANDLE_PARAM(void) u_domctl);
/* Call when destroying a domain */
void paging_teardown(struct domain *d);
diff --git a/xen/include/asm-x86/processor.h b/xen/include/asm-x86/processor.h
index 7164a50..efdbddd 100644
--- a/xen/include/asm-x86/processor.h
+++ b/xen/include/asm-x86/processor.h
@@ -598,7 +598,7 @@ int rdmsr_hypervisor_regs(uint32_t idx, uint64_t *val);
int wrmsr_hypervisor_regs(uint32_t idx, uint64_t val);
void microcode_set_module(unsigned int);
-int microcode_update(XEN_GUEST_HANDLE(const_void), unsigned long len);
+int microcode_update(XEN_GUEST_HANDLE_PARAM(const_void), unsigned long len);
int microcode_resume_cpu(int cpu);
unsigned long *get_x86_gpr(struct cpu_user_regs *regs, unsigned int modrm_reg);
diff --git a/xen/include/asm-x86/shadow.h b/xen/include/asm-x86/shadow.h
index 88a8cd2..2eb6efc 100644
--- a/xen/include/asm-x86/shadow.h
+++ b/xen/include/asm-x86/shadow.h
@@ -73,7 +73,7 @@ int shadow_track_dirty_vram(struct domain *d,
* manipulate the log-dirty bitmap. */
int shadow_domctl(struct domain *d,
xen_domctl_shadow_op_t *sc,
- XEN_GUEST_HANDLE(void) u_domctl);
+ XEN_GUEST_HANDLE_PARAM(void) u_domctl);
/* Call when destroying a domain */
void shadow_teardown(struct domain *d);
diff --git a/xen/include/asm-x86/xenoprof.h b/xen/include/asm-x86/xenoprof.h
index c03f8c8..3f5ea15 100644
--- a/xen/include/asm-x86/xenoprof.h
+++ b/xen/include/asm-x86/xenoprof.h
@@ -40,9 +40,9 @@ int xenoprof_arch_init(int *num_events, char *cpu_type);
#define xenoprof_arch_disable_virq() nmi_disable_virq()
#define xenoprof_arch_release_counters() nmi_release_counters()
-int xenoprof_arch_counter(XEN_GUEST_HANDLE(void) arg);
-int compat_oprof_arch_counter(XEN_GUEST_HANDLE(void) arg);
-int xenoprof_arch_ibs_counter(XEN_GUEST_HANDLE(void) arg);
+int xenoprof_arch_counter(XEN_GUEST_HANDLE_PARAM(void) arg);
+int compat_oprof_arch_counter(XEN_GUEST_HANDLE_PARAM(void) arg);
+int xenoprof_arch_ibs_counter(XEN_GUEST_HANDLE_PARAM(void) arg);
struct vcpu;
struct cpu_user_regs;
diff --git a/xen/include/xen/acpi.h b/xen/include/xen/acpi.h
index d7e2f94..8f3cdca 100644
--- a/xen/include/xen/acpi.h
+++ b/xen/include/xen/acpi.h
@@ -145,8 +145,8 @@ static inline unsigned int acpi_get_cstate_limit(void) {
return 0; }
static inline void acpi_set_cstate_limit(unsigned int new_limit) { return; }
#endif
-#ifdef XEN_GUEST_HANDLE
-int acpi_set_pdc_bits(u32 acpi_id, XEN_GUEST_HANDLE(uint32));
+#ifdef XEN_GUEST_HANDLE_PARAM
+int acpi_set_pdc_bits(u32 acpi_id, XEN_GUEST_HANDLE_PARAM(uint32));
#endif
int arch_acpi_set_pdc_bits(u32 acpi_id, u32 *, u32 mask);
diff --git a/xen/include/xen/hypercall.h b/xen/include/xen/hypercall.h
index 73b1598..e335037 100644
--- a/xen/include/xen/hypercall.h
+++ b/xen/include/xen/hypercall.h
@@ -29,29 +29,29 @@ do_sched_op_compat(
extern long
do_sched_op(
int cmd,
- XEN_GUEST_HANDLE(void) arg);
+ XEN_GUEST_HANDLE_PARAM(void) arg);
extern long
do_domctl(
- XEN_GUEST_HANDLE(xen_domctl_t) u_domctl);
+ XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl);
extern long
arch_do_domctl(
struct xen_domctl *domctl,
- XEN_GUEST_HANDLE(xen_domctl_t) u_domctl);
+ XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl);
extern long
do_sysctl(
- XEN_GUEST_HANDLE(xen_sysctl_t) u_sysctl);
+ XEN_GUEST_HANDLE_PARAM(xen_sysctl_t) u_sysctl);
extern long
arch_do_sysctl(
struct xen_sysctl *sysctl,
- XEN_GUEST_HANDLE(xen_sysctl_t) u_sysctl);
+ XEN_GUEST_HANDLE_PARAM(xen_sysctl_t) u_sysctl);
extern long
do_platform_op(
- XEN_GUEST_HANDLE(xen_platform_op_t) u_xenpf_op);
+ XEN_GUEST_HANDLE_PARAM(xen_platform_op_t) u_xenpf_op);
/*
* To allow safe resume of do_memory_op() after preemption, we need to know
@@ -64,11 +64,11 @@ do_platform_op(
extern long
do_memory_op(
unsigned long cmd,
- XEN_GUEST_HANDLE(void) arg);
+ XEN_GUEST_HANDLE_PARAM(void) arg);
extern long
do_multicall(
- XEN_GUEST_HANDLE(multicall_entry_t) call_list,
+ XEN_GUEST_HANDLE_PARAM(multicall_entry_t) call_list,
unsigned int nr_calls);
extern long
@@ -77,23 +77,23 @@ do_set_timer_op(
extern long
do_event_channel_op(
- int cmd, XEN_GUEST_HANDLE(void) arg);
+ int cmd, XEN_GUEST_HANDLE_PARAM(void) arg);
extern long
do_xen_version(
int cmd,
- XEN_GUEST_HANDLE(void) arg);
+ XEN_GUEST_HANDLE_PARAM(void) arg);
extern long
do_console_io(
int cmd,
int count,
- XEN_GUEST_HANDLE(char) buffer);
+ XEN_GUEST_HANDLE_PARAM(char) buffer);
extern long
do_grant_table_op(
unsigned int cmd,
- XEN_GUEST_HANDLE(void) uop,
+ XEN_GUEST_HANDLE_PARAM(void) uop,
unsigned int count);
extern long
@@ -105,72 +105,72 @@ extern long
do_vcpu_op(
int cmd,
int vcpuid,
- XEN_GUEST_HANDLE(void) arg);
+ XEN_GUEST_HANDLE_PARAM(void) arg);
struct vcpu;
extern long
arch_do_vcpu_op(int cmd,
struct vcpu *v,
- XEN_GUEST_HANDLE(void) arg);
+ XEN_GUEST_HANDLE_PARAM(void) arg);
extern long
do_nmi_op(
unsigned int cmd,
- XEN_GUEST_HANDLE(void) arg);
+ XEN_GUEST_HANDLE_PARAM(void) arg);
extern long
do_hvm_op(
unsigned long op,
- XEN_GUEST_HANDLE(void) arg);
+ XEN_GUEST_HANDLE_PARAM(void) arg);
extern long
do_kexec_op(
unsigned long op,
int arg1,
- XEN_GUEST_HANDLE(void) arg);
+ XEN_GUEST_HANDLE_PARAM(void) arg);
extern long
do_xsm_op(
- XEN_GUEST_HANDLE(xsm_op_t) u_xsm_op);
+ XEN_GUEST_HANDLE_PARAM(xsm_op_t) u_xsm_op);
extern long
do_tmem_op(
- XEN_GUEST_HANDLE(tmem_op_t) uops);
+ XEN_GUEST_HANDLE_PARAM(tmem_op_t) uops);
extern int
-do_xenoprof_op(int op, XEN_GUEST_HANDLE(void) arg);
+do_xenoprof_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg);
#ifdef CONFIG_COMPAT
extern int
compat_memory_op(
unsigned int cmd,
- XEN_GUEST_HANDLE(void) arg);
+ XEN_GUEST_HANDLE_PARAM(void) arg);
extern int
compat_grant_table_op(
unsigned int cmd,
- XEN_GUEST_HANDLE(void) uop,
+ XEN_GUEST_HANDLE_PARAM(void) uop,
unsigned int count);
extern int
compat_vcpu_op(
int cmd,
int vcpuid,
- XEN_GUEST_HANDLE(void) arg);
+ XEN_GUEST_HANDLE_PARAM(void) arg);
extern int
-compat_xenoprof_op(int op, XEN_GUEST_HANDLE(void) arg);
+compat_xenoprof_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg);
extern int
compat_xen_version(
int cmd,
- XEN_GUEST_HANDLE(void) arg);
+ XEN_GUEST_HANDLE_PARAM(void) arg);
extern int
compat_sched_op(
int cmd,
- XEN_GUEST_HANDLE(void) arg);
+ XEN_GUEST_HANDLE_PARAM(void) arg);
extern int
compat_set_timer_op(
diff --git a/xen/include/xen/iommu.h b/xen/include/xen/iommu.h
index 6f7fbf7..bd19e23 100644
--- a/xen/include/xen/iommu.h
+++ b/xen/include/xen/iommu.h
@@ -155,7 +155,7 @@ void iommu_crash_shutdown(void);
void iommu_set_dom0_mapping(struct domain *d);
void iommu_share_p2m_table(struct domain *d);
-int iommu_do_domctl(struct xen_domctl *, XEN_GUEST_HANDLE(xen_domctl_t));
+int iommu_do_domctl(struct xen_domctl *, XEN_GUEST_HANDLE_PARAM(xen_domctl_t));
void iommu_iotlb_flush(struct domain *d, unsigned long gfn, unsigned int
page_count);
void iommu_iotlb_flush_all(struct domain *d);
diff --git a/xen/include/xen/tmem_xen.h b/xen/include/xen/tmem_xen.h
index 4a35760..2e7199a 100644
--- a/xen/include/xen/tmem_xen.h
+++ b/xen/include/xen/tmem_xen.h
@@ -448,7 +448,7 @@ static inline void tmh_tze_copy_from_pfp(void *tva, pfp_t
*pfp, pagesize_t len)
typedef XEN_GUEST_HANDLE(void) cli_mfn_t;
typedef XEN_GUEST_HANDLE(char) cli_va_t;
*/
-typedef XEN_GUEST_HANDLE(tmem_op_t) tmem_cli_op_t;
+typedef XEN_GUEST_HANDLE_PARAM(tmem_op_t) tmem_cli_op_t;
static inline int tmh_get_tmemop_from_client(tmem_op_t *op, tmem_cli_op_t uops)
{
diff --git a/xen/include/xsm/xsm.h b/xen/include/xsm/xsm.h
index bef79df..3e4a47f 100644
--- a/xen/include/xsm/xsm.h
+++ b/xen/include/xsm/xsm.h
@@ -139,7 +139,7 @@ struct xsm_operations {
int (*cpupool_op)(void);
int (*sched_op)(void);
- long (*__do_xsm_op) (XEN_GUEST_HANDLE(xsm_op_t) op);
+ long (*__do_xsm_op) (XEN_GUEST_HANDLE_PARAM(xsm_op_t) op);
#ifdef CONFIG_X86
int (*shadow_control) (struct domain *d, uint32_t op);
@@ -585,7 +585,7 @@ static inline int xsm_sched_op(void)
return xsm_call(sched_op());
}
-static inline long __do_xsm_op (XEN_GUEST_HANDLE(xsm_op_t) op)
+static inline long __do_xsm_op (XEN_GUEST_HANDLE_PARAM(xsm_op_t) op)
{
#ifdef XSM_ENABLE
return xsm_ops->__do_xsm_op(op);
diff --git a/xen/xsm/dummy.c b/xen/xsm/dummy.c
index 7027ee7..5ef6529 100644
--- a/xen/xsm/dummy.c
+++ b/xen/xsm/dummy.c
@@ -365,7 +365,7 @@ static int dummy_sched_op (void)
return 0;
}
-static long dummy___do_xsm_op(XEN_GUEST_HANDLE(xsm_op_t) op)
+static long dummy___do_xsm_op(XEN_GUEST_HANDLE_PARAM(xsm_op_t) op)
{
return -ENOSYS;
}
diff --git a/xen/xsm/flask/flask_op.c b/xen/xsm/flask/flask_op.c
index bd4db37..23e7d34 100644
--- a/xen/xsm/flask/flask_op.c
+++ b/xen/xsm/flask/flask_op.c
@@ -71,7 +71,7 @@ static int domain_has_security(struct domain *d, u32 perms)
perms, NULL);
}
-static int flask_copyin_string(XEN_GUEST_HANDLE(char) u_buf, char **buf,
uint32_t size)
+static int flask_copyin_string(XEN_GUEST_HANDLE_PARAM(char) u_buf, char **buf,
uint32_t size)
{
char *tmp = xmalloc_bytes(size + 1);
if ( !tmp )
@@ -573,7 +573,7 @@ static int flask_get_peer_sid(struct xen_flask_peersid *arg)
return rv;
}
-long do_flask_op(XEN_GUEST_HANDLE(xsm_op_t) u_flask_op)
+long do_flask_op(XEN_GUEST_HANDLE_PARAM(xsm_op_t) u_flask_op)
{
xen_flask_op_t op;
int rv;
diff --git a/xen/xsm/flask/hooks.c b/xen/xsm/flask/hooks.c
index 23b84f3..0fc299c 100644
--- a/xen/xsm/flask/hooks.c
+++ b/xen/xsm/flask/hooks.c
@@ -1553,7 +1553,7 @@ static int flask_vcpuextstate (struct domain *d, uint32_t
cmd)
}
#endif
-long do_flask_op(XEN_GUEST_HANDLE(xsm_op_t) u_flask_op);
+long do_flask_op(XEN_GUEST_HANDLE_PARAM(xsm_op_t) u_flask_op);
static struct xsm_operations flask_ops = {
.security_domaininfo = flask_security_domaininfo,
diff --git a/xen/xsm/xsm_core.c b/xen/xsm/xsm_core.c
index 96c8669..46287cb 100644
--- a/xen/xsm/xsm_core.c
+++ b/xen/xsm/xsm_core.c
@@ -111,7 +111,7 @@ int unregister_xsm(struct xsm_operations *ops)
#endif
-long do_xsm_op (XEN_GUEST_HANDLE(xsm_op_t) op)
+long do_xsm_op (XEN_GUEST_HANDLE_PARAM(xsm_op_t) op)
{
return __do_xsm_op(op);
}
--
1.7.2.5
Jan Beulich
2012-Aug-10 13:18 UTC
Re: [PATCH v2 4/5] xen: introduce XEN_GUEST_HANDLE_PARAM
>>> On 10.08.12 at 14:10, Stefano Stabellini <stefano.stabellini@eu.citrix.com> wrote: > --- a/xen/arch/x86/x86_64/platform_hypercall.c > +++ b/xen/arch/x86/x86_64/platform_hypercall.c > @@ -38,6 +38,7 @@ CHECK_pf_pcpu_version; > > #define COMPAT > #define _XEN_GUEST_HANDLE(t) XEN_GUEST_HANDLE(t) > +#define _XEN_GUEST_HANDLE_PARAM(t) XEN_GUEST_HANDLE(t)Was this ...> typedef int ret_t; > > #include "../platform_hypercall.c" > --- a/xen/common/compat/multicall.c > +++ b/xen/common/compat/multicall.c > @@ -24,6 +24,7 @@ DEFINE_XEN_GUEST_HANDLE(multicall_entry_compat_t); > #define call compat_call > #define do_multicall(l, n) compat_multicall(_##l, n) > #define _XEN_GUEST_HANDLE(t) XEN_GUEST_HANDLE(t) > +#define _XEN_GUEST_HANDLE_PARAM(t) XEN_GUEST_HANDLE(t)... and this merely added mechanically? Looking at the rest of the patch I don''t see why these would be needed. Or would these simply belong into the next patch? Jan
Stefano Stabellini
2012-Aug-10 13:22 UTC
Re: [PATCH v2 4/5] xen: introduce XEN_GUEST_HANDLE_PARAM
On Fri, 10 Aug 2012, Jan Beulich wrote:> >>> On 10.08.12 at 14:10, Stefano Stabellini <stefano.stabellini@eu.citrix.com> wrote: > > --- a/xen/arch/x86/x86_64/platform_hypercall.c > > +++ b/xen/arch/x86/x86_64/platform_hypercall.c > > @@ -38,6 +38,7 @@ CHECK_pf_pcpu_version; > > > > #define COMPAT > > #define _XEN_GUEST_HANDLE(t) XEN_GUEST_HANDLE(t) > > +#define _XEN_GUEST_HANDLE_PARAM(t) XEN_GUEST_HANDLE(t) > > Was this ... > > > typedef int ret_t; > > > > #include "../platform_hypercall.c" > > --- a/xen/common/compat/multicall.c > > +++ b/xen/common/compat/multicall.c > > @@ -24,6 +24,7 @@ DEFINE_XEN_GUEST_HANDLE(multicall_entry_compat_t); > > #define call compat_call > > #define do_multicall(l, n) compat_multicall(_##l, n) > > #define _XEN_GUEST_HANDLE(t) XEN_GUEST_HANDLE(t) > > +#define _XEN_GUEST_HANDLE_PARAM(t) XEN_GUEST_HANDLE(t) > > > ... and this merely added mechanically? Looking at the rest > of the patch I don''t see why these would be needed. Or would > these simply belong into the next patch?They do belong to the next patch, but if I put them in there they would be lost in the middle of a very long series of otherwise mechanical substitutions, so I thought it would be a better idea to put them in this patch. And I can see it worked :)
Jan Beulich
2012-Aug-10 13:23 UTC
Re: [PATCH v2 5/5] xen: replace XEN_GUEST_HANDLE with XEN_GUEST_HANDLE_PARAM when appropriate
>>> On 10.08.12 at 14:10, Stefano Stabellini <stefano.stabellini@eu.citrix.com> wrote: > Note: these changes don''t make any difference on x86 and ia64.I can see your point in doing this in the x86 files nevertheless for cosmetic/consistency reasons, but I''m really uncertain about this uglification when it''s not really necessary (plus it would shrink the patch quite a bit).> Replace XEN_GUEST_HANDLE with XEN_GUEST_HANDLE_PARAM when it is used as > an hypercall argument.I didn''t look in too close detail, as this isn''t intended for the main branch yet, but I still wasn''t able to spot any conversion method in at least one direction (so that internally these can be passed around irrespective of their origin). Jan
Stefano Stabellini
2012-Aug-13 11:24 UTC
Re: [PATCH v2 5/5] xen: replace XEN_GUEST_HANDLE with XEN_GUEST_HANDLE_PARAM when appropriate
On Fri, 10 Aug 2012, Jan Beulich wrote:> >>> On 10.08.12 at 14:10, Stefano Stabellini <stefano.stabellini@eu.citrix.com> wrote: > > Note: these changes don''t make any difference on x86 and ia64. > > I can see your point in doing this in the x86 files nevertheless for > cosmetic/consistency reasons, but I''m really uncertain about this > uglification when it''s not really necessary (plus it would shrink the > patch quite a bit).I don''t have a strong opinion on this. However it is going to be difficult to enforce XEN_GUEST_HANDLE_PARAM on parameters anyway (because we don''t have a simple way to make it fail at compile time), if we make the change only in xen/commons, it is going to be even harder.> > Replace XEN_GUEST_HANDLE with XEN_GUEST_HANDLE_PARAM when it is used as > > an hypercall argument. > > I didn''t look in too close detail, as this isn''t intended for the main > branch yet, but I still wasn''t able to spot any conversion method > in at least one direction (so that internally these can be passed > around irrespective of their origin).I thought that guest_handle_cast was supposed to be used to cast XEN_GUEST_HANDLE_PARAMs into proper structs. Also copy_from_guest can be used to get the struct from memory. On the other hand if you mean casting a XEN_GUEST_HANDLE_PARAM into a XEN_GUEST_HANDLE to pass it to other internal functions, I don''t think there is any point in that because the other internal functions should also have XEN_GUEST_HANDLE_PARAMs as parameters.
Keir Fraser
2012-Aug-13 11:41 UTC
Re: [PATCH v2 5/5] xen: replace XEN_GUEST_HANDLE with XEN_GUEST_HANDLE_PARAM when appropriate
On 13/08/2012 12:24, "Stefano Stabellini" <Stefano.Stabellini@eu.citrix.com> wrote:>> I can see your point in doing this in the x86 files nevertheless for >> cosmetic/consistency reasons, but I''m really uncertain about this >> uglification when it''s not really necessary (plus it would shrink the >> patch quite a bit). > > I don''t have a strong opinion on this. > However it is going to be difficult to enforce XEN_GUEST_HANDLE_PARAM on > parameters anyway (because we don''t have a simple way to make it fail at > compile time), if we make the change only in xen/commons, it is going to be > even harder.It has to be done everywhere, if at all. Else it''s an ugly hack job.
Jan Beulich
2012-Aug-13 12:04 UTC
Re: [PATCH v2 5/5] xen: replace XEN_GUEST_HANDLE with XEN_GUEST_HANDLE_PARAM when appropriate
>>> On 13.08.12 at 13:24, Stefano Stabellini <stefano.stabellini@eu.citrix.com> wrote: > On the other hand if you mean casting a XEN_GUEST_HANDLE_PARAM into a > XEN_GUEST_HANDLE to pass it to other internal functions, I don''t think > there is any point in that because the other internal functions should > also have XEN_GUEST_HANDLE_PARAMs as parameters.So you obviously need a cast from "normal" to _PARAM (so that you can pass embedded fields to functions). Jan
Stefano Stabellini
2012-Aug-14 10:38 UTC
Re: [PATCH v2 5/5] xen: replace XEN_GUEST_HANDLE with XEN_GUEST_HANDLE_PARAM when appropriate
On Mon, 13 Aug 2012, Jan Beulich wrote:> >>> On 13.08.12 at 13:24, Stefano Stabellini <stefano.stabellini@eu.citrix.com> wrote: > > On the other hand if you mean casting a XEN_GUEST_HANDLE_PARAM into a > > XEN_GUEST_HANDLE to pass it to other internal functions, I don''t think > > there is any point in that because the other internal functions should > > also have XEN_GUEST_HANDLE_PARAMs as parameters. > > So you obviously need a cast from "normal" to _PARAM (so that > you can pass embedded fields to functions).In practice embedded fields are in guest memory, so the first thing Xen does is calling copy_from_guest and work with the struct pointer directly from that point on. However I do see how a function like that might make the distinction between XEN_GUEST_HANDLE and XEN_GUEST_HANDLE_PARAMs clearer, so I''ll add one. The implementation is going to identical to guest_handle_cast though.
Stefano Stabellini
2012-Aug-14 10:40 UTC
Re: [PATCH v2 5/5] xen: replace XEN_GUEST_HANDLE with XEN_GUEST_HANDLE_PARAM when appropriate
On Tue, 14 Aug 2012, Stefano Stabellini wrote:> On Mon, 13 Aug 2012, Jan Beulich wrote: > > >>> On 13.08.12 at 13:24, Stefano Stabellini <stefano.stabellini@eu.citrix.com> wrote: > > > On the other hand if you mean casting a XEN_GUEST_HANDLE_PARAM into a > > > XEN_GUEST_HANDLE to pass it to other internal functions, I don''t think > > > there is any point in that because the other internal functions should > > > also have XEN_GUEST_HANDLE_PARAMs as parameters. > > > > So you obviously need a cast from "normal" to _PARAM (so that > > you can pass embedded fields to functions). > > In practice embedded fields are in guest memory, so the first thing Xen > does is calling copy_from_guest and work with the struct pointer > directly from that point on. > > However I do see how a function like that might make the distinction > between XEN_GUEST_HANDLE and XEN_GUEST_HANDLE_PARAMs clearer, so I''ll > add one. > > The implementation is going to identical to guest_handle_cast though. >Actually it is probably better to add a good comment on top of guest_handle_cast explaining that can be used with both XEN_GUEST_HANDLE or XEN_GUEST_HANDLE_PARAM as paramters.
Jan Beulich
2012-Aug-14 11:55 UTC
Re: [PATCH v2 5/5] xen: replace XEN_GUEST_HANDLE with XEN_GUEST_HANDLE_PARAM when appropriate
>>> On 14.08.12 at 12:38, Stefano Stabellini <stefano.stabellini@eu.citrix.com>wrote:> On Mon, 13 Aug 2012, Jan Beulich wrote: >> >>> On 13.08.12 at 13:24, Stefano Stabellini <stefano.stabellini@eu.citrix.com> > wrote: >> > On the other hand if you mean casting a XEN_GUEST_HANDLE_PARAM into a >> > XEN_GUEST_HANDLE to pass it to other internal functions, I don''t think >> > there is any point in that because the other internal functions should >> > also have XEN_GUEST_HANDLE_PARAMs as parameters. >> >> So you obviously need a cast from "normal" to _PARAM (so that >> you can pass embedded fields to functions). > > In practice embedded fields are in guest memory, so the first thing Xen > does is calling copy_from_guest and work with the struct pointer > directly from that point on.Perhaps we have a different understanding of embedded fields: I''m thinking of structure field having XEN_GUEST_HANDLE() type. An example would be struct mmuext_op''s vcpumask field, which is being passed to vcpumask_to_pcpumask(). This must remain to be possible (and not just in x86-specific code, where it''s mere luck that both are really identical). Jan
Stefano Stabellini
2012-Aug-14 12:56 UTC
Re: [PATCH v2 5/5] xen: replace XEN_GUEST_HANDLE with XEN_GUEST_HANDLE_PARAM when appropriate
On Tue, 14 Aug 2012, Jan Beulich wrote:> >>> On 14.08.12 at 12:38, Stefano Stabellini <stefano.stabellini@eu.citrix.com> > wrote: > > On Mon, 13 Aug 2012, Jan Beulich wrote: > >> >>> On 13.08.12 at 13:24, Stefano Stabellini <stefano.stabellini@eu.citrix.com> > > wrote: > >> > On the other hand if you mean casting a XEN_GUEST_HANDLE_PARAM into a > >> > XEN_GUEST_HANDLE to pass it to other internal functions, I don''t think > >> > there is any point in that because the other internal functions should > >> > also have XEN_GUEST_HANDLE_PARAMs as parameters. > >> > >> So you obviously need a cast from "normal" to _PARAM (so that > >> you can pass embedded fields to functions). > > > > In practice embedded fields are in guest memory, so the first thing Xen > > does is calling copy_from_guest and work with the struct pointer > > directly from that point on. > > Perhaps we have a different understanding of embedded fields: > I''m thinking of structure field having XEN_GUEST_HANDLE() type. > An example would be struct mmuext_op''s vcpumask field, which > is being passed to vcpumask_to_pcpumask(). This must remain to > be possible (and not just in x86-specific code, where it''s mere luck > that both are really identical).Thanks for the concrete example; glancing through the common code I didn''t find any examples like this. As I wrote in the follow up email, guest_handle_cast is just what we need: diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c index 4d72700..70ffa58 100644 --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -3198,7 +3198,9 @@ int do_mmuext_op( { cpumask_t pmask; - if ( unlikely(vcpumask_to_pcpumask(d, op.arg2.vcpumask, &pmask)) ) + if ( unlikely(vcpumask_to_pcpumask(d, + guest_handle_cast(op.arg2.vcpumask, const_void), + &pmask)) ) { okay = 0; break; Unfortuantely that means that I have missed some substitutions from my original "replace XEN_GUEST_HANDLE with XEN_GUEST_HANDLE_PARAM when appropriate" patch. I''ll try to catch them in the next version.
Jan Beulich
2012-Aug-14 13:39 UTC
Re: [PATCH v2 5/5] xen: replace XEN_GUEST_HANDLE with XEN_GUEST_HANDLE_PARAM when appropriate
>>> On 14.08.12 at 14:56, Stefano Stabellini <stefano.stabellini@eu.citrix.com> wrote: > On Tue, 14 Aug 2012, Jan Beulich wrote: >> Perhaps we have a different understanding of embedded fields: >> I''m thinking of structure field having XEN_GUEST_HANDLE() type. >> An example would be struct mmuext_op''s vcpumask field, which >> is being passed to vcpumask_to_pcpumask(). This must remain to >> be possible (and not just in x86-specific code, where it''s mere luck >> that both are really identical). > > Thanks for the concrete example; glancing through the common code I > didn''t find any examples like this. > As I wrote in the follow up email, guest_handle_cast is just what we > need: > > diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c > index 4d72700..70ffa58 100644 > --- a/xen/arch/x86/mm.c > +++ b/xen/arch/x86/mm.c > @@ -3198,7 +3198,9 @@ int do_mmuext_op( > { > cpumask_t pmask; > > - if ( unlikely(vcpumask_to_pcpumask(d, op.arg2.vcpumask, &pmask)) ) > + if ( unlikely(vcpumask_to_pcpumask(d, > + guest_handle_cast(op.arg2.vcpumask, const_void),No, the conversion should explicitly _not_ require specification of the type, i.e. this should not be a true cast. Type safety (checked by the compiler) can only be achieved if no intermediate cast is involved. Jan> + &pmask)) ) > { > okay = 0; > break;
Stefano Stabellini
2012-Aug-14 15:42 UTC
Re: [PATCH v2 5/5] xen: replace XEN_GUEST_HANDLE with XEN_GUEST_HANDLE_PARAM when appropriate
On Tue, 14 Aug 2012, Jan Beulich wrote:> >>> On 14.08.12 at 14:56, Stefano Stabellini <stefano.stabellini@eu.citrix.com> wrote: > > On Tue, 14 Aug 2012, Jan Beulich wrote: > >> Perhaps we have a different understanding of embedded fields: > >> I''m thinking of structure field having XEN_GUEST_HANDLE() type. > >> An example would be struct mmuext_op''s vcpumask field, which > >> is being passed to vcpumask_to_pcpumask(). This must remain to > >> be possible (and not just in x86-specific code, where it''s mere luck > >> that both are really identical). > > > > Thanks for the concrete example; glancing through the common code I > > didn''t find any examples like this. > > As I wrote in the follow up email, guest_handle_cast is just what we > > need: > > > > diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c > > index 4d72700..70ffa58 100644 > > --- a/xen/arch/x86/mm.c > > +++ b/xen/arch/x86/mm.c > > @@ -3198,7 +3198,9 @@ int do_mmuext_op( > > { > > cpumask_t pmask; > > > > - if ( unlikely(vcpumask_to_pcpumask(d, op.arg2.vcpumask, &pmask)) ) > > + if ( unlikely(vcpumask_to_pcpumask(d, > > + guest_handle_cast(op.arg2.vcpumask, const_void), > > No, the conversion should explicitly _not_ require specification > of the type, i.e. this should not be a true cast. Type safety > (checked by the compiler) can only be achieved if no intermediate > cast is involved.guest_handle_cast is implemented as: #define guest_handle_cast(hnd, type) ({ \ type *_x = (hnd).p; \ (XEN_GUEST_HANDLE_PARAM(type)) { _x }; \ }) as you can see there is actually no explicit cast involved. If you specify the wrong type the compiler would fail at: type *_x = (hnd).p; I think that having to specify the type as parameter is acceptable if it makes up for simpler code over all. The alternative would be something like the following: diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c index 4d72700..e6685c7 100644 --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -3197,8 +3197,11 @@ int do_mmuext_op( case MMUEXT_INVLPG_MULTI: { cpumask_t pmask; + XEN_GUEST_HANDLE_PARAM(const_void) param; - if ( unlikely(vcpumask_to_pcpumask(d, op.arg2.vcpumask, &pmask)) ) + set_xen_guest_handle(param, op.arg2.vcpumask.p); + + if ( unlikely(vcpumask_to_pcpumask(d, param, &pmask)) ) { okay = 0; break; but I think it makes the code worse.
Jan Beulich
2012-Aug-14 16:14 UTC
Re: [PATCH v2 5/5] xen: replace XEN_GUEST_HANDLE with XEN_GUEST_HANDLE_PARAM when appropriate
>>> On 14.08.12 at 17:42, Stefano Stabellini <stefano.stabellini@eu.citrix.com>wrote:> On Tue, 14 Aug 2012, Jan Beulich wrote: >> >>> On 14.08.12 at 14:56, Stefano Stabellini <stefano.stabellini@eu.citrix.com> > wrote: >> > On Tue, 14 Aug 2012, Jan Beulich wrote: >> >> Perhaps we have a different understanding of embedded fields: >> >> I''m thinking of structure field having XEN_GUEST_HANDLE() type. >> >> An example would be struct mmuext_op''s vcpumask field, which >> >> is being passed to vcpumask_to_pcpumask(). This must remain to >> >> be possible (and not just in x86-specific code, where it''s mere luck >> >> that both are really identical). >> > >> > Thanks for the concrete example; glancing through the common code I >> > didn''t find any examples like this. >> > As I wrote in the follow up email, guest_handle_cast is just what we >> > need: >> > >> > diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c >> > index 4d72700..70ffa58 100644 >> > --- a/xen/arch/x86/mm.c >> > +++ b/xen/arch/x86/mm.c >> > @@ -3198,7 +3198,9 @@ int do_mmuext_op( >> > { >> > cpumask_t pmask; >> > >> > - if ( unlikely(vcpumask_to_pcpumask(d, op.arg2.vcpumask, &pmask)) > ) >> > + if ( unlikely(vcpumask_to_pcpumask(d, >> > + guest_handle_cast(op.arg2.vcpumask, > const_void), >> >> No, the conversion should explicitly _not_ require specification >> of the type, i.e. this should not be a true cast. Type safety >> (checked by the compiler) can only be achieved if no intermediate >> cast is involved. > > guest_handle_cast is implemented as: > > #define guest_handle_cast(hnd, type) ({ \ > type *_x = (hnd).p; \ > (XEN_GUEST_HANDLE_PARAM(type)) { _x }; \ > }) > > as you can see there is actually no explicit cast involved. > If you specify the wrong type the compiler would fail at: > > type *_x = (hnd).p;Except if, as in your example, "type" is (a qualified version of) "void"...> I think that having to specify the type as parameter is acceptable if it > makes up for simpler code over all. > > The alternative would be something like the following: > > diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c > index 4d72700..e6685c7 100644 > --- a/xen/arch/x86/mm.c > +++ b/xen/arch/x86/mm.c > @@ -3197,8 +3197,11 @@ int do_mmuext_op( > case MMUEXT_INVLPG_MULTI: > { > cpumask_t pmask; > + XEN_GUEST_HANDLE_PARAM(const_void) param; > > - if ( unlikely(vcpumask_to_pcpumask(d, op.arg2.vcpumask, &pmask)) ) > + set_xen_guest_handle(param, op.arg2.vcpumask.p); > + > + if ( unlikely(vcpumask_to_pcpumask(d, param, &pmask)) )No, I would expect this to be possible without an intermediate variable (i.e. similar to the guest_handle_cast() approach, just without specifying the type). And in no case should there be an open coded access to the "p" member.> { > okay = 0; > break; > > but I think it makes the code worse.Agreed, this variant definitely looked worse. Jan