Chuck Lever | a0ce85f | 2015-03-30 14:34:21 -0400 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (c) 2015 Oracle. All rights reserved. |
| 3 | * Copyright (c) 2003-2007 Network Appliance, Inc. All rights reserved. |
| 4 | */ |
| 5 | |
| 6 | /* Lightweight memory registration using Fast Memory Regions (FMR). |
| 7 | * Referred to sometimes as MTHCAFMR mode. |
| 8 | * |
| 9 | * FMR uses synchronous memory registration and deregistration. |
| 10 | * FMR registration is known to be fast, but FMR deregistration |
| 11 | * can take tens of usecs to complete. |
| 12 | */ |
| 13 | |
| 14 | #include "xprt_rdma.h" |
| 15 | |
| 16 | #if IS_ENABLED(CONFIG_SUNRPC_DEBUG) |
| 17 | # define RPCDBG_FACILITY RPCDBG_TRANS |
| 18 | #endif |
| 19 | |
Chuck Lever | 1c9351e | 2015-03-30 14:34:30 -0400 | [diff] [blame^] | 20 | /* Maximum scatter/gather per FMR */ |
| 21 | #define RPCRDMA_MAX_FMR_SGES (64) |
| 22 | |
| 23 | /* FMR mode conveys up to 64 pages of payload per chunk segment. |
| 24 | */ |
| 25 | static size_t |
| 26 | fmr_op_maxpages(struct rpcrdma_xprt *r_xprt) |
| 27 | { |
| 28 | return min_t(unsigned int, RPCRDMA_MAX_DATA_SEGS, |
| 29 | rpcrdma_max_segments(r_xprt) * RPCRDMA_MAX_FMR_SGES); |
| 30 | } |
| 31 | |
Chuck Lever | a0ce85f | 2015-03-30 14:34:21 -0400 | [diff] [blame] | 32 | const struct rpcrdma_memreg_ops rpcrdma_fmr_memreg_ops = { |
Chuck Lever | 1c9351e | 2015-03-30 14:34:30 -0400 | [diff] [blame^] | 33 | .ro_maxpages = fmr_op_maxpages, |
Chuck Lever | a0ce85f | 2015-03-30 14:34:21 -0400 | [diff] [blame] | 34 | .ro_displayname = "fmr", |
| 35 | }; |