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 <da...@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-unsubscr...@freebsd.org"

Reply via email to