WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-ppc-devel

[XenPPC] [pushed][ppc] xencomm needs to controll how it uses Linux page

To: xen-ppc-devel@xxxxxxxxxxxxxxxxxxx
Subject: [XenPPC] [pushed][ppc] xencomm needs to controll how it uses Linux page allocations
From: jimix@xxxxxxxxxxxxxx
Date: Mon, 27 Mar 2006 16:56:22 -0500
Delivery-date: Mon, 27 Mar 2006 21:55:54 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-ppc-devel-request@lists.xensource.com?subject=help>
List-id: Xen PPC development <xen-ppc-devel.lists.xensource.com>
List-post: <mailto:xen-ppc-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-ppc-devel>, <mailto:xen-ppc-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-ppc-devel>, <mailto:xen-ppc-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-ppc-devel-bounces@xxxxxxxxxxxxxxxxxxx
changeset:   22038:05a141988d9e
user:        jimix@xxxxxxxxxxxxxxxxxxxxx
date:        Thu Mar 23 16:41:49 2006 -0500
summary:     [ppc] xencomm needs to controll how it uses Linux page allocations

diff -r 95fc918cb989 -r 05a141988d9e arch/powerpc/platforms/xen/hcall.c
--- a/arch/powerpc/platforms/xen/hcall.c        Tue Mar 14 21:06:23 2006 -0500
+++ b/arch/powerpc/platforms/xen/hcall.c        Thu Mar 23 16:41:49 2006 -0500
@@ -1,6 +1,7 @@
 #include <linux/types.h>
 #include <linux/errno.h>
 #include <linux/kernel.h>
+#include <linux/gfp.h>
 #include <xen/interface/xen.h>
 #include <xen/interface/dom0_ops.h>
 #include <xen/interface/memory.h>
@@ -27,7 +28,8 @@ static int xenppc_privcmd_dom0_op(privcm
        if (kern_op.interface_version != DOM0_INTERFACE_VERSION)
                return -EACCES;
 
-       ret = xencomm_create(&kern_op, sizeof(dom0_op_t), &op_desc);
+       ret = xencomm_create(&kern_op, sizeof(dom0_op_t),
+                            &op_desc, GFP_KERNEL);
        if (ret)
                return ret;
 
@@ -35,50 +37,54 @@ static int xenppc_privcmd_dom0_op(privcm
                case DOM0_GETMEMLIST:
                        ret = xencomm_create(kern_op.u.getmemlist.buffer,
                                                kern_op.u.getmemlist.max_pfns * 
sizeof(unsigned long),
-                                               &desc);
+                                               &desc, GFP_KERNEL);
                        kern_op.u.getmemlist.buffer = (void *)__pa(desc);
                        break;
 #ifdef THIS_WAS_SUCH_A_GOOD_IDEA
                case DOM0_SETDOMAININFO:
                        ret = xencomm_create(kern_op.u.setdomaininfo.ctxt,
-                                               sizeof(vcpu_guest_context_t), 
&desc);
+                                            sizeof(vcpu_guest_context_t),
+                                            &desc, GFP_KERNEL);
                        kern_op.u.setdomaininfo.ctxt = (void *)__pa(desc);
                        break;
 #endif
                case DOM0_READCONSOLE:
                        ret = xencomm_create(kern_op.u.readconsole.buffer,
-                                               kern_op.u.readconsole.count, 
&desc);
+                                            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);
+                                            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);
+                                            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);
+                                            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);
+                                            
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);
+                                            
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;
 
@@ -147,7 +153,8 @@ static int xenppc_privcmd_memory_op(priv
        if (copy_from_user(&kern_op, user_op, sizeof(xen_memory_reservation_t)))
                return -EFAULT;
 
-       ret = xencomm_create(&kern_op, sizeof(xen_memory_reservation_t), 
&op_desc);
+       ret = xencomm_create(&kern_op, sizeof(xen_memory_reservation_t),
+                            &op_desc, GFP_KERNEL);
        if (ret)
                return ret;
 
@@ -157,8 +164,8 @@ static int xenppc_privcmd_memory_op(priv
                        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);
+                                                    kern_op.nr_extents * 
sizeof(*kern_op.extent_start),
+                                                    &desc, GFP_KERNEL);
                                if (ret)
                                        goto out;
 
