[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.