diff options
author | Frank Haverkamp <haver@linux.vnet.ibm.com> | 2014-09-10 10:37:46 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2014-09-24 02:15:46 -0400 |
commit | 95a8825c9c3482e31ee5064184138a18be186515 (patch) | |
tree | 4d0e262dfdb5797c0fc18f895d1eed00aaafaed9 | |
parent | ffdbb715fa0c53203b1ea2a6ecc54bdcc8951612 (diff) |
GenWQE: Check pci_get_totalvfs return code
Currently the driver is using the pci_get_totalvfs() return code
directly in a loop. To avoid problems with potentially negative
returns in case of errors, we are adding some more sanity checking
code.
Signed-off-by: Frank Haverkamp <haver@linux.vnet.ibm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/misc/genwqe/card_base.c | 9 | ||||
-rw-r--r-- | drivers/misc/genwqe/card_base.h | 2 |
2 files changed, 9 insertions, 2 deletions
diff --git a/drivers/misc/genwqe/card_base.c b/drivers/misc/genwqe/card_base.c index 43bbabc96b6c..070a55c36101 100644 --- a/drivers/misc/genwqe/card_base.c +++ b/drivers/misc/genwqe/card_base.c | |||
@@ -346,8 +346,13 @@ static bool genwqe_setup_vf_jtimer(struct genwqe_dev *cd) | |||
346 | unsigned int vf; | 346 | unsigned int vf; |
347 | u32 T = genwqe_T_psec(cd); | 347 | u32 T = genwqe_T_psec(cd); |
348 | u64 x; | 348 | u64 x; |
349 | int totalvfs; | ||
349 | 350 | ||
350 | for (vf = 0; vf < pci_sriov_get_totalvfs(pci_dev); vf++) { | 351 | totalvfs = pci_sriov_get_totalvfs(pci_dev); |
352 | if (totalvfs <= 0) | ||
353 | return false; | ||
354 | |||
355 | for (vf = 0; vf < totalvfs; vf++) { | ||
351 | 356 | ||
352 | if (cd->vf_jobtimeout_msec[vf] == 0) | 357 | if (cd->vf_jobtimeout_msec[vf] == 0) |
353 | continue; | 358 | continue; |
@@ -1125,6 +1130,8 @@ static int genwqe_pci_setup(struct genwqe_dev *cd) | |||
1125 | } | 1130 | } |
1126 | 1131 | ||
1127 | cd->num_vfs = pci_sriov_get_totalvfs(pci_dev); | 1132 | cd->num_vfs = pci_sriov_get_totalvfs(pci_dev); |
1133 | if (cd->num_vfs < 0) | ||
1134 | cd->num_vfs = 0; | ||
1128 | 1135 | ||
1129 | err = genwqe_read_ids(cd); | 1136 | err = genwqe_read_ids(cd); |
1130 | if (err) | 1137 | if (err) |
diff --git a/drivers/misc/genwqe/card_base.h b/drivers/misc/genwqe/card_base.h index 67abd8cb2247..37657d6228de 100644 --- a/drivers/misc/genwqe/card_base.h +++ b/drivers/misc/genwqe/card_base.h | |||
@@ -306,7 +306,7 @@ struct genwqe_dev { | |||
306 | struct pci_dev *pci_dev; /* PCI device */ | 306 | struct pci_dev *pci_dev; /* PCI device */ |
307 | void __iomem *mmio; /* BAR-0 MMIO start */ | 307 | void __iomem *mmio; /* BAR-0 MMIO start */ |
308 | unsigned long mmio_len; | 308 | unsigned long mmio_len; |
309 | u16 num_vfs; | 309 | int num_vfs; |
310 | u32 vf_jobtimeout_msec[GENWQE_MAX_VFS]; | 310 | u32 vf_jobtimeout_msec[GENWQE_MAX_VFS]; |
311 | int is_privileged; /* access to all regs possible */ | 311 | int is_privileged; /* access to all regs possible */ |
312 | 312 | ||