|
@@ -106,6 +106,44 @@ struct rpcrdma_ep {
|
|
#define INIT_CQCOUNT(ep) atomic_set(&(ep)->rep_cqcount, (ep)->rep_cqinit)
|
|
#define INIT_CQCOUNT(ep) atomic_set(&(ep)->rep_cqcount, (ep)->rep_cqinit)
|
|
#define DECR_CQCOUNT(ep) atomic_sub_return(1, &(ep)->rep_cqcount)
|
|
#define DECR_CQCOUNT(ep) atomic_sub_return(1, &(ep)->rep_cqcount)
|
|
|
|
|
|
|
|
+/* Registered buffer -- registered kmalloc'd memory for RDMA SEND/RECV
|
|
|
|
+ *
|
|
|
|
+ * The below structure appears at the front of a large region of kmalloc'd
|
|
|
|
+ * memory, which always starts on a good alignment boundary.
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+struct rpcrdma_regbuf {
|
|
|
|
+ size_t rg_size;
|
|
|
|
+ struct rpcrdma_req *rg_owner;
|
|
|
|
+ struct ib_mr *rg_mr;
|
|
|
|
+ struct ib_sge rg_iov;
|
|
|
|
+ __be32 rg_base[0] __attribute__ ((aligned(256)));
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static inline u64
|
|
|
|
+rdmab_addr(struct rpcrdma_regbuf *rb)
|
|
|
|
+{
|
|
|
|
+ return rb->rg_iov.addr;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static inline u32
|
|
|
|
+rdmab_length(struct rpcrdma_regbuf *rb)
|
|
|
|
+{
|
|
|
|
+ return rb->rg_iov.length;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static inline u32
|
|
|
|
+rdmab_lkey(struct rpcrdma_regbuf *rb)
|
|
|
|
+{
|
|
|
|
+ return rb->rg_iov.lkey;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static inline struct rpcrdma_msg *
|
|
|
|
+rdmab_to_msg(struct rpcrdma_regbuf *rb)
|
|
|
|
+{
|
|
|
|
+ return (struct rpcrdma_msg *)rb->rg_base;
|
|
|
|
+}
|
|
|
|
+
|
|
enum rpcrdma_chunktype {
|
|
enum rpcrdma_chunktype {
|
|
rpcrdma_noch = 0,
|
|
rpcrdma_noch = 0,
|
|
rpcrdma_readch,
|
|
rpcrdma_readch,
|
|
@@ -372,6 +410,11 @@ int rpcrdma_register_external(struct rpcrdma_mr_seg *,
|
|
int rpcrdma_deregister_external(struct rpcrdma_mr_seg *,
|
|
int rpcrdma_deregister_external(struct rpcrdma_mr_seg *,
|
|
struct rpcrdma_xprt *);
|
|
struct rpcrdma_xprt *);
|
|
|
|
|
|
|
|
+struct rpcrdma_regbuf *rpcrdma_alloc_regbuf(struct rpcrdma_ia *,
|
|
|
|
+ size_t, gfp_t);
|
|
|
|
+void rpcrdma_free_regbuf(struct rpcrdma_ia *,
|
|
|
|
+ struct rpcrdma_regbuf *);
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* RPC/RDMA connection management calls - xprtrdma/rpc_rdma.c
|
|
* RPC/RDMA connection management calls - xprtrdma/rpc_rdma.c
|
|
*/
|
|
*/
|