提交 b98a409b 编写于 作者: S Stefano Stabellini 提交者: Jeremy Fitzhardinge

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: NStefano Stabellini <stefano.stabellini@eu.citrix.com>
上级 c7f52cdc
...@@ -738,8 +738,11 @@ static int blkfront_probe(struct xenbus_device *dev, ...@@ -738,8 +738,11 @@ static int blkfront_probe(struct xenbus_device *dev,
} }
} }
if (xen_hvm_domain()) {
char *type;
int len;
/* no unplug has been done: do not hook devices != xen vbds */ /* no unplug has been done: do not hook devices != xen vbds */
if (xen_hvm_domain() && (xen_platform_pci_unplug & XEN_UNPLUG_IGNORE)) { if (xen_platform_pci_unplug & XEN_UNPLUG_IGNORE) {
int major; int major;
if (!VDEV_IS_EXTENDED(vdevice)) if (!VDEV_IS_EXTENDED(vdevice))
...@@ -754,6 +757,16 @@ static int blkfront_probe(struct xenbus_device *dev, ...@@ -754,6 +757,16 @@ static int blkfront_probe(struct xenbus_device *dev,
return -ENODEV; return -ENODEV;
} }
} }
/* do not create a PV cdrom device if we are an HVM guest */
type = xenbus_read(XBT_NIL, dev->nodename, "device-type", &len);
if (IS_ERR(type))
return -ENODEV;
if (strncmp(type, "cdrom", 5) == 0) {
kfree(type);
return -ENODEV;
}
kfree(type);
}
info = kzalloc(sizeof(*info), GFP_KERNEL); info = kzalloc(sizeof(*info), GFP_KERNEL);
if (!info) { if (!info) {
xenbus_dev_fatal(dev, -ENOMEM, "allocating info structure"); xenbus_dev_fatal(dev, -ENOMEM, "allocating info structure");
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册