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-changelog

[Xen-changelog] [linux-2.6.18-xen] merge with linux-2.6.18-xen.hg (stagi

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [linux-2.6.18-xen] merge with linux-2.6.18-xen.hg (staging)
From: "Xen patchbot-linux-2.6.18-xen" <patchbot-linux-2.6.18-xen@xxxxxxxxxxxxxxxxxxx>
Date: Tue, 11 Sep 2007 15:31:08 -0700
Delivery-date: Tue, 11 Sep 2007 15:35:49 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Alex Williamson <alex.williamson@xxxxxx>
# Date 1189101958 21600
# Node ID d796a96253a23957b61b07c73301768da6f970ec
# Parent  438379d47b24feb72cdd7457f377358d828d1c2a
# Parent  f30b59f550c2ac03734c7a8cb63f658f16ca087a
merge with linux-2.6.18-xen.hg (staging)
---
 drivers/xen/core/xencomm.c    |   57 +++++++++++++++++++++++++++++++-----------
 drivers/xen/evtchn/evtchn.c   |    6 ++--
 drivers/xen/gntdev/gntdev.c   |    8 ++---
 drivers/xen/netfront/accel.c  |   12 +++++++-
 drivers/xen/privcmd/privcmd.c |    8 ++---
 5 files changed, 64 insertions(+), 27 deletions(-)

diff -r 438379d47b24 -r d796a96253a2 drivers/xen/core/xencomm.c
--- a/drivers/xen/core/xencomm.c        Thu Sep 06 09:09:53 2007 -0600
+++ b/drivers/xen/core/xencomm.c        Thu Sep 06 12:05:58 2007 -0600
@@ -68,25 +68,54 @@ static int xencomm_init(struct xencomm_d
        return 0;
 }
 
-/* XXX use slab allocator */
-static struct xencomm_desc *xencomm_alloc(gfp_t gfp_mask)
-{
-       struct xencomm_desc *desc;
-
-       desc = (struct xencomm_desc *)__get_free_page(gfp_mask);
-       if (desc == NULL)
-               return NULL;
-
-       desc->nr_addrs = (PAGE_SIZE - sizeof(struct xencomm_desc)) /
+static struct xencomm_desc *xencomm_alloc(gfp_t gfp_mask,
+                                         void *buffer, unsigned long bytes)
+{
+       struct xencomm_desc *desc;
+       unsigned long buffer_ulong = (unsigned long)buffer;
+       unsigned long start = buffer_ulong & PAGE_MASK;
+       unsigned long end = (buffer_ulong + bytes) | ~PAGE_MASK;
+       unsigned long nr_addrs = (end - start + 1) >> PAGE_SHIFT;
+       unsigned long size = sizeof(*desc) +
+               sizeof(desc->address[0]) * nr_addrs;
+
+       /*
+        * slab allocator returns at least sizeof(void*) aligned pointer.
+        * When sizeof(*desc) > sizeof(void*), struct xencomm_desc might
+        * cross page boundary.
+        */
+       if (sizeof(*desc) > sizeof(void*)) {
+               unsigned long order = get_order(size);
+               desc = (struct xencomm_desc *)__get_free_pages(gfp_mask,
+                                                              order);
+               if (desc == NULL)
+                       return NULL;
+
+               desc->nr_addrs =
+                       ((PAGE_SIZE << order) - sizeof(struct xencomm_desc)) /
                        sizeof(*desc->address);
-
+       } else {
+               desc = kmalloc(size, gfp_mask);
+               if (desc == NULL)
+                       return NULL;
+
+               desc->nr_addrs = nr_addrs;
+       }
        return desc;
 }
 
 void xencomm_free(struct xencomm_handle *desc)
 {
-       if (desc && !((ulong)desc & XENCOMM_INLINE_FLAG))
-               free_page((unsigned long)__va(desc));
+       if (desc && !((ulong)desc & XENCOMM_INLINE_FLAG)) {
+               struct xencomm_desc *desc__ = (struct xencomm_desc*)desc;
+               if (sizeof(*desc__) > sizeof(void*)) {
+                       unsigned long size = sizeof(*desc__) +
+                               sizeof(desc__->address[0]) * desc__->nr_addrs;
+                       unsigned long order = get_order(size);
+                       free_pages((unsigned long)__va(desc), order);
+               } else
+                       kfree(__va(desc));
+       }
 }
 
 static int xencomm_create(void *buffer, unsigned long bytes, struct 
xencomm_desc **ret, gfp_t gfp_mask)
@@ -105,7 +134,7 @@ static int xencomm_create(void *buffer, 
 
        BUG_ON(buffer == NULL); /* 'bytes' is non-zero */
 
-       desc = xencomm_alloc(gfp_mask);
+       desc = xencomm_alloc(gfp_mask, buffer, bytes);
        if (!desc) {
                printk("%s failure\n", "xencomm_alloc");
                return -ENOMEM;
diff -r 438379d47b24 -r d796a96253a2 drivers/xen/evtchn/evtchn.c
--- a/drivers/xen/evtchn/evtchn.c       Thu Sep 06 09:09:53 2007 -0600
+++ b/drivers/xen/evtchn/evtchn.c       Thu Sep 06 12:05:58 2007 -0600
@@ -208,8 +208,8 @@ static void evtchn_bind_to_user(struct p
        spin_unlock_irq(&port_user_lock);
 }
 
-static int evtchn_ioctl(struct inode *inode, struct file *file,
-                       unsigned int cmd, unsigned long arg)
+static long evtchn_ioctl(struct file *file,
+                        unsigned int cmd, unsigned long arg)
 {
        int rc;
        struct per_user_data *u = file->private_data;
@@ -423,7 +423,7 @@ static const struct file_operations evtc
        .owner   = THIS_MODULE,
        .read    = evtchn_read,
        .write   = evtchn_write,
-       .ioctl   = evtchn_ioctl,
+       .unlocked_ioctl = evtchn_ioctl,
        .poll    = evtchn_poll,
        .fasync  = evtchn_fasync,
        .open    = evtchn_open,
diff -r 438379d47b24 -r d796a96253a2 drivers/xen/gntdev/gntdev.c
--- a/drivers/xen/gntdev/gntdev.c       Thu Sep 06 09:09:53 2007 -0600
+++ b/drivers/xen/gntdev/gntdev.c       Thu Sep 06 12:05:58 2007 -0600
@@ -133,7 +133,7 @@ static int gntdev_open(struct inode *ino
 static int gntdev_open(struct inode *inode, struct file *flip);
 static int gntdev_release(struct inode *inode, struct file *flip);
 static int gntdev_mmap(struct file *flip, struct vm_area_struct *vma);
-static int gntdev_ioctl (struct inode *inode, struct file *flip,
+static long gntdev_ioctl(struct file *flip,
                         unsigned int cmd, unsigned long arg);
 
 static struct file_operations gntdev_fops = {
@@ -141,7 +141,7 @@ static struct file_operations gntdev_fop
        .open = gntdev_open,
        .release = gntdev_release,
        .mmap = gntdev_mmap,
-       .ioctl = gntdev_ioctl
+       .unlocked_ioctl = gntdev_ioctl
 };
 
 /* VM operations. */
@@ -774,8 +774,8 @@ static void gntdev_vma_close(struct vm_a
 
 /* Called when an ioctl is made on the device.
  */
-static int gntdev_ioctl(struct inode *inode, struct file *flip,
-                       unsigned int cmd, unsigned long arg)
+static long gntdev_ioctl(struct file *flip,
+                        unsigned int cmd, unsigned long arg)
 {
        int rc = 0;
        gntdev_file_private_data_t *private_data = 
diff -r 438379d47b24 -r d796a96253a2 drivers/xen/netfront/accel.c
--- a/drivers/xen/netfront/accel.c      Thu Sep 06 09:09:53 2007 -0600
+++ b/drivers/xen/netfront/accel.c      Thu Sep 06 12:05:58 2007 -0600
@@ -45,6 +45,14 @@
 #define WPRINTK(fmt, args...)                          \
        printk(KERN_WARNING "netfront/accel: " fmt, ##args)
 
+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 5)
+#define kref_init(x,y) kref_init(x,y)
+#define kref_put(x,y)  kref_put(x)
+#else
+#define kref_init(x,y) kref_init(x)
+#define kref_put(x,y)  kref_put(x,y)
+#endif
+
 /*
  * List of all netfront accelerator plugin modules available.  Each
  * list entry is of type struct netfront_accelerator.
@@ -176,7 +184,7 @@ accelerator_set_vif_state_hooks(struct n
         */
        kref_get(&vif_state->np->accelerator->accel_kref);
        /* This persists until vif_state->hooks are cleared */
-       kref_init(&vif_state->vif_kref);
+       kref_init(&vif_state->vif_kref, vif_kref_release);
 
        /* Make sure there are no data path operations going on */
        netif_poll_disable(vif_state->np->netdev);
@@ -318,7 +326,7 @@ accelerator_probe_vifs(struct netfront_a
         * persist until the accelerator hooks are removed (e.g. by
         * accelerator module unload)
         */
-       kref_init(&accelerator->accel_kref);
+       kref_init(&accelerator->accel_kref, accel_kref_release);
 
        /* 
         * Store the hooks for future calls to probe a new device, and
diff -r 438379d47b24 -r d796a96253a2 drivers/xen/privcmd/privcmd.c
--- a/drivers/xen/privcmd/privcmd.c     Thu Sep 06 09:09:53 2007 -0600
+++ b/drivers/xen/privcmd/privcmd.c     Thu Sep 06 12:05:58 2007 -0600
@@ -37,8 +37,8 @@ static int privcmd_enforce_singleshot_ma
 static int privcmd_enforce_singleshot_mapping(struct vm_area_struct *vma);
 #endif
 
-static int privcmd_ioctl(struct inode *inode, struct file *file,
-                        unsigned int cmd, unsigned long data)
+static long privcmd_ioctl(struct file *file,
+                         unsigned int cmd, unsigned long data)
 {
        int ret = -ENOSYS;
        void __user *udata = (void __user *) data;
@@ -250,8 +250,8 @@ static int privcmd_enforce_singleshot_ma
 #endif
 
 static const struct file_operations privcmd_file_ops = {
-       .ioctl = privcmd_ioctl,
-       .mmap  = privcmd_mmap,
+       .unlocked_ioctl = privcmd_ioctl,
+       .mmap = privcmd_mmap,
 };
 
 static int capabilities_read(char *page, char **start, off_t off,

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

<Prev in Thread] Current Thread [Next in Thread>