Skip to content

Commit 1fc4313

Browse files
Israel Rukshinjgunthorpe
Israel Rukshin
authored andcommitted
RDMA/iser: Remove support for FMR memory registration
FMR is not supported on most recent RDMA devices (that use fast memory registration mechanism). Also, FMR was recently removed from NFS/RDMA ULP. Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Israel Rukshin <[email protected]> Signed-off-by: Max Gurtovoy <[email protected]> Reviewed-by: Sagi Grimberg <[email protected]> Signed-off-by: Jason Gunthorpe <[email protected]>
1 parent c7ff819 commit 1fc4313

File tree

4 files changed

+40
-372
lines changed

4 files changed

+40
-372
lines changed

drivers/infiniband/ulp/iser/iscsi_iser.h

Lines changed: 7 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@
6565
#include <linux/in6.h>
6666

6767
#include <rdma/ib_verbs.h>
68-
#include <rdma/ib_fmr_pool.h>
6968
#include <rdma/rdma_cm.h>
7069

7170
#define DRV_NAME "iser"
@@ -312,33 +311,6 @@ struct iser_comp {
312311
int active_qps;
313312
};
314313

315-
/**
316-
* struct iser_reg_ops - Memory registration operations
317-
* per-device registration schemes
318-
*
319-
* @alloc_reg_res: Allocate registration resources
320-
* @free_reg_res: Free registration resources
321-
* @reg_mem: Register memory buffers
322-
* @unreg_mem: Un-register memory buffers
323-
* @reg_desc_get: Get a registration descriptor for pool
324-
* @reg_desc_put: Get a registration descriptor to pool
325-
*/
326-
struct iser_reg_ops {
327-
int (*alloc_reg_res)(struct ib_conn *ib_conn,
328-
unsigned cmds_max,
329-
unsigned int size);
330-
void (*free_reg_res)(struct ib_conn *ib_conn);
331-
int (*reg_mem)(struct iscsi_iser_task *iser_task,
332-
struct iser_data_buf *mem,
333-
struct iser_reg_resources *rsc,
334-
struct iser_mem_reg *reg);
335-
void (*unreg_mem)(struct iscsi_iser_task *iser_task,
336-
enum iser_data_dir cmd_dir);
337-
struct iser_fr_desc * (*reg_desc_get)(struct ib_conn *ib_conn);
338-
void (*reg_desc_put)(struct ib_conn *ib_conn,
339-
struct iser_fr_desc *desc);
340-
};
341-
342314
/**
343315
* struct iser_device - iSER device handle
344316
*
@@ -351,8 +323,6 @@ struct iser_reg_ops {
351323
* @comps_used: Number of completion contexts used, Min between online
352324
* cpus and device max completion vectors
353325
* @comps: Dinamically allocated array of completion handlers
354-
* @reg_ops: Registration ops
355-
* @remote_inv_sup: Remote invalidate is supported on this device
356326
*/
357327
struct iser_device {
358328
struct ib_device *ib_device;
@@ -362,26 +332,18 @@ struct iser_device {
362332
int refcount;
363333
int comps_used;
364334
struct iser_comp *comps;
365-
const struct iser_reg_ops *reg_ops;
366-
bool remote_inv_sup;
367335
};
368336

369337
/**
370338
* struct iser_reg_resources - Fast registration resources
371339
*
372340
* @mr: memory region
373-
* @fmr_pool: pool of fmrs
374341
* @sig_mr: signature memory region
375-
* @page_vec: fast reg page list used by fmr pool
376342
* @mr_valid: is mr valid indicator
377343
*/
378344
struct iser_reg_resources {
379-
union {
380-
struct ib_mr *mr;
381-
struct ib_fmr_pool *fmr_pool;
382-
};
345+
struct ib_mr *mr;
383346
struct ib_mr *sig_mr;
384-
struct iser_page_vec *page_vec;
385347
u8 mr_valid:1;
386348
};
387349

@@ -403,7 +365,7 @@ struct iser_fr_desc {
403365
* struct iser_fr_pool - connection fast registration pool
404366
*
405367
* @list: list of fastreg descriptors
406-
* @lock: protects fmr/fastreg pool
368+
* @lock: protects fastreg pool
407369
* @size: size of the pool
408370
*/
409371
struct iser_fr_pool {
@@ -518,12 +480,6 @@ struct iscsi_iser_task {
518480
struct iser_data_buf prot[ISER_DIRS_NUM];
519481
};
520482

521-
struct iser_page_vec {
522-
u64 *pages;
523-
int npages;
524-
struct ib_mr fake_mr;
525-
};
526-
527483
/**
528484
* struct iser_global - iSER global context
529485
*
@@ -548,8 +504,6 @@ extern int iser_pi_guard;
548504
extern unsigned int iser_max_sectors;
549505
extern bool iser_always_reg;
550506

551-
int iser_assign_reg_ops(struct iser_device *device);
552-
553507
int iser_send_control(struct iscsi_conn *conn,
554508
struct iscsi_task *task);
555509

@@ -591,22 +545,17 @@ void iser_finalize_rdma_unaligned_sg(struct iscsi_iser_task *iser_task,
591545
struct iser_data_buf *mem,
592546
enum iser_data_dir cmd_dir);
593547

594-
int iser_reg_rdma_mem(struct iscsi_iser_task *task,
595-
enum iser_data_dir dir,
596-
bool all_imm);
597-
void iser_unreg_rdma_mem(struct iscsi_iser_task *task,
598-
enum iser_data_dir dir);
548+
int iser_reg_mem_fastreg(struct iscsi_iser_task *task,
549+
enum iser_data_dir dir,
550+
bool all_imm);
551+
void iser_unreg_mem_fastreg(struct iscsi_iser_task *task,
552+
enum iser_data_dir dir);
599553

600554
int iser_connect(struct iser_conn *iser_conn,
601555
struct sockaddr *src_addr,
602556
struct sockaddr *dst_addr,
603557
int non_blocking);
604558

605-
void iser_unreg_mem_fmr(struct iscsi_iser_task *iser_task,
606-
enum iser_data_dir cmd_dir);
607-
void iser_unreg_mem_fastreg(struct iscsi_iser_task *iser_task,
608-
enum iser_data_dir cmd_dir);
609-
610559
int iser_post_recvl(struct iser_conn *iser_conn);
611560
int iser_post_recvm(struct iser_conn *iser_conn, int count);
612561
int iser_post_send(struct ib_conn *ib_conn, struct iser_tx_desc *tx_desc,
@@ -625,26 +574,12 @@ int iser_initialize_task_headers(struct iscsi_task *task,
625574
struct iser_tx_desc *tx_desc);
626575
int iser_alloc_rx_descriptors(struct iser_conn *iser_conn,
627576
struct iscsi_session *session);
628-
int iser_alloc_fmr_pool(struct ib_conn *ib_conn,
629-
unsigned cmds_max,
630-
unsigned int size);
631-
void iser_free_fmr_pool(struct ib_conn *ib_conn);
632577
int iser_alloc_fastreg_pool(struct ib_conn *ib_conn,
633578
unsigned cmds_max,
634579
unsigned int size);
635580
void iser_free_fastreg_pool(struct ib_conn *ib_conn);
636581
u8 iser_check_task_pi_status(struct iscsi_iser_task *iser_task,
637582
enum iser_data_dir cmd_dir, sector_t *sector);
638-
struct iser_fr_desc *
639-
iser_reg_desc_get_fr(struct ib_conn *ib_conn);
640-
void
641-
iser_reg_desc_put_fr(struct ib_conn *ib_conn,
642-
struct iser_fr_desc *desc);
643-
struct iser_fr_desc *
644-
iser_reg_desc_get_fmr(struct ib_conn *ib_conn);
645-
void
646-
iser_reg_desc_put_fmr(struct ib_conn *ib_conn,
647-
struct iser_fr_desc *desc);
648583

649584
static inline struct iser_conn *
650585
to_iser_conn(struct ib_conn *ib_conn)

drivers/infiniband/ulp/iser/iser_initiator.c

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ static int iser_prepare_read_cmd(struct iscsi_task *task)
7272
return err;
7373
}
7474

75-
err = iser_reg_rdma_mem(iser_task, ISER_DIR_IN, false);
75+
err = iser_reg_mem_fastreg(iser_task, ISER_DIR_IN, false);
7676
if (err) {
7777
iser_err("Failed to set up Data-IN RDMA\n");
7878
return err;
@@ -126,8 +126,8 @@ iser_prepare_write_cmd(struct iscsi_task *task,
126126
return err;
127127
}
128128

129-
err = iser_reg_rdma_mem(iser_task, ISER_DIR_OUT,
130-
buf_out->data_len == imm_sz);
129+
err = iser_reg_mem_fastreg(iser_task, ISER_DIR_OUT,
130+
buf_out->data_len == imm_sz);
131131
if (err != 0) {
132132
iser_err("Failed to register write cmd RDMA mem\n");
133133
return err;
@@ -250,8 +250,8 @@ int iser_alloc_rx_descriptors(struct iser_conn *iser_conn,
250250
iser_conn->qp_max_recv_dtos_mask = session->cmds_max - 1; /* cmds_max is 2^N */
251251
iser_conn->min_posted_rx = iser_conn->qp_max_recv_dtos >> 2;
252252

253-
if (device->reg_ops->alloc_reg_res(ib_conn, session->scsi_cmds_max,
254-
iser_conn->pages_per_mr))
253+
if (iser_alloc_fastreg_pool(ib_conn, session->scsi_cmds_max,
254+
iser_conn->pages_per_mr))
255255
goto create_rdma_reg_res_failed;
256256

257257
if (iser_alloc_login_buf(iser_conn))
@@ -293,7 +293,7 @@ int iser_alloc_rx_descriptors(struct iser_conn *iser_conn,
293293
rx_desc_alloc_fail:
294294
iser_free_login_buf(iser_conn);
295295
alloc_login_buf_fail:
296-
device->reg_ops->free_reg_res(ib_conn);
296+
iser_free_fastreg_pool(ib_conn);
297297
create_rdma_reg_res_failed:
298298
iser_err("failed allocating rx descriptors / data buffers\n");
299299
return -ENOMEM;
@@ -306,8 +306,7 @@ void iser_free_rx_descriptors(struct iser_conn *iser_conn)
306306
struct ib_conn *ib_conn = &iser_conn->ib_conn;
307307
struct iser_device *device = ib_conn->device;
308308

309-
if (device->reg_ops->free_reg_res)
310-
device->reg_ops->free_reg_res(ib_conn);
309+
iser_free_fastreg_pool(ib_conn);
311310

312311
rx_desc = iser_conn->rx_descs;
313312
for (i = 0; i < iser_conn->qp_max_recv_dtos; i++, rx_desc++)
@@ -768,7 +767,7 @@ void iser_task_rdma_finalize(struct iscsi_iser_task *iser_task)
768767
int prot_count = scsi_prot_sg_count(iser_task->sc);
769768

770769
if (iser_task->dir[ISER_DIR_IN]) {
771-
iser_unreg_rdma_mem(iser_task, ISER_DIR_IN);
770+
iser_unreg_mem_fastreg(iser_task, ISER_DIR_IN);
772771
iser_dma_unmap_task_data(iser_task,
773772
&iser_task->data[ISER_DIR_IN],
774773
DMA_FROM_DEVICE);
@@ -779,7 +778,7 @@ void iser_task_rdma_finalize(struct iscsi_iser_task *iser_task)
779778
}
780779

781780
if (iser_task->dir[ISER_DIR_OUT]) {
782-
iser_unreg_rdma_mem(iser_task, ISER_DIR_OUT);
781+
iser_unreg_mem_fastreg(iser_task, ISER_DIR_OUT);
783782
iser_dma_unmap_task_data(iser_task,
784783
&iser_task->data[ISER_DIR_OUT],
785784
DMA_TO_DEVICE);

0 commit comments

Comments
 (0)