Merge tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma
Pull rdma updates from Jason Gunthorpe: "A quiet cycle after the larger 5.8 effort. Substantially cleanup and driver work with a few smaller features this time. - Driver updates for hfi1, rxe, mlx5, hns, qedr, usnic, bnxt_re - Removal of dead or redundant code across the drivers - RAW resource tracker dumps to include a device specific data blob for device objects to aide device debugging - Further advance the IOCTL interface, remove the ability to turn it off. Add QUERY_CONTEXT, QUERY_MR, and QUERY_PD commands - Remove stubs related to devices with no pkey table - A shared CQ scheme to allow multiple ULPs to share the CQ rings of a device to give higher performance - Several more static checker, syzkaller and rare crashers fixed" * tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma: (121 commits) RDMA/mlx5: Fix flow destination setting for RDMA TX flow table RDMA/rxe: Remove pkey table RDMA/umem: Add a schedule point in ib_umem_get() RDMA/hns: Fix the unneeded process when getting a general type of CQE error RDMA/hns: Fix error during modify qp RTS2RTS RDMA/hns: Delete unnecessary memset when allocating VF resource RDMA/hns: Remove redundant parameters in set_rc_wqe() RDMA/hns: Remove support for HIP08_A RDMA/hns: Refactor hns_roce_v2_set_hem() RDMA/hns: Remove redundant hardware opcode definitions RDMA/netlink: Remove CAP_NET_RAW check when dump a raw QP RDMA/include: Replace license text with SPDX tags RDMA/rtrs: remove WQ_MEM_RECLAIM for rtrs_wq RDMA/rtrs-clt: add an additional random 8 seconds before reconnecting RDMA/cma: Execute rdma_cm destruction from a handler properly RDMA/cma: Remove unneeded locking for req paths RDMA/cma: Using the standard locking pattern when delivering the removal event RDMA/cma: Simplify DEVICE_REMOVAL for internal_id RDMA/efa: Add EFA 0xefa1 PCI ID RDMA/efa: User/kernel compatibility handshake mechanism ...
Šī revīzija ir iekļauta:
@@ -38,6 +38,7 @@
|
||||
#include <linux/mlx5/fs.h>
|
||||
#include "mlx5_ib.h"
|
||||
#include "ib_rep.h"
|
||||
#include "counters.h"
|
||||
#include "cmd.h"
|
||||
#include "qp.h"
|
||||
#include "wr.h"
|
||||
@@ -2031,15 +2032,15 @@ static int create_user_qp(struct mlx5_ib_dev *dev, struct ib_pd *pd,
|
||||
switch (init_attr->qp_type) {
|
||||
case IB_QPT_XRC_INI:
|
||||
MLX5_SET(qpc, qpc, cqn_rcv, to_mcq(devr->c0)->mcq.cqn);
|
||||
MLX5_SET(qpc, qpc, xrcd, to_mxrcd(devr->x1)->xrcdn);
|
||||
MLX5_SET(qpc, qpc, xrcd, devr->xrcdn1);
|
||||
MLX5_SET(qpc, qpc, srqn_rmpn_xrqn, to_msrq(devr->s0)->msrq.srqn);
|
||||
break;
|
||||
default:
|
||||
if (init_attr->srq) {
|
||||
MLX5_SET(qpc, qpc, xrcd, to_mxrcd(devr->x0)->xrcdn);
|
||||
MLX5_SET(qpc, qpc, xrcd, devr->xrcdn0);
|
||||
MLX5_SET(qpc, qpc, srqn_rmpn_xrqn, to_msrq(init_attr->srq)->msrq.srqn);
|
||||
} else {
|
||||
MLX5_SET(qpc, qpc, xrcd, to_mxrcd(devr->x1)->xrcdn);
|
||||
MLX5_SET(qpc, qpc, xrcd, devr->xrcdn1);
|
||||
MLX5_SET(qpc, qpc, srqn_rmpn_xrqn, to_msrq(devr->s1)->msrq.srqn);
|
||||
}
|
||||
}
|
||||
@@ -2178,11 +2179,11 @@ static int create_kernel_qp(struct mlx5_ib_dev *dev, struct ib_pd *pd,
|
||||
MLX5_SET(qpc, qpc, no_sq, 1);
|
||||
|
||||
if (attr->srq) {
|
||||
MLX5_SET(qpc, qpc, xrcd, to_mxrcd(devr->x0)->xrcdn);
|
||||
MLX5_SET(qpc, qpc, xrcd, devr->xrcdn0);
|
||||
MLX5_SET(qpc, qpc, srqn_rmpn_xrqn,
|
||||
to_msrq(attr->srq)->msrq.srqn);
|
||||
} else {
|
||||
MLX5_SET(qpc, qpc, xrcd, to_mxrcd(devr->x1)->xrcdn);
|
||||
MLX5_SET(qpc, qpc, xrcd, devr->xrcdn1);
|
||||
MLX5_SET(qpc, qpc, srqn_rmpn_xrqn,
|
||||
to_msrq(devr->s1)->msrq.srqn);
|
||||
}
|
||||
@@ -3554,7 +3555,7 @@ static int modify_raw_packet_qp(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp,
|
||||
switch (raw_qp_param->operation) {
|
||||
case MLX5_CMD_OP_RST2INIT_QP:
|
||||
rq_state = MLX5_RQC_STATE_RDY;
|
||||
sq_state = MLX5_SQC_STATE_RDY;
|
||||
sq_state = MLX5_SQC_STATE_RST;
|
||||
break;
|
||||
case MLX5_CMD_OP_2ERR_QP:
|
||||
rq_state = MLX5_RQC_STATE_ERR;
|
||||
@@ -3566,13 +3567,11 @@ static int modify_raw_packet_qp(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp,
|
||||
break;
|
||||
case MLX5_CMD_OP_RTR2RTS_QP:
|
||||
case MLX5_CMD_OP_RTS2RTS_QP:
|
||||
if (raw_qp_param->set_mask ==
|
||||
MLX5_RAW_QP_RATE_LIMIT) {
|
||||
modify_rq = 0;
|
||||
sq_state = sq->state;
|
||||
} else {
|
||||
return raw_qp_param->set_mask ? -EINVAL : 0;
|
||||
}
|
||||
if (raw_qp_param->set_mask & ~MLX5_RAW_QP_RATE_LIMIT)
|
||||
return -EINVAL;
|
||||
|
||||
modify_rq = 0;
|
||||
sq_state = MLX5_SQC_STATE_RDY;
|
||||
break;
|
||||
case MLX5_CMD_OP_INIT2INIT_QP:
|
||||
case MLX5_CMD_OP_INIT2RTR_QP:
|
||||
@@ -4114,9 +4113,9 @@ static int mlx5_ib_modify_dct(struct ib_qp *ibqp, struct ib_qp_attr *attr,
|
||||
struct mlx5_ib_qp *qp = to_mqp(ibqp);
|
||||
struct mlx5_ib_dev *dev = to_mdev(ibqp->device);
|
||||
enum ib_qp_state cur_state, new_state;
|
||||
int err = 0;
|
||||
int required = IB_QP_STATE;
|
||||
void *dctc;
|
||||
int err;
|
||||
|
||||
if (!(attr_mask & IB_QP_STATE))
|
||||
return -EINVAL;
|
||||
@@ -4208,11 +4207,9 @@ static int mlx5_ib_modify_dct(struct ib_qp *ibqp, struct ib_qp_attr *attr,
|
||||
mlx5_ib_warn(dev, "Modify DCT: Invalid transition from %d to %d\n", cur_state, new_state);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (err)
|
||||
qp->state = IB_QPS_ERR;
|
||||
else
|
||||
qp->state = new_state;
|
||||
return err;
|
||||
|
||||
qp->state = new_state;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int mlx5_ib_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
|
||||
@@ -4450,7 +4447,7 @@ static int sqrq_state_to_qp_state(u8 sq_state, u8 rq_state,
|
||||
[MLX5_SQ_STATE_NA] = IB_QPS_RESET,
|
||||
},
|
||||
[MLX5_RQC_STATE_RDY] = {
|
||||
[MLX5_SQC_STATE_RST] = MLX5_QP_STATE_BAD,
|
||||
[MLX5_SQC_STATE_RST] = MLX5_QP_STATE,
|
||||
[MLX5_SQC_STATE_RDY] = MLX5_QP_STATE,
|
||||
[MLX5_SQC_STATE_ERR] = IB_QPS_SQE,
|
||||
[MLX5_SQ_STATE_NA] = MLX5_QP_STATE,
|
||||
@@ -4462,7 +4459,7 @@ static int sqrq_state_to_qp_state(u8 sq_state, u8 rq_state,
|
||||
[MLX5_SQ_STATE_NA] = IB_QPS_ERR,
|
||||
},
|
||||
[MLX5_RQ_STATE_NA] = {
|
||||
[MLX5_SQC_STATE_RST] = IB_QPS_RESET,
|
||||
[MLX5_SQC_STATE_RST] = MLX5_QP_STATE,
|
||||
[MLX5_SQC_STATE_RDY] = MLX5_QP_STATE,
|
||||
[MLX5_SQC_STATE_ERR] = MLX5_QP_STATE,
|
||||
[MLX5_SQ_STATE_NA] = MLX5_QP_STATE_BAD,
|
||||
@@ -4708,41 +4705,23 @@ out:
|
||||
return err;
|
||||
}
|
||||
|
||||
struct ib_xrcd *mlx5_ib_alloc_xrcd(struct ib_device *ibdev,
|
||||
struct ib_udata *udata)
|
||||
int mlx5_ib_alloc_xrcd(struct ib_xrcd *ibxrcd, struct ib_udata *udata)
|
||||
{
|
||||
struct mlx5_ib_dev *dev = to_mdev(ibdev);
|
||||
struct mlx5_ib_xrcd *xrcd;
|
||||
int err;
|
||||
struct mlx5_ib_dev *dev = to_mdev(ibxrcd->device);
|
||||
struct mlx5_ib_xrcd *xrcd = to_mxrcd(ibxrcd);
|
||||
|
||||
if (!MLX5_CAP_GEN(dev->mdev, xrc))
|
||||
return ERR_PTR(-ENOSYS);
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
xrcd = kmalloc(sizeof(*xrcd), GFP_KERNEL);
|
||||
if (!xrcd)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
err = mlx5_cmd_xrcd_alloc(dev->mdev, &xrcd->xrcdn, 0);
|
||||
if (err) {
|
||||
kfree(xrcd);
|
||||
return ERR_PTR(-ENOMEM);
|
||||
}
|
||||
|
||||
return &xrcd->ibxrcd;
|
||||
return mlx5_cmd_xrcd_alloc(dev->mdev, &xrcd->xrcdn, 0);
|
||||
}
|
||||
|
||||
int mlx5_ib_dealloc_xrcd(struct ib_xrcd *xrcd, struct ib_udata *udata)
|
||||
void mlx5_ib_dealloc_xrcd(struct ib_xrcd *xrcd, struct ib_udata *udata)
|
||||
{
|
||||
struct mlx5_ib_dev *dev = to_mdev(xrcd->device);
|
||||
u32 xrcdn = to_mxrcd(xrcd)->xrcdn;
|
||||
int err;
|
||||
|
||||
err = mlx5_cmd_xrcd_dealloc(dev->mdev, xrcdn, 0);
|
||||
if (err)
|
||||
mlx5_ib_warn(dev, "failed to dealloc xrcdn 0x%x\n", xrcdn);
|
||||
|
||||
kfree(xrcd);
|
||||
return 0;
|
||||
mlx5_cmd_xrcd_dealloc(dev->mdev, xrcdn, 0);
|
||||
}
|
||||
|
||||
static void mlx5_ib_wq_event(struct mlx5_core_qp *core_qp, int type)
|
||||
|
Atsaukties uz šo jaunā problēmā
Block a user