aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrank Haverkamp <haver@linux.vnet.ibm.com>2014-09-10 10:37:46 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-09-24 02:15:46 -0400
commit95a8825c9c3482e31ee5064184138a18be186515 (patch)
tree4d0e262dfdb5797c0fc18f895d1eed00aaafaed9
parentffdbb715fa0c53203b1ea2a6ecc54bdcc8951612 (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.c9
-rw-r--r--drivers/misc/genwqe/card_base.h2
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