diff options
author | Sagi Grimberg <sagig@mellanox.com> | 2015-04-14 11:08:17 -0400 |
---|---|---|
committer | Doug Ledford <dledford@redhat.com> | 2015-04-15 16:07:12 -0400 |
commit | d03e61d0366c61f596ada66ab11c217e7f887d15 (patch) | |
tree | a2fb026fd033078bb576c59a3a3ba4d35e53d862 /drivers/infiniband/ulp | |
parent | 56408325900d380f6544460c5892bfeb0616cab3 (diff) |
IB/iser: Move memory reg/dereg routines to iser_memory.c
As memory registration/de-registration methods, lets
move them to their natural location. While we're at it,
make iser_reg_page_vec routine static.
This patch does not change any functionality.
Signed-off-by: Sagi Grimberg <sagig@mellanox.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
Diffstat (limited to 'drivers/infiniband/ulp')
-rw-r--r-- | drivers/infiniband/ulp/iser/iscsi_iser.h | 4 | ||||
-rw-r--r-- | drivers/infiniband/ulp/iser/iser_memory.c | 88 | ||||
-rw-r--r-- | drivers/infiniband/ulp/iser/iser_verbs.c | 87 |
3 files changed, 88 insertions, 91 deletions
diff --git a/drivers/infiniband/ulp/iser/iscsi_iser.h b/drivers/infiniband/ulp/iser/iscsi_iser.h index 5c7036c90766..d5e5288fe3dd 100644 --- a/drivers/infiniband/ulp/iser/iscsi_iser.h +++ b/drivers/infiniband/ulp/iser/iscsi_iser.h | |||
@@ -632,10 +632,6 @@ int iser_connect(struct iser_conn *iser_conn, | |||
632 | struct sockaddr *dst_addr, | 632 | struct sockaddr *dst_addr, |
633 | int non_blocking); | 633 | int non_blocking); |
634 | 634 | ||
635 | int iser_reg_page_vec(struct ib_conn *ib_conn, | ||
636 | struct iser_page_vec *page_vec, | ||
637 | struct iser_mem_reg *mem_reg); | ||
638 | |||
639 | void iser_unreg_mem_fmr(struct iscsi_iser_task *iser_task, | 635 | void iser_unreg_mem_fmr(struct iscsi_iser_task *iser_task, |
640 | enum iser_data_dir cmd_dir); | 636 | enum iser_data_dir cmd_dir); |
641 | void iser_unreg_mem_fastreg(struct iscsi_iser_task *iser_task, | 637 | void iser_unreg_mem_fastreg(struct iscsi_iser_task *iser_task, |
diff --git a/drivers/infiniband/ulp/iser/iser_memory.c b/drivers/infiniband/ulp/iser/iser_memory.c index 9c60ff1d82a2..4e0cbbb671cc 100644 --- a/drivers/infiniband/ulp/iser/iser_memory.c +++ b/drivers/infiniband/ulp/iser/iser_memory.c | |||
@@ -362,6 +362,94 @@ static int fall_to_bounce_buf(struct iscsi_iser_task *iser_task, | |||
362 | } | 362 | } |
363 | 363 | ||
364 | /** | 364 | /** |
365 | * iser_reg_page_vec - Register physical memory | ||
366 | * | ||
367 | * returns: 0 on success, errno code on failure | ||
368 | */ | ||
369 | static | ||
370 | int iser_reg_page_vec(struct ib_conn *ib_conn, | ||
371 | struct iser_page_vec *page_vec, | ||
372 | struct iser_mem_reg *mem_reg) | ||
373 | { | ||
374 | struct ib_pool_fmr *mem; | ||
375 | u64 io_addr; | ||
376 | u64 *page_list; | ||
377 | int status; | ||
378 | |||
379 | page_list = page_vec->pages; | ||
380 | io_addr = page_list[0]; | ||
381 | |||
382 | mem = ib_fmr_pool_map_phys(ib_conn->fmr.pool, | ||
383 | page_list, | ||
384 | page_vec->length, | ||
385 | io_addr); | ||
386 | |||
387 | if (IS_ERR(mem)) { | ||
388 | status = (int)PTR_ERR(mem); | ||
389 | iser_err("ib_fmr_pool_map_phys failed: %d\n", status); | ||
390 | return status; | ||
391 | } | ||
392 | |||
393 | mem_reg->lkey = mem->fmr->lkey; | ||
394 | mem_reg->rkey = mem->fmr->rkey; | ||
395 | mem_reg->len = page_vec->length * SIZE_4K; | ||
396 | mem_reg->va = io_addr; | ||
397 | mem_reg->mem_h = (void *)mem; | ||
398 | |||
399 | mem_reg->va += page_vec->offset; | ||
400 | mem_reg->len = page_vec->data_size; | ||
401 | |||
402 | iser_dbg("PHYSICAL Mem.register, [PHYS p_array: 0x%p, sz: %d, " | ||
403 | "entry[0]: (0x%08lx,%ld)] -> " | ||
404 | "[lkey: 0x%08X mem_h: 0x%p va: 0x%08lX sz: %ld]\n", | ||
405 | page_vec, page_vec->length, | ||
406 | (unsigned long)page_vec->pages[0], | ||
407 | (unsigned long)page_vec->data_size, | ||
408 | (unsigned int)mem_reg->lkey, mem_reg->mem_h, | ||
409 | (unsigned long)mem_reg->va, (unsigned long)mem_reg->len); | ||
410 | return 0; | ||
411 | } | ||
412 | |||
413 | /** | ||
414 | * Unregister (previosuly registered using FMR) memory. | ||
415 | * If memory is non-FMR does nothing. | ||
416 | */ | ||
417 | void iser_unreg_mem_fmr(struct iscsi_iser_task *iser_task, | ||
418 | enum iser_data_dir cmd_dir) | ||
419 | { | ||
420 | struct iser_mem_reg *reg = &iser_task->rdma_regd[cmd_dir].reg; | ||
421 | int ret; | ||
422 | |||
423 | if (!reg->mem_h) | ||
424 | return; | ||
425 | |||
426 | iser_dbg("PHYSICAL Mem.Unregister mem_h %p\n", reg->mem_h); | ||
427 | |||
428 | ret = ib_fmr_pool_unmap((struct ib_pool_fmr *)reg->mem_h); | ||
429 | if (ret) | ||
430 | iser_err("ib_fmr_pool_unmap failed %d\n", ret); | ||
431 | |||
432 | reg->mem_h = NULL; | ||
433 | } | ||
434 | |||
435 | void iser_unreg_mem_fastreg(struct iscsi_iser_task *iser_task, | ||
436 | enum iser_data_dir cmd_dir) | ||
437 | { | ||
438 | struct iser_mem_reg *reg = &iser_task->rdma_regd[cmd_dir].reg; | ||
439 | struct iser_conn *iser_conn = iser_task->iser_conn; | ||
440 | struct ib_conn *ib_conn = &iser_conn->ib_conn; | ||
441 | struct fast_reg_descriptor *desc = reg->mem_h; | ||
442 | |||
443 | if (!desc) | ||
444 | return; | ||
445 | |||
446 | reg->mem_h = NULL; | ||
447 | spin_lock_bh(&ib_conn->lock); | ||
448 | list_add_tail(&desc->list, &ib_conn->fastreg.pool); | ||
449 | spin_unlock_bh(&ib_conn->lock); | ||
450 | } | ||
451 | |||
452 | /** | ||
365 | * iser_reg_rdma_mem_fmr - Registers memory intended for RDMA, | 453 | * iser_reg_rdma_mem_fmr - Registers memory intended for RDMA, |
366 | * using FMR (if possible) obtaining rkey and va | 454 | * using FMR (if possible) obtaining rkey and va |
367 | * | 455 | * |
diff --git a/drivers/infiniband/ulp/iser/iser_verbs.c b/drivers/infiniband/ulp/iser/iser_verbs.c index 7ee4926925d3..986b5f4823ea 100644 --- a/drivers/infiniband/ulp/iser/iser_verbs.c +++ b/drivers/infiniband/ulp/iser/iser_verbs.c | |||
@@ -992,93 +992,6 @@ connect_failure: | |||
992 | return err; | 992 | return err; |
993 | } | 993 | } |
994 | 994 | ||
995 | /** | ||
996 | * iser_reg_page_vec - Register physical memory | ||
997 | * | ||
998 | * returns: 0 on success, errno code on failure | ||
999 | */ | ||
1000 | int iser_reg_page_vec(struct ib_conn *ib_conn, | ||
1001 | struct iser_page_vec *page_vec, | ||
1002 | struct iser_mem_reg *mem_reg) | ||
1003 | { | ||
1004 | struct ib_pool_fmr *mem; | ||
1005 | u64 io_addr; | ||
1006 | u64 *page_list; | ||
1007 | int status; | ||
1008 | |||
1009 | page_list = page_vec->pages; | ||
1010 | io_addr = page_list[0]; | ||
1011 | |||
1012 | mem = ib_fmr_pool_map_phys(ib_conn->fmr.pool, | ||
1013 | page_list, | ||
1014 | page_vec->length, | ||
1015 | io_addr); | ||
1016 | |||
1017 | if (IS_ERR(mem)) { | ||
1018 | status = (int)PTR_ERR(mem); | ||
1019 | iser_err("ib_fmr_pool_map_phys failed: %d\n", status); | ||
1020 | return status; | ||
1021 | } | ||
1022 | |||
1023 | mem_reg->lkey = mem->fmr->lkey; | ||
1024 | mem_reg->rkey = mem->fmr->rkey; | ||
1025 | mem_reg->len = page_vec->length * SIZE_4K; | ||
1026 | mem_reg->va = io_addr; | ||
1027 | mem_reg->mem_h = (void *)mem; | ||
1028 | |||
1029 | mem_reg->va += page_vec->offset; | ||
1030 | mem_reg->len = page_vec->data_size; | ||
1031 | |||
1032 | iser_dbg("PHYSICAL Mem.register, [PHYS p_array: 0x%p, sz: %d, " | ||
1033 | "entry[0]: (0x%08lx,%ld)] -> " | ||
1034 | "[lkey: 0x%08X mem_h: 0x%p va: 0x%08lX sz: %ld]\n", | ||
1035 | page_vec, page_vec->length, | ||
1036 | (unsigned long)page_vec->pages[0], | ||
1037 | (unsigned long)page_vec->data_size, | ||
1038 | (unsigned int)mem_reg->lkey, mem_reg->mem_h, | ||
1039 | (unsigned long)mem_reg->va, (unsigned long)mem_reg->len); | ||
1040 | return 0; | ||
1041 | } | ||
1042 | |||
1043 | /** | ||
1044 | * Unregister (previosuly registered using FMR) memory. | ||
1045 | * If memory is non-FMR does nothing. | ||
1046 | */ | ||
1047 | void iser_unreg_mem_fmr(struct iscsi_iser_task *iser_task, | ||
1048 | enum iser_data_dir cmd_dir) | ||
1049 | { | ||
1050 | struct iser_mem_reg *reg = &iser_task->rdma_regd[cmd_dir].reg; | ||
1051 | int ret; | ||
1052 | |||
1053 | if (!reg->mem_h) | ||
1054 | return; | ||
1055 | |||
1056 | iser_dbg("PHYSICAL Mem.Unregister mem_h %p\n",reg->mem_h); | ||
1057 | |||
1058 | ret = ib_fmr_pool_unmap((struct ib_pool_fmr *)reg->mem_h); | ||
1059 | if (ret) | ||
1060 | iser_err("ib_fmr_pool_unmap failed %d\n", ret); | ||
1061 | |||
1062 | reg->mem_h = NULL; | ||
1063 | } | ||
1064 | |||
1065 | void iser_unreg_mem_fastreg(struct iscsi_iser_task *iser_task, | ||
1066 | enum iser_data_dir cmd_dir) | ||
1067 | { | ||
1068 | struct iser_mem_reg *reg = &iser_task->rdma_regd[cmd_dir].reg; | ||
1069 | struct iser_conn *iser_conn = iser_task->iser_conn; | ||
1070 | struct ib_conn *ib_conn = &iser_conn->ib_conn; | ||
1071 | struct fast_reg_descriptor *desc = reg->mem_h; | ||
1072 | |||
1073 | if (!desc) | ||
1074 | return; | ||
1075 | |||
1076 | reg->mem_h = NULL; | ||
1077 | spin_lock_bh(&ib_conn->lock); | ||
1078 | list_add_tail(&desc->list, &ib_conn->fastreg.pool); | ||
1079 | spin_unlock_bh(&ib_conn->lock); | ||
1080 | } | ||
1081 | |||
1082 | int iser_post_recvl(struct iser_conn *iser_conn) | 995 | int iser_post_recvl(struct iser_conn *iser_conn) |
1083 | { | 996 | { |
1084 | struct ib_recv_wr rx_wr, *rx_wr_failed; | 997 | struct ib_recv_wr rx_wr, *rx_wr_failed; |