hc
2024-10-22 8ac6c7a54ed1b98d142dce24b11c6de6a1e239a5
kernel/net/rds/ib_mr.h
....@@ -43,10 +43,6 @@
4343 #define RDS_MR_8K_SCALE (256 / (RDS_MR_8K_MSG_SIZE + 1))
4444 #define RDS_MR_8K_POOL_SIZE (RDS_MR_8K_SCALE * (8192 / 2))
4545
46
-struct rds_ib_fmr {
47
- struct ib_fmr *fmr;
48
-};
49
-
5046 enum rds_ib_fr_state {
5147 FRMR_IS_FREE, /* mr invalidated & ready for use */
5248 FRMR_IS_INUSE, /* mr is in use or used & can be invalidated */
....@@ -57,6 +53,9 @@
5753 struct ib_mr *mr;
5854 enum rds_ib_fr_state fr_state;
5955 bool fr_inv;
56
+ wait_queue_head_t fr_inv_done;
57
+ bool fr_reg;
58
+ wait_queue_head_t fr_reg_done;
6059 struct ib_send_wr fr_wr;
6160 unsigned int dma_npages;
6261 unsigned int sg_byte_len;
....@@ -64,6 +63,7 @@
6463
6564 /* This is stored as mr->r_trans_private. */
6665 struct rds_ib_mr {
66
+ struct delayed_work work;
6767 struct rds_ib_device *device;
6868 struct rds_ib_mr_pool *pool;
6969 struct rds_ib_connection *ic;
....@@ -78,9 +78,10 @@
7878 unsigned int sg_len;
7979 int sg_dma_len;
8080
81
+ u8 odp:1;
8182 union {
82
- struct rds_ib_fmr fmr;
8383 struct rds_ib_frmr frmr;
84
+ struct ib_mr *mr;
8485 } u;
8586 };
8687
....@@ -97,13 +98,13 @@
9798 struct llist_head free_list; /* unused MRs */
9899 struct llist_head clean_list; /* unused & unmapped MRs */
99100 wait_queue_head_t flush_wait;
101
+ spinlock_t clean_lock; /* "clean_list" concurrency */
100102
101103 atomic_t free_pinned; /* memory pinned by free MRs */
102104 unsigned long max_items;
103105 unsigned long max_items_soft;
104106 unsigned long max_free_pinned;
105
- struct ib_fmr_attr fmr_attr;
106
- bool use_fastreg;
107
+ unsigned int max_pages;
107108 };
108109
109110 extern struct workqueue_struct *rds_ib_mr_wq;
....@@ -118,24 +119,20 @@
118119 void rds_ib_destroy_mr_pool(struct rds_ib_mr_pool *);
119120 void *rds_ib_get_mr(struct scatterlist *sg, unsigned long nents,
120121 struct rds_sock *rs, u32 *key_ret,
121
- struct rds_connection *conn);
122
+ struct rds_connection *conn, u64 start, u64 length,
123
+ int need_odp);
122124 void rds_ib_sync_mr(void *trans_private, int dir);
123125 void rds_ib_free_mr(void *trans_private, int invalidate);
124126 void rds_ib_flush_mrs(void);
125127 int rds_ib_mr_init(void);
126128 void rds_ib_mr_exit(void);
129
+u32 rds_ib_get_lkey(void *trans_private);
127130
128131 void __rds_ib_teardown_mr(struct rds_ib_mr *);
129132 void rds_ib_teardown_mr(struct rds_ib_mr *);
130
-struct rds_ib_mr *rds_ib_alloc_fmr(struct rds_ib_device *, int);
131133 struct rds_ib_mr *rds_ib_reuse_mr(struct rds_ib_mr_pool *);
132134 int rds_ib_flush_mr_pool(struct rds_ib_mr_pool *, int, struct rds_ib_mr **);
133
-struct rds_ib_mr *rds_ib_reg_fmr(struct rds_ib_device *, struct scatterlist *,
134
- unsigned long, u32 *);
135135 struct rds_ib_mr *rds_ib_try_reuse_ibmr(struct rds_ib_mr_pool *);
136
-void rds_ib_unreg_fmr(struct list_head *, unsigned int *,
137
- unsigned long *, unsigned int);
138
-void rds_ib_free_fmr_list(struct rds_ib_mr *);
139136 struct rds_ib_mr *rds_ib_reg_frmr(struct rds_ib_device *rds_ibdev,
140137 struct rds_ib_connection *ic,
141138 struct scatterlist *sg,