These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / include / linux / sunrpc / svc_rdma.h
index df8edf8..f869807 100644 (file)
@@ -105,11 +105,9 @@ struct svc_rdma_chunk_sge {
 };
 struct svc_rdma_fastreg_mr {
        struct ib_mr *mr;
-       void *kva;
-       struct ib_fast_reg_page_list *page_list;
-       int page_list_len;
+       struct scatterlist *sg;
+       int sg_nents;
        unsigned long access_flags;
-       unsigned long map_len;
        enum dma_data_direction direction;
        struct list_head frmr_list;
 };
@@ -132,6 +130,7 @@ struct svcxprt_rdma {
        struct list_head     sc_accept_q;       /* Conn. waiting accept */
        int                  sc_ord;            /* RDMA read limit */
        int                  sc_max_sge;
+       int                  sc_max_sge_rd;     /* max sge for read target */
 
        int                  sc_sq_depth;       /* Depth of SQ */
        atomic_t             sc_sq_count;       /* Number of SQ WR on queue */
@@ -180,12 +179,13 @@ struct svcxprt_rdma {
 #define RPCRDMA_MAX_REQUESTS    32
 #define RPCRDMA_MAX_REQ_SIZE    4096
 
+#define RPCSVC_MAXPAYLOAD_RDMA RPCSVC_MAXPAYLOAD
+
 /* svc_rdma_marshal.c */
 extern int svc_rdma_xdr_decode_req(struct rpcrdma_msg **, struct svc_rqst *);
-extern int svc_rdma_xdr_decode_deferred_req(struct svc_rqst *);
 extern int svc_rdma_xdr_encode_error(struct svcxprt_rdma *,
                                     struct rpcrdma_msg *,
-                                    enum rpcrdma_errcode, u32 *);
+                                    enum rpcrdma_errcode, __be32 *);
 extern void svc_rdma_xdr_encode_write_list(struct rpcrdma_msg *, int);
 extern void svc_rdma_xdr_encode_reply_array(struct rpcrdma_write_array *, int);
 extern void svc_rdma_xdr_encode_array_chunk(struct rpcrdma_write_array *, int,
@@ -207,12 +207,13 @@ extern int rdma_read_chunk_frmr(struct svcxprt_rdma *, struct svc_rqst *,
 
 /* svc_rdma_sendto.c */
 extern int svc_rdma_sendto(struct svc_rqst *);
+extern struct rpcrdma_read_chunk *
+       svc_rdma_get_read_chunk(struct rpcrdma_msg *);
 
 /* svc_rdma_transport.c */
 extern int svc_rdma_send(struct svcxprt_rdma *, struct ib_send_wr *);
 extern void svc_rdma_send_error(struct svcxprt_rdma *, struct rpcrdma_msg *,
                                enum rpcrdma_errcode);
-struct page *svc_rdma_get_page(void);
 extern int svc_rdma_post_recv(struct svcxprt_rdma *);
 extern int svc_rdma_create_listen(struct svc_serv *, int, struct sockaddr *);
 extern struct svc_rdma_op_ctxt *svc_rdma_get_context(struct svcxprt_rdma *);
@@ -220,96 +221,20 @@ extern void svc_rdma_put_context(struct svc_rdma_op_ctxt *, int);
 extern void svc_rdma_unmap_dma(struct svc_rdma_op_ctxt *ctxt);
 extern struct svc_rdma_req_map *svc_rdma_get_req_map(void);
 extern void svc_rdma_put_req_map(struct svc_rdma_req_map *);
-extern int svc_rdma_fastreg(struct svcxprt_rdma *, struct svc_rdma_fastreg_mr *);
 extern struct svc_rdma_fastreg_mr *svc_rdma_get_frmr(struct svcxprt_rdma *);
 extern void svc_rdma_put_frmr(struct svcxprt_rdma *,
                              struct svc_rdma_fastreg_mr *);
 extern void svc_sq_reap(struct svcxprt_rdma *);
 extern void svc_rq_reap(struct svcxprt_rdma *);
-extern struct svc_xprt_class svc_rdma_class;
 extern void svc_rdma_prep_reply_hdr(struct svc_rqst *);
 
+extern struct svc_xprt_class svc_rdma_class;
+#ifdef CONFIG_SUNRPC_BACKCHANNEL
+extern struct svc_xprt_class svc_rdma_bc_class;
+#endif
+
 /* svc_rdma.c */
 extern int svc_rdma_init(void);
 extern void svc_rdma_cleanup(void);
 
-/*
- * Returns the address of the first read chunk or <nul> if no read chunk is
- * present
- */
-static inline struct rpcrdma_read_chunk *
-svc_rdma_get_read_chunk(struct rpcrdma_msg *rmsgp)
-{
-       struct rpcrdma_read_chunk *ch =
-               (struct rpcrdma_read_chunk *)&rmsgp->rm_body.rm_chunks[0];
-
-       if (ch->rc_discrim == 0)
-               return NULL;
-
-       return ch;
-}
-
-/*
- * Returns the address of the first read write array element or <nul> if no
- * write array list is present
- */
-static inline struct rpcrdma_write_array *
-svc_rdma_get_write_array(struct rpcrdma_msg *rmsgp)
-{
-       if (rmsgp->rm_body.rm_chunks[0] != 0
-           || rmsgp->rm_body.rm_chunks[1] == 0)
-               return NULL;
-
-       return (struct rpcrdma_write_array *)&rmsgp->rm_body.rm_chunks[1];
-}
-
-/*
- * Returns the address of the first reply array element or <nul> if no
- * reply array is present
- */
-static inline struct rpcrdma_write_array *
-svc_rdma_get_reply_array(struct rpcrdma_msg *rmsgp)
-{
-       struct rpcrdma_read_chunk *rch;
-       struct rpcrdma_write_array *wr_ary;
-       struct rpcrdma_write_array *rp_ary;
-
-       /* XXX: Need to fix when reply list may occur with read-list and/or
-        * write list */
-       if (rmsgp->rm_body.rm_chunks[0] != 0 ||
-           rmsgp->rm_body.rm_chunks[1] != 0)
-               return NULL;
-
-       rch = svc_rdma_get_read_chunk(rmsgp);
-       if (rch) {
-               while (rch->rc_discrim)
-                       rch++;
-
-               /* The reply list follows an empty write array located
-                * at 'rc_position' here. The reply array is at rc_target.
-                */
-               rp_ary = (struct rpcrdma_write_array *)&rch->rc_target;
-
-               goto found_it;
-       }
-
-       wr_ary = svc_rdma_get_write_array(rmsgp);
-       if (wr_ary) {
-               rp_ary = (struct rpcrdma_write_array *)
-                       &wr_ary->
-                       wc_array[ntohl(wr_ary->wc_nchunks)].wc_target.rs_length;
-
-               goto found_it;
-       }
-
-       /* No read list, no write list */
-       rp_ary = (struct rpcrdma_write_array *)
-               &rmsgp->rm_body.rm_chunks[2];
-
- found_it:
-       if (rp_ary->wc_discrim == 0)
-               return NULL;
-
-       return rp_ary;
-}
 #endif