aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block
diff options
context:
space:
mode:
authorStefano Stabellini <stefano.stabellini@eu.citrix.com>2010-07-29 09:53:16 -0400
committerJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>2010-07-29 14:11:08 -0400
commitb98a409b80ac510c95b4f1bafdef28edaeabd3e7 (patch)
tree2c109585fa1354eae60e739a67955b4176cd3eac /drivers/block
parentc7f52cdc2f3e1733d3864e439ac2e92edd99ef31 (diff)
blkfront: do not create a PV cdrom device if xen_hvm_guest
It is not possible to unplug emulated cdrom devices, and PV cdroms don't handle media insert, eject and stream, so we are better off disabling PV cdroms when running as a Xen HVM guest. Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Diffstat (limited to 'drivers/block')
-rw-r--r--drivers/block/xen-blkfront.c39
1 files changed, 26 insertions, 13 deletions
diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
index 6eb2989a9d0a..f63ac3d1f8a4 100644
--- a/drivers/block/xen-blkfront.c
+++ b/drivers/block/xen-blkfront.c
@@ -738,21 +738,34 @@ static int blkfront_probe(struct xenbus_device *dev,
738 } 738 }
739 } 739 }
740 740
741 /* no unplug has been done: do not hook devices != xen vbds */ 741 if (xen_hvm_domain()) {
742 if (xen_hvm_domain() && (xen_platform_pci_unplug & XEN_UNPLUG_IGNORE)) { 742 char *type;
743 int major; 743 int len;
744 744 /* no unplug has been done: do not hook devices != xen vbds */
745 if (!VDEV_IS_EXTENDED(vdevice)) 745 if (xen_platform_pci_unplug & XEN_UNPLUG_IGNORE) {
746 major = BLKIF_MAJOR(vdevice); 746 int major;
747 else 747
748 major = XENVBD_MAJOR; 748 if (!VDEV_IS_EXTENDED(vdevice))
749 749 major = BLKIF_MAJOR(vdevice);
750 if (major != XENVBD_MAJOR) { 750 else
751 printk(KERN_INFO 751 major = XENVBD_MAJOR;
752 "%s: HVM does not support vbd %d as xen block device\n", 752
753 __FUNCTION__, vdevice); 753 if (major != XENVBD_MAJOR) {
754 printk(KERN_INFO
755 "%s: HVM does not support vbd %d as xen block device\n",
756 __FUNCTION__, vdevice);
757 return -ENODEV;
758 }
759 }
760 /* do not create a PV cdrom device if we are an HVM guest */
761 type = xenbus_read(XBT_NIL, dev->nodename, "device-type", &len);
762 if (IS_ERR(type))
763 return -ENODEV;
764 if (strncmp(type, "cdrom", 5) == 0) {
765 kfree(type);
754 return -ENODEV; 766 return -ENODEV;
755 } 767 }
768 kfree(type);
756 } 769 }
757 info = kzalloc(sizeof(*info), GFP_KERNEL); 770 info = kzalloc(sizeof(*info), GFP_KERNEL);
758 if (!info) { 771 if (!info) {