diff options
author | John Baldwin <jhb@FreeBSD.org> | 2016-09-30 01:13:57 +0000 |
---|---|---|
committer | John Baldwin <jhb@FreeBSD.org> | 2016-09-30 01:13:57 +0000 |
commit | 9dc94e3a9a13a6fdec903fe36550eea7f8ff0f4a (patch) | |
tree | 763970cf0e269dc2086a290e054643da6b5f13ae | |
parent | 54c2fd97dc077a96dc080acebf699503abd92f07 (diff) |
Notes
-rw-r--r-- | share/man/man4/pci.4 | 7 | ||||
-rw-r--r-- | sys/dev/pci/pci_user.c | 14 |
2 files changed, 10 insertions, 11 deletions
diff --git a/share/man/man4/pci.4 b/share/man/man4/pci.4 index 2cdc71b75634..7623a9a907d2 100644 --- a/share/man/man4/pci.4 +++ b/share/man/man4/pci.4 @@ -254,7 +254,8 @@ The status tells the user the disposition of his request for a device list. The possible status values are: .Bl -ohang .It PCI_GETCONF_LAST_DEVICE -This means that there are no more devices in the PCI device list after the +This means that there are no more devices in the PCI device list matching +the specified criteria after the ones returned in the .Va matches buffer. @@ -270,9 +271,7 @@ and to zero to start over at the beginning of the list. .It PCI_GETCONF_MORE_DEVS This tells the user that his buffer was not large enough to hold all of the -remaining devices in the device list that possibly match his criteria. -It is possible for this status to be returned, even when none of the remaining -devices in the list would match the user's criteria. +remaining devices in the device list that match his criteria. .It PCI_GETCONF_ERROR This indicates a general error while servicing the user's request. If the diff --git a/sys/dev/pci/pci_user.c b/sys/dev/pci/pci_user.c index f5a921a75ff1..dba76d130aa5 100644 --- a/sys/dev/pci/pci_user.c +++ b/sys/dev/pci/pci_user.c @@ -708,10 +708,9 @@ pci_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *t * Go through the list of devices and copy out the devices * that match the user's criteria. */ - for (cio->num_matches = 0, error = 0, i = 0, + for (cio->num_matches = 0, i = 0, dinfo = STAILQ_FIRST(devlist_head); - (dinfo != NULL) && (cio->num_matches < ionum) && - (error == 0) && (i < pci_numdevs); + dinfo != NULL; dinfo = STAILQ_NEXT(dinfo, pci_links), i++) { if (i < cio->offset) @@ -833,11 +832,12 @@ pci_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *t } else #endif /* PRE7_COMPAT */ confdata = &dinfo->conf; - /* Only if we can copy it out do we count it. */ - if (!(error = copyout(confdata, + error = copyout(confdata, (caddr_t)cio->matches + - confsz * cio->num_matches, confsz))) - cio->num_matches++; + confsz * cio->num_matches, confsz); + if (error) + break; + cio->num_matches++; } } |