aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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) {