From patchwork Fri Mar 13 16:33:25 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Selvin Xavier X-Patchwork-Id: 11437407 X-Patchwork-Delegate: jgg@ziepe.ca Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id C118414B4 for ; Fri, 13 Mar 2020 16:33:44 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id A11E0206E7 for ; Fri, 13 Mar 2020 16:33:44 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=broadcom.com header.i=@broadcom.com header.b="M6tM+Mec" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726533AbgCMQdo (ORCPT ); Fri, 13 Mar 2020 12:33:44 -0400 Received: from mail-pj1-f66.google.com ([209.85.216.66]:54525 "EHLO mail-pj1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726406AbgCMQdn (ORCPT ); Fri, 13 Mar 2020 12:33:43 -0400 Received: by mail-pj1-f66.google.com with SMTP id np16so4406184pjb.4 for ; Fri, 13 Mar 2020 09:33:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=CgmE5sqaMcsaNmVgGKGDMDJjMYE5ZC0sLmHpoJUsZUY=; b=M6tM+MecHK63D7g1O5WkypFBGU5AxD11xjCkHog6+ny+inqq2540wSzkR2+JM/Ffhh 0IqM8OH8KOAt2iOaWgM8wKYlviVhc/2hsusQGWiZRL/QJn91x/4t6jcdCNzJi5Jgcidu pweSUWaF9WzJq0SrwasSp6/i6K4cAGaiN+gWk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=CgmE5sqaMcsaNmVgGKGDMDJjMYE5ZC0sLmHpoJUsZUY=; b=ZszpX3zgZNsMXaSIYwAOIVkB7CrNz3tbi675b5EwrKGOgv5PGfHLDPUFtYBV/f8Jmd FtWStUYhGoRFsH2TtKdg0qTDdO4rB1jZpvkvY4nCcO7cDmBpDWxevzYPnKROOZswG5yn 0BPUEvSXewCDh0oU5saScvMrIu72J7qD7kK5u0FyhxFOHNe3UuNqTM0jn7MFWb/PAbSu tbcwSmsLDu/BdJ2ho5xRWREqW6gJ6TMRcw7a+qHj4fyZ0I4IrnoWTknjjQiA+HnCTxIk iblO1lYEQbRDGBiZGRxUD/WOsj0CYapOHxSSI1D2MQtPeRVEl1bAoSc26p580/xI/YNY 2u6w== X-Gm-Message-State: ANhLgQ0uMK1eW+AydlcZ7J9OQf+Axfa2Z7uIvrO5Yi+O01uGT4XmVqNT HXiqMykw7Zb8IHO8vOQMgBV7E93TEGQ= X-Google-Smtp-Source: ADFU+vvXLhTd/RBcWftgMA2lp8LAwDJTl7q9fEwm7p3CJG+szwJpQmrdf6FPwMEQCOujNHIphmNA1Q== X-Received: by 2002:a17:902:8d94:: with SMTP id v20mr14560098plo.259.1584117222582; Fri, 13 Mar 2020 09:33:42 -0700 (PDT) Received: from dhcp-10-192-206-197.iig.avagotech.net.net ([192.19.234.250]) by smtp.gmail.com with ESMTPSA id v5sm2338344pjn.2.2020.03.13.09.33.40 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Mar 2020 09:33:41 -0700 (PDT) From: Selvin Xavier To: dledford@redhat.com, jgg@mellanox.com Cc: linux-rdma@vger.kernel.org, Selvin Xavier Subject: [PATCH v2 for-next 1/3] RDMA/bnxt_re: Use ib_device_try_get() Date: Fri, 13 Mar 2020 09:33:25 -0700 Message-Id: <1584117207-2664-2-git-send-email-selvin.xavier@broadcom.com> X-Mailer: git-send-email 2.5.5 In-Reply-To: <1584117207-2664-1-git-send-email-selvin.xavier@broadcom.com> References: <1584117207-2664-1-git-send-email-selvin.xavier@broadcom.com> Sender: linux-rdma-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org From: Jason Gunthorpe There are a couple places in this driver running from a work queue that need the ib_device to be registered. Instead of using a broken internal bit rely on the new core code to guarantee device registration. Signed-off-by: Jason Gunthorpe Signed-off-by: Selvin Xavier --- drivers/infiniband/hw/bnxt_re/bnxt_re.h | 1 - drivers/infiniband/hw/bnxt_re/main.c | 27 ++++++++++++++------------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/drivers/infiniband/hw/bnxt_re/bnxt_re.h b/drivers/infiniband/hw/bnxt_re/bnxt_re.h index c736e82..407141e 100644 --- a/drivers/infiniband/hw/bnxt_re/bnxt_re.h +++ b/drivers/infiniband/hw/bnxt_re/bnxt_re.h @@ -132,7 +132,6 @@ struct bnxt_re_dev { struct list_head list; unsigned long flags; #define BNXT_RE_FLAG_NETDEV_REGISTERED 0 -#define BNXT_RE_FLAG_IBDEV_REGISTERED 1 #define BNXT_RE_FLAG_GOT_MSIX 2 #define BNXT_RE_FLAG_HAVE_L2_REF 3 #define BNXT_RE_FLAG_RCFW_CHANNEL_EN 4 diff --git a/drivers/infiniband/hw/bnxt_re/main.c b/drivers/infiniband/hw/bnxt_re/main.c index 415693f..885127c 100644 --- a/drivers/infiniband/hw/bnxt_re/main.c +++ b/drivers/infiniband/hw/bnxt_re/main.c @@ -1171,12 +1171,13 @@ static int bnxt_re_update_gid(struct bnxt_re_dev *rdev) u16 gid_idx, index; int rc = 0; - if (!test_bit(BNXT_RE_FLAG_IBDEV_REGISTERED, &rdev->flags)) + if (!ib_device_try_get(&rdev->ibdev)) return 0; if (!sgid_tbl) { ibdev_err(&rdev->ibdev, "QPLIB: SGID table not allocated"); - return -EINVAL; + rc = -EINVAL; + goto out; } for (index = 0; index < sgid_tbl->active; index++) { @@ -1196,7 +1197,8 @@ static int bnxt_re_update_gid(struct bnxt_re_dev *rdev) rc = bnxt_qplib_update_sgid(sgid_tbl, &gid, gid_idx, rdev->qplib_res.netdev->dev_addr); } - +out: + ib_device_put(&rdev->ibdev); return rc; } @@ -1319,7 +1321,6 @@ int bnxt_re_ib_init(struct bnxt_re_dev *rdev) pr_err("Failed to register with IB: %#x\n", rc); return rc; } - set_bit(BNXT_RE_FLAG_IBDEV_REGISTERED, &rdev->flags); dev_info(rdev_to_dev(rdev), "Device registered successfully"); ib_get_eth_speed(&rdev->ibdev, 1, &rdev->active_speed, &rdev->active_width); @@ -1612,7 +1613,6 @@ static void bnxt_re_dealloc_driver(struct ib_device *ib_dev) struct bnxt_re_dev *rdev = container_of(ib_dev, struct bnxt_re_dev, ibdev); - clear_bit(BNXT_RE_FLAG_IBDEV_REGISTERED, &rdev->flags); dev_info(rdev_to_dev(rdev), "Unregistering Device"); rtnl_lock(); @@ -1630,12 +1630,7 @@ static void bnxt_re_task(struct work_struct *work) re_work = container_of(work, struct bnxt_re_work, work); rdev = re_work->rdev; - if (re_work->event != NETDEV_REGISTER && - !test_bit(BNXT_RE_FLAG_IBDEV_REGISTERED, &rdev->flags)) - goto done; - - switch (re_work->event) { - case NETDEV_REGISTER: + if (re_work->event == NETDEV_REGISTER) { rc = bnxt_re_ib_init(rdev); if (rc) { ibdev_err(&rdev->ibdev, @@ -1645,7 +1640,13 @@ static void bnxt_re_task(struct work_struct *work) rtnl_unlock(); goto exit; } - break; + goto exit; + } + + if (!ib_device_try_get(&rdev->ibdev)) + goto exit; + + switch (re_work->event) { case NETDEV_UP: bnxt_re_dispatch_event(&rdev->ibdev, NULL, 1, IB_EVENT_PORT_ACTIVE); @@ -1665,7 +1666,7 @@ static void bnxt_re_task(struct work_struct *work) default: break; } -done: + ib_device_put(&rdev->ibdev); smp_mb__before_atomic(); atomic_dec(&rdev->sched_count); exit: From patchwork Fri Mar 13 16:33:26 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Selvin Xavier X-Patchwork-Id: 11437409 X-Patchwork-Delegate: jgg@ziepe.ca Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3CA3B921 for ; Fri, 13 Mar 2020 16:33:47 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 1CBF7206E7 for ; Fri, 13 Mar 2020 16:33:47 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=broadcom.com header.i=@broadcom.com header.b="WaS4P+1B" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726553AbgCMQdq (ORCPT ); Fri, 13 Mar 2020 12:33:46 -0400 Received: from mail-pl1-f196.google.com ([209.85.214.196]:41411 "EHLO mail-pl1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726406AbgCMQdq (ORCPT ); Fri, 13 Mar 2020 12:33:46 -0400 Received: by mail-pl1-f196.google.com with SMTP id t14so4496469plr.8 for ; Fri, 13 Mar 2020 09:33:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=mDviUkJKfVVqxdYCADiTLGumJyFHa/+aS4eSULi6pmg=; b=WaS4P+1Bk0daGzTu92Z3N/pz/ss4b/Evl//bkAVmc7hsB+a57PVUuQwPmeQWmWsbQY BBZaJdlWqg8ME1zlloSaCk8iMqLhfS0Wh0ZleQhcjQyP+SbiZzBVwMWcYuQuIZdBpy85 IeX5e3+f3Ukom3RTdLepu85v4k4qi4GQ4UkgY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=mDviUkJKfVVqxdYCADiTLGumJyFHa/+aS4eSULi6pmg=; b=J4UaGrjq1JpAMy2vtbk0U11ladujzebIrnv6owwfTM1t/ozXdcyDgyqoE0+VpDOTlW NrM6aMbtIPEnAT6zSWSDE8lxXfaOQHgGJFMbC3dtu4GcBrLhL6xZ7JQUCsHeZIZ/AH+M WiBg18E6mXIjQDyyrVxigdw+HpoQvoHYDQ3Wmp/4JrFNYITAKl+sa7Mtv2olO5B0uEnZ GmEUCkMMGyNyYmLDdlAxdzOV/s3H1lNFvVdQiD2017XXowEuIY2s2jRv4xwzmDv6UvAN 6d+nJVlQS5dXoJEjJI6WzvprpgLymCQzm1OBje+6tl2Ft5Ao9YO5IJxOUi32K3VJwm0G 3pWA== X-Gm-Message-State: ANhLgQ0ckkx/1Epv7WBRNL/OeoSeyCi77QT5WH3K8EznmMD7HXkMyPlb Vdfq0UNJrSTdYWxU//kU43ZJFA== X-Google-Smtp-Source: ADFU+vtYEg+LOvIoc8P9xNmxLozV3VST2h3eD06fOoTdQf4FR/H0IHiMNglYVOpwMBclC4Tvj7siFA== X-Received: by 2002:a17:902:fe83:: with SMTP id x3mr14282016plm.310.1584117225298; Fri, 13 Mar 2020 09:33:45 -0700 (PDT) Received: from dhcp-10-192-206-197.iig.avagotech.net.net ([192.19.234.250]) by smtp.gmail.com with ESMTPSA id v5sm2338344pjn.2.2020.03.13.09.33.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Mar 2020 09:33:44 -0700 (PDT) From: Selvin Xavier To: dledford@redhat.com, jgg@mellanox.com Cc: linux-rdma@vger.kernel.org, Selvin Xavier Subject: [PATCH v2 for-next 2/3] RDMA/bnxt_re: Fix lifetimes in bnxt_re_task Date: Fri, 13 Mar 2020 09:33:26 -0700 Message-Id: <1584117207-2664-3-git-send-email-selvin.xavier@broadcom.com> X-Mailer: git-send-email 2.5.5 In-Reply-To: <1584117207-2664-1-git-send-email-selvin.xavier@broadcom.com> References: <1584117207-2664-1-git-send-email-selvin.xavier@broadcom.com> Sender: linux-rdma-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org From: Jason Gunthorpe A work queue cannot just rely on the ib_device not being freed, it must hold a kref on the memory so that the BNXT_RE_FLAG_IBDEV_REGISTERED check works. Fixes: 1ac5a4047975 ("RDMA/bnxt_re: Add bnxt_re RoCE driver") Signed-off-by: Jason Gunthorpe Signed-off-by: Selvin Xavier --- drivers/infiniband/hw/bnxt_re/main.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/infiniband/hw/bnxt_re/main.c b/drivers/infiniband/hw/bnxt_re/main.c index 885127c..c494e11 100644 --- a/drivers/infiniband/hw/bnxt_re/main.c +++ b/drivers/infiniband/hw/bnxt_re/main.c @@ -1670,6 +1670,7 @@ static void bnxt_re_task(struct work_struct *work) smp_mb__before_atomic(); atomic_dec(&rdev->sched_count); exit: + put_device(&rdev->ibdev.dev); kfree(re_work); } @@ -1735,6 +1736,7 @@ static int bnxt_re_netdev_event(struct notifier_block *notifier, /* Allocate for the deferred task */ re_work = kzalloc(sizeof(*re_work), GFP_ATOMIC); if (re_work) { + get_device(&rdev->ibdev.dev); re_work->rdev = rdev; re_work->event = event; re_work->vlan_dev = (real_dev == netdev ? From patchwork Fri Mar 13 16:33:27 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Selvin Xavier X-Patchwork-Id: 11437411 X-Patchwork-Delegate: jgg@ziepe.ca Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id AEF4614B4 for ; Fri, 13 Mar 2020 16:33:49 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 8EB1D206E7 for ; Fri, 13 Mar 2020 16:33:49 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=broadcom.com header.i=@broadcom.com header.b="hN3Hu1uE" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726947AbgCMQdt (ORCPT ); Fri, 13 Mar 2020 12:33:49 -0400 Received: from mail-pj1-f66.google.com ([209.85.216.66]:52114 "EHLO mail-pj1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726406AbgCMQds (ORCPT ); Fri, 13 Mar 2020 12:33:48 -0400 Received: by mail-pj1-f66.google.com with SMTP id hg10so471590pjb.1 for ; Fri, 13 Mar 2020 09:33:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=gqXtojhoEmVn7L9BsOh24l7erKEJLD548EVbGfm9zd4=; b=hN3Hu1uE+LL8Ya+OdT/n0TL8YhJ8CkAY5HNBjfOpIogLuebg3DAnl9KO5CKfh20A2L jo/HkQg8+xcXkss5UnxuiM1UJRtj7D7S4UxVZynVMbnE4ykMm1rlzBIzuXnzWvZiKNkr m75lFdJlmF7s0mby3uZUdEpKzQbqE2opN4AH4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=gqXtojhoEmVn7L9BsOh24l7erKEJLD548EVbGfm9zd4=; b=TIgqBwJel7jOnBuPambWv5U6yMHshSmIe8rfIK3PojBfamRMpTBuHL2/TWaSmjrjbE 6OugTMyYk5sZxtQGg0+QNFMuJll+NYDHK4dSklMyiobOanerMmbxfl73e7vJ0M5YxiMk /1as7AcVICEo+eTbojQsQ6++XyDwDQBYecStb73TELhYJTwqLvcPPbqE1PwutuCcrAET Y7gbGdltHaWN5qJ2f/2s988335X08nJcWGy1UTAgLGjsLraKQFihqsmz7+qp2Dmg50rS YQOtC8Ww2PiZkSntZPyPU4Tm+Bk9AymSsKLI0ASrMr/JdzUxvE4ZvJApq/YHYNfUb7X6 39JA== X-Gm-Message-State: ANhLgQ0XrANq13D9SmK0JqSxDoq/zGIuHrzOOJbLIgtlKmox5MvcT8Zq OudMvZ+Pypvc/DnJbqd797JY5w== X-Google-Smtp-Source: ADFU+vvhOr7dBEnUvn6JGckKzk4rgr0YlpTfwZBpvQls8LD8y4QayH4LJavDgASD7QiNqWQ397pOQA== X-Received: by 2002:a17:902:8bc3:: with SMTP id r3mr14185118plo.220.1584117227758; Fri, 13 Mar 2020 09:33:47 -0700 (PDT) Received: from dhcp-10-192-206-197.iig.avagotech.net.net ([192.19.234.250]) by smtp.gmail.com with ESMTPSA id v5sm2338344pjn.2.2020.03.13.09.33.45 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Mar 2020 09:33:47 -0700 (PDT) From: Selvin Xavier To: dledford@redhat.com, jgg@mellanox.com Cc: linux-rdma@vger.kernel.org, Selvin Xavier Subject: [PATCH v2 for-next 3/3] RDMA/bnxt_re: Remove unnecessary sched count Date: Fri, 13 Mar 2020 09:33:27 -0700 Message-Id: <1584117207-2664-4-git-send-email-selvin.xavier@broadcom.com> X-Mailer: git-send-email 2.5.5 In-Reply-To: <1584117207-2664-1-git-send-email-selvin.xavier@broadcom.com> References: <1584117207-2664-1-git-send-email-selvin.xavier@broadcom.com> Sender: linux-rdma-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org Since the lifetime of bnxt_re_task is controlled by the kref of device, sched_count is no longer required. Remove it. Signed-off-by: Selvin Xavier --- drivers/infiniband/hw/bnxt_re/bnxt_re.h | 1 - drivers/infiniband/hw/bnxt_re/main.c | 8 -------- 2 files changed, 9 deletions(-) diff --git a/drivers/infiniband/hw/bnxt_re/bnxt_re.h b/drivers/infiniband/hw/bnxt_re/bnxt_re.h index 407141e..a300588 100644 --- a/drivers/infiniband/hw/bnxt_re/bnxt_re.h +++ b/drivers/infiniband/hw/bnxt_re/bnxt_re.h @@ -176,7 +176,6 @@ struct bnxt_re_dev { atomic_t srq_count; atomic_t mr_count; atomic_t mw_count; - atomic_t sched_count; /* Max of 2 lossless traffic class supported per port */ u16 cosq[2]; diff --git a/drivers/infiniband/hw/bnxt_re/main.c b/drivers/infiniband/hw/bnxt_re/main.c index c494e11..4a8fb1a 100644 --- a/drivers/infiniband/hw/bnxt_re/main.c +++ b/drivers/infiniband/hw/bnxt_re/main.c @@ -1667,8 +1667,6 @@ static void bnxt_re_task(struct work_struct *work) break; } ib_device_put(&rdev->ibdev); - smp_mb__before_atomic(); - atomic_dec(&rdev->sched_count); exit: put_device(&rdev->ibdev.dev); kfree(re_work); @@ -1720,11 +1718,6 @@ static int bnxt_re_netdev_event(struct notifier_block *notifier, break; case NETDEV_UNREGISTER: - /* netdev notifier will call NETDEV_UNREGISTER again later since - * we are still holding the reference to the netdev - */ - if (atomic_read(&rdev->sched_count) > 0) - goto exit; ib_unregister_device_queued(&rdev->ibdev); break; @@ -1742,7 +1735,6 @@ static int bnxt_re_netdev_event(struct notifier_block *notifier, re_work->vlan_dev = (real_dev == netdev ? NULL : netdev); INIT_WORK(&re_work->work, bnxt_re_task); - atomic_inc(&rdev->sched_count); queue_work(bnxt_re_wq, &re_work->work); } }