Author: marius
Date: Fri Mar  8 12:57:58 2013
New Revision: 248052
URL: http://svnweb.freebsd.org/changeset/base/248052

Log:
  MFC: r247632
  
  - Complete r231621 (MFC'ed to stable/9 in r232092) by also blacklisting the
    bridge used by VMware for PCIe devices. While at it, update the comment
    now that we know that MSI-X doesn't work with ESXi 5.1 for Intel 82576
    either and the underlying issue is a bug in the MSI-X allocation code of
    the hypervisor.
    Reported by: Harald Schmalzbauer
  - Make the nomatch table const.

Modified:
  stable/9/sys/dev/pci/pci.c
Directory Properties:
  stable/9/sys/   (props changed)
  stable/9/sys/dev/   (props changed)

Modified: stable/9/sys/dev/pci/pci.c
==============================================================================
--- stable/9/sys/dev/pci/pci.c  Fri Mar  8 12:52:57 2013        (r248051)
+++ stable/9/sys/dev/pci/pci.c  Fri Mar  8 12:57:58 2013        (r248052)
@@ -243,10 +243,11 @@ static const struct pci_quirk pci_quirks
        { 0x74501022, PCI_QUIRK_DISABLE_MSI,    0,      0 },
 
        /*
-        * MSI-X doesn't work with at least LSI SAS1068E passed through by
-        * VMware.
+        * MSI-X allocation doesn't work properly for devices passed through
+        * by VMware up to at least ESXi 5.1.
         */
-       { 0x079015ad, PCI_QUIRK_DISABLE_MSI,    0,      0 },
+       { 0x079015ad, PCI_QUIRK_DISABLE_MSI,    0,      0 }, /* PCI/PCI-X */
+       { 0x07a015ad, PCI_QUIRK_DISABLE_MSI,    0,      0 }, /* PCIe */
 
        /*
         * Some virtualization environments emulate an older chipset
@@ -3572,11 +3573,11 @@ pci_print_child(device_t dev, device_t c
        return (retval);
 }
 
-static struct
+static const struct
 {
-       int     class;
-       int     subclass;
-       char    *desc;
+       int             class;
+       int             subclass;
+       const char      *desc;
 } pci_nomatch_tab[] = {
        {PCIC_OLD,              -1,                     "old"},
        {PCIC_OLD,              PCIS_OLD_NONVGA,        "non-VGA display 
device"},
@@ -3668,8 +3669,9 @@ static struct
 void
 pci_probe_nomatch(device_t dev, device_t child)
 {
-       int     i;
-       char    *cp, *scp, *device;
+       int i;
+       const char *cp, *scp;
+       char *device;
 
        /*
         * Look for a listing for this device in a loaded device database.
@@ -3702,7 +3704,6 @@ pci_probe_nomatch(device_t dev, device_t
        printf(" at device %d.%d (no driver attached)\n",
            pci_get_slot(child), pci_get_function(child));
        pci_cfg_save(child, device_get_ivars(child), 1);
-       return;
 }
 
 /*
_______________________________________________
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