svn commit: r256757 - stable/10/sys/dev/xen/blkfront
Justin T. Gibbs
gibbs at FreeBSD.org
Fri Oct 18 22:48:38 UTC 2013
Author: gibbs
Date: Fri Oct 18 22:48:38 2013
New Revision: 256757
URL: http://svnweb.freebsd.org/changeset/base/256757
Log:
MFC: r256425
Centralize the detection logic for the Hyper-V hypervisor.
Submitted by: Roger Pau Monné
Sponsored by: Citrix Systems R&D
Reviewed by: gibbs, grehan
Approved by: re (gjb)
sys/sys/systm.h:
* Add a new VM_GUEST type, VM_GUEST_HV (HyperV guest).
sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c:
sys/dev/hyperv/vmbus/hv_hv.c:
sys/dev/hyperv/stordisengage/hv_ata_pci_disengage.c:
* Set vm_guest to VM_GUEST_HV and use that on other HyperV related
devices instead of cloning the cpuid hypervisor check.
* Cleanup the vmbus_identify function.
Modified:
stable/10/sys/dev/xen/blkfront/blkfront.c
Directory Properties:
stable/10/sys/ (props changed)
Modified: stable/10/sys/dev/xen/blkfront/blkfront.c
==============================================================================
--- stable/10/sys/dev/xen/blkfront/blkfront.c Fri Oct 18 22:47:10 2013 (r256756)
+++ stable/10/sys/dev/xen/blkfront/blkfront.c Fri Oct 18 22:48:38 2013 (r256757)
@@ -1381,14 +1381,42 @@ xbd_closing(device_t dev)
static int
xbd_probe(device_t dev)
{
+ if (strcmp(xenbus_get_type(dev), "vbd") != 0)
+ return (ENXIO);
- if (!strcmp(xenbus_get_type(dev), "vbd")) {
- device_set_desc(dev, "Virtual Block Device");
- device_quiet(dev);
- return (0);
+ if (xen_hvm_domain()) {
+ int error;
+ char *type;
+
+ /*
+ * When running in an HVM domain, IDE disk emulation is
+ * disabled early in boot so that native drivers will
+ * not see emulated hardware. However, CDROM device
+ * emulation cannot be disabled.
+ *
+ * Through use of FreeBSD's vm_guest and xen_hvm_domain()
+ * APIs, we could modify the native CDROM driver to fail its
+ * probe when running under Xen. Unfortunatlely, the PV
+ * CDROM support in XenServer (up through at least version
+ * 6.2) isn't functional, so we instead rely on the emulated
+ * CDROM instance, and fail to attach the PV one here in
+ * the blkfront driver.
+ */
+ error = xs_read(XST_NIL, xenbus_get_node(dev),
+ "device-type", NULL, (void **) &type);
+ if (error)
+ return (ENXIO);
+
+ if (strncmp(type, "cdrom", 5) == 0) {
+ free(type, M_XENSTORE);
+ return (ENXIO);
+ }
+ free(type, M_XENSTORE);
}
- return (ENXIO);
+ device_set_desc(dev, "Virtual Block Device");
+ device_quiet(dev);
+ return (0);
}
/*
More information about the svn-src-stable
mailing list