2015-03-31 02:34:21 +08:00
|
|
|
/*
|
|
|
|
* Copyright (c) 2015 Oracle. All rights reserved.
|
|
|
|
* Copyright (c) 2003-2007 Network Appliance, Inc. All rights reserved.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* Lightweight memory registration using Fast Memory Regions (FMR).
|
|
|
|
* Referred to sometimes as MTHCAFMR mode.
|
|
|
|
*
|
|
|
|
* FMR uses synchronous memory registration and deregistration.
|
|
|
|
* FMR registration is known to be fast, but FMR deregistration
|
|
|
|
* can take tens of usecs to complete.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "xprt_rdma.h"
|
|
|
|
|
|
|
|
#if IS_ENABLED(CONFIG_SUNRPC_DEBUG)
|
|
|
|
# define RPCDBG_FACILITY RPCDBG_TRANS
|
|
|
|
#endif
|
|
|
|
|
2015-03-31 02:34:30 +08:00
|
|
|
/* Maximum scatter/gather per FMR */
|
|
|
|
#define RPCRDMA_MAX_FMR_SGES (64)
|
|
|
|
|
|
|
|
/* FMR mode conveys up to 64 pages of payload per chunk segment.
|
|
|
|
*/
|
|
|
|
static size_t
|
|
|
|
fmr_op_maxpages(struct rpcrdma_xprt *r_xprt)
|
|
|
|
{
|
|
|
|
return min_t(unsigned int, RPCRDMA_MAX_DATA_SEGS,
|
|
|
|
rpcrdma_max_segments(r_xprt) * RPCRDMA_MAX_FMR_SGES);
|
|
|
|
}
|
|
|
|
|
2015-03-31 02:34:21 +08:00
|
|
|
const struct rpcrdma_memreg_ops rpcrdma_fmr_memreg_ops = {
|
2015-03-31 02:34:30 +08:00
|
|
|
.ro_maxpages = fmr_op_maxpages,
|
2015-03-31 02:34:21 +08:00
|
|
|
.ro_displayname = "fmr",
|
|
|
|
};
|