diff options
Diffstat (limited to 'drivers/infiniband/hw/qib/qib_init.c')
-rw-r--r-- | drivers/infiniband/hw/qib/qib_init.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/drivers/infiniband/hw/qib/qib_init.c b/drivers/infiniband/hw/qib/qib_init.c index 9b40f345ac3f..a873dd596e81 100644 --- a/drivers/infiniband/hw/qib/qib_init.c +++ b/drivers/infiniband/hw/qib/qib_init.c | |||
@@ -1059,7 +1059,7 @@ static int __init qlogic_ib_init(void) | |||
1059 | goto bail_dev; | 1059 | goto bail_dev; |
1060 | } | 1060 | } |
1061 | 1061 | ||
1062 | qib_cq_wq = create_workqueue("qib_cq"); | 1062 | qib_cq_wq = create_singlethread_workqueue("qib_cq"); |
1063 | if (!qib_cq_wq) { | 1063 | if (!qib_cq_wq) { |
1064 | ret = -ENOMEM; | 1064 | ret = -ENOMEM; |
1065 | goto bail_wq; | 1065 | goto bail_wq; |
@@ -1289,8 +1289,18 @@ static int __devinit qib_init_one(struct pci_dev *pdev, | |||
1289 | 1289 | ||
1290 | if (qib_mini_init || initfail || ret) { | 1290 | if (qib_mini_init || initfail || ret) { |
1291 | qib_stop_timers(dd); | 1291 | qib_stop_timers(dd); |
1292 | flush_scheduled_work(); | ||
1292 | for (pidx = 0; pidx < dd->num_pports; ++pidx) | 1293 | for (pidx = 0; pidx < dd->num_pports; ++pidx) |
1293 | dd->f_quiet_serdes(dd->pport + pidx); | 1294 | dd->f_quiet_serdes(dd->pport + pidx); |
1295 | if (qib_mini_init) | ||
1296 | goto bail; | ||
1297 | if (!j) { | ||
1298 | (void) qibfs_remove(dd); | ||
1299 | qib_device_remove(dd); | ||
1300 | } | ||
1301 | if (!ret) | ||
1302 | qib_unregister_ib_device(dd); | ||
1303 | qib_postinit_cleanup(dd); | ||
1294 | if (initfail) | 1304 | if (initfail) |
1295 | ret = initfail; | 1305 | ret = initfail; |
1296 | goto bail; | 1306 | goto bail; |
@@ -1472,6 +1482,9 @@ int qib_setup_eagerbufs(struct qib_ctxtdata *rcd) | |||
1472 | dma_addr_t pa = rcd->rcvegrbuf_phys[chunk]; | 1482 | dma_addr_t pa = rcd->rcvegrbuf_phys[chunk]; |
1473 | unsigned i; | 1483 | unsigned i; |
1474 | 1484 | ||
1485 | /* clear for security and sanity on each use */ | ||
1486 | memset(rcd->rcvegrbuf[chunk], 0, size); | ||
1487 | |||
1475 | for (i = 0; e < egrcnt && i < egrperchunk; e++, i++) { | 1488 | for (i = 0; e < egrcnt && i < egrperchunk; e++, i++) { |
1476 | dd->f_put_tid(dd, e + egroff + | 1489 | dd->f_put_tid(dd, e + egroff + |
1477 | (u64 __iomem *) | 1490 | (u64 __iomem *) |
@@ -1499,6 +1512,12 @@ bail: | |||
1499 | return -ENOMEM; | 1512 | return -ENOMEM; |
1500 | } | 1513 | } |
1501 | 1514 | ||
1515 | /* | ||
1516 | * Note: Changes to this routine should be mirrored | ||
1517 | * for the diagnostics routine qib_remap_ioaddr32(). | ||
1518 | * There is also related code for VL15 buffers in qib_init_7322_variables(). | ||
1519 | * The teardown code that unmaps is in qib_pcie_ddcleanup() | ||
1520 | */ | ||
1502 | int init_chip_wc_pat(struct qib_devdata *dd, u32 vl15buflen) | 1521 | int init_chip_wc_pat(struct qib_devdata *dd, u32 vl15buflen) |
1503 | { | 1522 | { |
1504 | u64 __iomem *qib_kregbase = NULL; | 1523 | u64 __iomem *qib_kregbase = NULL; |