diff options
author | marius <marius@FreeBSD.org> | 2013-03-02 15:54:02 +0000 |
---|---|---|
committer | marius <marius@FreeBSD.org> | 2013-03-02 15:54:02 +0000 |
commit | 718767a4c14c83d5f90369c0de970ccf9c3c7ad4 (patch) | |
tree | f7dd567cb2d498aec711421f68180359a3c6a8db /sys/dev | |
parent | 44df97db57f445ae083991d3b0923763985673d5 (diff) | |
download | FreeBSD-src-718767a4c14c83d5f90369c0de970ccf9c3c7ad4.zip FreeBSD-src-718767a4c14c83d5f90369c0de970ccf9c3c7ad4.tar.gz |
- Complete r231621 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.
MFC after: 1 week
Diffstat (limited to 'sys/dev')
-rw-r--r-- | sys/dev/pci/pci.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/sys/dev/pci/pci.c b/sys/dev/pci/pci.c index 649a494..79d5e57 100644 --- a/sys/dev/pci/pci.c +++ b/sys/dev/pci/pci.c @@ -234,10 +234,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 @@ -3643,11 +3644,11 @@ pci_print_child(device_t dev, device_t child) 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"}, @@ -3739,8 +3740,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. @@ -3773,7 +3775,6 @@ pci_probe_nomatch(device_t dev, device_t child) 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; } /* |