[prev in list] [next in list] [prev in thread] [next in thread] 

List:       freebsd-commits-all
Subject:    svn commit: r313020 - head/sys/dev/cxgbe
From:       John Baldwin <jhb () FreeBSD ! org>
Date:       2017-01-31 18:54:14
Message-ID: 201701311854.v0VIsEUO021094 () repo ! freebsd ! org
[Download RAW message or body]

Author: jhb
Date: Tue Jan 31 18:54:13 2017
New Revision: 313020
URL: https://svnweb.freebsd.org/changeset/base/313020

Log:
  Fix a couple of issues with t4iov probe and attach.
  
  - Check for Chelsio vendor ID in probe routines.
  - Fail attach instead of faulting if pci_find_dbsf() doesn't find a
    device.
  
  PR:		216539
  Reported by:	asomers
  Tested by:	Dave Baukus <daveb@spectralogic.com>
  MFC after:	3 days
  Sponsored by:	Chelsio Communications

Modified:
  head/sys/dev/cxgbe/t4_iov.c

Modified: head/sys/dev/cxgbe/t4_iov.c
==============================================================================
--- head/sys/dev/cxgbe/t4_iov.c	Tue Jan 31 16:12:31 2017	(r313019)
+++ head/sys/dev/cxgbe/t4_iov.c	Tue Jan 31 18:54:13 2017	(r313020)
@@ -41,6 +41,7 @@ __FBSDID("$FreeBSD$");
 #include <dev/pci/pci_iov.h>
 #endif
 
+#include "common/common.h"
 #include "t4_if.h"
 
 struct t4iov_softc {
@@ -106,6 +107,9 @@ t4iov_probe(device_t dev)
 	uint16_t d;
 	size_t i;
 
+	if (pci_get_vendor(dev) != PCI_VENDOR_ID_CHELSIO)
+		return (ENXIO);
+
 	d = pci_get_device(dev);
 	for (i = 0; i < nitems(t4iov_pciids); i++) {
 		if (d == t4iov_pciids[i].device) {
@@ -123,6 +127,9 @@ t5iov_probe(device_t dev)
 	uint16_t d;
 	size_t i;
 
+	if (pci_get_vendor(dev) != PCI_VENDOR_ID_CHELSIO)
+		return (ENXIO);
+
 	d = pci_get_device(dev);
 	for (i = 0; i < nitems(t5iov_pciids); i++) {
 		if (d == t5iov_pciids[i].device) {
@@ -140,6 +147,9 @@ t6iov_probe(device_t dev)
 	uint16_t d;
 	size_t i;
 
+	if (pci_get_vendor(dev) != PCI_VENDOR_ID_CHELSIO)
+		return (ENXIO);
+
 	d = pci_get_device(dev);
 	for (i = 0; i < nitems(t6iov_pciids); i++) {
 		if (d == t6iov_pciids[i].device) {
@@ -161,6 +171,8 @@ t4iov_attach(device_t dev)
 
 	sc->sc_main = pci_find_dbsf(pci_get_domain(dev), pci_get_bus(dev),
 	    pci_get_slot(dev), 4);
+	if (sc->sc_main == NULL)
+		return (ENXIO);
 	if (T4_IS_MAIN_READY(sc->sc_main) == 0)
 		return (t4iov_attach_child(dev));
 	return (0);
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic