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:
Родитель
8e37ab68fe
Коммит
3de2c31ce7
|
@ -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 */
|
||||||
|
|
Загрузка…
Ссылка в новой задаче