]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - net/rds/ib_mr.h
Merge tag 'f2fs-for-5.6' of git://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs
[linux.git] / net / rds / ib_mr.h
index 5da12c2484316cbbde5c33b254d86b061c1b187e..0c8252d7fe2b76ce892b07655f50c412838b5fdc 100644 (file)
@@ -57,6 +57,9 @@ struct rds_ib_frmr {
        struct ib_mr            *mr;
        enum rds_ib_fr_state    fr_state;
        bool                    fr_inv;
+       wait_queue_head_t       fr_inv_done;
+       bool                    fr_reg;
+       wait_queue_head_t       fr_reg_done;
        struct ib_send_wr       fr_wr;
        unsigned int            dma_npages;
        unsigned int            sg_byte_len;
@@ -64,6 +67,7 @@ struct rds_ib_frmr {
 
 /* This is stored as mr->r_trans_private. */
 struct rds_ib_mr {
+       struct delayed_work             work;
        struct rds_ib_device            *device;
        struct rds_ib_mr_pool           *pool;
        struct rds_ib_connection        *ic;
@@ -78,9 +82,11 @@ struct rds_ib_mr {
        unsigned int                    sg_len;
        int                             sg_dma_len;
 
+       u8                              odp:1;
        union {
                struct rds_ib_fmr       fmr;
                struct rds_ib_frmr      frmr;
+               struct ib_mr            *mr;
        } u;
 };
 
@@ -97,6 +103,7 @@ struct rds_ib_mr_pool {
        struct llist_head       free_list;      /* unused MRs */
        struct llist_head       clean_list;     /* unused & unmapped MRs */
        wait_queue_head_t       flush_wait;
+       spinlock_t              clean_lock;     /* "clean_list" concurrency */
 
        atomic_t                free_pinned;    /* memory pinned by free MRs */
        unsigned long           max_items;
@@ -118,12 +125,14 @@ void rds6_ib_get_mr_info(struct rds_ib_device *rds_ibdev,
 void rds_ib_destroy_mr_pool(struct rds_ib_mr_pool *);
 void *rds_ib_get_mr(struct scatterlist *sg, unsigned long nents,
                    struct rds_sock *rs, u32 *key_ret,
-                   struct rds_connection *conn);
+                   struct rds_connection *conn, u64 start, u64 length,
+                   int need_odp);
 void rds_ib_sync_mr(void *trans_private, int dir);
 void rds_ib_free_mr(void *trans_private, int invalidate);
 void rds_ib_flush_mrs(void);
 int rds_ib_mr_init(void);
 void rds_ib_mr_exit(void);
+u32 rds_ib_get_lkey(void *trans_private);
 
 void __rds_ib_teardown_mr(struct rds_ib_mr *);
 void rds_ib_teardown_mr(struct rds_ib_mr *);