Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp1282413pxv; Fri, 23 Jul 2021 04:45:17 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxDQmnB1JkjMnV1Ny9OqHhBoJ8zKyD+ZZAVcDiUFk3F3F7JZ0vJatEAydAW3/vDcm92/Ssc X-Received: by 2002:a17:906:c30c:: with SMTP id s12mr4340615ejz.476.1627040716761; Fri, 23 Jul 2021 04:45:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1627040716; cv=none; d=google.com; s=arc-20160816; b=CWhhZffP0Rg67/lPKXzgBKPVKG304gX3vMk56/FwjrcbQkCcriYxazn+VXB7OM0eCp Ds8C7iCjajYPOCubXSF6Ak3oOfgJTn7ZpmJKOmTc7ofq1Lj+IgpjYIxCUOeytj0Gr6oU kGIdrybs7zdNgXK0j9bkde0MQsO+CV/bVYmfwWT7OLPTOlNOuKrM2YJBKaH6fl9fVxyR JgcplsuSc7+7hxgJ9Z/YPXPzRMV1uqGP445qWnW9IMQET0/bV/wFSA9yI/iCtfALEHni jhQtHWUsHFdr0Qs+A2LCGotAtnLREE2GEDcavp9C7JwXqrRj8TOJb7OQWTDKE0ty7ki1 ellQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=+YD+RQywZUKfoh9qEUezW4Htc5v3KCzsYmgBbnkUzM4=; b=N0DiX892OVRkA2N+ODCj8vRPWTW6mUdcmk48zqDwBwaGZHag5wD0dQTsOZV1P8Ezor ZCmaBO1VCLt/5VWrhjcyO4vZeJ0e2c9hFNM/JfiiJ3riG64bfsbLUt21WoC228mH+wl4 Yf4bUAUtts2BW6Mj/4D1MvXvSvHkLl4Fv+KOkMJTjR9flgKuFxPbqYD6zX2QlUnXiJQD b7DdZnHhPFzp8j45HhWFkemSeeSV0/Q+2DW0qGrym3V/ZCCjGXGz4s2+HQ4vx2Hu/LD3 s87IEe4sSQf3ydwRiY/kZ2fXnVuQIBuwkT3lY2JVk+nPfw7wQp7sBjYLTThVdQ3dBk97 Mrsw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=BRpAZ1Wq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id jz19si32585433ejb.599.2021.07.23.04.44.53; Fri, 23 Jul 2021 04:45:16 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=BRpAZ1Wq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234708AbhGWLAB (ORCPT + 99 others); Fri, 23 Jul 2021 07:00:01 -0400 Received: from mail.kernel.org ([198.145.29.99]:39164 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234706AbhGWK7r (ORCPT ); Fri, 23 Jul 2021 06:59:47 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 874A9608FE; Fri, 23 Jul 2021 11:40:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1627040421; bh=uzq54RD5rZlPgk1E6YmXI5XtGyehCEp6l22OvYxcfvA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=BRpAZ1WqRjXc63+QCaaronnpb3QA67q8SivW4fPYCpytoVj20vbLfckCbHNaVDFdi D+ANdQUkDRk+kY+oc3lydz6DifrUMVYK7kJPWYGybeivru4MD3JUJS3CLBch05QZAx p/HCZOOrw04Eqwx+NUr3AxpcIof6qqKPzhAvpuQF2tMlOgue30skt7R+O8i49J9+aQ 2kJsvQfrrXK8w+mmF/MOKofJ1bEoWHohvmBngPrvigQ3uviQ31u3KS0K1sb1XitjH7 tWZ5MpszVchF+h9aSLg4DtWGXe2ADeQRCiBym8ExikJC0riIdQduTAvRyCNTIIHRBG kAKByIxnAuRiw== From: Leon Romanovsky To: Doug Ledford , Jason Gunthorpe Cc: Leon Romanovsky , Adit Ranadive , Ariel Elior , Bernard Metzler , Christian Benvenuti , Dennis Dalessandro , Gal Pressman , linux-kernel@vger.kernel.org, linux-rdma@vger.kernel.org, Michal Kalderon , Mike Marciniszyn , Mustafa Ismail , Naresh Kumar PBS , Nelson Escobar , Potnuri Bharat Teja , Selvin Xavier , Shiraz Saleem , Steve Wise , VMware PV-Drivers , Weihang Li , Wenpeng Liang , Yishai Hadas , Zhu Yanjun Subject: [PATCH rdma-next v1 5/9] RDMA/mlx5: Delete device resource mutex that didn't protect anything Date: Fri, 23 Jul 2021 14:39:47 +0300 Message-Id: <6e338c561033df20d92e1371fc6a7a0d93aad945.1627040189.git.leonro@nvidia.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Leon Romanovsky The dev->devr.mutex was intended to protect GSI QP pointer change in the struct mlx5_ib_port_resources when it is accessed from the pkey_change_work. However that pointer isn't changed during the runtime and once IB/core adds MAD, it stays stable. Signed-off-by: Leon Romanovsky --- drivers/infiniband/hw/mlx5/gsi.c | 34 ++++++++-------------------- drivers/infiniband/hw/mlx5/main.c | 9 ++++++-- drivers/infiniband/hw/mlx5/mlx5_ib.h | 2 -- 3 files changed, 16 insertions(+), 29 deletions(-) diff --git a/drivers/infiniband/hw/mlx5/gsi.c b/drivers/infiniband/hw/mlx5/gsi.c index 7fcad9135276..e549d6fa4a41 100644 --- a/drivers/infiniband/hw/mlx5/gsi.c +++ b/drivers/infiniband/hw/mlx5/gsi.c @@ -116,8 +116,6 @@ int mlx5_ib_create_gsi(struct ib_pd *pd, struct mlx5_ib_qp *mqp, goto err_free_tx; } - mutex_lock(&dev->devr.mutex); - if (dev->devr.ports[port_num - 1].gsi) { mlx5_ib_warn(dev, "GSI QP already exists on port %d\n", port_num); @@ -167,15 +165,11 @@ int mlx5_ib_create_gsi(struct ib_pd *pd, struct mlx5_ib_qp *mqp, INIT_LIST_HEAD(&gsi->rx_qp->sig_mrs); dev->devr.ports[attr->port_num - 1].gsi = gsi; - - mutex_unlock(&dev->devr.mutex); - return 0; err_destroy_cq: ib_free_cq(gsi->cq); err_free_wrs: - mutex_unlock(&dev->devr.mutex); kfree(gsi->outstanding_wrs); err_free_tx: kfree(gsi->tx_qps); @@ -190,16 +184,13 @@ int mlx5_ib_destroy_gsi(struct mlx5_ib_qp *mqp) int qp_index; int ret; - mutex_lock(&dev->devr.mutex); ret = mlx5_ib_destroy_qp(gsi->rx_qp, NULL); if (ret) { mlx5_ib_warn(dev, "unable to destroy hardware GSI QP. error %d\n", ret); - mutex_unlock(&dev->devr.mutex); return ret; } dev->devr.ports[port_num - 1].gsi = NULL; - mutex_unlock(&dev->devr.mutex); gsi->rx_qp = NULL; for (qp_index = 0; qp_index < gsi->num_qps; ++qp_index) { @@ -339,23 +330,13 @@ static void setup_qp(struct mlx5_ib_gsi_qp *gsi, u16 qp_index) WARN_ON_ONCE(qp); } -static void setup_qps(struct mlx5_ib_gsi_qp *gsi) -{ - struct mlx5_ib_dev *dev = to_mdev(gsi->rx_qp->device); - u16 qp_index; - - mutex_lock(&dev->devr.mutex); - for (qp_index = 0; qp_index < gsi->num_qps; ++qp_index) - setup_qp(gsi, qp_index); - mutex_unlock(&dev->devr.mutex); -} - int mlx5_ib_gsi_modify_qp(struct ib_qp *qp, struct ib_qp_attr *attr, int attr_mask) { struct mlx5_ib_dev *dev = to_mdev(qp->device); struct mlx5_ib_qp *mqp = to_mqp(qp); struct mlx5_ib_gsi_qp *gsi = &mqp->gsi; + u16 qp_index; int ret; mlx5_ib_dbg(dev, "modifying GSI QP to state %d\n", attr->qp_state); @@ -366,8 +347,11 @@ int mlx5_ib_gsi_modify_qp(struct ib_qp *qp, struct ib_qp_attr *attr, return ret; } - if (to_mqp(gsi->rx_qp)->state == IB_QPS_RTS) - setup_qps(gsi); + if (to_mqp(gsi->rx_qp)->state != IB_QPS_RTS) + return 0; + + for (qp_index = 0; qp_index < gsi->num_qps; ++qp_index) + setup_qp(gsi, qp_index); return 0; } @@ -511,8 +495,8 @@ int mlx5_ib_gsi_post_recv(struct ib_qp *qp, const struct ib_recv_wr *wr, void mlx5_ib_gsi_pkey_change(struct mlx5_ib_gsi_qp *gsi) { - if (!gsi) - return; + u16 qp_index; - setup_qps(gsi); + for (qp_index = 0; qp_index < gsi->num_qps; ++qp_index) + setup_qp(gsi, qp_index); } diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c index 75d5de14f80b..cac05bbe14c2 100644 --- a/drivers/infiniband/hw/mlx5/main.c +++ b/drivers/infiniband/hw/mlx5/main.c @@ -2501,6 +2501,13 @@ static void pkey_change_handler(struct work_struct *work) container_of(work, struct mlx5_ib_port_resources, pkey_change_work); + if (!ports->gsi) + /* + * We got this event before device was fully configured + * and MAD registration code wasn't called/finished yet. + */ + return; + mlx5_ib_gsi_pkey_change(ports->gsi); } @@ -2795,8 +2802,6 @@ static int mlx5_ib_dev_res_init(struct mlx5_ib_dev *dev) if (!MLX5_CAP_GEN(dev->mdev, xrc)) return -EOPNOTSUPP; - mutex_init(&devr->mutex); - devr->p0 = rdma_zalloc_drv_obj(ibdev, ib_pd); if (!devr->p0) return -ENOMEM; diff --git a/drivers/infiniband/hw/mlx5/mlx5_ib.h b/drivers/infiniband/hw/mlx5/mlx5_ib.h index dbbcb53d2ca2..f2c8a6375b16 100644 --- a/drivers/infiniband/hw/mlx5/mlx5_ib.h +++ b/drivers/infiniband/hw/mlx5/mlx5_ib.h @@ -813,8 +813,6 @@ struct mlx5_ib_resources { struct ib_srq *s0; struct ib_srq *s1; struct mlx5_ib_port_resources ports[2]; - /* Protects changes to the port resources */ - struct mutex mutex; }; struct mlx5_ib_counters { -- 2.31.1