IB/Verbs: Reform IB-ulp xprtrdma

Use raw management helpers to reform IB-ulp xprtrdma.

Signed-off-by: Michael Wang <yun.wang@profitbricks.com>
Reviewed-by: Ira Weiny <ira.weiny@intel.com>
Tested-by: Ira Weiny <ira.weiny@intel.com>
Reviewed-by: Sean Hefty <sean.hefty@intel.com>
Reviewed-by: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
Tested-by: Doug Ledford <dledford@redhat.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
Michael Wang 2015-05-05 14:50:25 +02:00 коммит произвёл Doug Ledford
Родитель 8e37ab68fe
Коммит 3de2c31ce7
2 изменённых файлов: 20 добавлений и 29 удалений

Просмотреть файл

@ -117,8 +117,8 @@ static void rdma_build_arg_xdr(struct svc_rqst *rqstp,
static int rdma_read_max_sge(struct svcxprt_rdma *xprt, int sge_count) static int rdma_read_max_sge(struct svcxprt_rdma *xprt, int sge_count)
{ {
if (rdma_node_get_transport(xprt->sc_cm_id->device->node_type) == if (rdma_protocol_iwarp(xprt->sc_cm_id->device,
RDMA_TRANSPORT_IWARP) xprt->sc_cm_id->port_num))
return 1; return 1;
else else
return min_t(int, sge_count, xprt->sc_max_sge); return min_t(int, sge_count, xprt->sc_max_sge);

Просмотреть файл

@ -851,7 +851,7 @@ static struct svc_xprt *svc_rdma_accept(struct svc_xprt *xprt)
struct ib_qp_init_attr qp_attr; struct ib_qp_init_attr qp_attr;
struct ib_device_attr devattr; struct ib_device_attr devattr;
int uninitialized_var(dma_mr_acc); int uninitialized_var(dma_mr_acc);
int need_dma_mr; int need_dma_mr = 0;
int ret; int ret;
int i; int i;
@ -985,35 +985,26 @@ static struct svc_xprt *svc_rdma_accept(struct svc_xprt *xprt)
/* /*
* Determine if a DMA MR is required and if so, what privs are required * Determine if a DMA MR is required and if so, what privs are required
*/ */
switch (rdma_node_get_transport(newxprt->sc_cm_id->device->node_type)) { if (!rdma_protocol_iwarp(newxprt->sc_cm_id->device,
case RDMA_TRANSPORT_IWARP: newxprt->sc_cm_id->port_num) &&
newxprt->sc_dev_caps |= SVCRDMA_DEVCAP_READ_W_INV; !rdma_ib_or_iboe(newxprt->sc_cm_id->device,
if (!(newxprt->sc_dev_caps & SVCRDMA_DEVCAP_FAST_REG)) { newxprt->sc_cm_id->port_num))
need_dma_mr = 1;
dma_mr_acc =
(IB_ACCESS_LOCAL_WRITE |
IB_ACCESS_REMOTE_WRITE);
} else if (!(devattr.device_cap_flags & IB_DEVICE_LOCAL_DMA_LKEY)) {
need_dma_mr = 1;
dma_mr_acc = IB_ACCESS_LOCAL_WRITE;
} else
need_dma_mr = 0;
break;
case RDMA_TRANSPORT_IB:
if (!(newxprt->sc_dev_caps & SVCRDMA_DEVCAP_FAST_REG)) {
need_dma_mr = 1;
dma_mr_acc = IB_ACCESS_LOCAL_WRITE;
} else if (!(devattr.device_cap_flags &
IB_DEVICE_LOCAL_DMA_LKEY)) {
need_dma_mr = 1;
dma_mr_acc = IB_ACCESS_LOCAL_WRITE;
} else
need_dma_mr = 0;
break;
default:
goto errout; goto errout;
if (!(newxprt->sc_dev_caps & SVCRDMA_DEVCAP_FAST_REG) ||
!(devattr.device_cap_flags & IB_DEVICE_LOCAL_DMA_LKEY)) {
need_dma_mr = 1;
dma_mr_acc = IB_ACCESS_LOCAL_WRITE;
if (rdma_protocol_iwarp(newxprt->sc_cm_id->device,
newxprt->sc_cm_id->port_num) &&
!(newxprt->sc_dev_caps & SVCRDMA_DEVCAP_FAST_REG))
dma_mr_acc |= IB_ACCESS_REMOTE_WRITE;
} }
if (rdma_protocol_iwarp(newxprt->sc_cm_id->device,
newxprt->sc_cm_id->port_num))
newxprt->sc_dev_caps |= SVCRDMA_DEVCAP_READ_W_INV;
/* Create the DMA MR if needed, otherwise, use the DMA LKEY */ /* Create the DMA MR if needed, otherwise, use the DMA LKEY */
if (need_dma_mr) { if (need_dma_mr) {
/* Register all of physical memory */ /* Register all of physical memory */