# HG changeset patch # User yamahata@xxxxxxxxxxxxx # Date 1186473244 -32400 # Node ID 7b88b56c310b11abe510cf32fc5095bc98979168 # Parent 06791935b2cb9d69e94ca89ca8febcda627017b2 [xencomm] introduce opaque type struct xencomm_handle* for xencommized value This patch is preparation for xencomm consolidation. powerpc uses void * for xencommized value, on the other hand IA64 uses struct xencomm_handle *. Unify it with struct xencomm_handle *. PATCHNAME: introduce_xencomm_handle Signed-off-by: Isaku Yamahata diff -r 06791935b2cb -r 7b88b56c310b arch/powerpc/platforms/xen/hcall.c --- a/arch/powerpc/platforms/xen/hcall.c Mon Aug 13 12:17:04 2007 +0900 +++ b/arch/powerpc/platforms/xen/hcall.c Tue Aug 07 16:54:04 2007 +0900 @@ -56,7 +56,7 @@ int HYPERVISOR_console_io(int cmd, int count, char *str) { - void *desc; + struct xencomm_handle *desc; int rc; desc = xencomm_map_no_alloc(str, count); @@ -76,7 +76,8 @@ int HYPERVISOR_event_channel_op(int cmd, { int rc; - void *desc = xencomm_map_no_alloc(op, sizeof(evtchn_op_t)); + struct xencomm_handle *desc = + xencomm_map_no_alloc(op, sizeof(evtchn_op_t)); if (desc == NULL) return -EINVAL; @@ -92,7 +93,7 @@ EXPORT_SYMBOL(HYPERVISOR_event_channel_o int HYPERVISOR_xen_version(int cmd, void *arg) { - void *desc; + struct xencomm_handle *desc; const unsigned long hcall = __HYPERVISOR_xen_version; int argsize; int rc; @@ -144,7 +145,8 @@ EXPORT_SYMBOL(HYPERVISOR_xen_version); int HYPERVISOR_physdev_op(int cmd, void *op) { - void *desc = xencomm_map_no_alloc(op, sizeof(physdev_op_t)); + struct xencomm_handle *desc = + xencomm_map_no_alloc(op, sizeof(physdev_op_t)); int rc; if (desc == NULL) @@ -163,8 +165,8 @@ int HYPERVISOR_sched_op(int cmd, void *a { int argsize = 0; int rc = -EINVAL; - void *desc; - evtchn_port_t *ports = NULL; + struct xencomm_handle *desc; + struct xencomm_handle *ports = NULL; switch (cmd) { case SCHEDOP_yield: @@ -187,7 +189,7 @@ int HYPERVISOR_sched_op(int cmd, void *a if (ports == NULL) return -ENOMEM; - set_xen_guest_handle(sched_poll.ports, ports); + set_xen_guest_handle(sched_poll.ports, (evtchn_port_t *)ports); memcpy(arg, &sched_poll, sizeof(sched_poll)); } @@ -222,7 +224,7 @@ int HYPERVISOR_suspend(unsigned long sre struct sched_shutdown sched_shutdown = { .reason = SHUTDOWN_suspend, }; - void *desc; + struct xencomm_handle *desc; desc = xencomm_map_no_alloc(&sched_shutdown, sizeof(struct sched_shutdown)); @@ -234,7 +236,7 @@ int HYPERVISOR_kexec_op(unsigned long op int HYPERVISOR_kexec_op(unsigned long op, void *args) { unsigned long argsize; - void *desc; + struct xencomm_handle *desc; switch (op) { case KEXEC_CMD_kexec_get_range: @@ -316,8 +318,8 @@ static int xenppc_privcmd_domctl(privcmd { xen_domctl_t kern_op; xen_domctl_t __user *user_op = (xen_domctl_t __user *)hypercall->arg[0]; - void *op_desc; - void *desc = NULL; + struct xencomm_handle *op_desc; + struct xencomm_handle *desc = NULL; int ret = 0; if (copy_from_user(&kern_op, user_op, sizeof(xen_domctl_t))) @@ -349,7 +351,7 @@ static int xenppc_privcmd_domctl(privcmd ret = -ENOMEM; set_xen_guest_handle(kern_op.u.getmemlist.buffer, - desc); + (void *)desc); break; case XEN_DOMCTL_getpageframeinfo: break; @@ -362,7 +364,7 @@ static int xenppc_privcmd_domctl(privcmd ret = -ENOMEM; set_xen_guest_handle(kern_op.u.getpageframeinfo2.array, - desc); + (void *)desc); break; case XEN_DOMCTL_shadow_op: @@ -376,7 +378,7 @@ static int xenppc_privcmd_domctl(privcmd ret = -ENOMEM; set_xen_guest_handle(kern_op.u.shadow_op.dirty_bitmap, - desc); + (void *)desc); } break; case XEN_DOMCTL_max_mem: @@ -391,7 +393,7 @@ static int xenppc_privcmd_domctl(privcmd ret = -ENOMEM; set_xen_guest_handle(kern_op.u.vcpucontext.ctxt, - desc); + (void *)desc); break; case XEN_DOMCTL_getvcpuinfo: break; @@ -405,7 +407,7 @@ static int xenppc_privcmd_domctl(privcmd ret = -ENOMEM; set_xen_guest_handle(kern_op.u.vcpuaffinity.cpumap.bitmap, - desc); + (void *)desc); break; case XEN_DOMCTL_max_vcpus: case XEN_DOMCTL_scheduler_op: @@ -442,8 +444,8 @@ static int xenppc_privcmd_sysctl(privcmd { xen_sysctl_t kern_op; xen_sysctl_t __user *user_op = (xen_sysctl_t __user *)hypercall->arg[0]; - struct xencomm_desc *op_desc; - void *desc = NULL; + struct xencomm_handle *op_desc; + struct xencomm_handle *desc = NULL; int ret = 0; if (copy_from_user(&kern_op, user_op, sizeof(xen_sysctl_t))) @@ -470,7 +472,7 @@ static int xenppc_privcmd_sysctl(privcmd ret = -ENOMEM; set_xen_guest_handle(kern_op.u.readconsole.buffer, - desc); + (void *)desc); break; case XEN_SYSCTL_tbuf_op: case XEN_SYSCTL_physinfo: @@ -491,7 +493,7 @@ static int xenppc_privcmd_sysctl(privcmd ret = -ENOMEM; set_xen_guest_handle(kern_op.u.getdomaininfolist.buffer, - desc); + (void *)desc); break; default: printk(KERN_ERR "%s: unknown sysctl cmd %d\n", __func__, kern_op.cmd); @@ -517,8 +519,8 @@ static int xenppc_privcmd_platform_op(pr xen_platform_op_t kern_op; xen_platform_op_t __user *user_op = (xen_platform_op_t __user *)hypercall->arg[0]; - void *op_desc; - void *desc = NULL; + struct xencomm_handle *op_desc; + struct xencomm_handle *desc = NULL; int ret = 0; if (copy_from_user(&kern_op, user_op, sizeof(xen_platform_op_t))) @@ -566,7 +568,7 @@ int HYPERVISOR_memory_op(unsigned int cm int HYPERVISOR_memory_op(unsigned int cmd, void *arg) { int ret; - void *op_desc; + struct xencomm_handle *op_desc; xen_memory_reservation_t *mop; @@ -581,7 +583,7 @@ int HYPERVISOR_memory_op(unsigned int cm case XENMEM_increase_reservation: case XENMEM_decrease_reservation: case XENMEM_populate_physmap: { - void *desc = NULL; + struct xencomm_handle *desc = NULL; if (xen_guest_handle(mop->extent_start)) { desc = xencomm_map( @@ -595,7 +597,7 @@ int HYPERVISOR_memory_op(unsigned int cm } set_xen_guest_handle(mop->extent_start, - desc); + (void *)desc); } ret = plpar_hcall_norets(XEN_MARK(__HYPERVISOR_memory_op), @@ -650,7 +652,7 @@ static int xenppc_privcmd_version(privcm static int xenppc_privcmd_event_channel_op(privcmd_hypercall_t *hypercall) { - struct xencomm_desc *desc; + struct xencomm_handle *desc; unsigned int argsize; int ret; @@ -856,7 +858,7 @@ int HYPERVISOR_vcpu_op(int cmd, int vcpu { int argsize; const unsigned long hcall = __HYPERVISOR_vcpu_op; - void *desc; + struct xencomm_handle *desc; int rc; switch (cmd) { diff -r 06791935b2cb -r 7b88b56c310b drivers/xen/core/xencomm.c --- a/drivers/xen/core/xencomm.c Mon Aug 13 12:17:04 2007 +0900 +++ b/drivers/xen/core/xencomm.c Tue Aug 07 16:54:04 2007 +0900 @@ -83,7 +83,7 @@ static struct xencomm_desc *xencomm_allo return desc; } -void xencomm_free(void *desc) +void xencomm_free(struct xencomm_handle *desc) { if (desc && !((ulong)desc & XENCOMM_INLINE_FLAG)) free_page((unsigned long)__va(desc)); @@ -114,7 +114,7 @@ static int xencomm_create(void *buffer, rc = xencomm_init(desc, buffer, bytes); if (rc) { printk("%s failure: %d\n", "xencomm_init", rc); - xencomm_free((void *)__pa(desc)); + xencomm_free((struct xencomm_handle *)__pa(desc)); return rc; } @@ -131,7 +131,7 @@ static int is_phys_contiguous(unsigned l return (addr < VMALLOC_START) || (addr >= VMALLOC_END); } -static void *xencomm_create_inline(void *ptr) +static struct xencomm_handle *xencomm_create_inline(void *ptr) { unsigned long paddr; @@ -139,7 +139,7 @@ static void *xencomm_create_inline(void paddr = (unsigned long)xencomm_pa(ptr); BUG_ON(paddr & XENCOMM_INLINE_FLAG); - return (void *)(paddr | XENCOMM_INLINE_FLAG); + return (struct xencomm_handle *)(paddr | XENCOMM_INLINE_FLAG); } /* "mini" routine, for stack-based communications: */ @@ -161,7 +161,7 @@ static int xencomm_create_mini(void *buf return rc; } -void *xencomm_map(void *ptr, unsigned long bytes) +struct xencomm_handle *xencomm_map(void *ptr, unsigned long bytes) { int rc; struct xencomm_desc *desc; @@ -177,7 +177,7 @@ void *xencomm_map(void *ptr, unsigned lo return xencomm_pa(desc); } -void *__xencomm_map_no_alloc(void *ptr, unsigned long bytes, +struct xencomm_handle *__xencomm_map_no_alloc(void *ptr, unsigned long bytes, struct xencomm_mini *xc_desc) { int rc; diff -r 06791935b2cb -r 7b88b56c310b include/xen/xencomm.h --- a/include/xen/xencomm.h Mon Aug 13 12:17:04 2007 +0900 +++ b/include/xen/xencomm.h Tue Aug 07 16:54:04 2007 +0900 @@ -30,10 +30,14 @@ struct xencomm_mini { uint64_t address[XENCOMM_MINI_ADDRS]; }; -extern void xencomm_free(void *desc); -extern void *xencomm_map(void *ptr, unsigned long bytes); -extern void *__xencomm_map_no_alloc(void *ptr, unsigned long bytes, - struct xencomm_mini *xc_area); +/* To avoid additionnal virt to phys conversion, an opaque structure is + presented. */ +struct xencomm_handle; + +extern void xencomm_free(struct xencomm_handle *desc); +extern struct xencomm_handle *xencomm_map(void *ptr, unsigned long bytes); +extern struct xencomm_handle *__xencomm_map_no_alloc(void *ptr, + unsigned long bytes, struct xencomm_mini *xc_area); #if 0 #define XENCOMM_MINI_ALIGNED(xc_desc, n) \