import rdma-core-32.0-4.el8
This commit is contained in:
parent
ff70bdc9e7
commit
efa753cb66
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,2 +1,2 @@
|
||||
SOURCES/rdma-core-29.0.tar.gz
|
||||
SOURCES/rdma-core-32.0.tar.gz
|
||||
SOURCES/rxe_cfg.8.gz
|
||||
|
@ -1,2 +1,2 @@
|
||||
e070a7cc5f473acea1f795eb860929feb47569b7 SOURCES/rdma-core-29.0.tar.gz
|
||||
9b86b0000880648824ffdb11dde4d06c206f2536 SOURCES/rdma-core-32.0.tar.gz
|
||||
9187638355d9bee854989bbfc6c2956301fd52aa SOURCES/rxe_cfg.8.gz
|
||||
|
File diff suppressed because it is too large
Load Diff
91
SOURCES/0001-Fix-cmd_fd-leak-in-mlx5_alloc_context.patch
Normal file
91
SOURCES/0001-Fix-cmd_fd-leak-in-mlx5_alloc_context.patch
Normal file
@ -0,0 +1,91 @@
|
||||
From 169d050bc82a519fdc28f83bb685d86804383f0b Mon Sep 17 00:00:00 2001
|
||||
From: Greg Inozemtsev <greg@purestorage.com>
|
||||
Date: Tue, 27 Oct 2020 11:24:30 -0700
|
||||
Subject: [PATCH] Fix cmd_fd leak in mlx5_alloc_context
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The alloc_context function is supposed to take ownership of cmd_fd
|
||||
and close it if it fails and returns NULL. This was not done in
|
||||
early exit error paths from mlx5_init_context (called from mlx5_alloc_context).
|
||||
|
||||
Fixes: cb3be404fadc (“mlx5: Refactor mlx5_alloc_context()”)
|
||||
Signed-off-by: Greg Inozemtsev <greg@purestorage.com>
|
||||
---
|
||||
providers/mlx5/mlx5.c | 28 ++++++++++++++--------------
|
||||
1 file changed, 14 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/providers/mlx5/mlx5.c b/providers/mlx5/mlx5.c
|
||||
index 0a091f5b6b49..551560d561fe 100644
|
||||
--- a/providers/mlx5/mlx5.c
|
||||
+++ b/providers/mlx5/mlx5.c
|
||||
@@ -1334,25 +1334,14 @@ static void mlx5_uninit_context(struct mlx5_context *context)
|
||||
}
|
||||
|
||||
static struct mlx5_context *mlx5_init_context(struct ibv_device *ibdev,
|
||||
- int cmd_fd,
|
||||
- void *private_data)
|
||||
+ int cmd_fd)
|
||||
{
|
||||
- struct mlx5dv_context_attr *ctx_attr = private_data;
|
||||
struct mlx5_device *mdev = to_mdev(ibdev);
|
||||
struct mlx5_context *context;
|
||||
int low_lat_uuars;
|
||||
int tot_uuars;
|
||||
int ret;
|
||||
|
||||
- if (ctx_attr && ctx_attr->comp_mask) {
|
||||
- errno = EINVAL;
|
||||
- return NULL;
|
||||
- }
|
||||
-
|
||||
- ret = get_uar_info(mdev, &tot_uuars, &low_lat_uuars);
|
||||
- if (ret)
|
||||
- return NULL;
|
||||
-
|
||||
context = verbs_init_and_alloc_context(ibdev, cmd_fd, context, ibv_ctx,
|
||||
RDMA_DRIVER_MLX5);
|
||||
if (!context)
|
||||
@@ -1365,6 +1354,12 @@ static struct mlx5_context *mlx5_init_context(struct ibv_device *ibdev,
|
||||
strcpy(context->hostname, "host_unknown");
|
||||
|
||||
mlx5_single_threaded = single_threaded_app();
|
||||
+
|
||||
+ ret = get_uar_info(mdev, &tot_uuars, &low_lat_uuars);
|
||||
+ if (ret) {
|
||||
+ mlx5_uninit_context(context);
|
||||
+ return NULL;
|
||||
+ }
|
||||
context->tot_uuars = tot_uuars;
|
||||
context->low_lat_uuars = low_lat_uuars;
|
||||
|
||||
@@ -1569,10 +1564,15 @@ static struct verbs_context *mlx5_alloc_context(struct ibv_device *ibdev,
|
||||
bool always_devx = false;
|
||||
int ret;
|
||||
|
||||
- context = mlx5_init_context(ibdev, cmd_fd, NULL);
|
||||
+ context = mlx5_init_context(ibdev, cmd_fd);
|
||||
if (!context)
|
||||
return NULL;
|
||||
|
||||
+ if (ctx_attr && ctx_attr->comp_mask) {
|
||||
+ errno = EINVAL;
|
||||
+ goto err;
|
||||
+ }
|
||||
+
|
||||
req.total_num_bfregs = context->tot_uuars;
|
||||
req.num_low_latency_bfregs = context->low_lat_uuars;
|
||||
req.max_cqe_version = MLX5_CQE_VERSION_V1;
|
||||
@@ -1627,7 +1627,7 @@ static struct verbs_context *mlx5_import_context(struct ibv_device *ibdev,
|
||||
struct mlx5_context *mctx;
|
||||
int ret;
|
||||
|
||||
- mctx = mlx5_init_context(ibdev, cmd_fd, NULL);
|
||||
+ mctx = mlx5_init_context(ibdev, cmd_fd);
|
||||
if (!mctx)
|
||||
return NULL;
|
||||
|
||||
--
|
||||
2.25.4
|
||||
|
@ -0,0 +1,36 @@
|
||||
From ef1a51192eb44e7f23d3c5b63a80c0b8b6358660 Mon Sep 17 00:00:00 2001
|
||||
From: Kamal Heib <kamalheib1@gmail.com>
|
||||
Date: Thu, 14 Jan 2021 12:34:39 +0200
|
||||
Subject: [PATCH] bnxt_re: Fix reported error code from create_cq
|
||||
|
||||
[ Upstream commit 9a1c8f63344c5b7eb911332501d48fd6b14edde1 ]
|
||||
|
||||
Report EINVAL when trying to call bnxt_re_create_cq() with number of CQEs
|
||||
out of the supported range.
|
||||
|
||||
Fixes: fa8dce26b88c ("libbnxt_re: Add support for CQ and QP management")
|
||||
Signed-off-by: Kamal Heib <kamalheib1@gmail.com>
|
||||
Signed-off-by: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
|
||||
---
|
||||
providers/bnxt_re/verbs.c | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/providers/bnxt_re/verbs.c b/providers/bnxt_re/verbs.c
|
||||
index 03237e7f8103..20902ab5c020 100644
|
||||
--- a/providers/bnxt_re/verbs.c
|
||||
+++ b/providers/bnxt_re/verbs.c
|
||||
@@ -173,8 +173,10 @@ struct ibv_cq *bnxt_re_create_cq(struct ibv_context *ibvctx, int ncqe,
|
||||
struct bnxt_re_context *cntx = to_bnxt_re_context(ibvctx);
|
||||
struct bnxt_re_dev *dev = to_bnxt_re_dev(ibvctx->device);
|
||||
|
||||
- if (ncqe > dev->max_cq_depth)
|
||||
+ if (!ncqe || ncqe > dev->max_cq_depth) {
|
||||
+ errno = EINVAL;
|
||||
return NULL;
|
||||
+ }
|
||||
|
||||
cq = calloc(1, sizeof(*cq));
|
||||
if (!cq)
|
||||
--
|
||||
2.25.4
|
||||
|
@ -0,0 +1,36 @@
|
||||
From 5dee0eaa3a3c1f6b8e960038384e16ae730d201e Mon Sep 17 00:00:00 2001
|
||||
From: Kamal Heib <kamalheib1@gmail.com>
|
||||
Date: Thu, 24 Dec 2020 16:11:16 +0200
|
||||
Subject: [PATCH] cxgb4: Fix reported error code from create_cq
|
||||
|
||||
[ Upstream commit 8f85e04863e379d798c88a68eee5e34341961eff ]
|
||||
|
||||
Report EINVAL when trying to call c4iw_create_cq() with number of CQEs
|
||||
out of the supported range.
|
||||
|
||||
Fixes: d6e6ae69be5e ("Add libcxgb4 files.")
|
||||
Signed-off-by: Kamal Heib <kamalheib1@gmail.com>
|
||||
Signed-off-by: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
|
||||
---
|
||||
providers/cxgb4/verbs.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/providers/cxgb4/verbs.c b/providers/cxgb4/verbs.c
|
||||
index 32bae6906a15..d0e366f0fca4 100644
|
||||
--- a/providers/cxgb4/verbs.c
|
||||
+++ b/providers/cxgb4/verbs.c
|
||||
@@ -171,6 +171,11 @@ struct ibv_cq *c4iw_create_cq(struct ibv_context *context, int cqe,
|
||||
struct c4iw_dev *dev = to_c4iw_dev(context->device);
|
||||
int ret;
|
||||
|
||||
+ if (!cqe || cqe > T4_MAX_CQ_DEPTH) {
|
||||
+ errno = EINVAL;
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
chp = calloc(1, sizeof *chp);
|
||||
if (!chp) {
|
||||
return NULL;
|
||||
--
|
||||
2.25.4
|
||||
|
@ -0,0 +1,86 @@
|
||||
From 4b7203f835727e9314ef42db682b578730783d7d Mon Sep 17 00:00:00 2001
|
||||
From: Gal Pressman <galpress@amazon.com>
|
||||
Date: Wed, 11 Nov 2020 14:21:13 +0200
|
||||
Subject: [PATCH] efa: Flush write combining writes before writing to the LLQ
|
||||
|
||||
[ Upstream commit 9a0d3830da11a187fb6bffe4f6f361560a0b2f40 ]
|
||||
|
||||
An mmio_wc_start() is needed before writing to the LLQ memory in order
|
||||
to prevent the WQEs copy (WC memory) from being reordered relative to
|
||||
other mmio writes, such as tx doorbells (NC memory).
|
||||
|
||||
This prevents the provider to issue more than max_tx_batch LLQ writes
|
||||
between two doorbells. This is especially relevant when the user calls
|
||||
the _post API with more WQEs than max_tx_batch.
|
||||
|
||||
Fixes: 7aad28d11981 ("efa: Respect maximum TX doorbell batch")
|
||||
Signed-off-by: Shadi Ammouri <sammouri@amazon.com>
|
||||
Signed-off-by: Gal Pressman <galpress@amazon.com>
|
||||
Signed-off-by: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
|
||||
---
|
||||
providers/efa/verbs.c | 14 +++++++++++---
|
||||
1 file changed, 11 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/providers/efa/verbs.c b/providers/efa/verbs.c
|
||||
index e179ff24e911..e80660d1907f 100644
|
||||
--- a/providers/efa/verbs.c
|
||||
+++ b/providers/efa/verbs.c
|
||||
@@ -1389,7 +1389,6 @@ static inline void efa_rq_ring_doorbell(struct efa_rq *rq, uint16_t pc)
|
||||
|
||||
static inline void efa_sq_ring_doorbell(struct efa_sq *sq, uint16_t pc)
|
||||
{
|
||||
- mmio_flush_writes();
|
||||
mmio_write32(sq->wq.db, pc);
|
||||
}
|
||||
|
||||
@@ -1510,15 +1509,19 @@ int efa_post_send(struct ibv_qp *ibvqp, struct ibv_send_wr *wr,
|
||||
|
||||
if (curbatch == qp->sq.max_batch_wr) {
|
||||
curbatch = 0;
|
||||
+ mmio_flush_writes();
|
||||
efa_sq_ring_doorbell(&qp->sq, qp->sq.wq.pc);
|
||||
+ mmio_wc_start();
|
||||
}
|
||||
|
||||
wr = wr->next;
|
||||
}
|
||||
|
||||
ring_db:
|
||||
- if (curbatch)
|
||||
+ if (curbatch) {
|
||||
+ mmio_flush_writes();
|
||||
efa_sq_ring_doorbell(&qp->sq, qp->sq.wq.pc);
|
||||
+ }
|
||||
|
||||
/*
|
||||
* Not using mmio_wc_spinunlock as the doorbell write should be done
|
||||
@@ -1774,6 +1777,7 @@ static int efa_send_wr_complete(struct ibv_qp_ex *ibvqpx)
|
||||
pc = qp->sq.wq.pc - qp->sq.num_wqe_pending;
|
||||
sq_desc_idx = pc & qp->sq.wq.desc_mask;
|
||||
|
||||
+ /* mmio_wc_start() comes from efa_send_wr_start() */
|
||||
while (qp->sq.num_wqe_pending) {
|
||||
num_wqe_to_copy = min3(qp->sq.num_wqe_pending,
|
||||
qp->sq.wq.wqe_cnt - sq_desc_idx,
|
||||
@@ -1792,13 +1796,17 @@ static int efa_send_wr_complete(struct ibv_qp_ex *ibvqpx)
|
||||
qp->sq.wq.desc_mask;
|
||||
|
||||
if (curbatch == max_txbatch) {
|
||||
+ mmio_flush_writes();
|
||||
efa_sq_ring_doorbell(&qp->sq, pc);
|
||||
curbatch = 0;
|
||||
+ mmio_wc_start();
|
||||
}
|
||||
}
|
||||
|
||||
- if (curbatch)
|
||||
+ if (curbatch) {
|
||||
+ mmio_flush_writes();
|
||||
efa_sq_ring_doorbell(&qp->sq, qp->sq.wq.pc);
|
||||
+ }
|
||||
out:
|
||||
/*
|
||||
* Not using mmio_wc_spinunlock as the doorbell write should be done
|
||||
--
|
||||
2.25.4
|
||||
|
@ -0,0 +1,39 @@
|
||||
From 91b414f645b0fdca914151280bb14a12258a56e7 Mon Sep 17 00:00:00 2001
|
||||
From: Honggang Li <honli@redhat.com>
|
||||
Date: Wed, 13 Jan 2021 11:51:04 +0800
|
||||
Subject: [PATCH] ibacm: acm.c load plugin while it is soft link
|
||||
|
||||
NOTE: THIS ONE IS RHEL SPECIFIC WORKAROUND COMMIT.
|
||||
https://github.com/linux-rdma/rdma-core/pull/923
|
||||
|
||||
Because of commit ad5d934d688911149d795aee1d3b9fa06bf171a9,
|
||||
the provider libdsap.so.1.0.0 was not opened/used for address resolution
|
||||
for OPA device.
|
||||
|
||||
As discussed in this closed PR:
|
||||
https://github.com/linux-rdma/rdma-core/pull/848
|
||||
|
||||
I create a soft link for libdsap.so => libdsap.so.1.0.0 . The soft link
|
||||
was ignored because it is a not regular file.
|
||||
|
||||
Signed-off-by: Honggang Li <honli@redhat.com>
|
||||
---
|
||||
ibacm/src/acm.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/ibacm/src/acm.c b/ibacm/src/acm.c
|
||||
index f1c8a2fabfb4..77ffda316b0c 100644
|
||||
--- a/ibacm/src/acm.c
|
||||
+++ b/ibacm/src/acm.c
|
||||
@@ -2878,7 +2878,7 @@ static int acm_open_providers(void)
|
||||
acm_log(0, "Error - could not stat: %s\n", file_name);
|
||||
continue;
|
||||
}
|
||||
- if (!S_ISREG(buf.st_mode))
|
||||
+ if (!(S_ISREG(buf.st_mode) || S_ISLNK(buf.st_mode)))
|
||||
continue;
|
||||
|
||||
acm_log(2, "Loading provider %s...\n", file_name);
|
||||
--
|
||||
2.25.4
|
||||
|
@ -0,0 +1,78 @@
|
||||
From a2c4768ff2f0516791b80640894c5abd4eab14bf Mon Sep 17 00:00:00 2001
|
||||
From: Honggang Li <honli@redhat.com>
|
||||
Date: Tue, 27 Oct 2020 17:06:43 +0800
|
||||
Subject: [PATCH] infiniband-diags: specify the HCA name and Port number when
|
||||
run ibportstate
|
||||
|
||||
A host, from which execute the enable/disable/reset command, may be
|
||||
connected to multiple InfiniBand fabrics. When the HCA name and
|
||||
Port number were not specified, the libibumad library will pick up the
|
||||
first active port it was found, which may not be wanted. Recommend to
|
||||
specific the HCA name and Port number when run ibportstate.
|
||||
|
||||
On the other hand, HCA port may be locally changed without the
|
||||
knowledge of the Subnet Manager. When locally enable a disabled HCA
|
||||
port, the HCA name and Port number must be specified.
|
||||
|
||||
Signed-off-by: Honggang Li <honli@redhat.com>
|
||||
---
|
||||
infiniband-diags/ibportstate.c | 4 ++--
|
||||
infiniband-diags/man/ibportstate.8.in.rst | 13 +++++++------
|
||||
2 files changed, 9 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/infiniband-diags/ibportstate.c b/infiniband-diags/ibportstate.c
|
||||
index 17d1e1503834..7f3afb83bdb3 100644
|
||||
--- a/infiniband-diags/ibportstate.c
|
||||
+++ b/infiniband-diags/ibportstate.c
|
||||
@@ -401,8 +401,8 @@ int main(int argc, char **argv)
|
||||
"\twidth, query, down, arm, active, vls, mtu, lid, smlid, lmc,\n"
|
||||
"\tmkey, mkeylease, mkeyprot\n";
|
||||
const char *usage_examples[] = {
|
||||
- "3 1 disable\t\t\t# by lid",
|
||||
- "-G 0x2C9000100D051 1 enable\t# by guid",
|
||||
+ "-C qib0 -P 1 3 1 disable # by CA name, CA Port Number, lid, physical port number",
|
||||
+ "-C qib0 -P 1 3 1 enable # by CA name, CA Port Number, lid, physical port number",
|
||||
"-D 0 1\t\t\t# (query) by direct route",
|
||||
"3 1 reset\t\t\t# by lid",
|
||||
"3 1 speed 1\t\t\t# by lid",
|
||||
diff --git a/infiniband-diags/man/ibportstate.8.in.rst b/infiniband-diags/man/ibportstate.8.in.rst
|
||||
index da1de4c76317..309a3d191c51 100644
|
||||
--- a/infiniband-diags/man/ibportstate.8.in.rst
|
||||
+++ b/infiniband-diags/man/ibportstate.8.in.rst
|
||||
@@ -22,8 +22,9 @@ DESCRIPTION
|
||||
ibportstate allows the port state and port physical state of an IB port
|
||||
to be queried (in addition to link width and speed being validated
|
||||
relative to the peer port when the port queried is a switch port),
|
||||
-or a switch port to be disabled, enabled, or reset. It
|
||||
-also allows the link speed/width enabled on any IB port to be adjusted.
|
||||
+or a switch port to be disabled, enabled, or reset. InfiniBand HCA port
|
||||
+state may be changed locally without the knowledge of the Subnet Manager.
|
||||
+It also allows the link speed/width enabled on any IB port to be adjusted.
|
||||
|
||||
OPTIONS
|
||||
=======
|
||||
@@ -34,8 +35,8 @@ OPTIONS
|
||||
mkey, mkeylease, mkeyprot
|
||||
(Default is query)
|
||||
|
||||
- **enable, disable, and reset** are only allowed on switch ports (An
|
||||
- error is indicated if attempted on CA or router ports)
|
||||
+ **enable, disable, and reset** change or reset a switch or HCA port state
|
||||
+ (You must specify the CA name and Port number when locally change CA port state.)
|
||||
|
||||
**off** change the port state to disable.
|
||||
|
||||
@@ -114,8 +115,8 @@ EXAMPLES
|
||||
========
|
||||
|
||||
::
|
||||
- ibportstate 3 1 disable # by lid
|
||||
- ibportstate -G 0x2C9000100D051 1 enable # by guid
|
||||
+ ibportstate -C qib0 -P 1 3 1 disable # by CA name, CA Port Number, lid, physical port number
|
||||
+ ibportstate -C qib0 -P 1 3 1 enable # by CA name, CA Port Number, lid, physical port number
|
||||
ibportstate -D 0 1 # (query) by direct route
|
||||
ibportstate 3 1 reset # by lid
|
||||
ibportstate 3 1 speed 1 # by lid
|
||||
--
|
||||
2.25.4
|
||||
|
@ -0,0 +1,34 @@
|
||||
From da998d0d6eb8ca6fbe7848cf4c0808797ab9c882 Mon Sep 17 00:00:00 2001
|
||||
From: Kamal Heib <kamalheib1@gmail.com>
|
||||
Date: Wed, 23 Dec 2020 18:49:52 +0200
|
||||
Subject: [PATCH] libqedr: Fix reported error code from create_cq
|
||||
|
||||
[ Upstream commit e8b5a1d673f1eb2d93fb9fe09759fa03a6cf8aad ]
|
||||
|
||||
Report EINVAL when trying to call qelr_create_cq() with number of CQEs
|
||||
bigger than the supported max_cqes, also fix the printed range.
|
||||
|
||||
Fixes: c0965e4fe6fe ("libqedr (qelr) verbs")
|
||||
Signed-off-by: Kamal Heib <kamalheib1@gmail.com>
|
||||
Signed-off-by: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
|
||||
---
|
||||
providers/qedr/qelr_verbs.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/providers/qedr/qelr_verbs.c b/providers/qedr/qelr_verbs.c
|
||||
index e75d508f100b..631c9f844a95 100644
|
||||
--- a/providers/qedr/qelr_verbs.c
|
||||
+++ b/providers/qedr/qelr_verbs.c
|
||||
@@ -231,7 +231,8 @@ struct ibv_cq *qelr_create_cq(struct ibv_context *context, int cqe,
|
||||
if (!cqe || cqe > cxt->max_cqes) {
|
||||
DP_ERR(cxt->dbg_fp,
|
||||
"create cq: failed. attempted to allocate %d cqes but valid range is 1...%d\n",
|
||||
- cqe, cqe > cxt->max_cqes);
|
||||
+ cqe, cxt->max_cqes);
|
||||
+ errno = EINVAL;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
--
|
||||
2.25.4
|
||||
|
@ -0,0 +1,75 @@
|
||||
From fd10f4c26b1ff052ea3b893247d1b6d06d01e36a Mon Sep 17 00:00:00 2001
|
||||
From: Kamal Heib <kamalheib1@gmail.com>
|
||||
Date: Tue, 10 Nov 2020 16:59:59 +0200
|
||||
Subject: [PATCH] libqedr: Set XRC functions only in RoCE mode
|
||||
|
||||
As libqedr support both RoCE and iWarp, make sure to set the XRC
|
||||
functions only in RoCE mode, also change the assignment of the XRC
|
||||
functions to use verbs_set_ops().
|
||||
|
||||
Fixes: cae4a99ae679 ("libqedr: add support for XRC-SRQ's.")
|
||||
Signed-off-by: Kamal Heib <kamalheib1@gmail.com>
|
||||
---
|
||||
providers/qedr/qelr_main.c | 18 ++++++++++--------
|
||||
1 file changed, 10 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/providers/qedr/qelr_main.c b/providers/qedr/qelr_main.c
|
||||
index bdfaa930f0c6..e31cd452906f 100644
|
||||
--- a/providers/qedr/qelr_main.c
|
||||
+++ b/providers/qedr/qelr_main.c
|
||||
@@ -113,6 +113,14 @@ static const struct verbs_context_ops qelr_ctx_ops = {
|
||||
.free_context = qelr_free_context,
|
||||
};
|
||||
|
||||
+static const struct verbs_context_ops qelr_ctx_roce_ops = {
|
||||
+ .close_xrcd = qelr_close_xrcd,
|
||||
+ .create_qp_ex = qelr_create_qp_ex,
|
||||
+ .create_srq_ex = qelr_create_srq_ex,
|
||||
+ .get_srq_num = qelr_get_srq_num,
|
||||
+ .open_xrcd = qelr_open_xrcd,
|
||||
+};
|
||||
+
|
||||
static void qelr_uninit_device(struct verbs_device *verbs_device)
|
||||
{
|
||||
struct qelr_device *dev = get_qelr_dev(&verbs_device->device);
|
||||
@@ -171,7 +179,6 @@ static struct verbs_context *qelr_alloc_context(struct ibv_device *ibdev,
|
||||
int cmd_fd,
|
||||
void *private_data)
|
||||
{
|
||||
- struct verbs_context *v_ctx;
|
||||
struct qelr_devctx *ctx;
|
||||
struct qelr_alloc_context cmd = {};
|
||||
struct qelr_alloc_context_resp resp;
|
||||
@@ -181,7 +188,6 @@ static struct verbs_context *qelr_alloc_context(struct ibv_device *ibdev,
|
||||
if (!ctx)
|
||||
return NULL;
|
||||
|
||||
- v_ctx = &ctx->ibv_ctx;
|
||||
memset(&resp, 0, sizeof(resp));
|
||||
|
||||
qelr_open_debug_file(ctx);
|
||||
@@ -194,6 +200,8 @@ static struct verbs_context *qelr_alloc_context(struct ibv_device *ibdev,
|
||||
goto cmd_err;
|
||||
|
||||
verbs_set_ops(&ctx->ibv_ctx, &qelr_ctx_ops);
|
||||
+ if (IS_ROCE(ibdev))
|
||||
+ verbs_set_ops(&ctx->ibv_ctx, &qelr_ctx_roce_ops);
|
||||
|
||||
ctx->srq_table = calloc(QELR_MAX_SRQ_ID, sizeof(*ctx->srq_table));
|
||||
if (!ctx->srq_table) {
|
||||
@@ -252,12 +260,6 @@ static struct verbs_context *qelr_alloc_context(struct ibv_device *ibdev,
|
||||
goto cmd_err;
|
||||
}
|
||||
|
||||
- v_ctx->create_qp_ex = qelr_create_qp_ex;
|
||||
- v_ctx->open_xrcd = qelr_open_xrcd;
|
||||
- v_ctx->close_xrcd = qelr_close_xrcd;
|
||||
- v_ctx->create_srq_ex = qelr_create_srq_ex;
|
||||
- v_ctx->get_srq_num = qelr_get_srq_num;
|
||||
-
|
||||
return &ctx->ibv_ctx;
|
||||
|
||||
cmd_err:
|
||||
--
|
||||
2.25.4
|
||||
|
@ -0,0 +1,52 @@
|
||||
From ea4c14b07e9856cdbb70fc09771ae9373d39391c Mon Sep 17 00:00:00 2001
|
||||
From: Xiao Yang <yangx.jy@cn.fujitsu.com>
|
||||
Date: Wed, 16 Dec 2020 17:22:52 +0800
|
||||
Subject: [PATCH] librdmacm: Don't overwrite errno returned from libibverbs
|
||||
|
||||
[ Upstream commit 11bf28021e62235f312e3132013e3736e4e835e0 ]
|
||||
|
||||
Some functions reports fixed ENOMEM when getting any failure, so
|
||||
it's hard for user to know which actual error happens on them.
|
||||
|
||||
Fixes: 663098bfc3ac ("Rename librdmacm")
|
||||
Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
|
||||
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
|
||||
Signed-off-by: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
|
||||
---
|
||||
librdmacm/cma.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/librdmacm/cma.c b/librdmacm/cma.c
|
||||
index 6e3956558471..2e7d019a3f7f 100644
|
||||
--- a/librdmacm/cma.c
|
||||
+++ b/librdmacm/cma.c
|
||||
@@ -635,7 +635,7 @@ static int ucma_get_device(struct cma_id_private *id_priv, __be64 guid,
|
||||
if (!cma_dev->pd)
|
||||
cma_dev->pd = ibv_alloc_pd(cma_dev->verbs);
|
||||
if (!cma_dev->pd) {
|
||||
- ret = ERR(ENOMEM);
|
||||
+ ret = -1;
|
||||
goto out;
|
||||
}
|
||||
|
||||
@@ -1490,7 +1490,7 @@ static int ucma_create_cqs(struct rdma_cm_id *id, uint32_t send_size, uint32_t r
|
||||
return 0;
|
||||
err:
|
||||
ucma_destroy_cqs(id);
|
||||
- return ERR(ENOMEM);
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
int rdma_create_srq_ex(struct rdma_cm_id *id, struct ibv_srq_init_attr_ex *attr)
|
||||
@@ -1662,7 +1662,7 @@ int rdma_create_qp_ex(struct rdma_cm_id *id,
|
||||
attr->srq = id->srq;
|
||||
qp = ibv_create_qp_ex(id->verbs, attr);
|
||||
if (!qp) {
|
||||
- ret = ERR(ENOMEM);
|
||||
+ ret = -1;
|
||||
goto err1;
|
||||
}
|
||||
|
||||
--
|
||||
2.25.4
|
||||
|
@ -0,0 +1,33 @@
|
||||
From 0d9ed0f09b92f730ae3a755415c4e68e62c4cf99 Mon Sep 17 00:00:00 2001
|
||||
From: Yishai Hadas <yishaih@nvidia.com>
|
||||
Date: Wed, 9 Dec 2020 09:15:39 +0200
|
||||
Subject: [PATCH] mlx5: Consider single threaded mode for shared UAR
|
||||
|
||||
[ Upstream commit 9d6cbd2858d237d1d56bada430eca032074204c8 ]
|
||||
|
||||
In case application uses a single threaded mode even a UAR that is
|
||||
shared between QPs doesn't need to take a lock.
|
||||
|
||||
Fixes: 7fdcd258bc5f ("mlx5: Move to fully dynamic UAR mode including QPs")
|
||||
Signed-off-by: Yishai Hadas <yishaih@nvidia.com>
|
||||
Signed-off-by: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
|
||||
---
|
||||
providers/mlx5/verbs.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/providers/mlx5/verbs.c b/providers/mlx5/verbs.c
|
||||
index 7907218295f6..cc93dc4c366e 100644
|
||||
--- a/providers/mlx5/verbs.c
|
||||
+++ b/providers/mlx5/verbs.c
|
||||
@@ -326,7 +326,7 @@ static void mlx5_insert_dyn_uuars(struct mlx5_context *ctx,
|
||||
if (!bf_uar->dyn_alloc_uar)
|
||||
bf->bfreg_dyn_index = (ctx->curr_legacy_dyn_sys_uar_page - 1) * num_bfregs_per_page + j;
|
||||
bf->dyn_alloc_uar = bf_uar->dyn_alloc_uar;
|
||||
- bf->need_lock = bf_uar->qp_shared;
|
||||
+ bf->need_lock = bf_uar->qp_shared && !mlx5_single_threaded;
|
||||
mlx5_spinlock_init(&bf->lock, bf->need_lock);
|
||||
if (j != 0) {
|
||||
bf->uar = bf_uar->uar;
|
||||
--
|
||||
2.25.4
|
||||
|
@ -0,0 +1,75 @@
|
||||
From dadee6df65387ba0fea0d78cc9c99af0350d3c37 Mon Sep 17 00:00:00 2001
|
||||
From: Alex Vesker <valex@nvidia.com>
|
||||
Date: Tue, 8 Dec 2020 18:41:02 +0200
|
||||
Subject: [PATCH] mlx5: DR, Avoid ICM depletion on multiple domains
|
||||
|
||||
[ Upstream commit 951fdedd1ad580a0281e9bca22477942f5256c69 ]
|
||||
|
||||
When running multiple domains on the same PF, large ICM allocation can
|
||||
deplete all of the resource and lead to failures on other domains, this
|
||||
was seen on ConnectX6DX devices with limited size of action ICM (modify
|
||||
header).
|
||||
The solution is take into consideration the total available resource
|
||||
size.
|
||||
|
||||
Fixes: c86f095752f2 ("mlx5: DR, Increase ICM action memory allocation size up-to 8MB")
|
||||
Signed-off-by: Alex Vesker <valex@nvidia.com>
|
||||
Signed-off-by: Erez Shitrit <erezsh@nvidia.com>
|
||||
Signed-off-by: Yishai Hadas <yishaih@nvidia.com>
|
||||
Signed-off-by: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
|
||||
---
|
||||
providers/mlx5/dr_domain.c | 26 ++++++++++++++++++++------
|
||||
1 file changed, 20 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/providers/mlx5/dr_domain.c b/providers/mlx5/dr_domain.c
|
||||
index 0a4b565ef85b..1a999965cb9b 100644
|
||||
--- a/providers/mlx5/dr_domain.c
|
||||
+++ b/providers/mlx5/dr_domain.c
|
||||
@@ -283,24 +283,38 @@ static void dr_domain_caps_uninit(struct mlx5dv_dr_domain *dmn)
|
||||
|
||||
static int dr_domain_check_icm_memory_caps(struct mlx5dv_dr_domain *dmn)
|
||||
{
|
||||
+ uint32_t max_req_bytes_log, max_req_chunks_log;
|
||||
+
|
||||
+ /* Check for minimum ICM log byte size requirements */
|
||||
if (dmn->info.caps.log_modify_hdr_icm_size < DR_CHUNK_SIZE_4K +
|
||||
DR_MODIFY_ACTION_LOG_SIZE) {
|
||||
errno = ENOMEM;
|
||||
return errno;
|
||||
}
|
||||
|
||||
- dmn->info.max_log_action_icm_sz = min_t(uint32_t,
|
||||
- DR_CHUNK_SIZE_1024K,
|
||||
- dmn->info.caps.log_modify_hdr_icm_size
|
||||
- - DR_MODIFY_ACTION_LOG_SIZE);
|
||||
-
|
||||
if (dmn->info.caps.log_icm_size < DR_CHUNK_SIZE_1024K +
|
||||
DR_STE_LOG_SIZE) {
|
||||
errno = ENOMEM;
|
||||
return errno;
|
||||
}
|
||||
|
||||
- dmn->info.max_log_sw_icm_sz = DR_CHUNK_SIZE_1024K;
|
||||
+ /* Current code tries to use large allocations to improve our internal
|
||||
+ * memory allocation (less DMs and less FW calls).
|
||||
+ * When creating multiple domains on the same PF, we want to make sure
|
||||
+ * we don't deplete all of the ICM resources on a single domain.
|
||||
+ * To provide some functionality with a limited resource we will use
|
||||
+ * up to 1/8 of the total available size allowing opening a domain
|
||||
+ * of each type.
|
||||
+ */
|
||||
+ max_req_bytes_log = dmn->info.caps.log_modify_hdr_icm_size - 3;
|
||||
+ max_req_chunks_log = max_req_bytes_log - DR_MODIFY_ACTION_LOG_SIZE;
|
||||
+ dmn->info.max_log_action_icm_sz =
|
||||
+ min_t(uint32_t, DR_CHUNK_SIZE_1024K, max_req_chunks_log);
|
||||
+
|
||||
+ max_req_bytes_log = dmn->info.caps.log_icm_size - 3;
|
||||
+ max_req_chunks_log = max_req_bytes_log - DR_STE_LOG_SIZE;
|
||||
+ dmn->info.max_log_sw_icm_sz =
|
||||
+ min_t(uint32_t, DR_CHUNK_SIZE_1024K, max_req_chunks_log);
|
||||
|
||||
return 0;
|
||||
}
|
||||
--
|
||||
2.25.4
|
||||
|
@ -0,0 +1,41 @@
|
||||
From 297cc2c6323514a69b57aeeb5207cf63e5e2549b Mon Sep 17 00:00:00 2001
|
||||
From: Bodong Wang <bodong@nvidia.com>
|
||||
Date: Tue, 27 Oct 2020 08:59:02 -0500
|
||||
Subject: [PATCH] mlx5: DR, Create NC UAR as default but fall-back to WC if
|
||||
failed
|
||||
|
||||
[ Upstream commit 40b8e48792a423da1ceeaf58ac8eee81e9e0194a ]
|
||||
|
||||
Some devices may only support either NC or WC UAR. To handle such
|
||||
devices, first try to create NC, then try WC if NC failed.
|
||||
|
||||
Fixes: 84ac5272a05a ("mlx5: Enhance mlx5dv_devx_alloc_uar() functionality")
|
||||
Signed-off-by: Bodong Wang <bodong@nvidia.com>
|
||||
Signed-off-by: Yishai Hadas <yishaih@nvidia.com>
|
||||
Signed-off-by: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
|
||||
---
|
||||
providers/mlx5/dr_domain.c | 8 +++++++-
|
||||
1 file changed, 7 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/providers/mlx5/dr_domain.c b/providers/mlx5/dr_domain.c
|
||||
index b47c5841f624..5b8739dca2ef 100644
|
||||
--- a/providers/mlx5/dr_domain.c
|
||||
+++ b/providers/mlx5/dr_domain.c
|
||||
@@ -50,7 +50,13 @@ static int dr_domain_init_resources(struct mlx5dv_dr_domain *dmn)
|
||||
return ret;
|
||||
}
|
||||
|
||||
- dmn->uar = mlx5dv_devx_alloc_uar(dmn->ctx, 0);
|
||||
+ dmn->uar = mlx5dv_devx_alloc_uar(dmn->ctx,
|
||||
+ MLX5_IB_UAPI_UAR_ALLOC_TYPE_NC);
|
||||
+
|
||||
+ if (!dmn->uar)
|
||||
+ dmn->uar = mlx5dv_devx_alloc_uar(dmn->ctx,
|
||||
+ MLX5_IB_UAPI_UAR_ALLOC_TYPE_BF);
|
||||
+
|
||||
if (!dmn->uar) {
|
||||
dr_dbg(dmn, "Can't allocate UAR\n");
|
||||
goto clean_pd;
|
||||
--
|
||||
2.25.4
|
||||
|
@ -0,0 +1,176 @@
|
||||
From 2432a74c845b7b529cb6e9044140b9445922a7ae Mon Sep 17 00:00:00 2001
|
||||
From: Alex Vesker <valex@nvidia.com>
|
||||
Date: Wed, 28 Oct 2020 12:26:32 +0200
|
||||
Subject: [PATCH] mlx5: DR, Fix incorrect use of fl_roce_enabled capability
|
||||
|
||||
[ Upstream commit 2337d6790ad21b1d0c5373cf2aa6f8e70a510434 ]
|
||||
|
||||
Creating a FL QP should be allowed only when RoCE is enabled (roce_en)
|
||||
and FL is supported with RoCE enabled. Previously we relied on the
|
||||
general HCA cap whether RoCE is enabled and ignored its real state.
|
||||
Creating a FL QP even if RoCE is disabled which could results in a
|
||||
failure to modify QP.
|
||||
|
||||
Fixes: 6724f6530d3e ("mlx5: DR, Query RoCE capabilities")
|
||||
Signed-off-by: Alex Vesker <valex@nvidia.com>
|
||||
Signed-off-by: Yishai Hadas <yishaih@nvidia.com>
|
||||
Signed-off-by: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
|
||||
---
|
||||
providers/mlx5/dr_devx.c | 24 ++++++++++++++++++++++++
|
||||
providers/mlx5/dr_domain.c | 2 +-
|
||||
providers/mlx5/dr_send.c | 8 +++++++-
|
||||
providers/mlx5/mlx5_ifc.h | 29 +++++++++++++++++++++++++++++
|
||||
providers/mlx5/mlx5dv_dr.h | 2 ++
|
||||
5 files changed, 63 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/providers/mlx5/dr_devx.c b/providers/mlx5/dr_devx.c
|
||||
index cd0f8bbc2e44..74a8155b8777 100644
|
||||
--- a/providers/mlx5/dr_devx.c
|
||||
+++ b/providers/mlx5/dr_devx.c
|
||||
@@ -66,6 +66,26 @@ int dr_devx_query_esw_vport_context(struct ibv_context *ctx,
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int dr_devx_query_nic_vport_context(struct ibv_context *ctx,
|
||||
+ bool *roce_en)
|
||||
+{
|
||||
+ uint32_t out[DEVX_ST_SZ_DW(query_nic_vport_context_out)] = {};
|
||||
+ uint32_t in[DEVX_ST_SZ_DW(query_nic_vport_context_in)] = {};
|
||||
+ int err;
|
||||
+
|
||||
+ DEVX_SET(query_nic_vport_context_in, in, opcode,
|
||||
+ MLX5_CMD_OP_QUERY_NIC_VPORT_CONTEXT);
|
||||
+ err = mlx5dv_devx_general_cmd(ctx, in, sizeof(in), out, sizeof(out));
|
||||
+ if (err) {
|
||||
+ dr_dbg_ctx(ctx, "Query nic vport context failed %d\n", err);
|
||||
+ return err;
|
||||
+ }
|
||||
+
|
||||
+ *roce_en = DEVX_GET(query_nic_vport_context_out, out,
|
||||
+ nic_vport_context.roce_en);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
int dr_devx_query_gvmi(struct ibv_context *ctx, bool other_vport,
|
||||
uint16_t vport_number, uint16_t *gvmi)
|
||||
{
|
||||
@@ -225,6 +245,10 @@ int dr_devx_query_device(struct ibv_context *ctx, struct dr_devx_caps *caps)
|
||||
|
||||
/* RoCE caps */
|
||||
if (roce) {
|
||||
+ err = dr_devx_query_nic_vport_context(ctx, &caps->roce_caps.roce_en);
|
||||
+ if (err)
|
||||
+ return err;
|
||||
+
|
||||
DEVX_SET(query_hca_cap_in, in, opcode, MLX5_CMD_OP_QUERY_HCA_CAP);
|
||||
DEVX_SET(query_hca_cap_in, in, op_mod,
|
||||
MLX5_SET_HCA_CAP_OP_MOD_ROCE |
|
||||
diff --git a/providers/mlx5/dr_domain.c b/providers/mlx5/dr_domain.c
|
||||
index 916283e505aa..b47c5841f624 100644
|
||||
--- a/providers/mlx5/dr_domain.c
|
||||
+++ b/providers/mlx5/dr_domain.c
|
||||
@@ -199,7 +199,7 @@ static int dr_domain_caps_init(struct ibv_context *ctx,
|
||||
* force-loopback.
|
||||
*/
|
||||
if ((dmn->type != MLX5DV_DR_DOMAIN_TYPE_FDB) &&
|
||||
- !dmn->info.caps.roce_caps.fl_rc_qp_when_roce_enabled)
|
||||
+ !dr_send_allow_fl(&dmn->info.caps))
|
||||
return 0;
|
||||
|
||||
ret = dr_domain_query_fdb_caps(ctx, dmn);
|
||||
diff --git a/providers/mlx5/dr_send.c b/providers/mlx5/dr_send.c
|
||||
index dfda549d7f01..67ab1c7eb40f 100644
|
||||
--- a/providers/mlx5/dr_send.c
|
||||
+++ b/providers/mlx5/dr_send.c
|
||||
@@ -820,6 +820,12 @@ int dr_send_postsend_action(struct mlx5dv_dr_domain *dmn,
|
||||
return ret;
|
||||
}
|
||||
|
||||
+bool dr_send_allow_fl(struct dr_devx_caps *caps)
|
||||
+{
|
||||
+ return (caps->roce_caps.roce_en &&
|
||||
+ caps->roce_caps.fl_rc_qp_when_roce_enabled);
|
||||
+}
|
||||
+
|
||||
static int dr_prepare_qp_to_rts(struct mlx5dv_dr_domain *dmn)
|
||||
{
|
||||
struct dr_devx_qp_rts_attr rts_attr = {};
|
||||
@@ -844,7 +850,7 @@ static int dr_prepare_qp_to_rts(struct mlx5dv_dr_domain *dmn)
|
||||
rtr_attr.port_num = port;
|
||||
|
||||
/* Enable force-loopback on the QP */
|
||||
- if (dmn->info.caps.roce_caps.fl_rc_qp_when_roce_enabled) {
|
||||
+ if (dr_send_allow_fl(&dmn->info.caps)) {
|
||||
rtr_attr.fl = true;
|
||||
} else {
|
||||
ret = dr_devx_query_gid(dmn->ctx, port, gid_index, &rtr_attr.dgid_attr);
|
||||
diff --git a/providers/mlx5/mlx5_ifc.h b/providers/mlx5/mlx5_ifc.h
|
||||
index 815207a435a8..58b7da23b3aa 100644
|
||||
--- a/providers/mlx5/mlx5_ifc.h
|
||||
+++ b/providers/mlx5/mlx5_ifc.h
|
||||
@@ -49,6 +49,7 @@ enum {
|
||||
MLX5_CMD_OP_RTS2RTS_QP = 0x505,
|
||||
MLX5_CMD_OP_QUERY_QP = 0x50b,
|
||||
MLX5_CMD_OP_QUERY_ESW_VPORT_CONTEXT = 0x752,
|
||||
+ MLX5_CMD_OP_QUERY_NIC_VPORT_CONTEXT = 0x754,
|
||||
MLX5_CMD_OP_QUERY_ROCE_ADDRESS = 0x760,
|
||||
MLX5_CMD_OP_QUERY_LAG = 0x842,
|
||||
MLX5_CMD_OP_CREATE_TIR = 0x900,
|
||||
@@ -1963,6 +1964,34 @@ struct mlx5_ifc_query_esw_vport_context_in_bits {
|
||||
u8 reserved_at_60[0x20];
|
||||
};
|
||||
|
||||
+struct mlx5_ifc_nic_vport_context_bits {
|
||||
+ u8 reserved_at_0[0x1f];
|
||||
+ u8 roce_en[0x1];
|
||||
+
|
||||
+ u8 reserved_at_20[0x7e0];
|
||||
+};
|
||||
+
|
||||
+struct mlx5_ifc_query_nic_vport_context_out_bits {
|
||||
+ u8 status[0x8];
|
||||
+ u8 reserved_at_8[0x18];
|
||||
+
|
||||
+ u8 syndrome[0x20];
|
||||
+
|
||||
+ u8 reserved_at_40[0x40];
|
||||
+
|
||||
+ struct mlx5_ifc_nic_vport_context_bits nic_vport_context;
|
||||
+};
|
||||
+
|
||||
+struct mlx5_ifc_query_nic_vport_context_in_bits {
|
||||
+ u8 opcode[0x10];
|
||||
+ u8 reserved_at_10[0x10];
|
||||
+
|
||||
+ u8 reserved_at_20[0x10];
|
||||
+ u8 op_mod[0x10];
|
||||
+
|
||||
+ u8 reserved_at_40[0x40];
|
||||
+};
|
||||
+
|
||||
enum {
|
||||
MLX5_QPC_ST_RC = 0x0,
|
||||
};
|
||||
diff --git a/providers/mlx5/mlx5dv_dr.h b/providers/mlx5/mlx5dv_dr.h
|
||||
index 22e99eef4f32..a130211c15f5 100644
|
||||
--- a/providers/mlx5/mlx5dv_dr.h
|
||||
+++ b/providers/mlx5/mlx5dv_dr.h
|
||||
@@ -582,6 +582,7 @@ struct dr_devx_vport_cap {
|
||||
};
|
||||
|
||||
struct dr_devx_roce_cap {
|
||||
+ bool roce_en;
|
||||
bool fl_rc_qp_when_roce_enabled;
|
||||
};
|
||||
|
||||
@@ -1032,6 +1033,7 @@ struct dr_send_ring {
|
||||
int dr_send_ring_alloc(struct mlx5dv_dr_domain *dmn);
|
||||
void dr_send_ring_free(struct dr_send_ring *send_ring);
|
||||
int dr_send_ring_force_drain(struct mlx5dv_dr_domain *dmn);
|
||||
+bool dr_send_allow_fl(struct dr_devx_caps *caps);
|
||||
int dr_send_postsend_ste(struct mlx5dv_dr_domain *dmn, struct dr_ste *ste,
|
||||
uint8_t *data, uint16_t size, uint16_t offset);
|
||||
int dr_send_postsend_htbl(struct mlx5dv_dr_domain *dmn, struct dr_ste_htbl *htbl,
|
||||
--
|
||||
2.25.4
|
||||
|
@ -0,0 +1,38 @@
|
||||
From e99103602f477c84f31b79779f7544d6e1704593 Mon Sep 17 00:00:00 2001
|
||||
From: Michael Guralnik <michaelgur@nvidia.com>
|
||||
Date: Mon, 19 Oct 2020 09:00:56 +0300
|
||||
Subject: [PATCH] mlx5: Fix wqe size parameter in wqe signature calculation
|
||||
|
||||
[ Upstream commit 8cde184624d192f7cd61247eec92a3a9b4ba7c7f ]
|
||||
|
||||
WQE signature calculation requires passing the size of the WQE as a
|
||||
parameter.
|
||||
|
||||
Current code passes the qpn_ds field as the WQE size which is wrong.
|
||||
Fixing to extract from the qpn_ds the WQE size in bytes and use it for
|
||||
the signature calculations.
|
||||
|
||||
Fixes: 8c4791ae2395 ("libmlx5: First version of libmlx5")
|
||||
Signed-off-by: Michael Guralnik <michaelgur@nvidia.com>
|
||||
Signed-off-by: Yishai Hadas <yishaih@nvidia.com>
|
||||
Signed-off-by: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
|
||||
---
|
||||
providers/mlx5/qp.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/providers/mlx5/qp.c b/providers/mlx5/qp.c
|
||||
index 077346d63137..13d7bcccc39d 100644
|
||||
--- a/providers/mlx5/qp.c
|
||||
+++ b/providers/mlx5/qp.c
|
||||
@@ -368,7 +368,7 @@ static int set_data_inl_seg(struct mlx5_qp *qp, struct ibv_send_wr *wr,
|
||||
|
||||
static uint8_t wq_sig(struct mlx5_wqe_ctrl_seg *ctrl)
|
||||
{
|
||||
- return calc_sig(ctrl, be32toh(ctrl->qpn_ds));
|
||||
+ return calc_sig(ctrl, (be32toh(ctrl->qpn_ds) & 0x3f) << 4);
|
||||
}
|
||||
|
||||
#ifdef MLX5_DEBUG
|
||||
--
|
||||
2.25.4
|
||||
|
57
SOURCES/0001-pyverbs-Add-mlx5dv-CQ-support.patch
Normal file
57
SOURCES/0001-pyverbs-Add-mlx5dv-CQ-support.patch
Normal file
@ -0,0 +1,57 @@
|
||||
From 4707d4b89fcdab09d568a823ddf521f835a47fe9 Mon Sep 17 00:00:00 2001
|
||||
From: Ido Kalir <idok@mellanox.com>
|
||||
Date: Thu, 6 Aug 2020 14:44:31 +0300
|
||||
Subject: [PATCH] pyverbs: Add mlx5dv CQ support
|
||||
|
||||
Support the creation of QPInitAttr and QPInitAttrEx with a DV CQ
|
||||
instance.
|
||||
|
||||
Signed-off-by: Ido Kalir <idok@mellanox.com>
|
||||
Signed-off-by: Edward Srouji <edwards@nvidia.com>
|
||||
---
|
||||
pyverbs/qp.pyx | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/pyverbs/qp.pyx b/pyverbs/qp.pyx
|
||||
index 24dfc667227a..09d1c55af835 100644
|
||||
--- a/pyverbs/qp.pyx
|
||||
+++ b/pyverbs/qp.pyx
|
||||
@@ -119,7 +119,7 @@ cdef class QPInitAttr(PyverbsObject):
|
||||
if scq is not None:
|
||||
if type(scq) is CQ:
|
||||
self.attr.send_cq = (<CQ>scq).cq
|
||||
- elif type(scq) is CQEX:
|
||||
+ elif isinstance(scq, CQEX):
|
||||
self.attr.send_cq = (<CQEX>scq).ibv_cq
|
||||
else:
|
||||
raise PyverbsUserError('Expected CQ/CQEX, got {t}'.\
|
||||
@@ -129,7 +129,7 @@ cdef class QPInitAttr(PyverbsObject):
|
||||
if rcq is not None:
|
||||
if type(rcq) is CQ:
|
||||
self.attr.recv_cq = (<CQ>rcq).cq
|
||||
- elif type(rcq) is CQEX:
|
||||
+ elif isinstance(rcq, CQEX):
|
||||
self.attr.recv_cq = (<CQEX>rcq).ibv_cq
|
||||
else:
|
||||
raise PyverbsUserError('Expected CQ/CQEX, got {t}'.\
|
||||
@@ -282,7 +282,7 @@ cdef class QPInitAttrEx(PyverbsObject):
|
||||
if scq is not None:
|
||||
if type(scq) is CQ:
|
||||
self.attr.send_cq = (<CQ>scq).cq
|
||||
- elif type(scq) is CQEX:
|
||||
+ elif isinstance(scq, CQEX):
|
||||
self.attr.send_cq = (<CQEX>scq).ibv_cq
|
||||
else:
|
||||
raise PyverbsUserError('Expected CQ/CQEX, got {t}'.\
|
||||
@@ -292,7 +292,7 @@ cdef class QPInitAttrEx(PyverbsObject):
|
||||
if rcq is not None:
|
||||
if type(rcq) is CQ:
|
||||
self.attr.recv_cq = (<CQ>rcq).cq
|
||||
- elif type(rcq) is CQEX:
|
||||
+ elif isinstance(rcq, CQEX):
|
||||
self.attr.recv_cq = (<CQEX>rcq).ibv_cq
|
||||
else:
|
||||
raise PyverbsUserError('Expected CQ/CQEX, got {t}'.\
|
||||
--
|
||||
2.25.4
|
||||
|
41
SOURCES/0001-qedr-fix-USE_AFTER_FREE-issue.patch
Normal file
41
SOURCES/0001-qedr-fix-USE_AFTER_FREE-issue.patch
Normal file
@ -0,0 +1,41 @@
|
||||
From 9f25aebffc4f6d4d9b7ccf3e1ba911b997fb9ab4 Mon Sep 17 00:00:00 2001
|
||||
From: Honggang Li <honli@redhat.com>
|
||||
Date: Sun, 15 Nov 2020 17:53:47 +0800
|
||||
Subject: [PATCH] qedr: fix USE_AFTER_FREE issue
|
||||
|
||||
[ Upstream commit 56137398dbd58f876cb6238da9babb9500ac38b4 ]
|
||||
|
||||
Issue was detected by Coverity.
|
||||
|
||||
Error: USE_AFTER_FREE (CWE-416): [#def10]
|
||||
rdma-core-33.0/providers/qedr/qelr_verbs.c:2678: freed_arg: "free" frees "srq".
|
||||
rdma-core-33.0/providers/qedr/qelr_verbs.c:2680: pass_freed_arg: Passing freed pointer "srq" as an argument to "fprintf".
|
||||
|# 2678| free(srq);
|
||||
|# 2679| err0:
|
||||
|# 2680|-> DP_ERR(cxt->dbg_fp,
|
||||
|# 2681| "create srq: failed to create %p. rc=%d\n", srq, rc);
|
||||
|# 2682| return NULL;
|
||||
|
||||
Fixes: cae4a99ae679 ("libqedr: add support for XRC-SRQ's.")
|
||||
Signed-off-by: Honggang Li <honli@redhat.com>
|
||||
Signed-off-by: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
|
||||
---
|
||||
providers/qedr/qelr_verbs.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/providers/qedr/qelr_verbs.c b/providers/qedr/qelr_verbs.c
|
||||
index 4e77a1976a91..e75d508f100b 100644
|
||||
--- a/providers/qedr/qelr_verbs.c
|
||||
+++ b/providers/qedr/qelr_verbs.c
|
||||
@@ -2678,7 +2678,7 @@ err1:
|
||||
free(srq);
|
||||
err0:
|
||||
DP_ERR(cxt->dbg_fp,
|
||||
- "create srq: failed to create %p. rc=%d\n", srq, rc);
|
||||
+ "create srq: failed to create. rc=%d\n", rc);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
--
|
||||
2.25.4
|
||||
|
@ -0,0 +1,34 @@
|
||||
From d83d397af58977f9c8af3fecff6e86ce76634e4b Mon Sep 17 00:00:00 2001
|
||||
From: Xiao Yang <yangx.jy@cn.fujitsu.com>
|
||||
Date: Fri, 11 Dec 2020 14:59:10 +0800
|
||||
Subject: [PATCH] rdma_server: Add '-s' option in rdma_server's manual
|
||||
|
||||
[ Upstream commit e0ec9a5204eaefeddb35de580d610e066d6a9022 ]
|
||||
|
||||
Fixes: 519d8d7aa965 ("librdmacm: Add command line option to specify server")
|
||||
Fixes: cdea72a1e7e6 ("librdmacm: Change server default address to any address.")
|
||||
Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
|
||||
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
|
||||
Signed-off-by: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
|
||||
---
|
||||
librdmacm/man/rdma_server.1 | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/librdmacm/man/rdma_server.1 b/librdmacm/man/rdma_server.1
|
||||
index ada2564983f3..f83633e0b195 100644
|
||||
--- a/librdmacm/man/rdma_server.1
|
||||
+++ b/librdmacm/man/rdma_server.1
|
||||
@@ -13,6 +13,10 @@ two nodes. This example is intended to provide a very simple coding
|
||||
example of how to use RDMA.
|
||||
.SH "OPTIONS"
|
||||
.TP
|
||||
+\-s server_address
|
||||
+Specifies the address that the rdma_server listens on. By default the
|
||||
+server listens on any address(0.0.0.0).
|
||||
+.TP
|
||||
\-p port
|
||||
Changes the port number that the server listens on. By default the server
|
||||
listens on port 7471.
|
||||
--
|
||||
2.25.4
|
||||
|
34
SOURCES/0001-srp_daemon-Fix-systemd-dependency.patch
Normal file
34
SOURCES/0001-srp_daemon-Fix-systemd-dependency.patch
Normal file
@ -0,0 +1,34 @@
|
||||
From d3122072034c574cadbd74df60bfe6c2464a9924 Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
|
||||
Date: Mon, 11 Jan 2021 10:51:01 +0100
|
||||
Subject: [PATCH] srp_daemon: Fix systemd dependency
|
||||
|
||||
[ Upstream commit 460f4368ece1652bcf9c4d282e331e9422c02841 ]
|
||||
|
||||
remote-fs-pre.target is a passive target that is not loaded without someone
|
||||
actively requiring it. Even is remote-fs.target is active.
|
||||
This means that srp_daemon will not get started at boot
|
||||
unless another service explicitely requires remote-fs-pre.target.
|
||||
|
||||
This solves the issue by having the srp_daemon service wanted by
|
||||
the multi-user.target.
|
||||
|
||||
Fixes: 1c7fe513e3e9 (srp_daemon: One systemd service per port)
|
||||
Signed-off-by: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
|
||||
---
|
||||
srp_daemon/srp_daemon.service.in | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/srp_daemon/srp_daemon.service.in b/srp_daemon/srp_daemon.service.in
|
||||
index 188b7e1a3712..bdd70db566af 100644
|
||||
--- a/srp_daemon/srp_daemon.service.in
|
||||
+++ b/srp_daemon/srp_daemon.service.in
|
||||
@@ -16,4 +16,4 @@ ProtectKernelModules=yes
|
||||
RestrictRealtime=yes
|
||||
|
||||
[Install]
|
||||
-WantedBy=remote-fs-pre.target
|
||||
+WantedBy=multi-user.target
|
||||
--
|
||||
2.25.4
|
||||
|
358
SOURCES/0001-tests-Add-mlx5-CQ-tests.patch
Normal file
358
SOURCES/0001-tests-Add-mlx5-CQ-tests.patch
Normal file
@ -0,0 +1,358 @@
|
||||
From 8aae7abe241c81ef7d461940d7bb7f2973172b99 Mon Sep 17 00:00:00 2001
|
||||
From: Ido Kalir <idok@mellanox.com>
|
||||
Date: Tue, 18 Aug 2020 16:03:05 +0300
|
||||
Subject: [PATCH] tests: Add mlx5 CQ tests
|
||||
|
||||
Add tests for mlx5dv CQ, including traffic and some bad creation flows.
|
||||
|
||||
Signed-off-by: Ido Kalir <idok@mellanox.com>
|
||||
Signed-off-by: Edward Srouji <edwards@nvidia.com>
|
||||
---
|
||||
tests/CMakeLists.txt | 1 +
|
||||
tests/base.py | 28 ++++-
|
||||
tests/mlx5_base.py | 6 +-
|
||||
tests/test_mlx5_cq.py | 237 ++++++++++++++++++++++++++++++++++++++++++
|
||||
4 files changed, 269 insertions(+), 3 deletions(-)
|
||||
create mode 100644 tests/test_mlx5_cq.py
|
||||
|
||||
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
|
||||
index 4de98d08a81e..ce3b5ef25b81 100644
|
||||
--- a/tests/CMakeLists.txt
|
||||
+++ b/tests/CMakeLists.txt
|
||||
@@ -14,6 +14,7 @@ rdma_python_test(tests
|
||||
test_cqex.py
|
||||
test_device.py
|
||||
test_efadv.py
|
||||
+ test_mlx5_cq.py
|
||||
test_mlx5_dc.py
|
||||
test_mlx5_lag_affinity.py
|
||||
test_mlx5_pp.py
|
||||
diff --git a/tests/base.py b/tests/base.py
|
||||
index 3eb5f5db9648..1ca52f0ce5bf 100644
|
||||
--- a/tests/base.py
|
||||
+++ b/tests/base.py
|
||||
@@ -104,6 +104,29 @@ class RDMATestCase(unittest.TestCase):
|
||||
self.gid_index = gid_index
|
||||
self.pkey_index = pkey_index
|
||||
self.ip_addr = None
|
||||
+ self.pre_environment = {}
|
||||
+
|
||||
+ def set_env_variable(self, var, value):
|
||||
+ """
|
||||
+ Set environment variable. The current value for each variable is stored
|
||||
+ and is set back at the end of the test.
|
||||
+ :param var: The name of the environment variable
|
||||
+ :param value: The requested new value of this environment variable
|
||||
+ """
|
||||
+ if var not in self.pre_environment.keys():
|
||||
+ self.pre_environment[var] = os.environ.get(var)
|
||||
+ os.environ[var] = value
|
||||
+
|
||||
+ def tearDown(self):
|
||||
+ """
|
||||
+ Restore the previous environment variables values before ending the test.
|
||||
+ """
|
||||
+ for k, v in self.pre_environment.items():
|
||||
+ if v is None:
|
||||
+ os.environ.pop(k)
|
||||
+ else:
|
||||
+ os.environ[k] = v
|
||||
+ super().tearDown()
|
||||
|
||||
def is_eth_and_has_roce_hw_bug(self):
|
||||
"""
|
||||
@@ -256,7 +279,7 @@ class TrafficResources(BaseResources):
|
||||
needed for traffic.
|
||||
"""
|
||||
def __init__(self, dev_name, ib_port, gid_index, with_srq=False,
|
||||
- qp_count=1):
|
||||
+ qp_count=1, msg_size=1024):
|
||||
"""
|
||||
Initializes a TrafficResources object with the given values and creates
|
||||
basic RDMA resources.
|
||||
@@ -265,11 +288,12 @@ class TrafficResources(BaseResources):
|
||||
:param gid_index: Which GID index to use
|
||||
:param with_srq: If True, create SRQ and attach to QPs
|
||||
:param qp_count: Number of QPs to create
|
||||
+ :param msg_size: Size of resource msg. If None, use 1024 as default.
|
||||
"""
|
||||
super(TrafficResources, self).__init__(dev_name=dev_name,
|
||||
ib_port=ib_port,
|
||||
gid_index=gid_index)
|
||||
- self.msg_size = 1024
|
||||
+ self.msg_size = msg_size
|
||||
self.num_msgs = 1000
|
||||
self.port_attr = None
|
||||
self.mr = None
|
||||
diff --git a/tests/mlx5_base.py b/tests/mlx5_base.py
|
||||
index 099906f35129..a4202bae6a0d 100644
|
||||
--- a/tests/mlx5_base.py
|
||||
+++ b/tests/mlx5_base.py
|
||||
@@ -18,8 +18,9 @@ from pyverbs.mr import MR
|
||||
|
||||
class Mlx5DcResources(TrafficResources):
|
||||
def __init__(self, dev_name, ib_port, gid_index, send_ops_flags,
|
||||
- qp_count=1):
|
||||
+ qp_count=1, create_flags=0):
|
||||
self.send_ops_flags = send_ops_flags
|
||||
+ self.create_flags = create_flags
|
||||
super().__init__(dev_name, ib_port, gid_index, with_srq=True,
|
||||
qp_count=qp_count)
|
||||
|
||||
@@ -77,7 +78,10 @@ class Mlx5DcResources(TrafficResources):
|
||||
try:
|
||||
for _ in range(self.qp_count):
|
||||
comp_mask = dve.MLX5DV_QP_INIT_ATTR_MASK_DC
|
||||
+ if self.create_flags:
|
||||
+ comp_mask |= dve.MLX5DV_QP_INIT_ATTR_MASK_QP_CREATE_FLAGS
|
||||
attr = Mlx5DVQPInitAttr(comp_mask=comp_mask,
|
||||
+ create_flags=self.create_flags,
|
||||
dc_init_attr=Mlx5DVDCInitAttr())
|
||||
qp = Mlx5QP(self.ctx, qp_init_attr, attr)
|
||||
self.qps.append(qp)
|
||||
diff --git a/tests/test_mlx5_cq.py b/tests/test_mlx5_cq.py
|
||||
new file mode 100644
|
||||
index 000000000000..1f757c27345e
|
||||
--- /dev/null
|
||||
+++ b/tests/test_mlx5_cq.py
|
||||
@@ -0,0 +1,237 @@
|
||||
+import unittest
|
||||
+import errno
|
||||
+
|
||||
+from pyverbs.providers.mlx5.mlx5dv import Mlx5Context, Mlx5DVContextAttr, \
|
||||
+ Mlx5DVCQInitAttr, Mlx5CQ, context_flags_to_str
|
||||
+from pyverbs.pyverbs_error import PyverbsRDMAError, PyverbsUserError
|
||||
+from tests.base import RDMATestCase, RCResources
|
||||
+import pyverbs.providers.mlx5.mlx5_enums as dve
|
||||
+from tests.mlx5_base import Mlx5DcResources
|
||||
+from pyverbs.cq import CqInitAttrEx
|
||||
+import pyverbs.enums as e
|
||||
+import tests.utils as u
|
||||
+
|
||||
+
|
||||
+def create_dv_cq(res):
|
||||
+ """
|
||||
+ Create Mlx5 DV CQ.
|
||||
+ :param res: An instance of BaseResources.
|
||||
+ :return: None
|
||||
+ """
|
||||
+ dvcq_init_attr = Mlx5DVCQInitAttr()
|
||||
+ if res.cqe_comp_res_format:
|
||||
+ dvcq_init_attr.cqe_comp_res_format = res.cqe_comp_res_format
|
||||
+ dvcq_init_attr.comp_mask |= dve.MLX5DV_CQ_INIT_ATTR_MASK_COMPRESSED_CQE
|
||||
+ if res.flags:
|
||||
+ dvcq_init_attr.flags = res.flags
|
||||
+ dvcq_init_attr.comp_mask |= dve.MLX5DV_CQ_INIT_ATTR_MASK_FLAGS
|
||||
+ if res.cqe_size:
|
||||
+ dvcq_init_attr.cqe_size = res.cqe_size
|
||||
+ dvcq_init_attr.comp_mask |= dve.MLX5DV_CQ_INIT_ATTR_MASK_CQE_SIZE
|
||||
+ try:
|
||||
+ res.cq = Mlx5CQ(res.ctx, CqInitAttrEx(), dvcq_init_attr)
|
||||
+ except PyverbsRDMAError as ex:
|
||||
+ if ex.error_code == errno.EOPNOTSUPP:
|
||||
+ raise unittest.SkipTest('Create Mlx5DV CQ is not supported')
|
||||
+ raise ex
|
||||
+
|
||||
+
|
||||
+class Mlx5CQRes(RCResources):
|
||||
+ def __init__(self, dev_name, ib_port, gid_index, cqe_comp_res_format=None,
|
||||
+ flags=None, cqe_size=None, msg_size=1024, requested_dev_cap=None):
|
||||
+ """
|
||||
+ Initialize Mlx5 DV CQ resources based on RC resources that include RC
|
||||
+ QP.
|
||||
+ :param dev_name: Device name to be used
|
||||
+ :param ib_port: IB port of the device to use
|
||||
+ :param gid_index: Which GID index to use
|
||||
+ :param cqe_comp_res_format: Type of compression to use
|
||||
+ :param flags: DV CQ specific flags
|
||||
+ :param cqe_size: The CQE size
|
||||
+ :param msg_size: The resource msg size
|
||||
+ :param requested_dev_cap: A necessary device cap. If it's not supported
|
||||
+ by the device, the test will be skipped.
|
||||
+ """
|
||||
+ self.cqe_comp_res_format = cqe_comp_res_format
|
||||
+ self.flags = flags
|
||||
+ self.cqe_size = cqe_size
|
||||
+ self.requested_dev_cap = requested_dev_cap
|
||||
+ super().__init__(dev_name, ib_port, gid_index, msg_size=msg_size)
|
||||
+
|
||||
+ def create_context(self):
|
||||
+ mlx5dv_attr = Mlx5DVContextAttr()
|
||||
+ try:
|
||||
+ self.ctx = Mlx5Context(mlx5dv_attr, name=self.dev_name)
|
||||
+ except PyverbsUserError as ex:
|
||||
+ raise unittest.SkipTest(f'Could not open mlx5 context ({ex})')
|
||||
+ except PyverbsRDMAError:
|
||||
+ raise unittest.SkipTest('Opening mlx5 context is not supported')
|
||||
+ if self.requested_dev_cap:
|
||||
+ if not self.ctx.query_mlx5_device().flags & self.requested_dev_cap:
|
||||
+ miss_caps = context_flags_to_str(self.requested_dev_cap)
|
||||
+ raise unittest.SkipTest(f'Device caps doesn\'t support {miss_caps}')
|
||||
+
|
||||
+ def create_cq(self):
|
||||
+ create_dv_cq(self)
|
||||
+
|
||||
+
|
||||
+class Mlx5DvCqDcRes(Mlx5DcResources):
|
||||
+ def __init__(self, dev_name, ib_port, gid_index, cqe_comp_res_format=None,
|
||||
+ flags=None, cqe_size=None, create_flags=None):
|
||||
+ """
|
||||
+ Initialize Mlx5 DV CQ resources based on RC resources that include RC
|
||||
+ QP.
|
||||
+ :param dev_name: Device name to be used
|
||||
+ :param ib_port: IB port of the device to use
|
||||
+ :param gid_index: Which GID index to use
|
||||
+ :param cqe_comp_res_format: Type of compression to use
|
||||
+ :param flags: DV CQ specific flags
|
||||
+ :param cqe_size: The CQ's CQe size
|
||||
+ :param create_flags: DV QP specific flags
|
||||
+ """
|
||||
+ self.cqe_comp_res_format = cqe_comp_res_format
|
||||
+ self.flags = flags
|
||||
+ self.cqe_size = cqe_size
|
||||
+ super().__init__(dev_name, ib_port, gid_index,
|
||||
+ send_ops_flags=e.IBV_QP_EX_WITH_SEND,
|
||||
+ create_flags=create_flags)
|
||||
+
|
||||
+ def create_cq(self):
|
||||
+ create_dv_cq(self)
|
||||
+
|
||||
+
|
||||
+class DvCqTest(RDMATestCase):
|
||||
+ def setUp(self):
|
||||
+ super().setUp()
|
||||
+ self.iters = 10
|
||||
+ self.server = None
|
||||
+ self.client = None
|
||||
+ self.traffic_args = None
|
||||
+
|
||||
+ def create_players(self, resource, **resource_arg):
|
||||
+ """
|
||||
+ Init DV CQ tests resources.
|
||||
+ :param resource: The RDMA resources to use.
|
||||
+ :param resource_arg: Dict of args that specify the resource specific
|
||||
+ attributes.
|
||||
+ :return: None
|
||||
+ """
|
||||
+ self.client = resource(**self.dev_info, **resource_arg)
|
||||
+ self.server = resource(**self.dev_info, **resource_arg)
|
||||
+ self.client.pre_run(self.server.psns, self.server.qps_num)
|
||||
+ self.server.pre_run(self.client.psns, self.client.qps_num)
|
||||
+ if resource == Mlx5DvCqDcRes:
|
||||
+ self.client.remote_dct_num = self.server.dct_qp.qp_num
|
||||
+ self.server.remote_dct_num = self.client.dct_qp.qp_num
|
||||
+ self.traffic_args = {'client': self.client, 'server': self.server,
|
||||
+ 'iters': self.iters, 'gid_idx': self.gid_index,
|
||||
+ 'port': self.ib_port}
|
||||
+
|
||||
+ def test_dv_cq_traffic(self):
|
||||
+ """
|
||||
+ Run SEND traffic using DC CQ.
|
||||
+ """
|
||||
+ self.create_players(Mlx5CQRes)
|
||||
+ u.traffic(**self.traffic_args, is_cq_ex=True)
|
||||
+
|
||||
+ def test_dv_cq_compression_flags(self):
|
||||
+ """
|
||||
+ Create DV CQ with different types of CQE compression formats. The test
|
||||
+ also does bad flow and try to use more than one compression formats.
|
||||
+ """
|
||||
+ # Create DV CQ with all legal compression flags.
|
||||
+ for comp_type in [dve.MLX5DV_CQE_RES_FORMAT_CSUM_STRIDX,
|
||||
+ dve.MLX5DV_CQE_RES_FORMAT_CSUM,
|
||||
+ dve.MLX5DV_CQE_RES_FORMAT_HASH]:
|
||||
+ self.create_players(Mlx5CQRes, cqe_comp_res_format=comp_type,
|
||||
+ requested_dev_cap=dve.MLX5DV_CONTEXT_FLAGS_CQE_128B_COMP)
|
||||
+ u.traffic(**self.traffic_args, is_cq_ex=True)
|
||||
+
|
||||
+ # Try to create DV CQ with more than one compression flags.
|
||||
+ cqe_multi_format = dve.MLX5DV_CQE_RES_FORMAT_HASH | \
|
||||
+ dve.MLX5DV_CQE_RES_FORMAT_CSUM
|
||||
+ with self.assertRaises(PyverbsRDMAError) as ex:
|
||||
+ self.create_players(Mlx5CQRes, cqe_comp_res_format=cqe_multi_format)
|
||||
+ self.assertEqual(ex.exception.error_code, errno.EINVAL)
|
||||
+
|
||||
+ def test_dv_cq_padding(self):
|
||||
+ """
|
||||
+ Create DV CQ with padding flag.
|
||||
+ """
|
||||
+ self.create_players(Mlx5CQRes, cqe_size=128,
|
||||
+ flags=dve.MLX5DV_CQ_INIT_ATTR_FLAGS_CQE_PAD,
|
||||
+ requested_dev_cap=dve.MLX5DV_CONTEXT_FLAGS_CQE_128B_PAD)
|
||||
+ u.traffic(**self.traffic_args, is_cq_ex=True)
|
||||
+
|
||||
+ def test_dv_cq_padding_not_aligned_cqe_size(self):
|
||||
+ """
|
||||
+ Create DV CQ with padding flag when CQE size is not 128B. The creation
|
||||
+ should fail because padding is supported only with CQE size of 128B.
|
||||
+ """
|
||||
+ # Padding flag works only when the cqe size is 128.
|
||||
+ with self.assertRaises(PyverbsRDMAError) as ex:
|
||||
+ self.create_players(Mlx5CQRes, cqe_size=64,
|
||||
+ flags=dve.MLX5DV_CQ_INIT_ATTR_FLAGS_CQE_PAD,
|
||||
+ requested_dev_cap=dve.MLX5DV_CONTEXT_FLAGS_CQE_128B_PAD)
|
||||
+ self.assertEqual(ex.exception.error_code, errno.EINVAL)
|
||||
+
|
||||
+ def test_dv_cq_cqe_size_128(self):
|
||||
+ """
|
||||
+ Test multiple sizes of msg using CQE size of 128B.
|
||||
+ """
|
||||
+ msg_sizes = [60, # Lower than 64B
|
||||
+ 70, # In range of 64B - 128B
|
||||
+ 140] # Bigger than 128B
|
||||
+ for size in msg_sizes:
|
||||
+ self.create_players(Mlx5CQRes, cqe_size=128, msg_size=size)
|
||||
+ u.traffic(**self.traffic_args, is_cq_ex=True)
|
||||
+
|
||||
+ def test_dv_cq_cqe_size_64(self):
|
||||
+ """
|
||||
+ Test multiple sizes of msg using CQE size of 64B.
|
||||
+ """
|
||||
+ msg_sizes = [16, # Lower than 32B
|
||||
+ 60, # In range of 32B - 64B
|
||||
+ 70] # Bigger than 64B
|
||||
+ for size in msg_sizes:
|
||||
+ self.create_players(Mlx5CQRes, cqe_size=64, msg_size=size)
|
||||
+ u.traffic(**self.traffic_args, is_cq_ex=True)
|
||||
+
|
||||
+ def test_dv_cq_cqe_size_with_bad_size(self):
|
||||
+ """
|
||||
+ Create CQ with ilegal cqe_size value.
|
||||
+ """
|
||||
+ # Set the CQE size in the CQE creation.
|
||||
+ with self.assertRaises(PyverbsRDMAError) as ex:
|
||||
+ self.create_players(Mlx5CQRes, cqe_size=100)
|
||||
+ self.assertEqual(ex.exception.error_code, errno.EINVAL)
|
||||
+
|
||||
+ # Set the CQE size using the environment value.
|
||||
+ self.set_env_variable('MLX5_CQE_SIZE', '100')
|
||||
+ with self.assertRaises(PyverbsRDMAError) as ex:
|
||||
+ self.create_players(Mlx5CQRes)
|
||||
+ self.assertEqual(ex.exception.error_code, errno.EINVAL)
|
||||
+
|
||||
+ def test_dv_cq_cqe_size_environment_var(self):
|
||||
+ """
|
||||
+ Create DV CQs with all the legal cqe_size values using the environment
|
||||
+ variable mechanism.
|
||||
+ """
|
||||
+ for cqe_size in ['64', '128']:
|
||||
+ self.set_env_variable('MLX5_CQE_SIZE', cqe_size)
|
||||
+ self.create_players(Mlx5CQRes)
|
||||
+
|
||||
+ def test_scatter_to_cqe_control_by_qp(self):
|
||||
+ """
|
||||
+ Create QP with specific SCATTER_TO_CQE flags. The test set different
|
||||
+ values in the scatter2cqe environment variable and create the QP with
|
||||
+ enable/disable flags. The QP should ignore the environment variable
|
||||
+ value and behave according to the specific creation flag.
|
||||
+ """
|
||||
+ for s2c_env_val in ['0', '1']:
|
||||
+ for qp_s2c_value in [dve.MLX5DV_QP_CREATE_DISABLE_SCATTER_TO_CQE,
|
||||
+ dve.MLX5DV_QP_CREATE_ALLOW_SCATTER_TO_CQE]:
|
||||
+ self.set_env_variable('MLX5_SCATTER_TO_CQE', s2c_env_val)
|
||||
+ self.create_players(Mlx5DvCqDcRes, create_flags=qp_s2c_value)
|
||||
+ u.traffic(**self.traffic_args, new_send=True,
|
||||
+ send_op=e.IBV_QP_EX_WITH_SEND, is_cq_ex=True)
|
||||
--
|
||||
2.25.4
|
||||
|
@ -0,0 +1,45 @@
|
||||
From 7be6d311d4bbdb93d06abfc9888e9f805d2d6fdb Mon Sep 17 00:00:00 2001
|
||||
From: Edward Srouji <edwards@nvidia.com>
|
||||
Date: Wed, 30 Dec 2020 17:03:34 +0200
|
||||
Subject: [PATCH] tests: Check CQE compression cap before using it
|
||||
|
||||
Add a CQE compression capability check in mlx5 CQ tests before creating
|
||||
a CQ. If the device does not support the requested CQE compression type,
|
||||
the test will be skipped.
|
||||
|
||||
Fixes: 8aae7abe241c ("tests: Add mlx5 CQ tests")
|
||||
Signed-off-by: Edward Srouji <edwards@nvidia.com>
|
||||
Reviewed-by: Ido Kalir <idok@nvidia.com>
|
||||
---
|
||||
tests/test_mlx5_cq.py | 8 +++++++-
|
||||
1 file changed, 7 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/tests/test_mlx5_cq.py b/tests/test_mlx5_cq.py
|
||||
index 1f757c27345e..8be568c54262 100644
|
||||
--- a/tests/test_mlx5_cq.py
|
||||
+++ b/tests/test_mlx5_cq.py
|
||||
@@ -2,7 +2,7 @@ import unittest
|
||||
import errno
|
||||
|
||||
from pyverbs.providers.mlx5.mlx5dv import Mlx5Context, Mlx5DVContextAttr, \
|
||||
- Mlx5DVCQInitAttr, Mlx5CQ, context_flags_to_str
|
||||
+ Mlx5DVCQInitAttr, Mlx5CQ, context_flags_to_str, cqe_comp_to_str
|
||||
from pyverbs.pyverbs_error import PyverbsRDMAError, PyverbsUserError
|
||||
from tests.base import RDMATestCase, RCResources
|
||||
import pyverbs.providers.mlx5.mlx5_enums as dve
|
||||
@@ -22,6 +22,12 @@ def create_dv_cq(res):
|
||||
if res.cqe_comp_res_format:
|
||||
dvcq_init_attr.cqe_comp_res_format = res.cqe_comp_res_format
|
||||
dvcq_init_attr.comp_mask |= dve.MLX5DV_CQ_INIT_ATTR_MASK_COMPRESSED_CQE
|
||||
+ # Check CQE compression capability
|
||||
+ cqe_comp_caps = res.ctx.query_mlx5_device().cqe_comp_caps
|
||||
+ if not (cqe_comp_caps['supported_format'] & res.cqe_comp_res_format) or \
|
||||
+ not cqe_comp_caps['max_num']:
|
||||
+ cqe_comp_str = cqe_comp_to_str(res.cqe_comp_res_format)
|
||||
+ raise unittest.SkipTest(f'CQE compression {cqe_comp_str} is not supported')
|
||||
if res.flags:
|
||||
dvcq_init_attr.flags = res.flags
|
||||
dvcq_init_attr.comp_mask |= dve.MLX5DV_CQ_INIT_ATTR_MASK_FLAGS
|
||||
--
|
||||
2.25.4
|
||||
|
71
SOURCES/0001-udaddy-Fix-create_reply_ah-error-flow.patch
Normal file
71
SOURCES/0001-udaddy-Fix-create_reply_ah-error-flow.patch
Normal file
@ -0,0 +1,71 @@
|
||||
From 8bb25f86ea1976bc8dcc009be37e7c779d131811 Mon Sep 17 00:00:00 2001
|
||||
From: Patrisious Haddad <phaddad@nvidia.com>
|
||||
Date: Mon, 26 Oct 2020 10:38:13 +0200
|
||||
Subject: [PATCH] udaddy: Fix create_reply_ah error flow
|
||||
|
||||
[ Upstream commit 2213fe559b74d4281f9d42e425dfbd7e0f582a67 ]
|
||||
|
||||
Return error in case create_reply_ah() fails to create AH.
|
||||
|
||||
Fixes: a7eb7efbf69f ("r8077: Add support for UD QPs to the RDMA CM library, along with a goofy test program")
|
||||
Signed-off-by: Patrisious Haddad <phaddad@nvidia.com>
|
||||
Signed-off-by: Yishai Hadas <yishaih@nvidia.com>
|
||||
Signed-off-by: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
|
||||
---
|
||||
librdmacm/examples/udaddy.c | 19 ++++++++++++++-----
|
||||
1 file changed, 14 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/librdmacm/examples/udaddy.c b/librdmacm/examples/udaddy.c
|
||||
index 9283caa4971f..9f911289da3c 100644
|
||||
--- a/librdmacm/examples/udaddy.c
|
||||
+++ b/librdmacm/examples/udaddy.c
|
||||
@@ -449,23 +449,27 @@ static void destroy_nodes(void)
|
||||
free(test.nodes);
|
||||
}
|
||||
|
||||
-static void create_reply_ah(struct cmatest_node *node, struct ibv_wc *wc)
|
||||
+static int create_reply_ah(struct cmatest_node *node, struct ibv_wc *wc)
|
||||
{
|
||||
struct ibv_qp_attr attr;
|
||||
struct ibv_qp_init_attr init_attr;
|
||||
|
||||
node->ah = ibv_create_ah_from_wc(node->pd, wc, node->mem,
|
||||
node->cma_id->port_num);
|
||||
+ if (!node->ah)
|
||||
+ return -1;
|
||||
node->remote_qpn = be32toh(wc->imm_data);
|
||||
|
||||
- ibv_query_qp(node->cma_id->qp, &attr, IBV_QP_QKEY, &init_attr);
|
||||
+ if (ibv_query_qp(node->cma_id->qp, &attr, IBV_QP_QKEY, &init_attr))
|
||||
+ return -1;
|
||||
node->remote_qkey = attr.qkey;
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
static int poll_cqs(void)
|
||||
{
|
||||
struct ibv_wc wc[8];
|
||||
- int done, i, ret;
|
||||
+ int done, i, ret, rc;
|
||||
|
||||
for (i = 0; i < connections; i++) {
|
||||
if (!test.nodes[i].connected)
|
||||
@@ -478,8 +482,13 @@ static int poll_cqs(void)
|
||||
return ret;
|
||||
}
|
||||
|
||||
- if (ret && !test.nodes[i].ah)
|
||||
- create_reply_ah(&test.nodes[i], wc);
|
||||
+ if (ret && !test.nodes[i].ah) {
|
||||
+ rc = create_reply_ah(&test.nodes[i], wc);
|
||||
+ if (rc) {
|
||||
+ printf("udaddy: failed to create reply AH\n");
|
||||
+ return rc;
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
--
|
||||
2.25.4
|
||||
|
@ -0,0 +1,48 @@
|
||||
From e86cfd2fcf1a48bebb6055d8016469aa75a17768 Mon Sep 17 00:00:00 2001
|
||||
From: Xiao Yang <yangx.jy@cn.fujitsu.com>
|
||||
Date: Thu, 14 Jan 2021 13:23:37 +0800
|
||||
Subject: [PATCH] verbs: Replace SQ with RQ in max_recv_sge's documents
|
||||
|
||||
[ Upstream commit 380acc92201e6a038258403a36291671b6041ebe ]
|
||||
|
||||
Fix copy/paste mistake.
|
||||
|
||||
Fixes: 9845a77c8812 ("Add remaining libibverbs manpages")
|
||||
Fixes: 058c67977dad ("XRC man pages")
|
||||
Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
|
||||
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
|
||||
Signed-off-by: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
|
||||
---
|
||||
libibverbs/man/ibv_create_qp.3 | 2 +-
|
||||
libibverbs/man/ibv_create_qp_ex.3 | 2 +-
|
||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/libibverbs/man/ibv_create_qp.3 b/libibverbs/man/ibv_create_qp.3
|
||||
index 1cdf247445d2..dfbd245fa7b7 100644
|
||||
--- a/libibverbs/man/ibv_create_qp.3
|
||||
+++ b/libibverbs/man/ibv_create_qp.3
|
||||
@@ -40,7 +40,7 @@ struct ibv_qp_cap {
|
||||
uint32_t max_send_wr; /* Requested max number of outstanding WRs in the SQ */
|
||||
uint32_t max_recv_wr; /* Requested max number of outstanding WRs in the RQ */
|
||||
uint32_t max_send_sge; /* Requested max number of scatter/gather (s/g) elements in a WR in the SQ */
|
||||
-uint32_t max_recv_sge; /* Requested max number of s/g elements in a WR in the SQ */
|
||||
+uint32_t max_recv_sge; /* Requested max number of s/g elements in a WR in the RQ */
|
||||
uint32_t max_inline_data;/* Requested max number of data (bytes) that can be posted inline to the SQ, otherwise 0 */
|
||||
.in -8
|
||||
};
|
||||
diff --git a/libibverbs/man/ibv_create_qp_ex.3 b/libibverbs/man/ibv_create_qp_ex.3
|
||||
index 277e9fa05e61..309281262ac6 100644
|
||||
--- a/libibverbs/man/ibv_create_qp_ex.3
|
||||
+++ b/libibverbs/man/ibv_create_qp_ex.3
|
||||
@@ -49,7 +49,7 @@ struct ibv_qp_cap {
|
||||
uint32_t max_send_wr; /* Requested max number of outstanding WRs in the SQ */
|
||||
uint32_t max_recv_wr; /* Requested max number of outstanding WRs in the RQ */
|
||||
uint32_t max_send_sge; /* Requested max number of scatter/gather (s/g) elements in a WR in the SQ */
|
||||
-uint32_t max_recv_sge; /* Requested max number of s/g elements in a WR in the SQ */
|
||||
+uint32_t max_recv_sge; /* Requested max number of s/g elements in a WR in the RQ */
|
||||
uint32_t max_inline_data;/* Requested max number of data (bytes) that can be posted inline to the SQ, otherwise 0 */
|
||||
.in -8
|
||||
};
|
||||
--
|
||||
2.25.4
|
||||
|
@ -0,0 +1,122 @@
|
||||
From 7472c8b823221507f83052037750dd48fdeabff3 Mon Sep 17 00:00:00 2001
|
||||
From: Xiao Yang <yangx.jy@cn.fujitsu.com>
|
||||
Date: Mon, 11 Jan 2021 16:57:24 +0800
|
||||
Subject: [PATCH] verbs: Update the type of some variables in documents
|
||||
|
||||
[ Upstream commit 503ee09888b8454de502d88821b9d872faebe75a ]
|
||||
|
||||
The type of some variables has been changed from int to
|
||||
unsigned int thus update the corresponding documents.
|
||||
|
||||
Fixes: 8fe7f12f1723 ("verbs: Bitwise flag values should be unsigned")
|
||||
Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
|
||||
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
|
||||
Signed-off-by: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
|
||||
---
|
||||
libibverbs/man/ibv_bind_mw.3 | 4 ++--
|
||||
libibverbs/man/ibv_create_cq_ex.3 | 2 +-
|
||||
libibverbs/man/ibv_modify_qp.3 | 2 +-
|
||||
libibverbs/man/ibv_poll_cq.3 | 2 +-
|
||||
libibverbs/man/ibv_post_send.3 | 4 ++--
|
||||
libibverbs/man/ibv_query_qp.3 | 2 +-
|
||||
6 files changed, 8 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/libibverbs/man/ibv_bind_mw.3 b/libibverbs/man/ibv_bind_mw.3
|
||||
index af309d000dea..6b995af7b436 100644
|
||||
--- a/libibverbs/man/ibv_bind_mw.3
|
||||
+++ b/libibverbs/man/ibv_bind_mw.3
|
||||
@@ -28,7 +28,7 @@ is an ibv_mw_bind struct, as defined in <infiniband/verbs.h>.
|
||||
struct ibv_mw_bind {
|
||||
.in +8
|
||||
uint64_t wr_id; /* User defined WR ID */
|
||||
-int send_flags; /* Use ibv_send_flags */
|
||||
+unsigned int send_flags; /* Use ibv_send_flags */
|
||||
struct ibv_mw_bind_info bind_info; /* MW bind information */
|
||||
.in -8
|
||||
}
|
||||
@@ -40,7 +40,7 @@ struct ibv_mw_bind_info {
|
||||
struct ibv_mr *mr; /* The MR to bind the MW to */
|
||||
uint64_t addr; /* The address the MW should start at */
|
||||
uint64_t length; /* The length (in bytes) the MW should span */
|
||||
-int mw_access_flags; /* Access flags to the MW. Use ibv_access_flags */
|
||||
+unsigned int mw_access_flags; /* Access flags to the MW. Use ibv_access_flags */
|
||||
.in -8
|
||||
};
|
||||
.fi
|
||||
diff --git a/libibverbs/man/ibv_create_cq_ex.3 b/libibverbs/man/ibv_create_cq_ex.3
|
||||
index 0f05693ec3bb..81eb37b96e75 100644
|
||||
--- a/libibverbs/man/ibv_create_cq_ex.3
|
||||
+++ b/libibverbs/man/ibv_create_cq_ex.3
|
||||
@@ -122,7 +122,7 @@ Below members and functions are used in order to poll the current completion. Th
|
||||
.BI "uint32_t ibv_wc_read_src_qp(struct ibv_cq_ex " "*cq"); \c
|
||||
Get the source QP number field from the current completion.
|
||||
|
||||
-.BI "int ibv_wc_read_wc_flags(struct ibv_cq_ex " "*cq"); \c
|
||||
+.BI "unsigned int ibv_wc_read_wc_flags(struct ibv_cq_ex " "*cq"); \c
|
||||
Get the QP flags field from the current completion.
|
||||
|
||||
.BI "uint16_t ibv_wc_read_pkey_index(struct ibv_cq_ex " "*cq"); \c
|
||||
diff --git a/libibverbs/man/ibv_modify_qp.3 b/libibverbs/man/ibv_modify_qp.3
|
||||
index fd8596491e2f..a8cd19acdf54 100644
|
||||
--- a/libibverbs/man/ibv_modify_qp.3
|
||||
+++ b/libibverbs/man/ibv_modify_qp.3
|
||||
@@ -32,7 +32,7 @@ uint32_t qkey; /* Q_Key for the QP (valid only
|
||||
uint32_t rq_psn; /* PSN for receive queue (valid only for RC/UC QPs) */
|
||||
uint32_t sq_psn; /* PSN for send queue (valid only for RC/UC QPs) */
|
||||
uint32_t dest_qp_num; /* Destination QP number (valid only for RC/UC QPs) */
|
||||
-int qp_access_flags; /* Mask of enabled remote access operations (valid only for RC/UC QPs) */
|
||||
+unsigned int qp_access_flags; /* Mask of enabled remote access operations (valid only for RC/UC QPs) */
|
||||
struct ibv_qp_cap cap; /* QP capabilities (valid if HCA supports QP resizing) */
|
||||
struct ibv_ah_attr ah_attr; /* Primary path address vector (valid only for RC/UC QPs) */
|
||||
struct ibv_ah_attr alt_ah_attr; /* Alternate path address vector (valid only for RC/UC QPs) */
|
||||
diff --git a/libibverbs/man/ibv_poll_cq.3 b/libibverbs/man/ibv_poll_cq.3
|
||||
index 957fd151495a..823865808202 100644
|
||||
--- a/libibverbs/man/ibv_poll_cq.3
|
||||
+++ b/libibverbs/man/ibv_poll_cq.3
|
||||
@@ -39,7 +39,7 @@ uint32_t invalidated_rkey; /* Local RKey that was invalidated */
|
||||
};
|
||||
uint32_t qp_num; /* Local QP number of completed WR */
|
||||
uint32_t src_qp; /* Source QP number (remote QP number) of completed WR (valid only for UD QPs) */
|
||||
-int wc_flags; /* Flags of the completed WR */
|
||||
+unsigned int wc_flags; /* Flags of the completed WR */
|
||||
uint16_t pkey_index; /* P_Key index (valid only for GSI QPs) */
|
||||
uint16_t slid; /* Source LID */
|
||||
uint8_t sl; /* Service Level */
|
||||
diff --git a/libibverbs/man/ibv_post_send.3 b/libibverbs/man/ibv_post_send.3
|
||||
index 4fb99f7ccde0..2c488b090578 100644
|
||||
--- a/libibverbs/man/ibv_post_send.3
|
||||
+++ b/libibverbs/man/ibv_post_send.3
|
||||
@@ -34,7 +34,7 @@ struct ibv_send_wr *next; /* Pointer to next WR in list, N
|
||||
struct ibv_sge *sg_list; /* Pointer to the s/g array */
|
||||
int num_sge; /* Size of the s/g array */
|
||||
enum ibv_wr_opcode opcode; /* Operation type */
|
||||
-int send_flags; /* Flags of the WR properties */
|
||||
+unsigned int send_flags; /* Flags of the WR properties */
|
||||
union {
|
||||
.in +8
|
||||
__be32 imm_data; /* Immediate data (in network byte order) */
|
||||
@@ -103,7 +103,7 @@ struct ibv_mw_bind_info {
|
||||
struct ibv_mr *mr; /* The Memory region (MR) to bind the MW to */
|
||||
uint64_t addr; /* The address the MW should start at */
|
||||
uint64_t length; /* The length (in bytes) the MW should span */
|
||||
-int mw_access_flags; /* Access flags to the MW. Use ibv_access_flags */
|
||||
+unsigned int mw_access_flags; /* Access flags to the MW. Use ibv_access_flags */
|
||||
.in -8
|
||||
};
|
||||
.fi
|
||||
diff --git a/libibverbs/man/ibv_query_qp.3 b/libibverbs/man/ibv_query_qp.3
|
||||
index 907bc56a52ef..05242def03b9 100644
|
||||
--- a/libibverbs/man/ibv_query_qp.3
|
||||
+++ b/libibverbs/man/ibv_query_qp.3
|
||||
@@ -37,7 +37,7 @@ uint32_t qkey; /* Q_Key of the QP (valid only for
|
||||
uint32_t rq_psn; /* PSN for receive queue (valid only for RC/UC QPs) */
|
||||
uint32_t sq_psn; /* PSN for send queue (valid only for RC/UC QPs) */
|
||||
uint32_t dest_qp_num; /* Destination QP number (valid only for RC/UC QPs) */
|
||||
-int qp_access_flags; /* Mask of enabled remote access operations (valid only for RC/UC QPs) */
|
||||
+unsigned int qp_access_flags; /* Mask of enabled remote access operations (valid only for RC/UC QPs) */
|
||||
struct ibv_qp_cap cap; /* QP capabilities */
|
||||
struct ibv_ah_attr ah_attr; /* Primary path address vector (valid only for RC/UC QPs) */
|
||||
struct ibv_ah_attr alt_ah_attr; /* Alternate path address vector (valid only for RC/UC QPs) */
|
||||
--
|
||||
2.25.4
|
||||
|
@ -1,176 +0,0 @@
|
||||
From 0290582355c4c7f1a30c80b206f62d7ddaa2de05 Mon Sep 17 00:00:00 2001
|
||||
From: Erez Shitrit <erezsh@mellanox.com>
|
||||
Date: Thu, 20 Feb 2020 15:27:30 +0200
|
||||
Subject: [PATCH 2/8] mlx5: Allocate accurate aligned DM memory size
|
||||
|
||||
[ Upstream commit 96bd5476194106deb4c9edaf405e92646623465a ]
|
||||
|
||||
Allocate the exact memory size and only when failed to allocate an aligned
|
||||
memory size fallback to allocate double size of DM memory.
|
||||
|
||||
Fixes: 6235899cdf7a ("mlx5: ICM pool memory allocator")
|
||||
Signed-off-by: Erez Shitrit <erezsh@mellanox.com>
|
||||
Reviewed-by: Alex Vesker <valex@mellanox.com>
|
||||
Signed-off-by: Yishai Hadas <yishaih@mellanox.com>
|
||||
Signed-off-by: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
|
||||
---
|
||||
providers/mlx5/dr_icm_pool.c | 103 ++++++++++++++++++++++-------------
|
||||
1 file changed, 64 insertions(+), 39 deletions(-)
|
||||
|
||||
diff --git a/providers/mlx5/dr_icm_pool.c b/providers/mlx5/dr_icm_pool.c
|
||||
index 1e2853959b37..469e52552ccd 100644
|
||||
--- a/providers/mlx5/dr_icm_pool.c
|
||||
+++ b/providers/mlx5/dr_icm_pool.c
|
||||
@@ -89,16 +89,72 @@ struct dr_icm_mr {
|
||||
struct list_node mr_list;
|
||||
};
|
||||
|
||||
-static struct dr_icm_mr *
|
||||
-dr_icm_pool_mr_create(struct dr_icm_pool *pool,
|
||||
- enum mlx5_ib_uapi_dm_type dm_type,
|
||||
- size_t align_base)
|
||||
+static int
|
||||
+dr_icm_allocate_aligned_dm(struct dr_icm_pool *pool,
|
||||
+ struct dr_icm_mr *icm_mr,
|
||||
+ struct ibv_alloc_dm_attr *dm_attr)
|
||||
{
|
||||
struct mlx5dv_alloc_dm_attr mlx5_dm_attr = {};
|
||||
+ size_t log_align_base = 0;
|
||||
+ bool fallback = false;
|
||||
+ struct mlx5_dm *dm;
|
||||
+ size_t size;
|
||||
+
|
||||
+ /* create dm/mr for this pool */
|
||||
+ size = dr_icm_pool_chunk_size_to_byte(pool->max_log_chunk_sz,
|
||||
+ pool->icm_type);
|
||||
+
|
||||
+ if (pool->icm_type == DR_ICM_TYPE_STE) {
|
||||
+ mlx5_dm_attr.type = MLX5_IB_UAPI_DM_TYPE_STEERING_SW_ICM;
|
||||
+ /* Align base is the biggest chunk size */
|
||||
+ log_align_base = ilog32(size - 1);
|
||||
+ } else if (pool->icm_type == DR_ICM_TYPE_MODIFY_ACTION) {
|
||||
+ mlx5_dm_attr.type = MLX5_IB_UAPI_DM_TYPE_HEADER_MODIFY_SW_ICM;
|
||||
+ /* Align base is 64B */
|
||||
+ log_align_base = ilog32(DR_ICM_MODIFY_HDR_ALIGN_BASE - 1);
|
||||
+ }
|
||||
+
|
||||
+ dm_attr->length = size;
|
||||
+
|
||||
+alloc_dm:
|
||||
+ icm_mr->dm = mlx5dv_alloc_dm(pool->dmn->ctx, dm_attr, &mlx5_dm_attr);
|
||||
+ if (!icm_mr->dm) {
|
||||
+ dr_dbg(pool->dmn, "Failed allocating DM\n");
|
||||
+ return errno;
|
||||
+ }
|
||||
+
|
||||
+ dm = to_mdm(icm_mr->dm);
|
||||
+ icm_mr->icm_start_addr = dm->remote_va;
|
||||
+
|
||||
+ if (icm_mr->icm_start_addr & ((1UL << log_align_base) - 1)) {
|
||||
+ uint64_t align_base;
|
||||
+ uint64_t align_diff;
|
||||
+
|
||||
+ /* Fallback to previous implementation, ask for double size */
|
||||
+ dr_dbg(pool->dmn, "Got not aligned memory: %zu last_try: %d\n",
|
||||
+ log_align_base, fallback);
|
||||
+ if (fallback) {
|
||||
+ align_base = 1UL << log_align_base;
|
||||
+ align_diff = icm_mr->icm_start_addr % align_base;
|
||||
+ icm_mr->used_length = align_base - align_diff;
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ mlx5_free_dm(icm_mr->dm);
|
||||
+ /* retry to allocate, now double the size */
|
||||
+ dm_attr->length = size * 2;
|
||||
+ fallback = true;
|
||||
+ goto alloc_dm;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static struct dr_icm_mr *
|
||||
+dr_icm_pool_mr_create(struct dr_icm_pool *pool)
|
||||
+{
|
||||
struct ibv_alloc_dm_attr dm_attr = {};
|
||||
struct dr_icm_mr *icm_mr;
|
||||
- struct mlx5_dm *dm;
|
||||
- size_t align_diff;
|
||||
|
||||
icm_mr = calloc(1, sizeof(struct dr_icm_mr));
|
||||
if (!icm_mr) {
|
||||
@@ -106,20 +162,8 @@ dr_icm_pool_mr_create(struct dr_icm_pool *pool,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- icm_mr->pool = pool;
|
||||
- list_node_init(&icm_mr->mr_list);
|
||||
-
|
||||
- mlx5_dm_attr.type = dm_type;
|
||||
-
|
||||
- /* 2^log_biggest_table * entry-size * double-for-alignment */
|
||||
- dm_attr.length = dr_icm_pool_chunk_size_to_byte(pool->max_log_chunk_sz,
|
||||
- pool->icm_type) * 2;
|
||||
-
|
||||
- icm_mr->dm = mlx5dv_alloc_dm(pool->dmn->ctx, &dm_attr, &mlx5_dm_attr);
|
||||
- if (!icm_mr->dm) {
|
||||
- dr_dbg(pool->dmn, "Failed allocating DM\n");
|
||||
+ if (dr_icm_allocate_aligned_dm(pool, icm_mr, &dm_attr))
|
||||
goto free_icm_mr;
|
||||
- }
|
||||
|
||||
/* Register device memory */
|
||||
icm_mr->mr = ibv_reg_dm_mr(pool->dmn->pd, icm_mr->dm, 0,
|
||||
@@ -133,13 +177,6 @@ dr_icm_pool_mr_create(struct dr_icm_pool *pool,
|
||||
goto free_dm;
|
||||
}
|
||||
|
||||
- dm = to_mdm(icm_mr->dm);
|
||||
- icm_mr->icm_start_addr = dm->remote_va;
|
||||
-
|
||||
- align_diff = icm_mr->icm_start_addr % align_base;
|
||||
- if (align_diff)
|
||||
- icm_mr->used_length = align_base - align_diff;
|
||||
-
|
||||
list_add_tail(&pool->icm_mr_list, &icm_mr->mr_list);
|
||||
|
||||
return icm_mr;
|
||||
@@ -199,33 +236,21 @@ static int dr_icm_chunks_create(struct dr_icm_bucket *bucket)
|
||||
{
|
||||
size_t mr_free_size, mr_req_size, mr_row_size;
|
||||
struct dr_icm_pool *pool = bucket->pool;
|
||||
- enum mlx5_ib_uapi_dm_type dm_type;
|
||||
struct dr_icm_chunk *chunk;
|
||||
struct dr_icm_mr *icm_mr;
|
||||
- size_t align_base;
|
||||
int i;
|
||||
|
||||
mr_req_size = bucket->num_of_entries * bucket->entry_size;
|
||||
mr_row_size = dr_icm_pool_chunk_size_to_byte(pool->max_log_chunk_sz,
|
||||
pool->icm_type);
|
||||
|
||||
- if (pool->icm_type == DR_ICM_TYPE_STE) {
|
||||
- dm_type = MLX5_IB_UAPI_DM_TYPE_STEERING_SW_ICM;
|
||||
- /* Align base is the biggest chunk size / row size */
|
||||
- align_base = mr_row_size;
|
||||
- } else {
|
||||
- dm_type = MLX5_IB_UAPI_DM_TYPE_HEADER_MODIFY_SW_ICM;
|
||||
- /* Align base is 64B */
|
||||
- align_base = DR_ICM_MODIFY_HDR_ALIGN_BASE;
|
||||
- }
|
||||
-
|
||||
pthread_mutex_lock(&pool->mr_mutex);
|
||||
icm_mr = list_tail(&pool->icm_mr_list, struct dr_icm_mr, mr_list);
|
||||
if (icm_mr)
|
||||
mr_free_size = icm_mr->mr->length - icm_mr->used_length;
|
||||
|
||||
if (!icm_mr || mr_free_size < mr_row_size) {
|
||||
- icm_mr = dr_icm_pool_mr_create(pool, dm_type, align_base);
|
||||
+ icm_mr = dr_icm_pool_mr_create(pool);
|
||||
if (!icm_mr)
|
||||
goto out_err;
|
||||
}
|
||||
--
|
||||
2.25.4
|
||||
|
@ -1,32 +0,0 @@
|
||||
From 27fd326938dbedc1f254caeb8cd087117e1f7cd7 Mon Sep 17 00:00:00 2001
|
||||
From: Jason Gunthorpe <jgg@mellanox.com>
|
||||
Date: Tue, 5 May 2020 20:16:14 -0300
|
||||
Subject: [PATCH 4/8] buildlib: Fix a warning from newer pythons
|
||||
|
||||
[ Upstream commit 7ba12afad433c1ee29877fc51662a203935e6c78 ]
|
||||
|
||||
The % is typod into the string in check-build
|
||||
|
||||
Fixes: 7cff8245374c ("Have travis check shared library filenames")
|
||||
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
|
||||
Signed-off-by: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
|
||||
---
|
||||
buildlib/check-build | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/buildlib/check-build b/buildlib/check-build
|
||||
index ab8524e5b98f..4e52d0d4785a 100755
|
||||
--- a/buildlib/check-build
|
||||
+++ b/buildlib/check-build
|
||||
@@ -84,7 +84,7 @@ def get_symbol_vers(fn,exported=True):
|
||||
def check_lib_symver(args,fn):
|
||||
g = re.match(r"lib([^.]+)\.so\.(\d+)\.(\d+)\.(.*)",fn);
|
||||
if g.group(4) != args.PACKAGE_VERSION:
|
||||
- raise ValueError("Shared Library filename %r does not have the package version %r (%r)%"(
|
||||
+ raise ValueError("Shared Library filename %r does not have the package version %r (%r)"%(
|
||||
fn,args.PACKAGE_VERSION,g.groups()));
|
||||
|
||||
# umad/etc used the wrong symbol version name when they moved to soname 3.0
|
||||
--
|
||||
2.25.4
|
||||
|
@ -1,35 +0,0 @@
|
||||
From 6e1a61ab829ba893858a50e799fcdbcd95169f35 Mon Sep 17 00:00:00 2001
|
||||
From: Leon Romanovsky <leonro@mellanox.com>
|
||||
Date: Wed, 22 Apr 2020 15:43:22 +0300
|
||||
Subject: [PATCH 5/8] libibverbs: Fix description of ibv_get_device_guid man
|
||||
page
|
||||
|
||||
[ Upstream commit 4ca5cafd29f619233b8deb0297cef0024fcd6e90 ]
|
||||
|
||||
There is a copy/paste error in the description of
|
||||
ibv_get_device_guid(), fix it.
|
||||
|
||||
Fixes: 7aca81e64aa9 ("verbs: Switch simpler man pages over to markdown format")
|
||||
Reviewed-by: Yishai Hadas <yishaih@mellanox.com>
|
||||
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
|
||||
Signed-off-by: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
|
||||
---
|
||||
libibverbs/man/ibv_get_device_guid.3.md | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/libibverbs/man/ibv_get_device_guid.3.md b/libibverbs/man/ibv_get_device_guid.3.md
|
||||
index 683900f974ca..6dc96001d0af 100644
|
||||
--- a/libibverbs/man/ibv_get_device_guid.3.md
|
||||
+++ b/libibverbs/man/ibv_get_device_guid.3.md
|
||||
@@ -22,7 +22,7 @@ uint64_t ibv_get_device_guid(struct ibv_device *device);
|
||||
|
||||
# DESCRIPTION
|
||||
|
||||
-**ibv_get_device_name()** returns the Global Unique IDentifier (GUID) of the
|
||||
+**ibv_get_device_guid()** returns the Global Unique IDentifier (GUID) of the
|
||||
RDMA device *device*.
|
||||
|
||||
# RETURN VALUE
|
||||
--
|
||||
2.25.4
|
||||
|
@ -1,31 +0,0 @@
|
||||
From 24eb020845273acb301b69779921284475303d3a Mon Sep 17 00:00:00 2001
|
||||
From: Yishai Hadas <yishaih@mellanox.com>
|
||||
Date: Sun, 19 Apr 2020 14:06:15 +0300
|
||||
Subject: [PATCH 6/8] verbs: Fix ibv_create_wq() to set wq_context
|
||||
|
||||
[ Upstream commit 130dc94863e754402bb79d52ef89a72a94041def ]
|
||||
|
||||
Fix ibv_create_wq() to set wq_context upon a successful creation.
|
||||
|
||||
Fixes: 2864904f82bf ("Introduce Work Queue object and its verbs")
|
||||
Signed-off-by: Yishai Hadas <yishaih@mellanox.com>
|
||||
Signed-off-by: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
|
||||
---
|
||||
libibverbs/verbs.h | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/libibverbs/verbs.h b/libibverbs/verbs.h
|
||||
index 288985d54975..5e256b4dc442 100644
|
||||
--- a/libibverbs/verbs.h
|
||||
+++ b/libibverbs/verbs.h
|
||||
@@ -3073,6 +3073,7 @@ static inline struct ibv_wq *ibv_create_wq(struct ibv_context *context,
|
||||
|
||||
wq = vctx->create_wq(context, wq_init_attr);
|
||||
if (wq) {
|
||||
+ wq->wq_context = wq_init_attr->wq_context;
|
||||
wq->events_completed = 0;
|
||||
pthread_mutex_init(&wq->mutex, NULL);
|
||||
pthread_cond_init(&wq->cond, NULL);
|
||||
--
|
||||
2.25.4
|
||||
|
@ -1,79 +0,0 @@
|
||||
From fccce505db388fbea2d65fb662111702bc60ad25 Mon Sep 17 00:00:00 2001
|
||||
From: Honggang Li <honli@redhat.com>
|
||||
Date: Thu, 4 Jun 2020 14:33:38 +0800
|
||||
Subject: [PATCH 8/8] libibverbs: Fix ABI_placeholder1 and ABI_placeholder2
|
||||
assignment
|
||||
|
||||
The assignment of ABI_placeholder1 and ABI_placeholder2 must be
|
||||
after the provider populated context_ex->ibv_create_flow and
|
||||
context_ex->ibv_destroy_flow.
|
||||
|
||||
Applications, which compiled against old libibverbs released between
|
||||
commit 501b53b30752 and 1111cf9895bb, will fail if they are linked
|
||||
with libibverbs released after 1111cf9895bb and call ibv_create_flow.
|
||||
|
||||
[1] 501b53b30752 ("Fix create/destroy flow API")
|
||||
|
||||
Fixes: 1111cf9895bb ("verbs: Always allocate a verbs_context")
|
||||
Signed-off-by: Honggang Li <honli@redhat.com>
|
||||
(cherry picked from commit 88789b7ba618d55491026c74a9a31699805e5934)
|
||||
Signed-off-by: Honggang Li <honli@redhat.com>
|
||||
---
|
||||
libibverbs/device.c | 34 +++++++++++++++++-----------------
|
||||
1 file changed, 17 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/libibverbs/device.c b/libibverbs/device.c
|
||||
index bc7df1b06435..db97655c2d9e 100644
|
||||
--- a/libibverbs/device.c
|
||||
+++ b/libibverbs/device.c
|
||||
@@ -256,23 +256,6 @@ int verbs_init_context(struct verbs_context *context_ex,
|
||||
context_ex->context.abi_compat = __VERBS_ABI_IS_EXTENDED;
|
||||
context_ex->sz = sizeof(*context_ex);
|
||||
|
||||
- /*
|
||||
- * In order to maintain backward/forward binary compatibility
|
||||
- * with apps compiled against libibverbs-1.1.8 that use the
|
||||
- * flow steering addition, we need to set the two
|
||||
- * ABI_placeholder entries to match the driver set flow
|
||||
- * entries. This is because apps compiled against
|
||||
- * libibverbs-1.1.8 use an inline ibv_create_flow and
|
||||
- * ibv_destroy_flow function that looks in the placeholder
|
||||
- * spots for the proper entry points. For apps compiled
|
||||
- * against libibverbs-1.1.9 and later, the inline functions
|
||||
- * will be looking in the right place.
|
||||
- */
|
||||
- context_ex->ABI_placeholder1 =
|
||||
- (void (*)(void))context_ex->ibv_create_flow;
|
||||
- context_ex->ABI_placeholder2 =
|
||||
- (void (*)(void))context_ex->ibv_destroy_flow;
|
||||
-
|
||||
context_ex->priv = calloc(1, sizeof(*context_ex->priv));
|
||||
if (!context_ex->priv) {
|
||||
errno = ENOMEM;
|
||||
@@ -330,6 +313,23 @@ static void set_lib_ops(struct verbs_context *vctx)
|
||||
#undef ibv_query_port
|
||||
vctx->context.ops._compat_query_port = ibv_query_port;
|
||||
vctx->query_port = __lib_query_port;
|
||||
+
|
||||
+ /*
|
||||
+ * In order to maintain backward/forward binary compatibility
|
||||
+ * with apps compiled against libibverbs-1.1.8 that use the
|
||||
+ * flow steering addition, we need to set the two
|
||||
+ * ABI_placeholder entries to match the driver set flow
|
||||
+ * entries. This is because apps compiled against
|
||||
+ * libibverbs-1.1.8 use an inline ibv_create_flow and
|
||||
+ * ibv_destroy_flow function that looks in the placeholder
|
||||
+ * spots for the proper entry points. For apps compiled
|
||||
+ * against libibverbs-1.1.9 and later, the inline functions
|
||||
+ * will be looking in the right place.
|
||||
+ */
|
||||
+ vctx->ABI_placeholder1 =
|
||||
+ (void (*)(void))vctx->ibv_create_flow;
|
||||
+ vctx->ABI_placeholder2 =
|
||||
+ (void (*)(void))vctx->ibv_destroy_flow;
|
||||
}
|
||||
|
||||
struct ibv_context *verbs_open_device(struct ibv_device *device, void *private_data)
|
||||
--
|
||||
2.25.4
|
||||
|
@ -1,17 +0,0 @@
|
||||
diff --git a/kernel-boot/rdma-hw-modules.rules b/kernel-boot/rdma-hw-modules.rules
|
||||
index bee416dbe719..97faa07b3340 100644
|
||||
--- a/kernel-boot/rdma-hw-modules.rules
|
||||
+++ b/kernel-boot/rdma-hw-modules.rules
|
||||
@@ -10,7 +10,11 @@ ENV{ID_NET_DRIVER}=="be2net", RUN{builtin}+="kmod load ocrdma"
|
||||
ENV{ID_NET_DRIVER}=="bnxt_en", RUN{builtin}+="kmod load bnxt_re"
|
||||
ENV{ID_NET_DRIVER}=="cxgb4", RUN{builtin}+="kmod load iw_cxgb4"
|
||||
ENV{ID_NET_DRIVER}=="hns", RUN{builtin}+="kmod load hns_roce"
|
||||
-ENV{ID_NET_DRIVER}=="i40e", RUN{builtin}+="kmod load i40iw"
|
||||
+# i40iw is not entirely suspend/resume friendly, and many systems with
|
||||
+# i40e NICs aren't iwarp-capable, so Red Hat defaults to not auto-loading
|
||||
+# the i40iw driver here to keep suspend/resume working. The i40iw driver
|
||||
+# can still be loaded as needed by the rdma systemd service script.
|
||||
+# ENV{ID_NET_DRIVER}=="i40e", RUN{builtin}+="kmod load i40iw"
|
||||
ENV{ID_NET_DRIVER}=="mlx4_en", RUN{builtin}+="kmod load mlx4_ib"
|
||||
ENV{ID_NET_DRIVER}=="mlx5_core", RUN{builtin}+="kmod load mlx5_ib"
|
||||
ENV{ID_NET_DRIVER}=="qede", RUN{builtin}+="kmod load qedr"
|
@ -26,9 +26,13 @@ fi
|
||||
|
||||
ibdevs=$(ls /sys/class/infiniband/)
|
||||
|
||||
pushd /sys/class/net > /dev/null
|
||||
devs=$(ls -d e* i* 2> /dev/null)
|
||||
popd > /dev/null
|
||||
devs=''
|
||||
for netdev in $(/bin/ls /sys/class/net/); do
|
||||
if [ -e /sys/class/net/${netdev}/device/infiniband ]; then
|
||||
devs="${devs} ${netdev}"
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "x$devs" == "x" ]; then
|
||||
# no relevant devices - quit immediately
|
||||
exit
|
||||
|
@ -1,29 +0,0 @@
|
||||
commit bda9530d37c5451928f6ba2c0ddc8c14d367d581
|
||||
Author: Jarod Wilson <jarod@redhat.com>
|
||||
Date: Mon Mar 6 15:44:49 2017 -0500
|
||||
|
||||
redhat/kernel-init: libi40iw no longer tech-preview
|
||||
|
||||
Signed-off-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
Index: rdma-core-17.1/redhat/rdma.kernel-init
|
||||
===================================================================
|
||||
--- rdma-core-17.1.orig/redhat/rdma.kernel-init
|
||||
+++ rdma-core-17.1/redhat/rdma.kernel-init
|
||||
@@ -141,11 +141,12 @@ load_hardware_modules()
|
||||
load_modules usnic_verbs
|
||||
RC+=$?
|
||||
fi
|
||||
+ if is_loaded i40e -a ! is_loaded i40iw; then
|
||||
+ load_modules i40iw
|
||||
+ RC+=$?
|
||||
+ fi
|
||||
if [ "${LOAD_TECH_PREVIEW_DRIVERS}" == "yes" ]; then
|
||||
- if is_loaded i40e -a ! is_loaded i40iw; then
|
||||
- load_modules i40iw
|
||||
- RC+=$?
|
||||
- fi
|
||||
+ continue
|
||||
fi
|
||||
return $RC
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
Name: rdma-core
|
||||
Version: 29.0
|
||||
Release: 3%{?dist}
|
||||
Version: 32.0
|
||||
Release: 4%{?dist}
|
||||
Summary: RDMA core userspace libraries and daemons
|
||||
|
||||
# Almost everything is licensed under the OFA dual GPLv2, 2 Clause BSD license
|
||||
@ -16,19 +16,40 @@ Source1: ibdev2netdev
|
||||
# are extracted from libibverbs-26.0-8.el8 .
|
||||
Source2: rxe_cfg
|
||||
Source3: rxe_cfg.8.gz
|
||||
Patch1: redhat-kernel-init-libi40iw-no-longer-tech-preview.patch
|
||||
Patch2: i40iw-autoload-breaks-suspend.patch
|
||||
Patch3: udev-keep-NAME_KERNEL-as-default-interface-naming-co.patch
|
||||
# stable-v29 patch
|
||||
# stable-v32 patch
|
||||
Patch101: 0001-ABI-Files.patch
|
||||
Patch102: 0002-mlx5-Allocate-accurate-aligned-DM-memory-size.patch
|
||||
Patch104: 0004-buildlib-Fix-a-warning-from-newer-pythons.patch
|
||||
Patch105: 0005-libibverbs-Fix-description-of-ibv_get_device_guid-ma.patch
|
||||
Patch106: 0006-verbs-Fix-ibv_create_wq-to-set-wq_context.patch
|
||||
Patch108: 0008-libibverbs-Fix-ABI_placeholder1-and-ABI_placeholder2.patch
|
||||
# Bug fixes applied after upstream v32.0
|
||||
Patch201: 0001-Fix-cmd_fd-leak-in-mlx5_alloc_context.patch
|
||||
Patch202: 0001-mlx5-Fix-wqe-size-parameter-in-wqe-signature-calcula.patch
|
||||
Patch203: 0001-mlx5-DR-Fix-incorrect-use-of-fl_roce_enabled-capabil.patch
|
||||
Patch204: 0001-mlx5-DR-Create-NC-UAR-as-default-but-fall-back-to-WC.patch
|
||||
Patch205: 0001-efa-Flush-write-combining-writes-before-writing-to-t.patch
|
||||
Patch206: 0001-udaddy-Fix-create_reply_ah-error-flow.patch
|
||||
Patch207: 0001-infiniband-diags-specify-the-HCA-name-and-Port-numbe.patch
|
||||
Patch208: 0001-libqedr-Set-XRC-functions-only-in-RoCE-mode.patch
|
||||
Patch209: 0001-qedr-fix-USE_AFTER_FREE-issue.patch
|
||||
Patch210: 0001-mlx5-Consider-single-threaded-mode-for-shared-UAR.patch
|
||||
Patch211: 0001-rdma_server-Add-s-option-in-rdma_server-s-manual.patch
|
||||
Patch212: 0001-librdmacm-Don-t-overwrite-errno-returned-from-libibv.patch
|
||||
Patch213: 0001-libqedr-Fix-reported-error-code-from-create_cq.patch
|
||||
Patch214: 0001-cxgb4-Fix-reported-error-code-from-create_cq.patch
|
||||
Patch215: 0001-verbs-Update-the-type-of-some-variables-in-documents.patch
|
||||
Patch216: 0001-verbs-Replace-SQ-with-RQ-in-max_recv_sge-s-documents.patch
|
||||
Patch217: 0001-bnxt_re-Fix-reported-error-code-from-create_cq.patch
|
||||
Patch218: 0001-mlx5-DR-Avoid-ICM-depletion-on-multiple-domains.patch
|
||||
Patch219: 0001-srp_daemon-Fix-systemd-dependency.patch
|
||||
Patch220: 0001-pyverbs-Add-mlx5dv-CQ-support.patch
|
||||
Patch221: 0001-tests-Add-mlx5-CQ-tests.patch
|
||||
Patch222: 0001-tests-Check-CQE-compression-cap-before-using-it.patch
|
||||
# RHEL specific patch for OPA ibacm plugin
|
||||
Patch300: 0001-ibacm-acm.c-load-plugin-while-it-is-soft-link.patch
|
||||
# Do not build static libs by default.
|
||||
%define with_static %{?_with_static: 1} %{?!_with_static: 0}
|
||||
|
||||
# 32-bit arm is missing required arch-specific memory barriers,
|
||||
ExcludeArch: %{arm}
|
||||
|
||||
BuildRequires: binutils
|
||||
BuildRequires: cmake >= 2.8.11
|
||||
BuildRequires: gcc
|
||||
@ -41,14 +62,27 @@ BuildRequires: python3-docutils
|
||||
BuildRequires: valgrind-devel
|
||||
%endif
|
||||
BuildRequires: systemd
|
||||
BuildRequires: systemd-devel
|
||||
%if 0%{?fedora} >= 32 || 0%{?rhel} >= 8
|
||||
%define with_pyverbs %{?_with_pyverbs: 1} %{?!_with_pyverbs: %{?!_without_pyverbs: 1} %{?_without_pyverbs: 0}}
|
||||
%else
|
||||
%define with_pyverbs %{?_with_pyverbs: 1} %{?!_with_pyverbs: 0}
|
||||
%endif
|
||||
%if %{with_pyverbs}
|
||||
BuildRequires: python3-devel
|
||||
BuildRequires: python3-Cython
|
||||
%else
|
||||
%if 0%{?rhel} >= 8 || 0%{?fedora} >= 30
|
||||
BuildRequires: python3
|
||||
%else
|
||||
BuildRequires: python
|
||||
%endif
|
||||
%endif
|
||||
|
||||
BuildRequires: sed
|
||||
BuildRequires: perl-generators
|
||||
|
||||
Requires: dracut, kmod, systemd
|
||||
%if 0%{?fedora} >= 24
|
||||
Requires: systemd-udev
|
||||
%endif
|
||||
Requires: pciutils
|
||||
# Red Hat/Fedora previously shipped redhat/ as a stand-alone
|
||||
# package called 'rdma', which we're supplanting here.
|
||||
Provides: rdma = %{version}-%{release}
|
||||
@ -57,9 +91,6 @@ Provides: rdma-ndd = %{version}-%{release}
|
||||
Obsoletes: rdma-ndd < %{version}-%{release}
|
||||
# the ndd utility moved from infiniband-diags to rdma-core
|
||||
Conflicts: infiniband-diags <= 1.6.7
|
||||
Requires: pciutils
|
||||
# 32-bit arm is missing required arch-specific memory barriers,
|
||||
ExcludeArch: %{arm}
|
||||
|
||||
# Since we recommend developers use Ninja, so should packagers, for consistency.
|
||||
%define CMAKE_FLAGS %{nil}
|
||||
@ -86,19 +117,19 @@ dracut rules, and the rdma-ndd utility.
|
||||
%package devel
|
||||
Summary: RDMA core development libraries and headers
|
||||
Requires: %{name}%{?_isa} = %{version}-%{release}
|
||||
Requires: libibverbs = %{version}-%{release}
|
||||
Requires: libibverbs%{?_isa} = %{version}-%{release}
|
||||
Provides: libibverbs-devel = %{version}-%{release}
|
||||
Obsoletes: libibverbs-devel < %{version}-%{release}
|
||||
Requires: libibumad = %{version}-%{release}
|
||||
Requires: libibumad%{?_isa} = %{version}-%{release}
|
||||
Provides: libibumad-devel = %{version}-%{release}
|
||||
Obsoletes: libibumad-devel < %{version}-%{release}
|
||||
Requires: librdmacm = %{version}-%{release}
|
||||
Requires: librdmacm%{?_isa} = %{version}-%{release}
|
||||
Provides: librdmacm-devel = %{version}-%{release}
|
||||
Obsoletes: librdmacm-devel < %{version}-%{release}
|
||||
Requires: ibacm = %{version}-%{release}
|
||||
Requires: ibacm%{?_isa} = %{version}-%{release}
|
||||
Provides: ibacm-devel = %{version}-%{release}
|
||||
Obsoletes: ibacm-devel < %{version}-%{release}
|
||||
Requires: infiniband-diags = %{version}-%{release}
|
||||
Requires: infiniband-diags%{?_isa} = %{version}-%{release}
|
||||
Provides: infiniband-diags-devel = %{version}-%{release}
|
||||
Obsoletes: infiniband-diags-devel < %{version}-%{release}
|
||||
Provides: libibmad-devel = %{version}-%{release}
|
||||
@ -109,7 +140,7 @@ RDMA core development libraries and headers.
|
||||
|
||||
%package -n infiniband-diags
|
||||
Summary: InfiniBand Diagnostic Tools
|
||||
Requires: libibumad = %{version}-%{release}
|
||||
Requires: libibumad%{?_isa} = %{version}-%{release}
|
||||
Provides: perl(IBswcountlimits)
|
||||
Provides: libibmad = %{version}-%{release}
|
||||
Obsoletes: libibmad < %{version}-%{release}
|
||||
@ -126,6 +157,8 @@ Summary: A library and drivers for direct userspace use of RDMA (InfiniBand/iWAR
|
||||
Requires: %{name}%{?_isa} = %{version}-%{release}
|
||||
Provides: libcxgb4 = %{version}-%{release}
|
||||
Obsoletes: libcxgb4 < %{version}-%{release}
|
||||
Provides: libefa = %{version}-%{release}
|
||||
Obsoletes: libefa < %{version}-%{release}
|
||||
Provides: libhfi1 = %{version}-%{release}
|
||||
Obsoletes: libhfi1 < %{version}-%{release}
|
||||
Provides: libi40iw = %{version}-%{release}
|
||||
@ -150,6 +183,7 @@ Device-specific plug-in ibverbs userspace drivers are included:
|
||||
|
||||
- libbxnt_re: Broadcom NetXtreme-E RoCE HCA
|
||||
- libcxgb4: Chelsio T4 iWARP HCA
|
||||
- libefa: Amazon Elastic Fabric Adapter
|
||||
- libhfi1: Intel Omni-Path HFI
|
||||
- libhns: HiSilicon Hip06 SoC
|
||||
- libi40iw: Intel Ethernet Connection X722 RDMA
|
||||
@ -157,6 +191,7 @@ Device-specific plug-in ibverbs userspace drivers are included:
|
||||
- libmlx5: Mellanox Connect-IB/X-4+ InfiniBand HCA
|
||||
- libqedr: QLogic QL4xxx RoCE HCA
|
||||
- librxe: A software implementation of the RoCE protocol
|
||||
- libsiw: A software implementation of the iWarp protocol
|
||||
- libvmw_pvrdma: VMware paravirtual RDMA device
|
||||
|
||||
%package -n libibverbs-utils
|
||||
@ -235,17 +270,45 @@ Requires: libibverbs%{?_isa} = %{version}-%{release}
|
||||
In conjunction with the kernel ib_srp driver, srp_daemon allows you to
|
||||
discover and use SCSI devices via the SCSI RDMA Protocol over InfiniBand.
|
||||
|
||||
%if %{with_pyverbs}
|
||||
%package -n python3-pyverbs
|
||||
Summary: Python3 API over IB verbs
|
||||
%{?python_provide:%python_provide python3-pyverbs}
|
||||
Requires: librdmacm%{?_isa} = %{version}-%{release}
|
||||
Requires: libibverbs%{?_isa} = %{version}-%{release}
|
||||
|
||||
%description -n python3-pyverbs
|
||||
Pyverbs is a Cython-based Python API over libibverbs, providing an
|
||||
easy, object-oriented access to IB verbs.
|
||||
%endif
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
%patch1 -p1
|
||||
%patch2 -p1
|
||||
%patch3 -p1
|
||||
%patch101 -p1
|
||||
%patch102 -p1
|
||||
%patch104 -p1
|
||||
%patch105 -p1
|
||||
%patch106 -p1
|
||||
%patch108 -p1
|
||||
%patch201 -p1
|
||||
%patch202 -p1
|
||||
%patch203 -p1
|
||||
%patch204 -p1
|
||||
%patch205 -p1
|
||||
%patch206 -p1
|
||||
%patch207 -p1
|
||||
%patch208 -p1
|
||||
%patch209 -p1
|
||||
%patch210 -p1
|
||||
%patch211 -p1
|
||||
%patch212 -p1
|
||||
%patch213 -p1
|
||||
%patch214 -p1
|
||||
%patch215 -p1
|
||||
%patch216 -p1
|
||||
%patch217 -p1
|
||||
%patch218 -p1
|
||||
%patch219 -p1
|
||||
%patch220 -p1
|
||||
%patch221 -p1
|
||||
%patch222 -p1
|
||||
%patch300 -p1
|
||||
|
||||
%build
|
||||
|
||||
@ -280,7 +343,16 @@ discover and use SCSI devices via the SCSI RDMA Protocol over InfiniBand.
|
||||
%if %{with_static}
|
||||
-DENABLE_STATIC=1 \
|
||||
%endif
|
||||
%{EXTRA_CMAKE_FLAGS}
|
||||
%{EXTRA_CMAKE_FLAGS} \
|
||||
%if %{defined __python3}
|
||||
-DPYTHON_EXECUTABLE:PATH=%{__python3} \
|
||||
-DCMAKE_INSTALL_PYTHON_ARCH_LIB:PATH=%{python3_sitearch} \
|
||||
%endif
|
||||
%if %{with_pyverbs}
|
||||
-DNO_PYVERBS=0
|
||||
%else
|
||||
-DNO_PYVERBS=1
|
||||
%endif
|
||||
%make_jobs
|
||||
|
||||
%install
|
||||
@ -296,17 +368,12 @@ mkdir -p %{buildroot}%{_libexecdir}
|
||||
mkdir -p %{buildroot}%{_udevrulesdir}
|
||||
mkdir -p %{buildroot}%{dracutlibdir}/modules.d/05rdma
|
||||
mkdir -p %{buildroot}%{sysmodprobedir}
|
||||
install -D -m0644 redhat/rdma.conf %{buildroot}/%{_sysconfdir}/rdma/rdma.conf
|
||||
install -D -m0644 redhat/rdma.sriov-vfs %{buildroot}/%{_sysconfdir}/rdma/sriov-vfs
|
||||
install -D -m0644 redhat/rdma.mlx4.conf %{buildroot}/%{_sysconfdir}/rdma/mlx4.conf
|
||||
install -D -m0644 redhat/rdma.service %{buildroot}%{_unitdir}/rdma.service
|
||||
install -D -m0755 redhat/rdma.modules-setup.sh %{buildroot}%{dracutlibdir}/modules.d/05rdma/module-setup.sh
|
||||
install -D -m0644 redhat/rdma.udev-rules %{buildroot}%{_udevrulesdir}/98-rdma.rules
|
||||
install -D -m0644 redhat/rdma.mlx4.sys.modprobe %{buildroot}%{sysmodprobedir}/libmlx4.conf
|
||||
install -D -m0755 redhat/rdma.kernel-init %{buildroot}%{_libexecdir}/rdma-init-kernel
|
||||
install -D -m0755 redhat/rdma.sriov-init %{buildroot}%{_libexecdir}/rdma-set-sriov-vf
|
||||
install -D -m0755 redhat/rdma.mlx4-setup.sh %{buildroot}%{_libexecdir}/mlx4-setup.sh
|
||||
|
||||
rm -f %{buildroot}%{_sysconfdir}/rdma/modules/rdma.conf
|
||||
install -D -m0644 redhat/rdma.conf %{buildroot}%{_sysconfdir}/rdma/modules/rdma.conf
|
||||
# ibdev2netdev helper script
|
||||
install -D -m0755 %{SOURCE1} %{buildroot}%{_bindir}/
|
||||
|
||||
@ -335,13 +402,13 @@ rm -f %{buildroot}/%{_libdir}/libibverbs/libmthca-rdmav*.so
|
||||
rm -f %{buildroot}/%{_sysconfdir}/libibverbs.d/mthca.driver
|
||||
rm -f %{buildroot}/%{_libdir}/libibverbs/libipathverbs-rdmav*.so
|
||||
rm -f %{buildroot}/%{_sysconfdir}/libibverbs.d/ipathverbs.driver
|
||||
find %{buildroot} -name '*efa*' -exec rm -fv {} \;
|
||||
|
||||
%post -n rdma-core
|
||||
# we ship udev rules, so trigger an update.
|
||||
if [ -x /sbin/udevadm ]; then
|
||||
/sbin/udevadm trigger --subsystem-match=infiniband --action=change || true
|
||||
/sbin/udevadm trigger --subsystem-match=net --action=change || true
|
||||
/sbin/udevadm trigger --subsystem-match=infiniband_mad --action=change || true
|
||||
fi
|
||||
|
||||
%post -n infiniband-diags -p /sbin/ldconfig
|
||||
%postun -n infiniband-diags
|
||||
@ -385,27 +452,40 @@ find %{buildroot} -name '*efa*' -exec rm -fv {} \;
|
||||
%dir %{_docdir}/%{name}
|
||||
%doc %{_docdir}/%{name}/README.md
|
||||
%doc %{_docdir}/%{name}/udev.md
|
||||
%config(noreplace) %{_sysconfdir}/rdma/*
|
||||
%config(noreplace) %{_sysconfdir}/rdma/mlx4.conf
|
||||
%config(noreplace) %{_sysconfdir}/rdma/modules/infiniband.conf
|
||||
%config(noreplace) %{_sysconfdir}/rdma/modules/iwarp.conf
|
||||
%config(noreplace) %{_sysconfdir}/rdma/modules/opa.conf
|
||||
%config(noreplace) %{_sysconfdir}/rdma/modules/rdma.conf
|
||||
%config(noreplace) %{_sysconfdir}/rdma/modules/roce.conf
|
||||
%config(noreplace) %{_sysconfdir}/udev/rules.d/*
|
||||
%dir %{_sysconfdir}/modprobe.d
|
||||
%ifnarch s390
|
||||
%config(noreplace) %{_sysconfdir}/modprobe.d/mlx4.conf
|
||||
%endif
|
||||
%config(noreplace) %{_sysconfdir}/modprobe.d/truescale.conf
|
||||
%{_unitdir}/rdma-hw.target
|
||||
%{_unitdir}/rdma-load-modules@.service
|
||||
%{_unitdir}/rdma.service
|
||||
%dir %{dracutlibdir}
|
||||
%dir %{dracutlibdir}/modules.d
|
||||
%dir %{dracutlibdir}/modules.d/05rdma
|
||||
%{dracutlibdir}/modules.d/05rdma/module-setup.sh
|
||||
%dir %{_udevrulesdir}
|
||||
%{_udevrulesdir}/../rdma_rename
|
||||
%{_udevrulesdir}/*
|
||||
%{_udevrulesdir}/60-rdma-ndd.rules
|
||||
%{_udevrulesdir}/60-rdma-persistent-naming.rules
|
||||
%{_udevrulesdir}/75-rdma-description.rules
|
||||
%{_udevrulesdir}/90-rdma-hw-modules.rules
|
||||
%{_udevrulesdir}/90-rdma-ulp-modules.rules
|
||||
%{_udevrulesdir}/90-rdma-umad.rules
|
||||
%dir %{sysmodprobedir}
|
||||
%{sysmodprobedir}/libmlx4.conf
|
||||
%{_libexecdir}/rdma-init-kernel
|
||||
%{_libexecdir}/rdma-set-sriov-vf
|
||||
%{_libexecdir}/mlx4-setup.sh
|
||||
%{_libexecdir}/truescale-serdes.cmds
|
||||
%{_sbindir}/rdma-ndd
|
||||
%{_bindir}/ibdev2netdev
|
||||
%{_unitdir}/rdma-ndd.service
|
||||
%{_mandir}/man7/rxe*
|
||||
%{_mandir}/man8/rdma-ndd.*
|
||||
%license COPYING.*
|
||||
|
||||
@ -420,60 +500,85 @@ find %{buildroot} -name '*efa*' -exec rm -fv {} \;
|
||||
%endif
|
||||
%{_libdir}/lib*.so
|
||||
%{_libdir}/pkgconfig/*.pc
|
||||
%{_mandir}/man3/efadv*
|
||||
%{_mandir}/man3/ibv_*
|
||||
%{_mandir}/man3/rdma*
|
||||
%{_mandir}/man3/umad*
|
||||
%{_mandir}/man3/*_to_ibv_rate.*
|
||||
%ifnarch s390
|
||||
%{_mandir}/man3/mlx4dv*
|
||||
%{_mandir}/man3/mlx5dv*
|
||||
%{_mandir}/man7/mlx5dv*
|
||||
%endif
|
||||
%{_mandir}/man7/rdma_cm.*
|
||||
%ifnarch s390
|
||||
%{_mandir}/man3/mlx5dv*
|
||||
%{_mandir}/man3/mlx4dv*
|
||||
%{_mandir}/man7/efadv*
|
||||
%{_mandir}/man7/mlx5dv*
|
||||
%{_mandir}/man7/mlx4dv*
|
||||
%endif
|
||||
%{_mandir}/man3/ibnd_*
|
||||
|
||||
%files -n infiniband-diags
|
||||
%{_sbindir}/ibaddr
|
||||
%{_mandir}/man8/ibaddr*
|
||||
%{_sbindir}/ibnetdiscover
|
||||
%{_mandir}/man8/ibnetdiscover*
|
||||
%{_sbindir}/ibping
|
||||
%{_mandir}/man8/ibping*
|
||||
%{_sbindir}/ibportstate
|
||||
%{_mandir}/man8/ibportstate*
|
||||
%{_sbindir}/ibroute
|
||||
%{_mandir}/man8/ibroute.*
|
||||
%{_sbindir}/ibstat
|
||||
%{_mandir}/man8/ibstat.*
|
||||
%{_sbindir}/ibsysstat
|
||||
%{_mandir}/man8/ibsysstat*
|
||||
%{_sbindir}/ibtracert
|
||||
%{_mandir}/man8/ibtracert*
|
||||
%{_sbindir}/perfquery
|
||||
%{_mandir}/man8/perfquery*
|
||||
%{_sbindir}/sminfo
|
||||
%{_mandir}/man8/sminfo*
|
||||
%{_sbindir}/smpdump
|
||||
%{_mandir}/man8/smpdump*
|
||||
%{_sbindir}/smpquery
|
||||
%{_mandir}/man8/smpquery*
|
||||
%{_sbindir}/saquery
|
||||
%{_mandir}/man8/saquery*
|
||||
%{_sbindir}/vendstat
|
||||
%{_mandir}/man8/vendstat*
|
||||
%{_sbindir}/iblinkinfo
|
||||
%{_mandir}/man8/iblinkinfo*
|
||||
%{_sbindir}/ibqueryerrors
|
||||
%{_mandir}/man8/ibqueryerrors*
|
||||
%{_sbindir}/ibcacheedit
|
||||
%{_mandir}/man8/ibcacheedit*
|
||||
%{_sbindir}/ibccquery
|
||||
%{_mandir}/man8/ibccquery*
|
||||
%{_sbindir}/ibccconfig
|
||||
%{_mandir}/man8/ibccconfig*
|
||||
%{_sbindir}/dump_fts
|
||||
%{_mandir}/man8/dump_fts*
|
||||
%{_sbindir}/ibhosts
|
||||
%{_mandir}/man8/ibhosts*
|
||||
%{_sbindir}/ibswitches
|
||||
%{_mandir}/man8/ibswitches*
|
||||
%{_sbindir}/ibnodes
|
||||
%{_mandir}/man8/ibnodes*
|
||||
%{_sbindir}/ibrouters
|
||||
%{_mandir}/man8/ibrouters*
|
||||
%{_sbindir}/ibfindnodesusing.pl
|
||||
%{_mandir}/man8/ibfindnodesusing*
|
||||
%{_sbindir}/ibidsverify.pl
|
||||
%{_mandir}/man8/ibidsverify*
|
||||
%{_sbindir}/check_lft_balance.pl
|
||||
%{_mandir}/man8/check_lft_balance*
|
||||
%{_sbindir}/dump_lfts.sh
|
||||
%{_mandir}/man8/dump_lfts*
|
||||
%{_sbindir}/dump_mfts.sh
|
||||
%{_mandir}/man8/dump_mfts*
|
||||
%{_sbindir}/ibstatus
|
||||
%{_mandir}/man8/ibstatus*
|
||||
%{_mandir}/man8/infiniband-diags*
|
||||
%{_libdir}/libibmad*.so.*
|
||||
%{_libdir}/libibnetdisc*.so.*
|
||||
%{_mandir}/man8/infiniband-diags*
|
||||
%{_mandir}/man8/check_lft_balance*
|
||||
%{_mandir}/man8/dump*
|
||||
%{_mandir}/man8/ib*
|
||||
%{_mandir}/man8/perfquery*
|
||||
%{_mandir}/man8/saquery*
|
||||
%{_mandir}/man8/sminfo*
|
||||
%{_mandir}/man8/smp*
|
||||
%{_mandir}/man8/vendstat*
|
||||
%{perl_vendorlib}/IBswcountlimits.pm
|
||||
%config(noreplace) %{_sysconfdir}/infiniband-diags/error_thresholds
|
||||
%config(noreplace) %{_sysconfdir}/infiniband-diags/ibdiag.conf
|
||||
@ -481,11 +586,12 @@ find %{buildroot} -name '*efa*' -exec rm -fv {} \;
|
||||
%files -n libibverbs
|
||||
%dir %{_sysconfdir}/libibverbs.d
|
||||
%dir %{_libdir}/libibverbs
|
||||
%{_libdir}/libefa.so.*
|
||||
%{_libdir}/libibverbs*.so.*
|
||||
%{_libdir}/libibverbs/*.so
|
||||
%ifnarch s390
|
||||
%{_libdir}/libmlx4.so.*
|
||||
%{_libdir}/libmlx5.so.*
|
||||
%{_libdir}/libmlx4.so.*
|
||||
%endif
|
||||
%config(noreplace) %{_sysconfdir}/libibverbs.d/*.driver
|
||||
%doc %{_docdir}/%{name}/libibverbs.md
|
||||
@ -520,7 +626,9 @@ find %{buildroot} -name '*efa*' -exec rm -fv {} \;
|
||||
%files -n iwpmd
|
||||
%{_sbindir}/iwpmd
|
||||
%{_unitdir}/iwpmd.service
|
||||
%config(noreplace) %{_sysconfdir}/rdma/modules/iwpmd.conf
|
||||
%config(noreplace) %{_sysconfdir}/iwpmd.conf
|
||||
%{_udevrulesdir}/90-iwpmd.rules
|
||||
%{_mandir}/man8/iwpmd.*
|
||||
%{_mandir}/man5/iwpmd.*
|
||||
|
||||
@ -564,6 +672,7 @@ find %{buildroot} -name '*efa*' -exec rm -fv {} \;
|
||||
|
||||
%files -n srp_daemon
|
||||
%config(noreplace) %{_sysconfdir}/srp_daemon.conf
|
||||
%config(noreplace) %{_sysconfdir}/rdma/modules/srp_daemon.conf
|
||||
%{_libexecdir}/srp_daemon/start_on_all_ports
|
||||
%{_unitdir}/srp_daemon.service
|
||||
%{_unitdir}/srp_daemon_port@.service
|
||||
@ -571,13 +680,40 @@ find %{buildroot} -name '*efa*' -exec rm -fv {} \;
|
||||
%{_sbindir}/srp_daemon
|
||||
%{_sbindir}/srp_daemon.sh
|
||||
%{_sbindir}/run_srp_daemon
|
||||
%{_udevrulesdir}/60-srp_daemon.rules
|
||||
%{_mandir}/man5/srp_daemon.service.5*
|
||||
%{_mandir}/man5/srp_daemon_port@.service.5*
|
||||
%{_mandir}/man8/ibsrpdm.8*
|
||||
%{_mandir}/man8/srp_daemon.8*
|
||||
%doc %{_docdir}/%{name}/ibsrpdm.md
|
||||
|
||||
%if %{with_pyverbs}
|
||||
%files -n python3-pyverbs
|
||||
%{python3_sitearch}/pyverbs
|
||||
%{_docdir}/%{name}/tests/*.py
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Thu Jan 28 2021 Honggang Li <honli@redhat.com> - 32.0-4
|
||||
- Update to upstream stable release v32.1
|
||||
- Fix mlx5 pyverbs CQ test
|
||||
- Resolves: bz1915745, bz1907377
|
||||
|
||||
* Tue Dec 22 2020 Honggang Li <honli@redhat.com> - 32.0-3
|
||||
- libqedr: Set XRC functions only in RoCE mode
|
||||
- Resolves: bz1894516
|
||||
|
||||
* Tue Dec 08 2020 Honggang Li <honli@redhat.com> - 32.0-2
|
||||
- Backport bug fixes applied after upstream v32.0
|
||||
- Resolves: bz1902613, bz1875265
|
||||
|
||||
* Tue Nov 03 2020 Honggang Li <honli@redhat.com> - 32.0-1
|
||||
- Update to upstream v32 release for features and fixes
|
||||
- Support Amazon Elastic Fabric Adapter
|
||||
- Enable pyverbs
|
||||
- Add a check for udevadm in the specfile
|
||||
- Resolves: bz1851721, bz1856076, bz1887396, bz1868804
|
||||
|
||||
* Tue Jun 09 2020 Honggang Li <honli@redhat.com> - 29.0-3
|
||||
- BuildRequires perl-generators
|
||||
- Backport upstream stable-v29 commits
|
||||
|
Loading…
Reference in New Issue
Block a user