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);
 }
 
 /*
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to