diff -r 95fc918cb989 -r 05a141988d9e drivers/xen/core/xencomm.c
--- a/drivers/xen/core/xencomm.c        Tue Mar 14 21:06:23 2006 -0500
+++ b/drivers/xen/core/xencomm.c        Thu Mar 23 16:41:49 2006 -0500
@@ -91,12 +91,12 @@ static int __xencomm_init(struct xencomm
 }
 
 /* XXX use slab allocator */
-struct xencomm_desc *xencomm_alloc(void)
+static struct xencomm_desc *xencomm_alloc(gfp_t gfp_mask)
 {
        struct xencomm_desc *desc;
 
        /* XXX could we call this from irq context? */
-       desc = (struct xencomm_desc *)__get_free_page(GFP_KERNEL);
+       desc = (struct xencomm_desc *)__get_free_page(gfp_mask);
        desc->nr_addrs = (PAGE_SIZE - sizeof(struct xencomm_desc)) /
                        sizeof(*desc->address);
 
@@ -109,7 +109,7 @@ void xencomm_free(struct xencomm_desc *d
                free_page((unsigned long)desc);
 }
 
-int xencomm_create(void *buffer, unsigned long bytes, struct xencomm_desc 
**ret)
+int xencomm_create(void *buffer, unsigned long bytes, struct xencomm_desc 
**ret, gfp_t gfp_mask)
 {
        struct xencomm_desc *desc;
        int rc;
@@ -122,7 +122,7 @@ int xencomm_create(void *buffer, unsigne
                printk("%s: %p[%ld]\n", __func__, buffer, bytes);
        }
 
-       desc = xencomm_alloc();
+       desc = xencomm_alloc(gfp_mask);
        if (!desc) {
                printk("%s failure\n", "xencomm_alloc");
                return -ENOMEM;
diff -r 95fc918cb989 -r 05a141988d9e include/asm-powerpc/xen/asm/hypercall.h
--- a/include/asm-powerpc/xen/asm/hypercall.h   Tue Mar 14 21:06:23 2006 -0500
+++ b/include/asm-powerpc/xen/asm/hypercall.h   Thu Mar 23 16:41:49 2006 -0500
@@ -66,7 +66,7 @@ static inline int HYPERVISOR_event_chann
        struct xencomm_desc *desc;
        int rc;
 
-       rc = xencomm_create(op, sizeof(evtchn_op_t), &desc);
+       rc = xencomm_create(op, sizeof(evtchn_op_t), &desc, GFP_ATOMIC);
        if (rc)
                return rc;
 
@@ -106,7 +106,7 @@ static inline int HYPERVISOR_xen_version
                        return -ENOSYS;
        }
 
-       rc = xencomm_create(arg, size, &desc);
+       rc = xencomm_create(arg, size, &desc, GFP_KERNEL);
        if (rc)
                return rc;
 
@@ -122,7 +122,7 @@ static inline int HYPERVISOR_physdev_op(
        struct xencomm_desc *desc;
        int rc;
 
-       rc = xencomm_create(op, sizeof(physdev_op_t), &desc);
+       rc = xencomm_create(op, sizeof(physdev_op_t), &desc, GFP_ATOMIC);
        if (rc)
                return rc;
 
diff -r 95fc918cb989 -r 05a141988d9e include/xen/xencomm.h
--- a/include/xen/xencomm.h     Tue Mar 14 21:06:23 2006 -0500
+++ b/include/xen/xencomm.h     Thu Mar 23 16:41:49 2006 -0500
@@ -27,9 +27,8 @@ struct xencomm_mini {
     uint64_t address[XENCOMM_MINI_ADDRS];
 };
 
-extern struct xencomm_desc *xencomm_alloc(void);
 extern int xencomm_create(void *buffer, unsigned long bytes,
-                       struct xencomm_desc **desc);
+                         struct xencomm_desc **desc, gfp_t type);
 extern void xencomm_free(struct xencomm_desc *desc);
 extern int xencomm_create_mini(void *area, int arealen, void *buffer,
             unsigned long bytes, struct xencomm_desc **ret);



_______________________________________________
Xen-ppc-devel mailing list
Xen-ppc-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ppc-devel

<Prev in Thread] Current Thread [Next in Thread>
  • [XenPPC] [pushed][ppc] xencomm needs to controll how it uses Linux page allocations, jimix <=