Lines Matching refs:smbdirect_mr
2164 struct smbd_mr *smbdirect_mr; in smbd_mr_recovery_work() local
2167 list_for_each_entry(smbdirect_mr, &info->mr_list, list) { in smbd_mr_recovery_work()
2168 if (smbdirect_mr->state == MR_ERROR) { in smbd_mr_recovery_work()
2171 rc = ib_dereg_mr(smbdirect_mr->mr); in smbd_mr_recovery_work()
2180 smbdirect_mr->mr = ib_alloc_mr( in smbd_mr_recovery_work()
2183 if (IS_ERR(smbdirect_mr->mr)) { in smbd_mr_recovery_work()
2194 smbdirect_mr->state = MR_READY; in smbd_mr_recovery_work()
2233 struct smbd_mr *smbdirect_mr, *tmp; in allocate_mr_list() local
2243 smbdirect_mr = kzalloc(sizeof(*smbdirect_mr), GFP_KERNEL); in allocate_mr_list()
2244 if (!smbdirect_mr) in allocate_mr_list()
2246 smbdirect_mr->mr = ib_alloc_mr(info->pd, info->mr_type, in allocate_mr_list()
2248 if (IS_ERR(smbdirect_mr->mr)) { in allocate_mr_list()
2253 smbdirect_mr->sgl = kcalloc( in allocate_mr_list()
2257 if (!smbdirect_mr->sgl) { in allocate_mr_list()
2259 ib_dereg_mr(smbdirect_mr->mr); in allocate_mr_list()
2262 smbdirect_mr->state = MR_READY; in allocate_mr_list()
2263 smbdirect_mr->conn = info; in allocate_mr_list()
2265 list_add_tail(&smbdirect_mr->list, &info->mr_list); in allocate_mr_list()
2272 kfree(smbdirect_mr); in allocate_mr_list()
2274 list_for_each_entry_safe(smbdirect_mr, tmp, &info->mr_list, list) { in allocate_mr_list()
2275 ib_dereg_mr(smbdirect_mr->mr); in allocate_mr_list()
2276 kfree(smbdirect_mr->sgl); in allocate_mr_list()
2277 kfree(smbdirect_mr); in allocate_mr_list()
2341 struct smbd_mr *smbdirect_mr; in smbd_register_mr() local
2352 smbdirect_mr = get_mr(info); in smbd_register_mr()
2353 if (!smbdirect_mr) { in smbd_register_mr()
2357 smbdirect_mr->need_invalidate = need_invalidate; in smbd_register_mr()
2358 smbdirect_mr->sgl_count = num_pages; in smbd_register_mr()
2359 sg_init_table(smbdirect_mr->sgl, num_pages); in smbd_register_mr()
2365 sg_set_page(&smbdirect_mr->sgl[0], pages[0], tailsz, offset); in smbd_register_mr()
2371 &smbdirect_mr->sgl[0], pages[0], PAGE_SIZE - offset, offset); in smbd_register_mr()
2374 sg_set_page(&smbdirect_mr->sgl[i], pages[i], PAGE_SIZE, 0); in smbd_register_mr()
2377 sg_set_page(&smbdirect_mr->sgl[i], pages[i], in smbd_register_mr()
2382 smbdirect_mr->dir = dir; in smbd_register_mr()
2383 rc = ib_dma_map_sg(info->id->device, smbdirect_mr->sgl, num_pages, dir); in smbd_register_mr()
2390 rc = ib_map_mr_sg(smbdirect_mr->mr, smbdirect_mr->sgl, num_pages, in smbd_register_mr()
2399 ib_update_fast_reg_key(smbdirect_mr->mr, in smbd_register_mr()
2400 ib_inc_rkey(smbdirect_mr->mr->rkey)); in smbd_register_mr()
2401 reg_wr = &smbdirect_mr->wr; in smbd_register_mr()
2403 smbdirect_mr->cqe.done = register_mr_done; in smbd_register_mr()
2404 reg_wr->wr.wr_cqe = &smbdirect_mr->cqe; in smbd_register_mr()
2407 reg_wr->mr = smbdirect_mr->mr; in smbd_register_mr()
2408 reg_wr->key = smbdirect_mr->mr->rkey; in smbd_register_mr()
2420 return smbdirect_mr; in smbd_register_mr()
2427 ib_dma_unmap_sg(info->id->device, smbdirect_mr->sgl, in smbd_register_mr()
2428 smbdirect_mr->sgl_count, smbdirect_mr->dir); in smbd_register_mr()
2431 smbdirect_mr->state = MR_ERROR; in smbd_register_mr()
2442 struct smbd_mr *smbdirect_mr; in local_inv_done() local
2446 smbdirect_mr = container_of(cqe, struct smbd_mr, cqe); in local_inv_done()
2447 smbdirect_mr->state = MR_INVALIDATED; in local_inv_done()
2450 smbdirect_mr->state = MR_ERROR; in local_inv_done()
2452 complete(&smbdirect_mr->invalidate_done); in local_inv_done()
2461 int smbd_deregister_mr(struct smbd_mr *smbdirect_mr) in smbd_deregister_mr() argument
2464 struct smbd_connection *info = smbdirect_mr->conn; in smbd_deregister_mr()
2467 if (smbdirect_mr->need_invalidate) { in smbd_deregister_mr()
2469 wr = &smbdirect_mr->inv_wr; in smbd_deregister_mr()
2471 smbdirect_mr->cqe.done = local_inv_done; in smbd_deregister_mr()
2472 wr->wr_cqe = &smbdirect_mr->cqe; in smbd_deregister_mr()
2474 wr->ex.invalidate_rkey = smbdirect_mr->mr->rkey; in smbd_deregister_mr()
2477 init_completion(&smbdirect_mr->invalidate_done); in smbd_deregister_mr()
2484 wait_for_completion(&smbdirect_mr->invalidate_done); in smbd_deregister_mr()
2485 smbdirect_mr->need_invalidate = false; in smbd_deregister_mr()
2491 smbdirect_mr->state = MR_INVALIDATED; in smbd_deregister_mr()
2493 if (smbdirect_mr->state == MR_INVALIDATED) { in smbd_deregister_mr()
2495 info->id->device, smbdirect_mr->sgl, in smbd_deregister_mr()
2496 smbdirect_mr->sgl_count, in smbd_deregister_mr()
2497 smbdirect_mr->dir); in smbd_deregister_mr()
2498 smbdirect_mr->state = MR_READY; in smbd_deregister_mr()