Skip to content

Commit 0ac531c

Browse files
chuckleveramschuma-ntap
authored andcommitted
xprtrdma: Remove REGISTER memory registration mode
All kernel RDMA providers except amso1100 support either MTHCAFMR or FRMR, both of which are faster than REGISTER. amso1100 can continue to use ALLPHYSICAL. The only other ULP consumer in the kernel that uses the reg_phys_mr verb is Lustre. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
1 parent b45ccfd commit 0ac531c

File tree

2 files changed

+5
-88
lines changed

2 files changed

+5
-88
lines changed

net/sunrpc/xprtrdma/rpc_rdma.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -476,8 +476,7 @@ rpcrdma_marshal_req(struct rpc_rqst *rqst)
476476
* on receive. Therefore, we request a reply chunk
477477
* for non-writes wherever feasible and efficient.
478478
*/
479-
if (wtype == rpcrdma_noch &&
480-
r_xprt->rx_ia.ri_memreg_strategy > RPCRDMA_REGISTER)
479+
if (wtype == rpcrdma_noch)
481480
wtype = rpcrdma_replych;
482481
}
483482
}

net/sunrpc/xprtrdma/verbs.c

Lines changed: 4 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -494,39 +494,23 @@ rpcrdma_ia_open(struct rpcrdma_xprt *xprt, struct sockaddr *addr, int memreg)
494494
switch (memreg) {
495495
case RPCRDMA_MTHCAFMR:
496496
if (!ia->ri_id->device->alloc_fmr) {
497-
#if RPCRDMA_PERSISTENT_REGISTRATION
498497
dprintk("RPC: %s: MTHCAFMR registration "
499498
"specified but not supported by adapter, "
500499
"using riskier RPCRDMA_ALLPHYSICAL\n",
501500
__func__);
502501
memreg = RPCRDMA_ALLPHYSICAL;
503-
#else
504-
dprintk("RPC: %s: MTHCAFMR registration "
505-
"specified but not supported by adapter, "
506-
"using slower RPCRDMA_REGISTER\n",
507-
__func__);
508-
memreg = RPCRDMA_REGISTER;
509-
#endif
510502
}
511503
break;
512504
case RPCRDMA_FRMR:
513505
/* Requires both frmr reg and local dma lkey */
514506
if ((devattr.device_cap_flags &
515507
(IB_DEVICE_MEM_MGT_EXTENSIONS|IB_DEVICE_LOCAL_DMA_LKEY)) !=
516508
(IB_DEVICE_MEM_MGT_EXTENSIONS|IB_DEVICE_LOCAL_DMA_LKEY)) {
517-
#if RPCRDMA_PERSISTENT_REGISTRATION
518509
dprintk("RPC: %s: FRMR registration "
519510
"specified but not supported by adapter, "
520511
"using riskier RPCRDMA_ALLPHYSICAL\n",
521512
__func__);
522513
memreg = RPCRDMA_ALLPHYSICAL;
523-
#else
524-
dprintk("RPC: %s: FRMR registration "
525-
"specified but not supported by adapter, "
526-
"using slower RPCRDMA_REGISTER\n",
527-
__func__);
528-
memreg = RPCRDMA_REGISTER;
529-
#endif
530514
} else {
531515
/* Mind the ia limit on FRMR page list depth */
532516
ia->ri_max_frmr_depth = min_t(unsigned int,
@@ -545,7 +529,6 @@ rpcrdma_ia_open(struct rpcrdma_xprt *xprt, struct sockaddr *addr, int memreg)
545529
* adapter.
546530
*/
547531
switch (memreg) {
548-
case RPCRDMA_REGISTER:
549532
case RPCRDMA_FRMR:
550533
break;
551534
#if RPCRDMA_PERSISTENT_REGISTRATION
@@ -565,11 +548,10 @@ rpcrdma_ia_open(struct rpcrdma_xprt *xprt, struct sockaddr *addr, int memreg)
565548
ia->ri_bind_mem = ib_get_dma_mr(ia->ri_pd, mem_priv);
566549
if (IS_ERR(ia->ri_bind_mem)) {
567550
printk(KERN_ALERT "%s: ib_get_dma_mr for "
568-
"phys register failed with %lX\n\t"
569-
"Will continue with degraded performance\n",
551+
"phys register failed with %lX\n",
570552
__func__, PTR_ERR(ia->ri_bind_mem));
571-
memreg = RPCRDMA_REGISTER;
572-
ia->ri_bind_mem = NULL;
553+
rc = -ENOMEM;
554+
goto out2;
573555
}
574556
break;
575557
default:
@@ -1611,67 +1593,6 @@ rpcrdma_deregister_fmr_external(struct rpcrdma_mr_seg *seg,
16111593
return rc;
16121594
}
16131595

1614-
static int
1615-
rpcrdma_register_default_external(struct rpcrdma_mr_seg *seg,
1616-
int *nsegs, int writing, struct rpcrdma_ia *ia)
1617-
{
1618-
int mem_priv = (writing ? IB_ACCESS_REMOTE_WRITE :
1619-
IB_ACCESS_REMOTE_READ);
1620-
struct rpcrdma_mr_seg *seg1 = seg;
1621-
struct ib_phys_buf ipb[RPCRDMA_MAX_DATA_SEGS];
1622-
int len, i, rc = 0;
1623-
1624-
if (*nsegs > RPCRDMA_MAX_DATA_SEGS)
1625-
*nsegs = RPCRDMA_MAX_DATA_SEGS;
1626-
for (len = 0, i = 0; i < *nsegs;) {
1627-
rpcrdma_map_one(ia, seg, writing);
1628-
ipb[i].addr = seg->mr_dma;
1629-
ipb[i].size = seg->mr_len;
1630-
len += seg->mr_len;
1631-
++seg;
1632-
++i;
1633-
/* Check for holes */
1634-
if ((i < *nsegs && offset_in_page(seg->mr_offset)) ||
1635-
offset_in_page((seg-1)->mr_offset+(seg-1)->mr_len))
1636-
break;
1637-
}
1638-
seg1->mr_base = seg1->mr_dma;
1639-
seg1->mr_chunk.rl_mr = ib_reg_phys_mr(ia->ri_pd,
1640-
ipb, i, mem_priv, &seg1->mr_base);
1641-
if (IS_ERR(seg1->mr_chunk.rl_mr)) {
1642-
rc = PTR_ERR(seg1->mr_chunk.rl_mr);
1643-
dprintk("RPC: %s: failed ib_reg_phys_mr "
1644-
"%u@0x%llx (%d)... status %i\n",
1645-
__func__, len,
1646-
(unsigned long long)seg1->mr_dma, i, rc);
1647-
while (i--)
1648-
rpcrdma_unmap_one(ia, --seg);
1649-
} else {
1650-
seg1->mr_rkey = seg1->mr_chunk.rl_mr->rkey;
1651-
seg1->mr_nsegs = i;
1652-
seg1->mr_len = len;
1653-
}
1654-
*nsegs = i;
1655-
return rc;
1656-
}
1657-
1658-
static int
1659-
rpcrdma_deregister_default_external(struct rpcrdma_mr_seg *seg,
1660-
struct rpcrdma_ia *ia)
1661-
{
1662-
struct rpcrdma_mr_seg *seg1 = seg;
1663-
int rc;
1664-
1665-
rc = ib_dereg_mr(seg1->mr_chunk.rl_mr);
1666-
seg1->mr_chunk.rl_mr = NULL;
1667-
while (seg1->mr_nsegs--)
1668-
rpcrdma_unmap_one(ia, seg++);
1669-
if (rc)
1670-
dprintk("RPC: %s: failed ib_dereg_mr,"
1671-
" status %i\n", __func__, rc);
1672-
return rc;
1673-
}
1674-
16751596
int
16761597
rpcrdma_register_external(struct rpcrdma_mr_seg *seg,
16771598
int nsegs, int writing, struct rpcrdma_xprt *r_xprt)
@@ -1701,10 +1622,8 @@ rpcrdma_register_external(struct rpcrdma_mr_seg *seg,
17011622
rc = rpcrdma_register_fmr_external(seg, &nsegs, writing, ia);
17021623
break;
17031624

1704-
/* Default registration each time */
17051625
default:
1706-
rc = rpcrdma_register_default_external(seg, &nsegs, writing, ia);
1707-
break;
1626+
return -1;
17081627
}
17091628
if (rc)
17101629
return -1;
@@ -1738,7 +1657,6 @@ rpcrdma_deregister_external(struct rpcrdma_mr_seg *seg,
17381657
break;
17391658

17401659
default:
1741-
rc = rpcrdma_deregister_default_external(seg, ia);
17421660
break;
17431661
}
17441662
if (r) {

0 commit comments

Comments
 (0)