Commit ac9c34d1 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull rdma fixes from Jason Gunthorpe:

 - Fix a mlx5 malfunction if the UMR QP gets an error

 - Return the correct port number to userspace for a mlx5 DCT

 - Don't cause a UMR QP error if DMABUF teardown races with invalidation

 - Fix a WARN splat when unregisering so mlx5 device memory MR types

 - Use the correct alignment for the mana doorbell so that two processes
   do not share the same physical page on non-4k page systems

 - MAINTAINERS updates for MANA

 - Retry failed HNS FW commands because some can take a long time

 - Cast void * handle to the correct type in bnxt to fix corruption

 - Avoid a NULL pointer crash in bnxt_re

 - Fix skipped ib_device_unregsiter() for bnxt_re due to some earlier
   rework

 - Correctly detect if the bnxt supports extended statistics

 - Fix refcount leak in mlx5 odp introduced by a previous fix

 - Map the FW result for the port rate to the userspace values properly
   in mlx5, returns correct values for newer 800G ports

 - Don't wrongly destroy counters objects that were not automatically
   created during mlx5 bind qp

 - Set page size/shift members of kernel owned SRQs to fix a crash in
   nvme target

* tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma:
  RDMA/bnxt_re: Fix the page details for the srq created by kernel consumers
  RDMA/mlx5: Fix bind QP error cleanup flow
  RDMA/mlx5: Fix AH static rate parsing
  RDMA/mlx5: Fix implicit ODP hang on parent deregistration
  RDMA/bnxt_re: Fix the statistics for Gen P7 VF
  RDMA/bnxt_re: Fix issue in the unload path
  RDMA/bnxt_re: Add sanity checks on rdev validity
  RDMA/bnxt_re: Fix an issue in bnxt_re_async_notifier
  RDMA/hns: Fix mbox timing out by adding retry mechanism
  MAINTAINERS: update maintainer for Microsoft MANA RDMA driver
  RDMA/mana_ib: Allocate PAGE aligned doorbell index
  RDMA/mlx5: Fix a WARN during dereg_mr for DM type
  RDMA/mlx5: Fix a race for DMABUF MR which can lead to CQE with error
  IB/mlx5: Set and get correct qp_num for a DCT QP
  RDMA/mlx5: Fix the recovery flow of the UMR QP
parents 9f5270d7 b6653535
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -15680,7 +15680,7 @@ F: include/uapi/linux/cciss*.h
MICROSOFT MANA RDMA DRIVER
M:	Long Li <longli@microsoft.com>
M:	Ajay Sharma <sharmaajay@microsoft.com>
M:	Konstantin Taranov <kotaranov@microsoft.com>
L:	linux-rdma@vger.kernel.org
S:	Supported
F:	drivers/infiniband/hw/mana/
+0 −1
Original line number Diff line number Diff line
@@ -187,7 +187,6 @@ struct bnxt_re_dev {
#define BNXT_RE_FLAG_ISSUE_ROCE_STATS          29
	struct net_device		*netdev;
	struct auxiliary_device         *adev;
	struct notifier_block		nb;
	unsigned int			version, major, minor;
	struct bnxt_qplib_chip_ctx	*chip_ctx;
	struct bnxt_en_dev		*en_dev;
+2 −2
Original line number Diff line number Diff line
@@ -348,8 +348,8 @@ int bnxt_re_ib_get_hw_stats(struct ib_device *ibdev,
			goto done;
		}
		bnxt_re_copy_err_stats(rdev, stats, err_s);
		if (_is_ext_stats_supported(rdev->dev_attr->dev_cap_flags) &&
		    !rdev->is_virtfn) {
		if (bnxt_ext_stats_supported(rdev->chip_ctx, rdev->dev_attr->dev_cap_flags,
					     rdev->is_virtfn)) {
			rc = bnxt_re_get_ext_stat(rdev, stats);
			if (rc) {
				clear_bit(BNXT_RE_FLAG_ISSUE_ROCE_STATS,
+2 −0
Original line number Diff line number Diff line
@@ -1870,6 +1870,8 @@ int bnxt_re_create_srq(struct ib_srq *ib_srq,
	srq->qplib_srq.threshold = srq_init_attr->attr.srq_limit;
	srq->srq_limit = srq_init_attr->attr.srq_limit;
	srq->qplib_srq.eventq_hw_ring_id = rdev->nqr->nq[0].ring_id;
	srq->qplib_srq.sg_info.pgsize = PAGE_SIZE;
	srq->qplib_srq.sg_info.pgshft = PAGE_SHIFT;
	nq = &rdev->nqr->nq[0];

	if (udata) {
+11 −11
Original line number Diff line number Diff line
@@ -396,11 +396,16 @@ static void bnxt_re_dcb_wq_task(struct work_struct *work)

static void bnxt_re_async_notifier(void *handle, struct hwrm_async_event_cmpl *cmpl)
{
	struct bnxt_re_dev *rdev = (struct bnxt_re_dev *)handle;
	struct bnxt_re_en_dev_info *en_info = auxiliary_get_drvdata(handle);
	struct bnxt_re_dcb_work *dcb_work;
	struct bnxt_re_dev *rdev;
	u32 data1, data2;
	u16 event_id;

	rdev = en_info->rdev;
	if (!rdev)
		return;

	event_id = le16_to_cpu(cmpl->event_id);
	data1 = le32_to_cpu(cmpl->event_data1);
	data2 = le32_to_cpu(cmpl->event_data2);
@@ -433,6 +438,8 @@ static void bnxt_re_stop_irq(void *handle, bool reset)
	int indx;

	rdev = en_info->rdev;
	if (!rdev)
		return;
	rcfw = &rdev->rcfw;

	if (reset) {
@@ -461,6 +468,8 @@ static void bnxt_re_start_irq(void *handle, struct bnxt_msix_entry *ent)
	int indx, rc;

	rdev = en_info->rdev;
	if (!rdev)
		return;
	msix_ent = rdev->nqr->msix_entries;
	rcfw = &rdev->rcfw;
	if (!ent) {
@@ -1350,7 +1359,6 @@ static struct bnxt_re_dev *bnxt_re_dev_add(struct auxiliary_device *adev,
		return NULL;
	}
	/* Default values */
	rdev->nb.notifier_call = NULL;
	rdev->netdev = en_dev->net;
	rdev->en_dev = en_dev;
	rdev->adev = adev;
@@ -2345,15 +2353,6 @@ static int bnxt_re_add_device(struct auxiliary_device *adev, u8 op_type)
static void bnxt_re_remove_device(struct bnxt_re_dev *rdev, u8 op_type,
				  struct auxiliary_device *aux_dev)
{
	if (rdev->nb.notifier_call) {
		unregister_netdevice_notifier(&rdev->nb);
		rdev->nb.notifier_call = NULL;
	} else {
		/* If notifier is null, we should have already done a
		 * clean up before coming here.
		 */
		return;
	}
	bnxt_re_setup_cc(rdev, false);
	ib_unregister_device(&rdev->ibdev);
	bnxt_re_dev_uninit(rdev, op_type);
@@ -2433,6 +2432,7 @@ static int bnxt_re_suspend(struct auxiliary_device *adev, pm_message_t state)
	ibdev_info(&rdev->ibdev, "%s: L2 driver notified to stop en_state 0x%lx",
		   __func__, en_dev->en_state);
	bnxt_re_remove_device(rdev, BNXT_RE_PRE_RECOVERY_REMOVE, adev);
	bnxt_re_update_en_info_rdev(NULL, en_info, adev);
	mutex_unlock(&bnxt_re_mutex);

	return 0;
Loading