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