svn commit: r299000 - head/sys/dev/pci
John Baldwin
jhb at FreeBSD.org
Tue May 3 19:37:26 UTC 2016
Author: jhb
Date: Tue May 3 19:37:25 2016
New Revision: 299000
URL: https://svnweb.freebsd.org/changeset/base/299000
Log:
Use the correct location of the SRIOV capability when enabling ARI.
While here, check if ARI was enabled by re-reading the config register
after writing it and return an error if the write fails.
Reviewed by: rstone, vangyzen
Modified:
head/sys/dev/pci/pci_iov.c
Modified: head/sys/dev/pci/pci_iov.c
==============================================================================
--- head/sys/dev/pci/pci_iov.c Tue May 3 18:54:20 2016 (r298999)
+++ head/sys/dev/pci/pci_iov.c Tue May 3 19:37:25 2016 (r299000)
@@ -442,6 +442,7 @@ pci_iov_set_ari(device_t bus)
}
}
}
+ free(devlist, M_TEMP);
/*
* If we called this function some device must have the SR-IOV
@@ -451,10 +452,14 @@ pci_iov_set_ari(device_t bus)
("Could not find child of %s with SR-IOV capability",
device_get_nameunit(bus)));
- iov_ctl = pci_read_config(lowest, iov_pos + PCIR_SRIOV_CTL, 2);
+ iov_ctl = pci_read_config(lowest, lowest_pos + PCIR_SRIOV_CTL, 2);
iov_ctl |= PCIM_SRIOV_ARI_EN;
- pci_write_config(lowest, iov_pos + PCIR_SRIOV_CTL, iov_ctl, 2);
- free(devlist, M_TEMP);
+ pci_write_config(lowest, lowest_pos + PCIR_SRIOV_CTL, iov_ctl, 2);
+ if ((pci_read_config(lowest, lowest_pos + PCIR_SRIOV_CTL, 2) &
+ PCIM_SRIOV_ARI_EN) == 0) {
+ device_printf(lowest, "failed to enable ARI\n");
+ return (ENXIO);
+ }
return (0);
}
More information about the svn-src-head
mailing list