Lines Matching refs:ctx

899 static void c4iw_dealloc(struct uld_ctx *ctx)  in c4iw_dealloc()  argument
901 c4iw_rdev_close(&ctx->dev->rdev); in c4iw_dealloc()
902 idr_destroy(&ctx->dev->cqidr); in c4iw_dealloc()
903 idr_destroy(&ctx->dev->qpidr); in c4iw_dealloc()
904 idr_destroy(&ctx->dev->mmidr); in c4iw_dealloc()
905 idr_destroy(&ctx->dev->hwtid_idr); in c4iw_dealloc()
906 idr_destroy(&ctx->dev->stid_idr); in c4iw_dealloc()
907 idr_destroy(&ctx->dev->atid_idr); in c4iw_dealloc()
908 if (ctx->dev->rdev.bar2_kva) in c4iw_dealloc()
909 iounmap(ctx->dev->rdev.bar2_kva); in c4iw_dealloc()
910 if (ctx->dev->rdev.oc_mw_kva) in c4iw_dealloc()
911 iounmap(ctx->dev->rdev.oc_mw_kva); in c4iw_dealloc()
912 ib_dealloc_device(&ctx->dev->ibdev); in c4iw_dealloc()
913 ctx->dev = NULL; in c4iw_dealloc()
916 static void c4iw_remove(struct uld_ctx *ctx) in c4iw_remove() argument
918 PDBG("%s c4iw_dev %p\n", __func__, ctx->dev); in c4iw_remove()
919 c4iw_unregister_device(ctx->dev); in c4iw_remove()
920 c4iw_dealloc(ctx); in c4iw_remove()
1037 struct uld_ctx *ctx; in c4iw_uld_add() local
1045 ctx = kzalloc(sizeof *ctx, GFP_KERNEL); in c4iw_uld_add()
1046 if (!ctx) { in c4iw_uld_add()
1047 ctx = ERR_PTR(-ENOMEM); in c4iw_uld_add()
1050 ctx->lldi = *infop; in c4iw_uld_add()
1053 __func__, pci_name(ctx->lldi.pdev), in c4iw_uld_add()
1054 ctx->lldi.nchan, ctx->lldi.nrxq, in c4iw_uld_add()
1055 ctx->lldi.ntxq, ctx->lldi.nports); in c4iw_uld_add()
1058 list_add_tail(&ctx->entry, &uld_ctx_list); in c4iw_uld_add()
1061 for (i = 0; i < ctx->lldi.nrxq; i++) in c4iw_uld_add()
1062 PDBG("rxqid[%u] %u\n", i, ctx->lldi.rxq_ids[i]); in c4iw_uld_add()
1064 return ctx; in c4iw_uld_add()
1133 struct uld_ctx *ctx = handle; in c4iw_uld_rx_handler() local
1134 struct c4iw_dev *dev = ctx->dev; in c4iw_uld_rx_handler()
1159 pci_name(ctx->lldi.pdev), gl->va, in c4iw_uld_rx_handler()
1188 struct uld_ctx *ctx = handle; in c4iw_uld_state_change() local
1193 printk(KERN_INFO MOD "%s: Up\n", pci_name(ctx->lldi.pdev)); in c4iw_uld_state_change()
1194 if (!ctx->dev) { in c4iw_uld_state_change()
1197 ctx->dev = c4iw_alloc(&ctx->lldi); in c4iw_uld_state_change()
1198 if (IS_ERR(ctx->dev)) { in c4iw_uld_state_change()
1201 pci_name(ctx->lldi.pdev), in c4iw_uld_state_change()
1202 PTR_ERR(ctx->dev)); in c4iw_uld_state_change()
1203 ctx->dev = NULL; in c4iw_uld_state_change()
1206 ret = c4iw_register_device(ctx->dev); in c4iw_uld_state_change()
1210 pci_name(ctx->lldi.pdev), ret); in c4iw_uld_state_change()
1211 c4iw_dealloc(ctx); in c4iw_uld_state_change()
1217 pci_name(ctx->lldi.pdev)); in c4iw_uld_state_change()
1218 if (ctx->dev) in c4iw_uld_state_change()
1219 c4iw_remove(ctx); in c4iw_uld_state_change()
1223 pci_name(ctx->lldi.pdev)); in c4iw_uld_state_change()
1224 if (ctx->dev) { in c4iw_uld_state_change()
1227 ctx->dev->rdev.flags |= T4_FATAL_ERROR; in c4iw_uld_state_change()
1230 event.device = &ctx->dev->ibdev; in c4iw_uld_state_change()
1232 c4iw_remove(ctx); in c4iw_uld_state_change()
1237 pci_name(ctx->lldi.pdev)); in c4iw_uld_state_change()
1238 if (ctx->dev) in c4iw_uld_state_change()
1239 c4iw_remove(ctx); in c4iw_uld_state_change()
1253 static void stop_queues(struct uld_ctx *ctx) in stop_queues() argument
1257 spin_lock_irqsave(&ctx->dev->lock, flags); in stop_queues()
1258 ctx->dev->rdev.stats.db_state_transitions++; in stop_queues()
1259 ctx->dev->db_state = STOPPED; in stop_queues()
1260 if (ctx->dev->rdev.flags & T4_STATUS_PAGE_DISABLED) in stop_queues()
1261 idr_for_each(&ctx->dev->qpidr, disable_qp_db, NULL); in stop_queues()
1263 ctx->dev->rdev.status_page->db_off = 1; in stop_queues()
1264 spin_unlock_irqrestore(&ctx->dev->lock, flags); in stop_queues()
1287 static void resume_a_chunk(struct uld_ctx *ctx) in resume_a_chunk() argument
1293 qp = list_first_entry(&ctx->dev->db_fc_list, struct c4iw_qp, in resume_a_chunk()
1297 if (list_empty(&ctx->dev->db_fc_list)) in resume_a_chunk()
1302 static void resume_queues(struct uld_ctx *ctx) in resume_queues() argument
1304 spin_lock_irq(&ctx->dev->lock); in resume_queues()
1305 if (ctx->dev->db_state != STOPPED) in resume_queues()
1307 ctx->dev->db_state = FLOW_CONTROL; in resume_queues()
1309 if (list_empty(&ctx->dev->db_fc_list)) { in resume_queues()
1310 WARN_ON(ctx->dev->db_state != FLOW_CONTROL); in resume_queues()
1311 ctx->dev->db_state = NORMAL; in resume_queues()
1312 ctx->dev->rdev.stats.db_state_transitions++; in resume_queues()
1313 if (ctx->dev->rdev.flags & T4_STATUS_PAGE_DISABLED) { in resume_queues()
1314 idr_for_each(&ctx->dev->qpidr, enable_qp_db, in resume_queues()
1317 ctx->dev->rdev.status_page->db_off = 0; in resume_queues()
1321 if (cxgb4_dbfifo_count(ctx->dev->rdev.lldi.ports[0], 1) in resume_queues()
1322 < (ctx->dev->rdev.lldi.dbfifo_int_thresh << in resume_queues()
1324 resume_a_chunk(ctx); in resume_queues()
1326 if (!list_empty(&ctx->dev->db_fc_list)) { in resume_queues()
1327 spin_unlock_irq(&ctx->dev->lock); in resume_queues()
1332 spin_lock_irq(&ctx->dev->lock); in resume_queues()
1333 if (ctx->dev->db_state != FLOW_CONTROL) in resume_queues()
1339 if (ctx->dev->db_state != NORMAL) in resume_queues()
1340 ctx->dev->rdev.stats.db_fc_interruptions++; in resume_queues()
1341 spin_unlock_irq(&ctx->dev->lock); in resume_queues()
1374 static void recover_lost_dbs(struct uld_ctx *ctx, struct qp_list *qp_list) in recover_lost_dbs() argument
1392 pci_name(ctx->lldi.pdev), qp->wq.sq.qid); in recover_lost_dbs()
1408 pci_name(ctx->lldi.pdev), qp->wq.rq.qid); in recover_lost_dbs()
1425 static void recover_queues(struct uld_ctx *ctx) in recover_queues() argument
1436 ret = cxgb4_flush_eq_cache(ctx->dev->rdev.lldi.ports[0]); in recover_queues()
1439 pci_name(ctx->lldi.pdev)); in recover_queues()
1444 spin_lock_irq(&ctx->dev->lock); in recover_queues()
1445 WARN_ON(ctx->dev->db_state != STOPPED); in recover_queues()
1446 ctx->dev->db_state = RECOVERY; in recover_queues()
1447 idr_for_each(&ctx->dev->qpidr, count_qps, &count); in recover_queues()
1452 pci_name(ctx->lldi.pdev)); in recover_queues()
1453 spin_unlock_irq(&ctx->dev->lock); in recover_queues()
1459 idr_for_each(&ctx->dev->qpidr, add_and_ref_qp, &qp_list); in recover_queues()
1461 spin_unlock_irq(&ctx->dev->lock); in recover_queues()
1464 recover_lost_dbs(ctx, &qp_list); in recover_queues()
1470 spin_lock_irq(&ctx->dev->lock); in recover_queues()
1471 WARN_ON(ctx->dev->db_state != RECOVERY); in recover_queues()
1472 ctx->dev->db_state = STOPPED; in recover_queues()
1473 spin_unlock_irq(&ctx->dev->lock); in recover_queues()
1478 struct uld_ctx *ctx = handle; in c4iw_uld_control() local
1482 stop_queues(ctx); in c4iw_uld_control()
1483 ctx->dev->rdev.stats.db_full++; in c4iw_uld_control()
1486 resume_queues(ctx); in c4iw_uld_control()
1487 mutex_lock(&ctx->dev->rdev.stats.lock); in c4iw_uld_control()
1488 ctx->dev->rdev.stats.db_empty++; in c4iw_uld_control()
1489 mutex_unlock(&ctx->dev->rdev.stats.lock); in c4iw_uld_control()
1492 recover_queues(ctx); in c4iw_uld_control()
1493 mutex_lock(&ctx->dev->rdev.stats.lock); in c4iw_uld_control()
1494 ctx->dev->rdev.stats.db_drop++; in c4iw_uld_control()
1495 mutex_unlock(&ctx->dev->rdev.stats.lock); in c4iw_uld_control()
1499 pci_name(ctx->lldi.pdev), control); in c4iw_uld_control()
1547 struct uld_ctx *ctx, *tmp; in c4iw_exit_module() local
1550 list_for_each_entry_safe(ctx, tmp, &uld_ctx_list, entry) { in c4iw_exit_module()
1551 if (ctx->dev) in c4iw_exit_module()
1552 c4iw_remove(ctx); in c4iw_exit_module()
1553 kfree(ctx); in c4iw_exit_module()