svn commit: r248054 - stable/7/sys/dev/pci

Marius Strobl marius at FreeBSD.org
Fri Mar 8 12:59:07 UTC 2013


Author: marius
Date: Fri Mar  8 12:59:06 2013
New Revision: 248054
URL: http://svnweb.freebsd.org/changeset/base/248054

Log:
  MFC: r247632
  
  - Complete r231621 (MFC'ed to stable/7 in r232094) 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/7/sys/dev/pci/pci.c
Directory Properties:
  stable/7/sys/   (props changed)

Modified: stable/7/sys/dev/pci/pci.c
==============================================================================
--- stable/7/sys/dev/pci/pci.c	Fri Mar  8 12:58:25 2013	(r248053)
+++ stable/7/sys/dev/pci/pci.c	Fri Mar  8 12:59:06 2013	(r248054)
@@ -215,10 +215,11 @@ static const struct pci_quirk const pci_
 	{ 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
@@ -3053,11 +3054,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"},
@@ -3149,8 +3150,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.
@@ -3183,7 +3185,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, (struct pci_devinfo *)device_get_ivars(child), 1);
-	return;
 }
 
 /*


More information about the svn-src-all mailing list