svn commit: r313020 - head/sys/dev/cxgbe
John Baldwin
jhb at FreeBSD.org
Tue Jan 31 18:54:15 UTC 2017
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 at 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);
More information about the svn-src-head
mailing list