Path: csiph.com!weretis.net!feeder4.news.weretis.net!feeds.phibee-telecom.net!news.panservice.it!bofh.it!news.nic.it!robomod From: "Levin, Alexander (Sasha Levin)" Newsgroups: linux.kernel Subject: [PATCH review for 4.9 08/50] qed: Don't use attention PTT for configuring BW Date: Mon, 25 Sep 2017 03:40:02 +0200 Message-ID: References: X-Original-To: "linux-kernel@vger.kernel.org" , "stable@vger.kernel.org" Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=verizon.com; i=@verizon.com; q=dns/txt; s=corp; t=1506302053; x=1537838053; h=from:cc:to:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=tcpcwJ6Ef7gKIwNegnZL2kD8wFES2ILwRdzNetcfmBY=; b=RynWWMTaQAsqDDMvducnrdWIvo3qIbhReFAJM3AzSIsa3hPTCDrRsBem X6FWacLaO9aeLWUFuV1iHTEukF/ZCZKleua1PgxKLLjbfbiGBfSYACWxj 8h1yS4cUS0RyGkAsg3Xd21cEUrtS/mfxOoGHMtYkzgTH8kgkd47Iq4MWS s=; Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=verizon.com; i=@verizon.com; q=dns/txt; s=corp; t=1506301967; x=1537837967; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=tcpcwJ6Ef7gKIwNegnZL2kD8wFES2ILwRdzNetcfmBY=; b=heJY8uiYUIHyqo1LKe5WlQ0F7NjT/Cf97BkWyhYr1Z6Z3J8UYN/KCxtG SAecBxFPqC4skEFpDN7Hw+OZmdm5s6tjuKHM/IDj811kLkigWj7dAU93c rZcqVC144AHTRICJW+DCjwgR301+WzZDLa/CnEoJMzlcNQx96rGx+hbqz U=; Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=verizon.com; i=@verizon.com; q=dns/txt; s=corp; t=1506301967; x=1537837967; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=tcpcwJ6Ef7gKIwNegnZL2kD8wFES2ILwRdzNetcfmBY=; b=heJY8uiYUIHyqo1LKe5WlQ0F7NjT/Cf97BkWyhYr1Z6Z3J8UYN/KCxtG SAecBxFPqC4skEFpDN7Hw+OZmdm5s6tjuKHM/IDj811kLkigWj7dAU93c rZcqVC144AHTRICJW+DCjwgR301+WzZDLa/CnEoJMzlcNQx96rGx+hbqz U=; X-Host: discovery.odc.vzwcorp.com Thread-Topic: [PATCH review for 4.9 08/50] qed: Don't use attention PTT for configuring BW Thread-Index: AQHTNZtj+rVp2StxbkSsUTRlsZ8t7g== Accept-Language: en-US Content-Language: en-US X-Ms-Exchange-Messagesentrepresentingtype: 1 X-Ms-Exchange-Transport-Fromentityheader: Hosted X-Originating-IP: [10.144.60.250] Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Sender: robomod@news.nic.it List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Approved: robomod@news.nic.it Lines: 84 Organization: linux.* mail to news gateway X-Original-Cc: "Mintz, Yuval" , "David S . Miller" , "Levin, Alexander (Sasha Levin)" X-Original-Date: Mon, 25 Sep 2017 01:12:42 +0000 X-Original-Message-ID: <20170925011225.10029-8-alexander.levin@verizon.com> X-Original-References: <20170925011225.10029-1-alexander.levin@verizon.com> X-Original-Sender: linux-kernel-owner@vger.kernel.org Xref: csiph.com linux.kernel:1738692 From: "Mintz, Yuval" [ Upstream commit 6f437d431930ff86e4a971d29321951faadb97c7 ] Commit 653d2ffd6405 ("qed*: Fix link indication race") introduced another race - one of the inner functions called from the link-change flow is explicitly using the slowpath context dedicated PTT instead of gaining that PTT from the caller. Since this flow can now be called from a different context as well, we're in risk of the PTT breaking. Fixes: 653d2ffd6405 ("qed*: Fix link indication race") Signed-off-by: Yuval Mintz Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/net/ethernet/qlogic/qed/qed.h | 4 +++- drivers/net/ethernet/qlogic/qed/qed_dev.c | 6 +++--- drivers/net/ethernet/qlogic/qed/qed_mcp.c | 3 ++- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/drivers/net/ethernet/qlogic/qed/qed.h b/drivers/net/ethernet/q= logic/qed/qed.h index 653bb5735f0c..433f8be57847 100644 --- a/drivers/net/ethernet/qlogic/qed/qed.h +++ b/drivers/net/ethernet/qlogic/qed/qed.h @@ -642,7 +642,9 @@ static inline u8 qed_concrete_to_sw_fid(struct qed_dev = *cdev, #define OOO_LB_TC 9 =20 int qed_configure_vport_wfq(struct qed_dev *cdev, u16 vp_id, u32 rate); -void qed_configure_vp_wfq_on_link_change(struct qed_dev *cdev, u32 min_pf_= rate); +void qed_configure_vp_wfq_on_link_change(struct qed_dev *cdev, + struct qed_ptt *p_ptt, + u32 min_pf_rate); =20 void qed_clean_wfq_db(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt); #define QED_LEADING_HWFN(dev) (&dev->hwfns[0]) diff --git a/drivers/net/ethernet/qlogic/qed/qed_dev.c b/drivers/net/ethern= et/qlogic/qed/qed_dev.c index edae5fc5fccd..41367c490a7f 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_dev.c +++ b/drivers/net/ethernet/qlogic/qed/qed_dev.c @@ -2732,7 +2732,8 @@ int qed_configure_vport_wfq(struct qed_dev *cdev, u16= vp_id, u32 rate) } =20 /* API to configure WFQ from mcp link change */ -void qed_configure_vp_wfq_on_link_change(struct qed_dev *cdev, u32 min_pf_= rate) +void qed_configure_vp_wfq_on_link_change(struct qed_dev *cdev, + struct qed_ptt *p_ptt, u32 min_pf_rate) { int i; =20 @@ -2746,8 +2747,7 @@ void qed_configure_vp_wfq_on_link_change(struct qed_d= ev *cdev, u32 min_pf_rate) for_each_hwfn(cdev, i) { struct qed_hwfn *p_hwfn =3D &cdev->hwfns[i]; =20 - __qed_configure_vp_wfq_on_link_change(p_hwfn, - p_hwfn->p_dpc_ptt, + __qed_configure_vp_wfq_on_link_change(p_hwfn, p_ptt, min_pf_rate); } } diff --git a/drivers/net/ethernet/qlogic/qed/qed_mcp.c b/drivers/net/ethern= et/qlogic/qed/qed_mcp.c index bdc9ba92f6d4..8b7d2f963ee1 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_mcp.c +++ b/drivers/net/ethernet/qlogic/qed/qed_mcp.c @@ -628,7 +628,8 @@ static void qed_mcp_handle_link_change(struct qed_hwfn = *p_hwfn, =20 /* Min bandwidth configuration */ __qed_configure_pf_min_bandwidth(p_hwfn, p_ptt, p_link, min_bw); - qed_configure_vp_wfq_on_link_change(p_hwfn->cdev, p_link->min_pf_rate); + qed_configure_vp_wfq_on_link_change(p_hwfn->cdev, p_ptt, + p_link->min_pf_rate); =20 p_link->an =3D !!(status & LINK_STATUS_AUTO_NEGOTIATE_ENABLED); p_link->an_complete =3D !!(status & --=20 2.11.0