Lines Matching refs:smbdirect_mr
2268 struct smbd_mr *smbdirect_mr; in smbd_mr_recovery_work() local
2271 list_for_each_entry(smbdirect_mr, &info->mr_list, list) { in smbd_mr_recovery_work()
2272 if (smbdirect_mr->state == MR_INVALIDATED) in smbd_mr_recovery_work()
2274 info->id->device, smbdirect_mr->sgl, in smbd_mr_recovery_work()
2275 smbdirect_mr->sgl_count, in smbd_mr_recovery_work()
2276 smbdirect_mr->dir); in smbd_mr_recovery_work()
2277 else if (smbdirect_mr->state == MR_ERROR) { in smbd_mr_recovery_work()
2280 rc = ib_dereg_mr(smbdirect_mr->mr); in smbd_mr_recovery_work()
2289 smbdirect_mr->mr = ib_alloc_mr( in smbd_mr_recovery_work()
2292 if (IS_ERR(smbdirect_mr->mr)) { in smbd_mr_recovery_work()
2305 smbdirect_mr->state = MR_READY; in smbd_mr_recovery_work()
2344 struct smbd_mr *smbdirect_mr, *tmp; in allocate_mr_list() local
2354 smbdirect_mr = kzalloc(sizeof(*smbdirect_mr), GFP_KERNEL); in allocate_mr_list()
2355 if (!smbdirect_mr) in allocate_mr_list()
2357 smbdirect_mr->mr = ib_alloc_mr(info->pd, info->mr_type, in allocate_mr_list()
2359 if (IS_ERR(smbdirect_mr->mr)) { in allocate_mr_list()
2365 smbdirect_mr->sgl = kcalloc( in allocate_mr_list()
2369 if (!smbdirect_mr->sgl) { in allocate_mr_list()
2371 ib_dereg_mr(smbdirect_mr->mr); in allocate_mr_list()
2374 smbdirect_mr->state = MR_READY; in allocate_mr_list()
2375 smbdirect_mr->conn = info; in allocate_mr_list()
2377 list_add_tail(&smbdirect_mr->list, &info->mr_list); in allocate_mr_list()
2384 kfree(smbdirect_mr); in allocate_mr_list()
2386 list_for_each_entry_safe(smbdirect_mr, tmp, &info->mr_list, list) { in allocate_mr_list()
2387 ib_dereg_mr(smbdirect_mr->mr); in allocate_mr_list()
2388 kfree(smbdirect_mr->sgl); in allocate_mr_list()
2389 kfree(smbdirect_mr); in allocate_mr_list()
2453 struct smbd_mr *smbdirect_mr; in smbd_register_mr() local
2464 smbdirect_mr = get_mr(info); in smbd_register_mr()
2465 if (!smbdirect_mr) { in smbd_register_mr()
2469 smbdirect_mr->need_invalidate = need_invalidate; in smbd_register_mr()
2470 smbdirect_mr->sgl_count = num_pages; in smbd_register_mr()
2471 sg_init_table(smbdirect_mr->sgl, num_pages); in smbd_register_mr()
2477 sg_set_page(&smbdirect_mr->sgl[0], pages[0], tailsz, offset); in smbd_register_mr()
2483 &smbdirect_mr->sgl[0], pages[0], PAGE_SIZE - offset, offset); in smbd_register_mr()
2486 sg_set_page(&smbdirect_mr->sgl[i], pages[i], PAGE_SIZE, 0); in smbd_register_mr()
2489 sg_set_page(&smbdirect_mr->sgl[i], pages[i], in smbd_register_mr()
2494 smbdirect_mr->dir = dir; in smbd_register_mr()
2495 rc = ib_dma_map_sg(info->id->device, smbdirect_mr->sgl, num_pages, dir); in smbd_register_mr()
2502 rc = ib_map_mr_sg(smbdirect_mr->mr, smbdirect_mr->sgl, num_pages, in smbd_register_mr()
2511 ib_update_fast_reg_key(smbdirect_mr->mr, in smbd_register_mr()
2512 ib_inc_rkey(smbdirect_mr->mr->rkey)); in smbd_register_mr()
2513 reg_wr = &smbdirect_mr->wr; in smbd_register_mr()
2515 smbdirect_mr->cqe.done = register_mr_done; in smbd_register_mr()
2516 reg_wr->wr.wr_cqe = &smbdirect_mr->cqe; in smbd_register_mr()
2519 reg_wr->mr = smbdirect_mr->mr; in smbd_register_mr()
2520 reg_wr->key = smbdirect_mr->mr->rkey; in smbd_register_mr()
2532 return smbdirect_mr; in smbd_register_mr()
2539 ib_dma_unmap_sg(info->id->device, smbdirect_mr->sgl, in smbd_register_mr()
2540 smbdirect_mr->sgl_count, smbdirect_mr->dir); in smbd_register_mr()
2543 smbdirect_mr->state = MR_ERROR; in smbd_register_mr()
2554 struct smbd_mr *smbdirect_mr; in local_inv_done() local
2558 smbdirect_mr = container_of(cqe, struct smbd_mr, cqe); in local_inv_done()
2559 smbdirect_mr->state = MR_INVALIDATED; in local_inv_done()
2562 smbdirect_mr->state = MR_ERROR; in local_inv_done()
2564 complete(&smbdirect_mr->invalidate_done); in local_inv_done()
2573 int smbd_deregister_mr(struct smbd_mr *smbdirect_mr) in smbd_deregister_mr() argument
2576 struct smbd_connection *info = smbdirect_mr->conn; in smbd_deregister_mr()
2579 if (smbdirect_mr->need_invalidate) { in smbd_deregister_mr()
2581 wr = &smbdirect_mr->inv_wr; in smbd_deregister_mr()
2583 smbdirect_mr->cqe.done = local_inv_done; in smbd_deregister_mr()
2584 wr->wr_cqe = &smbdirect_mr->cqe; in smbd_deregister_mr()
2586 wr->ex.invalidate_rkey = smbdirect_mr->mr->rkey; in smbd_deregister_mr()
2589 init_completion(&smbdirect_mr->invalidate_done); in smbd_deregister_mr()
2596 wait_for_completion(&smbdirect_mr->invalidate_done); in smbd_deregister_mr()
2597 smbdirect_mr->need_invalidate = false; in smbd_deregister_mr()
2603 smbdirect_mr->state = MR_INVALIDATED; in smbd_deregister_mr()