From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Cyrus-Session-Id: sloti22d1t05-1372483-1517181068-2-7251725466524260153 X-Sieve: CMU Sieve 3.0 X-Spam-known-sender: no X-Spam-score: 0.0 X-Spam-hits: BAYES_00 -1.9, HEADER_FROM_DIFFERENT_DOMAINS 0.001, RCVD_IN_DNSWL_HI -5, T_RP_MATCHES_RCVD -0.01, LANGUAGES unknown, BAYES_USED global, SA_VERSION 3.4.0 X-Spam-source: IP='209.132.180.67', Host='vger.kernel.org', Country='US', FromHeader='com', MailFrom='org', XOriginatingCountry='US' X-Spam-charsets: plain='iso-8859-1' X-Resolved-to: greg@kroah.com X-Delivered-to: greg@kroah.com X-Mail-from: stable-owner@vger.kernel.org ARC-Seal: i=1; a=rsa-sha256; cv=none; d=messagingengine.com; s=arctest; t=1517181068; b=kliFVJqqCoo72kQJOaKkdmIMP0+Dj4iCeuSyl0ei4ASJ9WX +SN/nerZFQA44y9xS8FFvOTcPRmSv5j33wpsIvGSrcTTkN4crd+r77hoC0QfKShv ofOsHEnpA5WhHyui5PTAt00PWsVjiReLFKlZoAZOsYtOXpvtfi3DnZ2SBlGCdtI3 C+nNti/z3FmN7B9zDrToNxxviH/vJzPkN0LqhO70Ra77P8LXO3Wcr45Vsd8BzYU5 NtqYae13YKAtwseB6sQN+lgGiFFYrkJpX86TNqh47Dx9fT2WD4EqNYFkXJ1DQwYo KSh6FLjae9Y7UOMoXgTOkge79tZLA8lp8g8tAIA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=from:to:cc:subject:date:message-id :references:in-reply-to:content-type:content-transfer-encoding :mime-version:sender:list-id; s=arctest; t=1517181068; bh=DP+c4l xsaG0iGKIA5AEd4bqDwFHxWVU5n4+Ap29SZjs=; b=BnovtdpFZ7kcN6QhKQlSZE MnQkoyPDQw/Vxze9oDnWs1M2T7RdLfa0ZxMZXZi1TcTh518tO9GVSO6n6dv1JjGv dJop6Mnsk8Pial9m8p+Fc2DOHkdk8+G7nOz5P7/z5lu0MFHbzuCxGOXNEfjWGDru pOIYVrnzKd9u9xIAEz5Xj6foOwzFShnDSCGvVqayPlp56cHujhz5HO04tTESSauI 9kanjIfTR/5Aw/NapwCMknMZLJDf1Vxv0VZoSdl4uFhGyRfSvj+SAlyItx8Us16n EEFcF+Db5KNOJ1tdwmBt+MrCEZ0R5r5ReoZblZIKAbjCb47+SykDAIjOaR6AuvyQ == ARC-Authentication-Results: i=1; mx1.messagingengine.com; arc=none (no signatures found); dkim=pass (1024-bit rsa key sha256) header.d=microsoft.com header.i=@microsoft.com header.b=KcBC9gkD x-bits=1024 x-keytype=rsa x-algorithm=sha256 x-selector=selector1; dmarc=pass (p=reject,has-list-id=yes,d=none) header.from=microsoft.com; iprev=pass policy.iprev=209.132.180.67 (vger.kernel.org); spf=none smtp.mailfrom=stable-owner@vger.kernel.org smtp.helo=vger.kernel.org; x-aligned-from=fail; x-ptr=pass x-ptr-helo=vger.kernel.org x-ptr-lookup=vger.kernel.org; x-return-mx=pass smtp.domain=vger.kernel.org smtp.result=pass smtp_org.domain=kernel.org smtp_org.result=pass smtp_is_org_domain=no header.domain=microsoft.com header.result=pass header_is_org_domain=yes Authentication-Results: mx1.messagingengine.com; arc=none (no signatures found); dkim=pass (1024-bit rsa key sha256) header.d=microsoft.com header.i=@microsoft.com header.b=KcBC9gkD x-bits=1024 x-keytype=rsa x-algorithm=sha256 x-selector=selector1; dmarc=pass (p=reject,has-list-id=yes,d=none) header.from=microsoft.com; iprev=pass policy.iprev=209.132.180.67 (vger.kernel.org); spf=none smtp.mailfrom=stable-owner@vger.kernel.org smtp.helo=vger.kernel.org; x-aligned-from=fail; x-ptr=pass x-ptr-helo=vger.kernel.org x-ptr-lookup=vger.kernel.org; x-return-mx=pass smtp.domain=vger.kernel.org smtp.result=pass smtp_org.domain=kernel.org smtp_org.result=pass smtp_is_org_domain=no header.domain=microsoft.com header.result=pass header_is_org_domain=yes Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753283AbeA1W05 (ORCPT ); Sun, 28 Jan 2018 17:26:57 -0500 Received: from mail-by2nam03on0099.outbound.protection.outlook.com ([104.47.42.99]:57621 "EHLO NAM03-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752488AbeA1W0v (ORCPT ); Sun, 28 Jan 2018 17:26:51 -0500 From: Sasha Levin To: "linux-kernel@vger.kernel.org" , "stable@vger.kernel.org" CC: Chien Tin Tung , Shiraz Saleem , Jason Gunthorpe , Sasha Levin Subject: [PATCH AUTOSEL for 4.14 031/100] i40iw: Allocate a sdbuf per CQP WQE Thread-Topic: [PATCH AUTOSEL for 4.14 031/100] i40iw: Allocate a sdbuf per CQP WQE Thread-Index: AQHTmIcETZ59gJkMcUyPIs0YLmW+9Q== Date: Sun, 28 Jan 2018 22:26:18 +0000 Message-ID: <20180128222547.7398-31-alexander.levin@microsoft.com> References: <20180128222547.7398-1-alexander.levin@microsoft.com> In-Reply-To: <20180128222547.7398-1-alexander.levin@microsoft.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [52.168.54.252] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;MWHSPR01MB344;7:FSR47+EE5oliBmzul7hXEsrGPqga/u5GdKPrl1FC5IRFmSg3vX4mbRgD1LSeH79ydAE6viQ8yn87gU+AsGZ2XC8r9rBpp/8Xubamm+K2yLucsitgIeFP1OH6SF3SAfawdWpSIkyGHfX+b44yCp/tIxWCpKm7n4DxjGSbVBOpb67TEOvVVuEH6oXrI3BmygLNIS3rkho+oB3b20+lREo9+/K+eO1XmciZzGtm7H10vZDtR96RL2jT2tVyzGMwWeVH x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: ef9cb0ea-fb0d-43d2-3d56-08d5669e39ce x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(7020095)(4652020)(4534165)(4627221)(201703031133081)(201702281549075)(48565401081)(5600026)(4604075)(3008032)(2017052603307)(7193020);SRVR:MWHSPR01MB344; x-ms-traffictypediagnostic: MWHSPR01MB344: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Alexander.Levin@microsoft.com; x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(28532068793085)(89211679590171)(228905959029699); x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(61425038)(6040501)(2401047)(8121501046)(5005006)(93006095)(93001095)(3002001)(10201501046)(3231101)(944501161)(6055026)(61426038)(61427038)(6041288)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(20161123558120)(20161123560045)(6072148)(201708071742011);SRVR:MWHSPR01MB344;BCL:0;PCL:0;RULEID:;SRVR:MWHSPR01MB344; x-forefront-prvs: 05669A7924 x-forefront-antispam-report: SFV:NSPM;SFS:(10019020)(346002)(39860400002)(366004)(396003)(376002)(39380400002)(189003)(199004)(10090500001)(86362001)(36756003)(99286004)(2900100001)(6486002)(6512007)(7736002)(1076002)(6436002)(3846002)(76176011)(575784001)(2906002)(8676002)(86612001)(81156014)(105586002)(316002)(5250100002)(81166006)(66066001)(102836004)(478600001)(3280700002)(6116002)(14454004)(2501003)(4326008)(110136005)(10290500003)(26005)(54906003)(107886003)(53936002)(6666003)(186003)(25786009)(59450400001)(68736007)(6506007)(305945005)(5660300001)(106356001)(22452003)(2950100002)(8936002)(97736004)(3660700001)(72206003)(22906009)(217873001);DIR:OUT;SFP:1102;SCL:1;SRVR:MWHSPR01MB344;H:MW2PR2101MB1034.namprd21.prod.outlook.com;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; x-microsoft-antispam-message-info: NwvJbxxnYtEtaQva2EGFwGfbiIYIMbPfnXqxYX5JpRVYnyeOGJF6zK0RdSsWy86FEnoJUfwSfkFZgHD6lpIpmQ== spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: microsoft.com X-MS-Exchange-CrossTenant-Network-Message-Id: ef9cb0ea-fb0d-43d2-3d56-08d5669e39ce X-MS-Exchange-CrossTenant-originalarrivaltime: 28 Jan 2018 22:26:18.3627 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 72f988bf-86f1-41af-91ab-2d7cd011db47 X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHSPR01MB344 Sender: stable-owner@vger.kernel.org X-Mailing-List: stable@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-Mailing-List: linux-kernel@vger.kernel.org List-ID: From: Chien Tin Tung [ Upstream commit 100d6de2ced538c539d923dc14a1b5cbae234503 ] Currently there is only one sdbuf per Control QP (CQP) for programming Segment Descriptor (SD). If multiple SD work requests are posted simultaneously, the sdbuf is reused by all WQEs and new WQEs can corrupt previous WQEs sdbuf leading to incorrect SD programming. Fix this by allocating one sdbuf per CQP SQ WQE. When an SD command is posted, it will use the corresponding sdbuf for the WQE. Fixes: 86dbcd0f12e9 ("i40iw: add file to handle cqp calls") Signed-off-by: Chien Tin Tung Signed-off-by: Shiraz Saleem Signed-off-by: Jason Gunthorpe Signed-off-by: Sasha Levin --- drivers/infiniband/hw/i40iw/i40iw_ctrl.c | 43 ++++++++++++++++++++++------= ---- drivers/infiniband/hw/i40iw/i40iw_d.h | 4 ++- 2 files changed, 33 insertions(+), 14 deletions(-) diff --git a/drivers/infiniband/hw/i40iw/i40iw_ctrl.c b/drivers/infiniband/= hw/i40iw/i40iw_ctrl.c index 42ca5346777d..d86f3e670804 100644 --- a/drivers/infiniband/hw/i40iw/i40iw_ctrl.c +++ b/drivers/infiniband/hw/i40iw/i40iw_ctrl.c @@ -506,7 +506,7 @@ static enum i40iw_status_code i40iw_sc_cqp_create(struc= t i40iw_sc_cqp *cqp, =20 ret_code =3D i40iw_allocate_dma_mem(cqp->dev->hw, &cqp->sdbuf, - 128, + I40IW_UPDATE_SD_BUF_SIZE * cqp->sq_size, I40IW_SD_BUF_ALIGNMENT); =20 if (ret_code) @@ -589,14 +589,15 @@ void i40iw_sc_cqp_post_sq(struct i40iw_sc_cqp *cqp) } =20 /** - * i40iw_sc_cqp_get_next_send_wqe - get next wqe on cqp sq - * @cqp: struct for cqp hw - * @wqe_idx: we index of cqp ring + * i40iw_sc_cqp_get_next_send_wqe_idx - get next WQE on CQP SQ and pass ba= ck the index + * @cqp: pointer to CQP structure + * @scratch: private data for CQP WQE + * @wqe_idx: WQE index for next WQE on CQP SQ */ -u64 *i40iw_sc_cqp_get_next_send_wqe(struct i40iw_sc_cqp *cqp, u64 scratch) +static u64 *i40iw_sc_cqp_get_next_send_wqe_idx(struct i40iw_sc_cqp *cqp, + u64 scratch, u32 *wqe_idx) { u64 *wqe =3D NULL; - u32 wqe_idx; enum i40iw_status_code ret_code; =20 if (I40IW_RING_FULL_ERR(cqp->sq_ring)) { @@ -609,21 +610,33 @@ u64 *i40iw_sc_cqp_get_next_send_wqe(struct i40iw_sc_c= qp *cqp, u64 scratch) cqp->sq_ring.size); return NULL; } - I40IW_ATOMIC_RING_MOVE_HEAD(cqp->sq_ring, wqe_idx, ret_code); + I40IW_ATOMIC_RING_MOVE_HEAD(cqp->sq_ring, *wqe_idx, ret_code); cqp->dev->cqp_cmd_stats[OP_REQUESTED_COMMANDS]++; if (ret_code) return NULL; - if (!wqe_idx) + if (!*wqe_idx) cqp->polarity =3D !cqp->polarity; =20 - wqe =3D cqp->sq_base[wqe_idx].elem; - cqp->scratch_array[wqe_idx] =3D scratch; + wqe =3D cqp->sq_base[*wqe_idx].elem; + cqp->scratch_array[*wqe_idx] =3D scratch; I40IW_CQP_INIT_WQE(wqe); =20 return wqe; } =20 /** + * i40iw_sc_cqp_get_next_send_wqe - get next wqe on cqp sq + * @cqp: struct for cqp hw + * @scratch: private data for CQP WQE + */ +u64 *i40iw_sc_cqp_get_next_send_wqe(struct i40iw_sc_cqp *cqp, u64 scratch) +{ + u32 wqe_idx; + + return i40iw_sc_cqp_get_next_send_wqe_idx(cqp, scratch, &wqe_idx); +} + +/** * i40iw_sc_cqp_destroy - destroy cqp during close * @cqp: struct for cqp hw */ @@ -3534,8 +3547,10 @@ static enum i40iw_status_code cqp_sds_wqe_fill(struc= t i40iw_sc_cqp *cqp, u64 *wqe; int mem_entries, wqe_entries; struct i40iw_dma_mem *sdbuf =3D &cqp->sdbuf; + u64 offset; + u32 wqe_idx; =20 - wqe =3D i40iw_sc_cqp_get_next_send_wqe(cqp, scratch); + wqe =3D i40iw_sc_cqp_get_next_send_wqe_idx(cqp, scratch, &wqe_idx); if (!wqe) return I40IW_ERR_RING_FULL; =20 @@ -3548,8 +3563,10 @@ static enum i40iw_status_code cqp_sds_wqe_fill(struc= t i40iw_sc_cqp *cqp, LS_64(mem_entries, I40IW_CQPSQ_UPESD_ENTRY_COUNT); =20 if (mem_entries) { - memcpy(sdbuf->va, &info->entry[3], (mem_entries << 4)); - data =3D sdbuf->pa; + offset =3D wqe_idx * I40IW_UPDATE_SD_BUF_SIZE; + memcpy((char *)sdbuf->va + offset, &info->entry[3], + mem_entries << 4); + data =3D (u64)sdbuf->pa + offset; } else { data =3D 0; } diff --git a/drivers/infiniband/hw/i40iw/i40iw_d.h b/drivers/infiniband/hw/= i40iw/i40iw_d.h index 2ebaadbed379..e191fa54ef62 100644 --- a/drivers/infiniband/hw/i40iw/i40iw_d.h +++ b/drivers/infiniband/hw/i40iw/i40iw_d.h @@ -1516,7 +1516,7 @@ enum i40iw_alignment { I40IW_AEQ_ALIGNMENT =3D 0x100, I40IW_CEQ_ALIGNMENT =3D 0x100, I40IW_CQ0_ALIGNMENT =3D 0x100, - I40IW_SD_BUF_ALIGNMENT =3D 0x100 + I40IW_SD_BUF_ALIGNMENT =3D 0x80 }; =20 #define I40IW_WQE_SIZE_64 64 @@ -1524,6 +1524,8 @@ enum i40iw_alignment { #define I40IW_QP_WQE_MIN_SIZE 32 #define I40IW_QP_WQE_MAX_SIZE 128 =20 +#define I40IW_UPDATE_SD_BUF_SIZE 128 + #define I40IW_CQE_QTYPE_RQ 0 #define I40IW_CQE_QTYPE_SQ 1 =20 --=20 2.11.0