Author: grehan
Date: Thu Sep 19 02:34:52 2013
New Revision: 255686
URL: http://svnweb.freebsd.org/changeset/base/255686

Log:
  Reorder the hypervisor presence test to avoid claiming ATA disks
  on non hyperv systems.
  
  Reviewed by:  neel, abgupta at microsoft dot com
  Approved by:  re@ (hrs)

Modified:
  head/sys/dev/hyperv/stordisengage/hv_ata_pci_disengage.c

Modified: head/sys/dev/hyperv/stordisengage/hv_ata_pci_disengage.c
==============================================================================
--- head/sys/dev/hyperv/stordisengage/hv_ata_pci_disengage.c    Thu Sep 19 
02:02:15 2013        (r255685)
+++ head/sys/dev/hyperv/stordisengage/hv_ata_pci_disengage.c    Thu Sep 19 
02:34:52 2013        (r255686)
@@ -92,8 +92,17 @@ static int hv_check_for_hyper_v(void);
 static int
 hv_ata_pci_probe(device_t dev)
 {
-       int ata_disk_enable = 0;
-       if(bootverbose)
+       int ata_disk_enable;
+
+       ata_disk_enable = 0;
+
+       /*
+        * Don't probe if not running in a Hyper-V environment
+        */
+       if (!hv_check_for_hyper_v())
+               return (ENXIO);
+
+       if (bootverbose)
                device_printf(dev,
                    "hv_ata_pci_probe dev_class/subslcass = %d, %d\n",
                        pci_get_class(dev), pci_get_subclass(dev));
@@ -116,18 +125,15 @@ hv_ata_pci_probe(device_t dev)
         * ATA driver, the environment variable
         * hw_ata.disk_enable must be explicitly set to 1.
         */
-       if (hv_check_for_hyper_v()) {
-               if (getenv_int("hw.ata.disk_enable", &ata_disk_enable)) {
-                       if(bootverbose)
-                               device_printf(dev,
-                               "hw.ata.disk_enable flag is disabling Hyper-V"
-                               " ATA driver support\n");
+       if (getenv_int("hw.ata.disk_enable", &ata_disk_enable)) {
+               if(bootverbose)
+                       device_printf(dev,
+                           "hw.ata.disk_enable flag is disabling Hyper-V"
+                           " ATA driver support\n");
                        return (ENXIO);
-               }
-
        }
 
-       if(bootverbose)
+       if (bootverbose)
                device_printf(dev, "Hyper-V ATA storage driver enabled.\n");
 
        return (BUS_PROBE_VENDOR);
@@ -136,13 +142,15 @@ hv_ata_pci_probe(device_t dev)
 static int
 hv_ata_pci_attach(device_t dev)
 {
-       return 0;
+
+       return (0);
 }
 
 static int
 hv_ata_pci_detach(device_t dev)
 {
-       return 0;
+
+       return (0);
 }
 
 /**
@@ -153,42 +161,44 @@ static int
 hv_check_for_hyper_v(void)
 {
        u_int regs[4];
-       int hyper_v_detected = 0;
+       int hyper_v_detected;
+
+       hyper_v_detected = 0;
        do_cpuid(1, regs);
        if (regs[2] & 0x80000000) {
-               /* if(a hypervisor is detected) */
-               /* make sure this really is Hyper-V */
-               /* we look at the CPUID info */
+               /*
+                * if(a hypervisor is detected)
+                *  make sure this really is Hyper-V
+                */
                do_cpuid(HV_X64_MSR_GUEST_OS_ID, regs);
                hyper_v_detected =
                        regs[0] >= HV_X64_CPUID_MIN &&
                        regs[0] <= HV_X64_CPUID_MAX &&
                        !memcmp("Microsoft Hv", &regs[1], 12);
        }
+
        return (hyper_v_detected);
 }
 
 static device_method_t hv_ata_pci_methods[] = {
-    /* device interface */
-    DEVMETHOD(device_probe,    hv_ata_pci_probe),
-    DEVMETHOD(device_attach,   hv_ata_pci_attach),
-    DEVMETHOD(device_detach,   hv_ata_pci_detach),
-    DEVMETHOD(device_shutdown, bus_generic_shutdown),
+       /* device interface */
+       DEVMETHOD(device_probe, hv_ata_pci_probe),
+       DEVMETHOD(device_attach,        hv_ata_pci_attach),
+       DEVMETHOD(device_detach,        hv_ata_pci_detach),
+       DEVMETHOD(device_shutdown,      bus_generic_shutdown),
 
-    DEVMETHOD_END
+       DEVMETHOD_END
 };
 
 devclass_t hv_ata_pci_devclass;
 
 static driver_t hv_ata_pci_disengage_driver = {
-    "pciata-disable",
-    hv_ata_pci_methods,
-    sizeof(struct ata_pci_controller),
+       "pciata-disable",
+       hv_ata_pci_methods,
+       sizeof(struct ata_pci_controller),
 };
 
 DRIVER_MODULE(atapci_dis, pci, hv_ata_pci_disengage_driver,
                hv_ata_pci_devclass, NULL, NULL);
 MODULE_VERSION(atapci_dis, 1);
 MODULE_DEPEND(atapci_dis, ata, 1, 1, 1);
-
-
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to