[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] Add support for multiple devices when using grant tables.



# HG changeset patch
# User cl349@xxxxxxxxxxxxxxxxxxxx
# Node ID f22bbccf64ff3ebe781b96e2bad11c06583a10fb
# Parent  7570087c2552e221af20c27e4a9e143636dce236
Add support for multiple devices when using grant tables.
Also better support non-transactional store updates.
Also remove some extra printks.
Signed-off-by: Christian Limpach <Christian.Limpach@xxxxxxxxxxxx>

diff -r 7570087c2552 -r f22bbccf64ff 
linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c
--- a/linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c      Fri Aug 19 
10:46:21 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c      Fri Aug 19 
10:47:48 2005
@@ -84,6 +84,7 @@
 #define MAXIMUM_OUTSTANDING_BLOCK_REQS \
     (BLKIF_MAX_SEGMENTS_PER_REQUEST * BLKIF_RING_SIZE)
 #define GRANTREF_INVALID (1<<15)
+static int shmem_ref;
 #endif
 
 static struct blk_shadow {
@@ -1168,6 +1169,16 @@
        SHARED_RING_INIT(sring);
        FRONT_RING_INIT(&blk_ring, sring, PAGE_SIZE);
 
+#ifdef CONFIG_XEN_BLKDEV_GRANT
+       shmem_ref = gnttab_claim_grant_reference(&gref_head,
+                                                gref_terminal);
+       ASSERT(shmem_ref != -ENOSPC);
+       gnttab_grant_foreign_access_ref(shmem_ref,
+                                       backend_id,
+                                       virt_to_machine(blk_ring.sring)
+                                       >> PAGE_SHIFT, 0);
+#endif
+
        op.u.alloc_unbound.dom = backend_id;
        err = HYPERVISOR_event_channel_op(&op);
        if (err) {
@@ -1191,14 +1202,22 @@
        backend = xenbus_read(dev->nodename, "backend", NULL);
        if (IS_ERR(backend)) {
                err = PTR_ERR(backend);
+               if (err == -ENOENT)
+                       goto out;
                xenbus_dev_error(dev, err, "reading %s/backend",
                                 dev->nodename);
                goto out;
        }
+       if (strlen(backend) == 0) {
+               err = -ENOENT;
+               goto free_backend;
+       }
 
        /* FIXME: This driver can't handle backends on different
         * domains.  Check and fail gracefully. */
        err = xenbus_scanf(dev->nodename, "backend-id", "%i", &backend_id);
+       if (err == -ENOENT)
+               goto free_backend;
        if (err < 0) {
                xenbus_dev_error(dev, err, "reading %s/backend-id",
                                 dev->nodename);
@@ -1219,20 +1238,10 @@
        }
 
 #ifdef CONFIG_XEN_BLKDEV_GRANT
-       {
-               int shmem_ref;
-               shmem_ref = gnttab_claim_grant_reference(&gref_head,
-                                                        gref_terminal);
-               ASSERT(shmem_ref != -ENOSPC);
-               gnttab_grant_foreign_access_ref(shmem_ref,
-                                               backend_id,
-                                               virt_to_machine(blk_ring.sring)
-                                               >> PAGE_SHIFT, 0);
-               err = xenbus_printf(dev->nodename, "grant-id","%u", shmem_ref);
-               if (err) {
-                       message = "writing grant-id";
-                       goto abort_transaction;
-               }
+       err = xenbus_printf(dev->nodename, "grant-id","%u", shmem_ref);
+       if (err) {
+               message = "writing grant-id";
+               goto abort_transaction;
        }
 #else
        err = xenbus_printf(dev->nodename, "shared-frame", "%lu",
@@ -1292,6 +1301,8 @@
 
        /* FIXME: Use dynamic device id if this is not set. */
        err = xenbus_scanf(dev->nodename, "virtual-device", "%i", &vdevice);
+       if (err == -ENOENT)
+               return err;
        if (err < 0) {
                xenbus_dev_error(dev, err, "reading virtual-device");
                return err;
@@ -1325,7 +1336,6 @@
 {
        struct blkfront_info *info = dev->data;
 
-       printk("blkfront_remove %s\n", dev->dev.bus_id);
        if (info->backend)
                unregister_xenbus_watch(&info->watch);
 
@@ -1339,7 +1349,6 @@
        if (--blkif_vbds == 0)
                blkif_free();
 
-       printk("blkfront_remove done\n");
        return 0;
 }
 

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


 


Rackspace

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