hc
2024-05-14 bedbef8ad3e75a304af6361af235302bcc61d06b
kernel/drivers/infiniband/ulp/srp/ib_srp.h
....@@ -44,7 +44,6 @@
4444 #include <rdma/ib_verbs.h>
4545 #include <rdma/ib_sa.h>
4646 #include <rdma/ib_cm.h>
47
-#include <rdma/ib_fmr_pool.h>
4847 #include <rdma/rdma_cm.h>
4948
5049 enum {
....@@ -63,10 +62,23 @@
6362 SRP_DEFAULT_CMD_SQ_SIZE = SRP_DEFAULT_QUEUE_SIZE - SRP_RSP_SQ_SIZE -
6463 SRP_TSK_MGMT_SQ_SIZE,
6564
66
- SRP_TAG_NO_REQ = ~0U,
67
- SRP_TAG_TSK_MGMT = 1U << 31,
68
-
6965 SRP_MAX_PAGES_PER_MR = 512,
66
+
67
+ SRP_MAX_ADD_CDB_LEN = 16,
68
+
69
+ SRP_MAX_IMM_SGE = 2,
70
+ SRP_MAX_SGE = SRP_MAX_IMM_SGE + 1,
71
+ /*
72
+ * Choose the immediate data offset such that a 32 byte CDB still fits.
73
+ */
74
+ SRP_IMM_DATA_OFFSET = sizeof(struct srp_cmd) +
75
+ SRP_MAX_ADD_CDB_LEN +
76
+ sizeof(struct srp_imm_buf),
77
+};
78
+
79
+enum {
80
+ SRP_TAG_NO_REQ = ~0U,
81
+ SRP_TAG_TSK_MGMT = BIT(31),
7082 };
7183
7284 enum srp_target_state {
....@@ -84,8 +96,7 @@
8496 /*
8597 * @mr_page_mask: HCA memory registration page mask.
8698 * @mr_page_size: HCA memory registration page size.
87
- * @mr_max_size: Maximum size in bytes of a single FMR / FR registration
88
- * request.
99
+ * @mr_max_size: Maximum size in bytes of a single FR registration request.
89100 */
90101 struct srp_device {
91102 struct list_head dev_list;
....@@ -96,9 +107,7 @@
96107 int mr_page_size;
97108 int mr_max_size;
98109 int max_pages_per_mr;
99
- bool has_fmr;
100110 bool has_fr;
101
- bool use_fmr;
102111 bool use_fast_reg;
103112 };
104113
....@@ -116,11 +125,7 @@
116125 struct srp_request {
117126 struct scsi_cmnd *scmnd;
118127 struct srp_iu *cmd;
119
- union {
120
- struct ib_pool_fmr **fmr_list;
121
- struct srp_fr_desc **fr_list;
122
- };
123
- u64 *map_page;
128
+ struct srp_fr_desc **fr_list;
124129 struct srp_direct_buf *indirect_desc;
125130 dma_addr_t indirect_dma_addr;
126131 short nmdesc;
....@@ -130,6 +135,8 @@
130135 /**
131136 * struct srp_rdma_ch
132137 * @comp_vector: Completion vector used by this RDMA channel.
138
+ * @max_it_iu_len: Maximum initiator-to-target information unit length.
139
+ * @max_ti_iu_len: Maximum target-to-initiator information unit length.
133140 */
134141 struct srp_rdma_ch {
135142 /* These are RW in the hot path, and commonly used together */
....@@ -142,10 +149,11 @@
142149 struct ib_cq *send_cq;
143150 struct ib_cq *recv_cq;
144151 struct ib_qp *qp;
145
- union {
146
- struct ib_fmr_pool *fmr_pool;
147
- struct srp_fr_pool *fr_pool;
148
- };
152
+ struct srp_fr_pool *fr_pool;
153
+ uint32_t max_it_iu_len;
154
+ uint32_t max_ti_iu_len;
155
+ u8 max_imm_sge;
156
+ bool use_imm_data;
149157
150158 /* Everything above this point is used in the hot path of
151159 * command processing. Try to keep them packed into cachelines.
....@@ -169,7 +177,6 @@
169177 struct srp_iu **tx_ring;
170178 struct srp_iu **rx_ring;
171179 struct srp_request *req_ring;
172
- int max_ti_iu_len;
173180 int comp_vector;
174181
175182 u64 tsk_mgmt_tag;
....@@ -194,7 +201,7 @@
194201 u32 ch_count;
195202 u32 lkey;
196203 enum srp_target_state state;
197
- unsigned int max_iu_len;
204
+ uint32_t max_it_iu_size;
198205 unsigned int cmd_sg_cnt;
199206 unsigned int indirect_size;
200207 bool allow_ext_sg;
....@@ -231,11 +238,13 @@
231238 union {
232239 struct sockaddr_in ip4;
233240 struct sockaddr_in6 ip6;
241
+ struct sockaddr sa;
234242 struct sockaddr_storage ss;
235243 } src;
236244 union {
237245 struct sockaddr_in ip4;
238246 struct sockaddr_in6 ip6;
247
+ struct sockaddr sa;
239248 struct sockaddr_storage ss;
240249 } dst;
241250 bool src_specified;
....@@ -259,6 +268,8 @@
259268 void *buf;
260269 size_t size;
261270 enum dma_data_direction direction;
271
+ u32 num_sge;
272
+ struct ib_sge sge[SRP_MAX_SGE];
262273 struct ib_cqe cqe;
263274 };
264275
....@@ -289,7 +300,7 @@
289300 int max_page_list_len;
290301 spinlock_t lock;
291302 struct list_head free_list;
292
- struct srp_fr_desc desc[0];
303
+ struct srp_fr_desc desc[];
293304 };
294305
295306 /**
....@@ -299,19 +310,15 @@
299310 * @pages: Array with DMA addresses of pages being considered for
300311 * memory registration.
301312 * @base_dma_addr: DMA address of the first page that has not yet been mapped.
302
- * @dma_len: Number of bytes that will be registered with the next
303
- * FMR or FR memory registration call.
313
+ * @dma_len: Number of bytes that will be registered with the next FR
314
+ * memory registration call.
304315 * @total_len: Total number of bytes in the sg-list being mapped.
305316 * @npages: Number of page addresses in the pages[] array.
306
- * @nmdesc: Number of FMR or FR memory descriptors used for mapping.
317
+ * @nmdesc: Number of FR memory descriptors used for mapping.
307318 * @ndesc: Number of SRP buffer descriptors that have been filled in.
308319 */
309320 struct srp_map_state {
310321 union {
311
- struct {
312
- struct ib_pool_fmr **next;
313
- struct ib_pool_fmr **end;
314
- } fmr;
315322 struct {
316323 struct srp_fr_desc **next;
317324 struct srp_fr_desc **end;