Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

RDMA/core: Add an integrity MR pool support

This is a preparation for adding new signature API to the rw-API.

Signed-off-by: Israel Rukshin <israelr@mellanox.com>
Reviewed-by: Max Gurtovoy <maxg@mellanox.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>

authored by

Israel Rukshin and committed by
Jason Gunthorpe
5a6781a5 b9294f8b

+10 -6
+6 -2
drivers/infiniband/core/mr_pool.c
··· 42 42 EXPORT_SYMBOL(ib_mr_pool_put); 43 43 44 44 int ib_mr_pool_init(struct ib_qp *qp, struct list_head *list, int nr, 45 - enum ib_mr_type type, u32 max_num_sg) 45 + enum ib_mr_type type, u32 max_num_sg, u32 max_num_meta_sg) 46 46 { 47 47 struct ib_mr *mr; 48 48 unsigned long flags; 49 49 int ret, i; 50 50 51 51 for (i = 0; i < nr; i++) { 52 - mr = ib_alloc_mr(qp->pd, type, max_num_sg); 52 + if (type == IB_MR_TYPE_INTEGRITY) 53 + mr = ib_alloc_mr_integrity(qp->pd, max_num_sg, 54 + max_num_meta_sg); 55 + else 56 + mr = ib_alloc_mr(qp->pd, type, max_num_sg); 53 57 if (IS_ERR(mr)) { 54 58 ret = PTR_ERR(mr); 55 59 goto out;
+2 -2
drivers/infiniband/core/rw.c
··· 719 719 if (nr_mrs) { 720 720 ret = ib_mr_pool_init(qp, &qp->rdma_mrs, nr_mrs, 721 721 IB_MR_TYPE_MEM_REG, 722 - rdma_rw_fr_page_list_len(dev)); 722 + rdma_rw_fr_page_list_len(dev), 0); 723 723 if (ret) { 724 724 pr_err("%s: failed to allocated %d MRs\n", 725 725 __func__, nr_mrs); ··· 729 729 730 730 if (nr_sig_mrs) { 731 731 ret = ib_mr_pool_init(qp, &qp->sig_mrs, nr_sig_mrs, 732 - IB_MR_TYPE_SIGNATURE, 2); 732 + IB_MR_TYPE_SIGNATURE, 2, 0); 733 733 if (ret) { 734 734 pr_err("%s: failed to allocated %d SIG MRs\n", 735 735 __func__, nr_sig_mrs);
+1 -1
drivers/nvme/host/rdma.c
··· 486 486 ret = ib_mr_pool_init(queue->qp, &queue->qp->rdma_mrs, 487 487 queue->queue_size, 488 488 IB_MR_TYPE_MEM_REG, 489 - nvme_rdma_get_max_fr_pages(ibdev)); 489 + nvme_rdma_get_max_fr_pages(ibdev), 0); 490 490 if (ret) { 491 491 dev_err(queue->ctrl->ctrl.device, 492 492 "failed to initialize MR pool sized %d for QID %d\n",
+1 -1
include/rdma/mr_pool.h
··· 19 19 void ib_mr_pool_put(struct ib_qp *qp, struct list_head *list, struct ib_mr *mr); 20 20 21 21 int ib_mr_pool_init(struct ib_qp *qp, struct list_head *list, int nr, 22 - enum ib_mr_type type, u32 max_num_sg); 22 + enum ib_mr_type type, u32 max_num_sg, u32 max_num_meta_sg); 23 23 void ib_mr_pool_destroy(struct ib_qp *qp, struct list_head *list); 24 24 25 25 #endif /* _RDMA_MR_POOL_H */