aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/ulp/iser/iser_verbs.c
diff options
context:
space:
mode:
authorErez Zilber <erezz@voltaire.com>2006-09-11 05:22:30 -0400
committerRoland Dreier <rolandd@cisco.com>2006-09-22 18:22:51 -0400
commit8dfa0876d3dde5f9c1818a4c35caaabc3ddba78b (patch)
treeca68e1f128305185c8cb807e15ab67b36b2be2a5 /drivers/infiniband/ulp/iser/iser_verbs.c
parent8072ec2f8f6790df91e85d833e672c9c30a7ab3c (diff)
IB/iser: make FMR "page size" be 4K and not PAGE_SIZE
As iser is able to use at most one rdma operation for the execution of a scsi command, and registration of the sg associated with scsi command has its restrictions, the code checks if an sg is "aligned for rdma". Alignment for rdma is measured in "fmr page" units whose possible resolutions are different between HCAs and can be smaller, equal or bigger to the system page size. When the system page size is bigger than 4KB (eg the default with ia64 kernels) there a bigger chance that an sg would be aligned for rdma if the fmr page size is 4KB. Change the code to create FMR whose pages are of size 4KB and to take that into account when processing the sg. Signed-off-by: Erez Zilber <erezz@voltaire.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/infiniband/ulp/iser/iser_verbs.c')
-rw-r--r--drivers/infiniband/ulp/iser/iser_verbs.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/infiniband/ulp/iser/iser_verbs.c b/drivers/infiniband/ulp/iser/iser_verbs.c
index 72febf1f8ff8..9b27a7c26aa8 100644
--- a/drivers/infiniband/ulp/iser/iser_verbs.c
+++ b/drivers/infiniband/ulp/iser/iser_verbs.c
@@ -150,7 +150,7 @@ static int iser_create_ib_conn_res(struct iser_conn *ib_conn)
150 } 150 }
151 ib_conn->page_vec->pages = (u64 *) (ib_conn->page_vec + 1); 151 ib_conn->page_vec->pages = (u64 *) (ib_conn->page_vec + 1);
152 152
153 params.page_shift = PAGE_SHIFT; 153 params.page_shift = SHIFT_4K;
154 /* when the first/last SG element are not start/end * 154 /* when the first/last SG element are not start/end *
155 * page aligned, the map whould be of N+1 pages */ 155 * page aligned, the map whould be of N+1 pages */
156 params.max_pages_per_fmr = ISCSI_ISER_SG_TABLESIZE + 1; 156 params.max_pages_per_fmr = ISCSI_ISER_SG_TABLESIZE + 1;
@@ -604,7 +604,7 @@ int iser_reg_page_vec(struct iser_conn *ib_conn,
604 604
605 mem_reg->lkey = mem->fmr->lkey; 605 mem_reg->lkey = mem->fmr->lkey;
606 mem_reg->rkey = mem->fmr->rkey; 606 mem_reg->rkey = mem->fmr->rkey;
607 mem_reg->len = page_vec->length * PAGE_SIZE; 607 mem_reg->len = page_vec->length * SIZE_4K;
608 mem_reg->va = io_addr; 608 mem_reg->va = io_addr;
609 mem_reg->mem_h = (void *)mem; 609 mem_reg->mem_h = (void *)mem;
610 610