Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp614440ybl; Fri, 24 Jan 2020 06:28:40 -0800 (PST) X-Google-Smtp-Source: APXvYqzaWpbvFTVbocnDEn5o19w711Xw90PULfGc2WzLtUCwXKPuuUBJK+OlVOjiNwG6oKjcmy3Z X-Received: by 2002:aca:ba88:: with SMTP id k130mr2210197oif.167.1579876120150; Fri, 24 Jan 2020 06:28:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1579876120; cv=none; d=google.com; s=arc-20160816; b=WnuhVMP/xiaBkJpqVQX4YcIJfTyxycE0zSdvjU1U18jOYUmh1D3yedxSTMG9WqhXH5 aEKpP6gixhZN5+crcw3cbi8/R9Ro8a5HXDIlFoI5v+gmMWFw22dvTJjR++RIK2hPALnP Y/7rKL63YS1YLidreb4yg3nybwIOzR2JRUwReEcBCn5tu1r2S9QnqHnsVVTt9rpDbzLm LGYeM7n6+EbSoehHtRzj7pi1Lwv9YB1AjN10triDf10+GA3i4wq9F6SSlSi8m0Iyltdr WbTmNlfNRo2KrvtNwo9vVEJP2KZq1KR0hXBPKQuPmrrc86xsLpACjNYsIhZD1AjjzYAt eeeA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=GrDO7+mp9XWOJ/HBA+vJ5RfR0bYR1iP4OySMM0R7s90=; b=uiNOn/RKupl9l4bUtPL2BgQ+qA6wo63sT1gdr2baU/lFr1IGP6ACQMzXxVgXDZJcDG e42EByBDtWK0mBJG7JDPbsiBBODOR4yvqTf8/IrFR4o/qY7LsggIn8LyPmteQGEk5R2m M++cxUxMxUZVD2/TTojCSzsOnAOcvJd8US2NRqw338NnLM4Eeik0B9Knm3rTd4GdCgFO Gvp3Awk1LQO9LjSOwcDDEuaU6/9H7s/6fuYC90bbgab7PV9cy96uAiGj32t/q8O2ZYZ7 fJT3Jup+9bL1DiJgtfrdtX3/9YKMhgMjkco2v9BrXJ8dfTLneG0zOIogimMPPdGnP5CR WFIg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=DhiGzNUo; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id h11si2939084otr.197.2020.01.24.06.28.28; Fri, 24 Jan 2020 06:28:40 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=DhiGzNUo; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2391343AbgAXLXf (ORCPT + 99 others); Fri, 24 Jan 2020 06:23:35 -0500 Received: from mail.kernel.org ([198.145.29.99]:36162 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2391338AbgAXLXe (ORCPT ); Fri, 24 Jan 2020 06:23:34 -0500 Received: from localhost (ip-213-127-102-57.ip.prioritytelecom.net [213.127.102.57]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id E94CD206D4; Fri, 24 Jan 2020 11:23:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1579865012; bh=3zzxrY043VOacSysViHqR4O9nVOrozHGqKOsPmJqvJY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=DhiGzNUoFDX7Y22aPu+dpzIJCPqrgOrPiWyxUefe6nKHdFWgwvgFC+naFKiTTIbED Ht0jwUK4vbhhyZpaqTGWKQZUzREI4/ECtGveDX8jYXm8RIQuKMlKlV+2s+wZLNah7C 08ErPcKffTfijAp+kVXbVPPPhsVubL4fAjIOAM44= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Ariel Elior , Michal Kalderon , "David S. Miller" , Sasha Levin Subject: [PATCH 4.19 428/639] qed: iWARP - Use READ_ONCE and smp_store_release to access ep->state Date: Fri, 24 Jan 2020 10:29:58 +0100 Message-Id: <20200124093140.627981240@linuxfoundation.org> X-Mailer: git-send-email 2.25.0 In-Reply-To: <20200124093047.008739095@linuxfoundation.org> References: <20200124093047.008739095@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Michal Kalderon [ Upstream commit 6117561e1bb30b2fe7f51e1961f34dbedd0bec8a ] Destroy QP waits for it's ep object state to be set to CLOSED before proceeding. ep->state can be updated from a different context. Add smp_store_release/READ_ONCE to synchronize. Fixes: fc4c6065e661 ("qed: iWARP implement disconnect flows") Signed-off-by: Ariel Elior Signed-off-by: Michal Kalderon Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/net/ethernet/qlogic/qed/qed_iwarp.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/drivers/net/ethernet/qlogic/qed/qed_iwarp.c b/drivers/net/ethernet/qlogic/qed/qed_iwarp.c index 7002a660b6b4c..c77babd0ef952 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_iwarp.c +++ b/drivers/net/ethernet/qlogic/qed/qed_iwarp.c @@ -532,7 +532,8 @@ int qed_iwarp_destroy_qp(struct qed_hwfn *p_hwfn, struct qed_rdma_qp *qp) /* Make sure ep is closed before returning and freeing memory. */ if (ep) { - while (ep->state != QED_IWARP_EP_CLOSED && wait_count++ < 200) + while (READ_ONCE(ep->state) != QED_IWARP_EP_CLOSED && + wait_count++ < 200) msleep(100); if (ep->state != QED_IWARP_EP_CLOSED) @@ -1023,8 +1024,6 @@ qed_iwarp_mpa_complete(struct qed_hwfn *p_hwfn, params.ep_context = ep; - ep->state = QED_IWARP_EP_CLOSED; - switch (fw_return_code) { case RDMA_RETURN_OK: ep->qp->max_rd_atomic_req = ep->cm_info.ord; @@ -1084,6 +1083,10 @@ qed_iwarp_mpa_complete(struct qed_hwfn *p_hwfn, break; } + if (fw_return_code != RDMA_RETURN_OK) + /* paired with READ_ONCE in destroy_qp */ + smp_store_release(&ep->state, QED_IWARP_EP_CLOSED); + ep->event_cb(ep->cb_context, ¶ms); /* on passive side, if there is no associated QP (REJECT) we need to @@ -2828,7 +2831,9 @@ static void qed_iwarp_qp_in_error(struct qed_hwfn *p_hwfn, params.status = (fw_return_code == IWARP_QP_IN_ERROR_GOOD_CLOSE) ? 0 : -ECONNRESET; - ep->state = QED_IWARP_EP_CLOSED; + /* paired with READ_ONCE in destroy_qp */ + smp_store_release(&ep->state, QED_IWARP_EP_CLOSED); + spin_lock_bh(&p_hwfn->p_rdma_info->iwarp.iw_lock); list_del(&ep->list_entry); spin_unlock_bh(&p_hwfn->p_rdma_info->iwarp.iw_lock); @@ -2917,7 +2922,8 @@ qed_iwarp_tcp_connect_unsuccessful(struct qed_hwfn *p_hwfn, params.event = QED_IWARP_EVENT_ACTIVE_COMPLETE; params.ep_context = ep; params.cm_info = &ep->cm_info; - ep->state = QED_IWARP_EP_CLOSED; + /* paired with READ_ONCE in destroy_qp */ + smp_store_release(&ep->state, QED_IWARP_EP_CLOSED); switch (fw_return_code) { case IWARP_CONN_ERROR_TCP_CONNECT_INVALID_PACKET: -- 2.20.1