[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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |