* [PATCH 0 of 5] xen device driver updates
@ 2008-05-30 23:50 Jeremy Fitzhardinge
2008-05-30 23:50 ` [PATCH 1 of 5] xen/blkfront: Make sure we don't use bounce buffers, we don't need them Jeremy Fitzhardinge
` (4 more replies)
0 siblings, 5 replies; 9+ messages in thread
From: Jeremy Fitzhardinge @ 2008-05-30 23:50 UTC (permalink / raw)
To: Jeff Garzik; +Cc: Jens Axboe, LKML
Hi,
This is a series of cleanups to xen-blkfront, xen-netfront and xenbus.
They're mostly changes imported from the linux-2.6.18-xen repo because
they looked like they would be useful.
Thanks,
J
drivers/block/xen-blkfront.c | 48 ++++++++++++++++++++++++++---
drivers/net/xen-netfront.c | 4 +-
drivers/xen/xenbus/xenbus_client.c | 2 -
drivers/xen/xenbus/xenbus_xs.c | 10 +++---
4 files changed, 52 insertions(+), 12 deletions(-)
^ permalink raw reply [flat|nested] 9+ messages in thread* [PATCH 1 of 5] xen/blkfront: Make sure we don't use bounce buffers, we don't need them 2008-05-30 23:50 [PATCH 0 of 5] xen device driver updates Jeremy Fitzhardinge @ 2008-05-30 23:50 ` Jeremy Fitzhardinge 2008-05-30 23:50 ` [PATCH 2 of 5] xn/blkfront: Add the CDROM_GET_CAPABILITY ioctl to blkfront Jeremy Fitzhardinge ` (3 subsequent siblings) 4 siblings, 0 replies; 9+ messages in thread From: Jeremy Fitzhardinge @ 2008-05-30 23:50 UTC (permalink / raw) To: Jeff Garzik; +Cc: Jens Axboe, LKML From: Ian Campbell <ian.campbell@xensource.com> [ linux-2.6.18-xen changeset 667228bf8fc5 ] Signed-off-by: Ian Campbell <ian.campbell@xensource.com> Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> --- drivers/block/xen-blkfront.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c --- a/drivers/block/xen-blkfront.c +++ b/drivers/block/xen-blkfront.c @@ -324,6 +324,9 @@ /* Make sure buffer addresses are sector-aligned. */ blk_queue_dma_alignment(rq, 511); + /* Make sure we don't use bounce buffers. */ + blk_queue_bounce_limit(rq, BLK_BOUNCE_ANY); + gd->queue = rq; return 0; ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 2 of 5] xn/blkfront: Add the CDROM_GET_CAPABILITY ioctl to blkfront 2008-05-30 23:50 [PATCH 0 of 5] xen device driver updates Jeremy Fitzhardinge 2008-05-30 23:50 ` [PATCH 1 of 5] xen/blkfront: Make sure we don't use bounce buffers, we don't need them Jeremy Fitzhardinge @ 2008-05-30 23:50 ` Jeremy Fitzhardinge 2008-05-30 23:50 ` [PATCH 3 of 5] xen/blkfront: Make sure that the device is fully ready before allowing release Jeremy Fitzhardinge ` (2 subsequent siblings) 4 siblings, 0 replies; 9+ messages in thread From: Jeremy Fitzhardinge @ 2008-05-30 23:50 UTC (permalink / raw) To: Jeff Garzik; +Cc: Jens Axboe, LKML From: Christian Limpach <Christian.Limpach@xensource.com> Return 0 instead of -EINVAL if the blkfront device is a cdrom, i.e. had the VDISK_CDROM attribute. This allows udev's cdrom_id to correctly detect the device as a cdrom device. [ Add blkif_ioctl, and CDROMMULTISESSION ] [ linux-2.6.18-xen changeset d2bd9af846b5 ] Signed-off-by: Christian Limpach <Christian.Limpach@xensource.com> Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> --- drivers/block/xen-blkfront.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c --- a/drivers/block/xen-blkfront.c +++ b/drivers/block/xen-blkfront.c @@ -38,6 +38,7 @@ #include <linux/interrupt.h> #include <linux/blkdev.h> #include <linux/hdreg.h> +#include <linux/cdrom.h> #include <linux/module.h> #include <xen/xenbus.h> @@ -150,6 +151,40 @@ hg->cylinders = cylinders; if ((sector_t)(hg->cylinders + 1) * hg->heads * hg->sectors < nsect) hg->cylinders = 0xffff; + return 0; +} + +int blkif_ioctl(struct inode *inode, struct file *filep, + unsigned command, unsigned long argument) +{ + struct blkfront_info *info = + inode->i_bdev->bd_disk->private_data; + int i; + + dev_dbg(&info->xbdev->dev, "command: 0x%x, argument: 0x%lx\n", + command, (long)argument); + + switch (command) { + case CDROMMULTISESSION: + dev_dbg(&info->xbdev->dev, "FIXME: support multisession CDs later\n"); + for (i = 0; i < sizeof(struct cdrom_multisession); i++) + if (put_user(0, (char __user *)(argument + i))) + return -EFAULT; + return 0; + + case CDROM_GET_CAPABILITY: { + struct gendisk *gd = info->gd; + if (gd->flags & GENHD_FL_CD) + return 0; + return -EINVAL; + } + + default: + /*printk(KERN_ALERT "ioctl %08x not supported by Xen blkdev\n", + command);*/ + return -EINVAL; /* same return as native Linux */ + } + return 0; } @@ -974,6 +1009,7 @@ .open = blkif_open, .release = blkif_release, .getgeo = blkif_getgeo, + .ioctl = blkif_ioctl, }; ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 3 of 5] xen/blkfront: Make sure that the device is fully ready before allowing release 2008-05-30 23:50 [PATCH 0 of 5] xen device driver updates Jeremy Fitzhardinge 2008-05-30 23:50 ` [PATCH 1 of 5] xen/blkfront: Make sure we don't use bounce buffers, we don't need them Jeremy Fitzhardinge 2008-05-30 23:50 ` [PATCH 2 of 5] xn/blkfront: Add the CDROM_GET_CAPABILITY ioctl to blkfront Jeremy Fitzhardinge @ 2008-05-30 23:50 ` Jeremy Fitzhardinge 2008-05-30 23:50 ` [PATCH 4 of 5] xen/blkfront: add __exit to module_exit() handlers Jeremy Fitzhardinge 2008-05-30 23:50 ` [PATCH 5 of 5] xen: Avoid allocations causing swap activity on the resume path Jeremy Fitzhardinge 4 siblings, 0 replies; 9+ messages in thread From: Jeremy Fitzhardinge @ 2008-05-30 23:50 UTC (permalink / raw) To: Jeff Garzik; +Cc: Jens Axboe, LKML From: Wim Colgate <wim@xensource.com> [ linux-2.6.18-xen changeset c1c57fea77e9 ] Signed-off-by: Wim Colgate <wim@xensource.com> Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> --- drivers/block/xen-blkfront.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c --- a/drivers/block/xen-blkfront.c +++ b/drivers/block/xen-blkfront.c @@ -997,7 +997,7 @@ struct xenbus_device *dev = info->xbdev; enum xenbus_state state = xenbus_read_driver_state(dev->otherend); - if (state == XenbusStateClosing) + if (state == XenbusStateClosing && info->is_ready) blkfront_closing(dev); } return 0; ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 4 of 5] xen/blkfront: add __exit to module_exit() handlers 2008-05-30 23:50 [PATCH 0 of 5] xen device driver updates Jeremy Fitzhardinge ` (2 preceding siblings ...) 2008-05-30 23:50 ` [PATCH 3 of 5] xen/blkfront: Make sure that the device is fully ready before allowing release Jeremy Fitzhardinge @ 2008-05-30 23:50 ` Jeremy Fitzhardinge 2008-05-30 23:50 ` [PATCH 5 of 5] xen: Avoid allocations causing swap activity on the resume path Jeremy Fitzhardinge 4 siblings, 0 replies; 9+ messages in thread From: Jeremy Fitzhardinge @ 2008-05-30 23:50 UTC (permalink / raw) To: Jeff Garzik; +Cc: Jens Axboe, LKML From: Jan Beulich <jbeulich@novell.com> Signed-off-by: Jan Beulich <jbeulich@novell.com> Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> --- drivers/block/xen-blkfront.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c --- a/drivers/block/xen-blkfront.c +++ b/drivers/block/xen-blkfront.c @@ -1045,7 +1045,7 @@ module_init(xlblk_init); -static void xlblk_exit(void) +static void __exit xlblk_exit(void) { return xenbus_unregister_driver(&blkfront); } ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 5 of 5] xen: Avoid allocations causing swap activity on the resume path 2008-05-30 23:50 [PATCH 0 of 5] xen device driver updates Jeremy Fitzhardinge ` (3 preceding siblings ...) 2008-05-30 23:50 ` [PATCH 4 of 5] xen/blkfront: add __exit to module_exit() handlers Jeremy Fitzhardinge @ 2008-05-30 23:50 ` Jeremy Fitzhardinge 4 siblings, 0 replies; 9+ messages in thread From: Jeremy Fitzhardinge @ 2008-05-30 23:50 UTC (permalink / raw) To: Jeff Garzik; +Cc: Jens Axboe, LKML From: Ian Campbell <ian.campbell@citrix.com> Avoid allocations causing swap activity on the resume path by allowing such allocations to access the emergency pools otherwise a save/restore/migration of a guest which is low on memory can deadlock. [ linux-2.6.18-xen changesets e8b49cfbdac, fdb998e79aba ] Signed-off-by: Ian Campbell <ian.campbell@citrix.com> Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> --- drivers/block/xen-blkfront.c | 5 +++-- drivers/net/xen-netfront.c | 4 ++-- drivers/xen/xenbus/xenbus_client.c | 2 +- drivers/xen/xenbus/xenbus_xs.c | 10 +++++----- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c --- a/drivers/block/xen-blkfront.c +++ b/drivers/block/xen-blkfront.c @@ -584,7 +584,7 @@ info->ring_ref = GRANT_INVALID_REF; - sring = (struct blkif_sring *)__get_free_page(GFP_KERNEL); + sring = (struct blkif_sring *)__get_free_page(GFP_KERNEL | __GFP_HIGH); if (!sring) { xenbus_dev_fatal(dev, -ENOMEM, "allocating shared ring"); return -ENOMEM; @@ -741,7 +741,8 @@ int j; /* Stage 1: Make a safe copy of the shadow state. */ - copy = kmalloc(sizeof(info->shadow), GFP_KERNEL); + copy = kmalloc(sizeof(info->shadow), + GFP_KERNEL | __GFP_NOFAIL | __GFP_HIGH); if (!copy) return -ENOMEM; memcpy(copy, info->shadow, sizeof(info->shadow)); diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c --- a/drivers/net/xen-netfront.c +++ b/drivers/net/xen-netfront.c @@ -1324,7 +1324,7 @@ goto fail; } - txs = (struct xen_netif_tx_sring *)get_zeroed_page(GFP_KERNEL); + txs = (struct xen_netif_tx_sring *)get_zeroed_page(GFP_KERNEL | __GFP_HIGH); if (!txs) { err = -ENOMEM; xenbus_dev_fatal(dev, err, "allocating tx ring page"); @@ -1340,7 +1340,7 @@ } info->tx_ring_ref = err; - rxs = (struct xen_netif_rx_sring *)get_zeroed_page(GFP_KERNEL); + rxs = (struct xen_netif_rx_sring *)get_zeroed_page(GFP_KERNEL | __GFP_HIGH); if (!rxs) { err = -ENOMEM; xenbus_dev_fatal(dev, err, "allocating rx ring page"); diff --git a/drivers/xen/xenbus/xenbus_client.c b/drivers/xen/xenbus/xenbus_client.c --- a/drivers/xen/xenbus/xenbus_client.c +++ b/drivers/xen/xenbus/xenbus_client.c @@ -117,7 +117,7 @@ char *path; va_start(ap, pathfmt); - path = kvasprintf(GFP_KERNEL, pathfmt, ap); + path = kvasprintf(GFP_KERNEL | __GFP_HIGH, pathfmt, ap); va_end(ap); if (!path) { diff --git a/drivers/xen/xenbus/xenbus_xs.c b/drivers/xen/xenbus/xenbus_xs.c --- a/drivers/xen/xenbus/xenbus_xs.c +++ b/drivers/xen/xenbus/xenbus_xs.c @@ -283,9 +283,9 @@ char *buffer; if (strlen(name) == 0) - buffer = kasprintf(GFP_KERNEL, "%s", dir); + buffer = kasprintf(GFP_KERNEL | __GFP_HIGH, "%s", dir); else - buffer = kasprintf(GFP_KERNEL, "%s/%s", dir, name); + buffer = kasprintf(GFP_KERNEL | __GFP_HIGH, "%s/%s", dir, name); return (!buffer) ? ERR_PTR(-ENOMEM) : buffer; } @@ -297,7 +297,7 @@ *num = count_strings(strings, len); /* Transfer to one big alloc for easy freeing. */ - ret = kmalloc(*num * sizeof(char *) + len, GFP_KERNEL); + ret = kmalloc(*num * sizeof(char *) + len, GFP_KERNEL | __GFP_HIGH); if (!ret) { kfree(strings); return ERR_PTR(-ENOMEM); @@ -751,7 +751,7 @@ } - msg = kmalloc(sizeof(*msg), GFP_KERNEL); + msg = kmalloc(sizeof(*msg), GFP_KERNEL | __GFP_HIGH); if (msg == NULL) { err = -ENOMEM; goto out; @@ -763,7 +763,7 @@ goto out; } - body = kmalloc(msg->hdr.len + 1, GFP_KERNEL); + body = kmalloc(msg->hdr.len + 1, GFP_KERNEL | __GFP_HIGH); if (body == NULL) { kfree(msg); err = -ENOMEM; ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 0 of 5] xen device driver updates [resend] @ 2008-05-31 0:01 Jeremy Fitzhardinge 2008-05-31 0:01 ` [PATCH 2 of 5] xn/blkfront: Add the CDROM_GET_CAPABILITY ioctl to blkfront Jeremy Fitzhardinge 0 siblings, 1 reply; 9+ messages in thread From: Jeremy Fitzhardinge @ 2008-05-31 0:01 UTC (permalink / raw) To: Jeff Garzik; +Cc: Jens Axboe, LKML Hi, [ Repost spelling Jeff's email addr properly. ] This is a series of cleanups to xen-blkfront, xen-netfront and xenbus. They're mostly changes imported from the linux-2.6.18-xen repo because they looked like they would be useful. Thanks, J drivers/block/xen-blkfront.c | 48 ++++++++++++++++++++++++++--- drivers/net/xen-netfront.c | 4 +- drivers/xen/xenbus/xenbus_client.c | 2 - drivers/xen/xenbus/xenbus_xs.c | 10 +++--- 4 files changed, 52 insertions(+), 12 deletions(-) ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 2 of 5] xn/blkfront: Add the CDROM_GET_CAPABILITY ioctl to blkfront 2008-05-31 0:01 [PATCH 0 of 5] xen device driver updates [resend] Jeremy Fitzhardinge @ 2008-05-31 0:01 ` Jeremy Fitzhardinge 2008-05-31 1:57 ` Jeff Garzik 0 siblings, 1 reply; 9+ messages in thread From: Jeremy Fitzhardinge @ 2008-05-31 0:01 UTC (permalink / raw) To: Jeff Garzik; +Cc: Jens Axboe, LKML From: Christian Limpach <Christian.Limpach@xensource.com> Return 0 instead of -EINVAL if the blkfront device is a cdrom, i.e. had the VDISK_CDROM attribute. This allows udev's cdrom_id to correctly detect the device as a cdrom device. [ Add blkif_ioctl, and CDROMMULTISESSION ] [ linux-2.6.18-xen changeset d2bd9af846b5 ] Signed-off-by: Christian Limpach <Christian.Limpach@xensource.com> Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> --- drivers/block/xen-blkfront.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c --- a/drivers/block/xen-blkfront.c +++ b/drivers/block/xen-blkfront.c @@ -38,6 +38,7 @@ #include <linux/interrupt.h> #include <linux/blkdev.h> #include <linux/hdreg.h> +#include <linux/cdrom.h> #include <linux/module.h> #include <xen/xenbus.h> @@ -150,6 +151,40 @@ hg->cylinders = cylinders; if ((sector_t)(hg->cylinders + 1) * hg->heads * hg->sectors < nsect) hg->cylinders = 0xffff; + return 0; +} + +int blkif_ioctl(struct inode *inode, struct file *filep, + unsigned command, unsigned long argument) +{ + struct blkfront_info *info = + inode->i_bdev->bd_disk->private_data; + int i; + + dev_dbg(&info->xbdev->dev, "command: 0x%x, argument: 0x%lx\n", + command, (long)argument); + + switch (command) { + case CDROMMULTISESSION: + dev_dbg(&info->xbdev->dev, "FIXME: support multisession CDs later\n"); + for (i = 0; i < sizeof(struct cdrom_multisession); i++) + if (put_user(0, (char __user *)(argument + i))) + return -EFAULT; + return 0; + + case CDROM_GET_CAPABILITY: { + struct gendisk *gd = info->gd; + if (gd->flags & GENHD_FL_CD) + return 0; + return -EINVAL; + } + + default: + /*printk(KERN_ALERT "ioctl %08x not supported by Xen blkdev\n", + command);*/ + return -EINVAL; /* same return as native Linux */ + } + return 0; } @@ -974,6 +1009,7 @@ .open = blkif_open, .release = blkif_release, .getgeo = blkif_getgeo, + .ioctl = blkif_ioctl, }; ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2 of 5] xn/blkfront: Add the CDROM_GET_CAPABILITY ioctl to blkfront 2008-05-31 0:01 ` [PATCH 2 of 5] xn/blkfront: Add the CDROM_GET_CAPABILITY ioctl to blkfront Jeremy Fitzhardinge @ 2008-05-31 1:57 ` Jeff Garzik 2008-05-31 7:08 ` Jeremy Fitzhardinge 0 siblings, 1 reply; 9+ messages in thread From: Jeff Garzik @ 2008-05-31 1:57 UTC (permalink / raw) To: Jeremy Fitzhardinge; +Cc: Jens Axboe, LKML Jeremy Fitzhardinge wrote: > + case CDROM_GET_CAPABILITY: { > + struct gendisk *gd = info->gd; > + if (gd->flags & GENHD_FL_CD) > + return 0; > + return -EINVAL; > + } Surely you can come up with a better implementation than this? It's just a bitmask returned to userspace... Jeff ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2 of 5] xn/blkfront: Add the CDROM_GET_CAPABILITY ioctl to blkfront 2008-05-31 1:57 ` Jeff Garzik @ 2008-05-31 7:08 ` Jeremy Fitzhardinge 0 siblings, 0 replies; 9+ messages in thread From: Jeremy Fitzhardinge @ 2008-05-31 7:08 UTC (permalink / raw) To: Jeff Garzik; +Cc: Jens Axboe, LKML Jeff Garzik wrote: > Jeremy Fitzhardinge wrote: >> + case CDROM_GET_CAPABILITY: { >> + struct gendisk *gd = info->gd; >> + if (gd->flags & GENHD_FL_CD) >> + return 0; >> + return -EINVAL; >> + } > > > Surely you can come up with a better implementation than this? It's > just a bitmask returned to userspace... Unfortunately the Xen block driver interface doesn't seem to pass through any capabilities of the underlying CDROM device, so there's not much to return. I suspect this is primarily a hack to make installers a bit happier installing off a Xen VBD rather than because real programs will use this in earnest. J ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2008-05-31 7:08 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2008-05-30 23:50 [PATCH 0 of 5] xen device driver updates Jeremy Fitzhardinge 2008-05-30 23:50 ` [PATCH 1 of 5] xen/blkfront: Make sure we don't use bounce buffers, we don't need them Jeremy Fitzhardinge 2008-05-30 23:50 ` [PATCH 2 of 5] xn/blkfront: Add the CDROM_GET_CAPABILITY ioctl to blkfront Jeremy Fitzhardinge 2008-05-30 23:50 ` [PATCH 3 of 5] xen/blkfront: Make sure that the device is fully ready before allowing release Jeremy Fitzhardinge 2008-05-30 23:50 ` [PATCH 4 of 5] xen/blkfront: add __exit to module_exit() handlers Jeremy Fitzhardinge 2008-05-30 23:50 ` [PATCH 5 of 5] xen: Avoid allocations causing swap activity on the resume path Jeremy Fitzhardinge -- strict thread matches above, loose matches on Subject: below -- 2008-05-31 0:01 [PATCH 0 of 5] xen device driver updates [resend] Jeremy Fitzhardinge 2008-05-31 0:01 ` [PATCH 2 of 5] xn/blkfront: Add the CDROM_GET_CAPABILITY ioctl to blkfront Jeremy Fitzhardinge 2008-05-31 1:57 ` Jeff Garzik 2008-05-31 7:08 ` Jeremy Fitzhardinge
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox