Use rdma_get_dma_mr() to allocate the DMA MR.

Use rdma_fast_reg_access_flags() to set the access_flags for fast
register work requests.

Signed-off-by: Steve Wise <[email protected]>
---

 drivers/infiniband/ulp/isert/ib_isert.c |   36 +++++--------------------------
 1 files changed, 6 insertions(+), 30 deletions(-)

diff --git a/drivers/infiniband/ulp/isert/ib_isert.c 
b/drivers/infiniband/ulp/isert/ib_isert.c
index 35015c9..ea6f540 100644
--- a/drivers/infiniband/ulp/isert/ib_isert.c
+++ b/drivers/infiniband/ulp/isert/ib_isert.c
@@ -350,21 +350,11 @@ out_cq:
        return ret;
 }
 
-static int any_port_is_iwarp(struct isert_device *device)
-{
-       int i;
-
-       for (i = rdma_start_port(device->ib_device);
-            i <= rdma_end_port(device->ib_device); i++)
-               if (rdma_protocol_iwarp(device->ib_device, i))
-                       return 1;
-       return 0;
-}
-
 static int
 isert_create_device_ib_res(struct isert_device *device)
 {
        struct ib_device_attr *dev_attr;
+       int mr_roles;
        int ret;
 
        dev_attr = &device->dev_attr;
@@ -396,16 +386,9 @@ isert_create_device_ib_res(struct isert_device *device)
                goto out_cq;
        }
 
-       /*
-        * IWARP transports need REMOTE_WRITE for MRs used as the target of
-        * an RDMA_READ.  Since the DMA MR is used for all ports, then if
-        * any port is running IWARP, add REMOTE_WRITE.
-        */
-       if (any_port_is_iwarp(device))
-               device->mr = ib_get_dma_mr(device->pd, IB_ACCESS_LOCAL_WRITE |
-                                                      IB_ACCESS_REMOTE_WRITE);
-       else
-               device->mr = ib_get_dma_mr(device->pd, IB_ACCESS_LOCAL_WRITE);
+       mr_roles = RDMA_MRR_RECV | RDMA_MRR_SEND | RDMA_MRR_WRITE_SOURCE |
+                  RDMA_MRR_READ_DEST;
+       device->mr = rdma_get_dma_mr(device->pd, mr_roles, 0);
        if (IS_ERR(device->mr)) {
                ret = PTR_ERR(device->mr);
                isert_err("failed to create dma mr, device %p, ret=%d\n",
@@ -2644,15 +2627,8 @@ isert_fast_reg_mr(struct isert_conn *isert_conn,
        fr_wr.wr.fast_reg.page_shift = PAGE_SHIFT;
        fr_wr.wr.fast_reg.length = mem->len;
        fr_wr.wr.fast_reg.rkey = mr->rkey;
-       fr_wr.wr.fast_reg.access_flags = IB_ACCESS_LOCAL_WRITE;
-
-       /*
-        * IWARP transports need REMOTE_WRITE for MRs used as the target of
-        * an RDMA_READ.
-        */
-       if (rdma_protocol_iwarp(ib_dev, isert_conn->cm_id->port_num))
-               fr_wr.wr.fast_reg.access_flags |= IB_ACCESS_REMOTE_WRITE;
-
+       fr_wr.wr.fast_reg.access_flags = rdma_fast_reg_access_flags(
+               device->pd, RDMA_MRR_WRITE_SOURCE | RDMA_MRR_READ_DEST, 0);
        if (!wr)
                wr = &fr_wr;
        else

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to