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; |
