[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [XenPPC] [pushed] [ppc] deal with XEN_GUEST_HANDLE definitions
changeset: 27801:ce5e6ac1abdace30a6a616ece0d6df6f567bf16f tag: tip user: jimix@xxxxxxxxxxxxxxxxxxxxx date: Thu May 11 15:40:11 2006 -0400 files: arch/powerpc/platforms/xen/hcall.c description: [ppc] deal with XEN_GUEST_HANDLE definitions diff -r 257c44c865e917f285499125c2ca62c199312172 -r ce5e6ac1abdace30a6a616ece0d6df6f567bf16f arch/powerpc/platforms/xen/hcall.c --- a/arch/powerpc/platforms/xen/hcall.c Thu May 11 15:39:37 2006 -0400 +++ b/arch/powerpc/platforms/xen/hcall.c Thu May 11 15:40:11 2006 -0400 @@ -12,6 +12,13 @@ #include <asm/uaccess.h> #include <asm/hvcall.h> +/* + * There is some serious guest hande effage heppening in this file so + * this makes it a little easier to manage + */ +#define xen_guest_handle(hnd) ((hnd).p) + + /* we need a xencomm descriptor to cover the dom0 op itself, plus one for every * pointer to another data structure. */ static int xenppc_privcmd_dom0_op(privcmd_hypercall_t *hypercall) @@ -34,90 +41,106 @@ static int xenppc_privcmd_dom0_op(privcm return ret; switch (kern_op.cmd) { - case DOM0_GETMEMLIST: - ret = xencomm_create(kern_op.u.getmemlist.buffer, - kern_op.u.getmemlist.max_pfns * sizeof(unsigned long), - &desc, GFP_KERNEL); - kern_op.u.getmemlist.buffer = (void *)__pa(desc); - break; - case DOM0_SETVCPUCONTEXT: - ret = xencomm_create(kern_op.u.setvcpucontext.ctxt, - sizeof(vcpu_guest_context_t), - &desc, GFP_KERNEL); - kern_op.u.setvcpucontext.ctxt = (void *)__pa(desc); - break; - case DOM0_READCONSOLE: - ret = xencomm_create(kern_op.u.readconsole.buffer, - kern_op.u.readconsole.count, - &desc, GFP_KERNEL); - kern_op.u.readconsole.buffer = (void *)__pa(desc); - break; - case DOM0_GETPAGEFRAMEINFO2: - ret = xencomm_create(kern_op.u.getpageframeinfo2.array, - kern_op.u.getpageframeinfo2.num, - &desc, GFP_KERNEL); - kern_op.u.getpageframeinfo2.array = (void *)__pa(desc); - break; - case DOM0_PERFCCONTROL: - ret = xencomm_create(kern_op.u.perfccontrol.desc, - kern_op.u.perfccontrol.nr_counters * - sizeof(dom0_perfc_desc_t), - &desc, GFP_KERNEL); - kern_op.u.perfccontrol.desc = (void *)__pa(desc); - break; - case DOM0_GETVCPUCONTEXT: - ret = xencomm_create(kern_op.u.getvcpucontext.ctxt, - sizeof(vcpu_guest_context_t), - &desc, GFP_KERNEL); - kern_op.u.getvcpucontext.ctxt = (void *)__pa(desc); - break; - case DOM0_GETDOMAININFOLIST: - ret = xencomm_create(kern_op.u.getdomaininfolist.buffer, - kern_op.u.getdomaininfolist.num_domains * - sizeof(dom0_getdomaininfo_t), - &desc, GFP_KERNEL); - kern_op.u.getdomaininfolist.buffer = (void *)__pa(desc); - break; - case DOM0_PHYSICAL_MEMORY_MAP: - ret = xencomm_create(kern_op.u.physical_memory_map.memory_map, - kern_op.u.physical_memory_map.nr_map_entries * - sizeof(struct dom0_memory_map_entry), - &desc, GFP_KERNEL); - kern_op.u.physical_memory_map.memory_map = (void *)__pa(desc); - break; - - case DOM0_SCHEDCTL: - case DOM0_ADJUSTDOM: - case DOM0_CREATEDOMAIN: - case DOM0_DESTROYDOMAIN: - case DOM0_PAUSEDOMAIN: - case DOM0_UNPAUSEDOMAIN: - case DOM0_GETDOMAININFO: - case DOM0_MSR: - case DOM0_SETTIME: - case DOM0_GETPAGEFRAMEINFO: - case DOM0_SETVCPUAFFINITY: - case DOM0_TBUFCONTROL: - case DOM0_PHYSINFO: - case DOM0_SCHED_ID: - case DOM0_SETDOMAINMAXMEM: - case DOM0_ADD_MEMTYPE: - case DOM0_DEL_MEMTYPE: - case DOM0_READ_MEMTYPE: - case DOM0_IOPORT_PERMISSION: - case DOM0_GETVCPUINFO: - case DOM0_PLATFORM_QUIRK: - case DOM0_MAX_VCPUS: - case DOM0_SETDOMAINHANDLE: - case DOM0_SETDEBUGGING: - /* no munging needed */ - break; - - default: - /* unknown */ - ret = -ENOSYS; - } - + case DOM0_GETMEMLIST: + ret = xencomm_create( + xen_guest_handle(kern_op.u.getmemlist.buffer), + kern_op.u.getmemlist.max_pfns * sizeof(unsigned long), + &desc, GFP_KERNEL); + set_xen_guest_handle(kern_op.u.getmemlist.buffer, + (void *)__pa(desc)); + break; + case DOM0_SETVCPUCONTEXT: + ret = xencomm_create( + xen_guest_handle(kern_op.u.setvcpucontext.ctxt), + sizeof(vcpu_guest_context_t), + &desc, GFP_KERNEL); + set_xen_guest_handle(kern_op.u.setvcpucontext.ctxt, + (void *)__pa(desc)); + break; + case DOM0_READCONSOLE: + ret = xencomm_create( + xen_guest_handle(kern_op.u.readconsole.buffer), + kern_op.u.readconsole.count, + &desc, GFP_KERNEL); + set_xen_guest_handle(kern_op.u.readconsole.buffer, + (void *)__pa(desc)); + break; + case DOM0_GETPAGEFRAMEINFO2: + ret = xencomm_create( + xen_guest_handle(kern_op.u.getpageframeinfo2.array), + kern_op.u.getpageframeinfo2.num, + &desc, GFP_KERNEL); + set_xen_guest_handle(kern_op.u.getpageframeinfo2.array, + (void *)__pa(desc)); + break; + case DOM0_PERFCCONTROL: + ret = xencomm_create( + xen_guest_handle(kern_op.u.perfccontrol.desc), + kern_op.u.perfccontrol.nr_counters * + sizeof(dom0_perfc_desc_t), + &desc, GFP_KERNEL); + set_xen_guest_handle(kern_op.u.perfccontrol.desc, + (void *)__pa(desc)); + break; + case DOM0_GETVCPUCONTEXT: + ret = xencomm_create( + xen_guest_handle(kern_op.u.getvcpucontext.ctxt), + sizeof(vcpu_guest_context_t), + &desc, GFP_KERNEL); + set_xen_guest_handle(kern_op.u.getvcpucontext.ctxt, + (void *)__pa(desc)); + break; + case DOM0_GETDOMAININFOLIST: + ret = xencomm_create( + xen_guest_handle(kern_op.u.getdomaininfolist.buffer), + kern_op.u.getdomaininfolist.num_domains * + sizeof(dom0_getdomaininfo_t), + &desc, GFP_KERNEL); + set_xen_guest_handle(kern_op.u.getdomaininfolist.buffer, + (void *)__pa(desc)); + break; + case DOM0_PHYSICAL_MEMORY_MAP: + ret = xencomm_create( + xen_guest_handle(kern_op.u.physical_memory_map.memory_map), + kern_op.u.physical_memory_map.nr_map_entries * + sizeof(struct dom0_memory_map_entry), + &desc, GFP_KERNEL); + set_xen_guest_handle(kern_op.u.physical_memory_map.memory_map, + (void *)__pa(desc)); + break; + + case DOM0_SCHEDCTL: + case DOM0_ADJUSTDOM: + case DOM0_CREATEDOMAIN: + case DOM0_DESTROYDOMAIN: + case DOM0_PAUSEDOMAIN: + case DOM0_UNPAUSEDOMAIN: + case DOM0_GETDOMAININFO: + case DOM0_MSR: + case DOM0_SETTIME: + case DOM0_GETPAGEFRAMEINFO: + case DOM0_SETVCPUAFFINITY: + case DOM0_TBUFCONTROL: + case DOM0_PHYSINFO: + case DOM0_SCHED_ID: + case DOM0_SETDOMAINMAXMEM: + case DOM0_ADD_MEMTYPE: + case DOM0_DEL_MEMTYPE: + case DOM0_READ_MEMTYPE: + case DOM0_IOPORT_PERMISSION: + case DOM0_GETVCPUINFO: + case DOM0_PLATFORM_QUIRK: + case DOM0_MAX_VCPUS: + case DOM0_SETDOMAINHANDLE: + case DOM0_SETDEBUGGING: + /* no munging needed */ + break; + + default: + /* unknown */ + ret = -ENOSYS; + } + if (ret) { if (ret != -ENOSYS) { /* error mapping the nested pointer */ @@ -158,14 +181,17 @@ static int xenppc_privcmd_memory_op(priv case XENMEM_increase_reservation: case XENMEM_decrease_reservation: { struct xencomm_desc *desc = NULL; - if (kern_op.extent_start) { - ret = xencomm_create(kern_op.extent_start, - kern_op.nr_extents * sizeof(*kern_op.extent_start), - &desc, GFP_KERNEL); + if (xen_guest_handle(kern_op.extent_start)) { + ret = xencomm_create( + xen_guest_handle(kern_op.extent_start), + kern_op.nr_extents * + sizeof(*xen_guest_handle(kern_op.extent_start)), + &desc, GFP_KERNEL); if (ret) goto out; - kern_op.extent_start = (void *)__pa(desc); + set_xen_guest_handle(kern_op.extent_start, + (void *)__pa(desc)); } ret = plpar_hcall_norets(XEN_MARK(hypercall->op), hypercall->arg[0], _______________________________________________ Xen-ppc-devel mailing list Xen-ppc-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-ppc-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |