Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755606AbcK3FSm (ORCPT ); Wed, 30 Nov 2016 00:18:42 -0500 Received: from mail-db5eur01on0050.outbound.protection.outlook.com ([104.47.2.50]:20937 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752510AbcK3FSd (ORCPT ); Wed, 30 Nov 2016 00:18:33 -0500 From: Stuart Yoder To: Ruxandra Ioana Radulescu , "gregkh@linuxfoundation.org" CC: German Rivera , "devel@driverdev.osuosl.org" , "linux-kernel@vger.kernel.org" , "agraf@suse.de" , "arnd@arndb.de" , Leo Li , Roy Pledge , Haiying Wang Subject: RE: [PATCH 6/9] bus: fsl-mc: dpio: add QBMan portal APIs for DPAA2 Thread-Topic: [PATCH 6/9] bus: fsl-mc: dpio: add QBMan portal APIs for DPAA2 Thread-Index: AQHSK6SU/JJyAb48sEOHR53H+I1ID6DHaGwwgCd/JmCAAeunoA== Date: Tue, 29 Nov 2016 23:07:33 +0000 Message-ID: References: <1477058509-12547-1-git-send-email-stuart.yoder@nxp.com> <1477058509-12547-7-git-send-email-stuart.yoder@nxp.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=stuart.yoder@nxp.com; x-originating-ip: [162.203.173.167] x-microsoft-exchange-diagnostics: 1;VI1PR0401MB2640;7:HPHYBrlpRFSRfokDuSNw+2+jYafwPhrDNAIDwSaPEPjcgE5AE/9YKFeurRaxreXuUI4Loj2fCFg2x4LTspqxN6aEnCLsKwg2fiOlt5d5BM/Sq/AA6+uGqR/8dmvn4pmg7/Jx2cXJ2+k2A20DAKFQ6r1F+QR7xmV1Qgu2DmwzvKLBQVQQmy4ixh7cykIM+Oy8w5Jaa76O20zTCqM3xCRv+j0lYKJminnViP8ia+lE/XhE+DxBxP7ykgmjfxLwLmX/OaveSSY0eXseZ9M40ZNvkPGyzK65PU+rCGAml6dPrmk+WCYKjbI4LFkfP9ahvoB3fELtA20LLUdiUeKFEzA1SaLLutgJT6GRFQnjq+YKQfyW9lGNqyKQjpWDs1OUv/KSFPSDbWAFdBSlQCW1qnwZKo08blz87rjRMGKvEhxUnsaWbJTXeuhOJspi8RPobMoWCVDjxdCBj223JTMsycRlgg==;23:vGRBMuaeqXd2ytUkKikpn9NtA+DAp1TW++t0MDWoAqA+NgNw7lXjlgLcIAW/FL0vqoMLObwdQwyKl8zAgxwIyqVQx5TMFyQ2bOtt3XkriinXBImMDVzR00qYlCFCI80LNR0Pg+kfbDv0+LufLYSCxw== x-forefront-antispam-report: SFV:SKI;SCL:-1SFV:NSPM;SFS:(10009020)(6009001)(7916002)(199003)(189002)(13464003)(377454003)(39410400001)(7846002)(3280700002)(7736002)(106356001)(106116001)(3900700001)(6506003)(2501003)(2950100002)(105586002)(81166006)(3660700001)(8676002)(66066001)(122556002)(2900100001)(189998001)(33656002)(305945005)(81156014)(8936002)(76176999)(6116002)(68736007)(102836003)(39450400002)(86362001)(3846002)(76576001)(77096006)(92566002)(229853002)(2906002)(5660300001)(54356999)(4326007)(7696004)(5001770100001)(9686002)(93886004)(38730400001)(97736004)(101416001)(74316002)(50986999);DIR:OUT;SFP:1101;SCL:1;SRVR:VI1PR0401MB2640;H:VI1PR0401MB2638.eurprd04.prod.outlook.com;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; x-ms-office365-filtering-correlation-id: 5c70909c-1a19-46d0-4f7e-08d418ac806a x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:VI1PR0401MB2640; x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(9452136761055)(185117386973197)(275809806118684); x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(6040375)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046)(6055026)(6041248)(20161123560025)(20161123562025)(20161123564025)(20161123555025)(6047074)(6072148);SRVR:VI1PR0401MB2640;BCL:0;PCL:0;RULEID:;SRVR:VI1PR0401MB2640; x-forefront-prvs: 01415BB535 spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 X-MS-Exchange-CrossTenant-originalarrivaltime: 29 Nov 2016 23:07:33.2153 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2640 X-OriginatorOrg: nxp.com Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by mail.home.local id uAU5IjTk014200 Content-Length: 5311 Lines: 137 > -----Original Message----- > From: Ruxandra Ioana Radulescu > Sent: Monday, November 28, 2016 12:10 PM > To: Stuart Yoder ; gregkh@linuxfoundation.org > Cc: German Rivera ; devel@driverdev.osuosl.org; linux-kernel@vger.kernel.org; > agraf@suse.de; arnd@arndb.de; Leo Li ; Roy Pledge ; Haiying Wang > > Subject: RE: [PATCH 6/9] bus: fsl-mc: dpio: add QBMan portal APIs for DPAA2 > > > -----Original Message----- > > From: Stuart Yoder [mailto:stuart.yoder@nxp.com] > > Sent: Friday, October 21, 2016 9:02 AM > > To: gregkh@linuxfoundation.org > > Cc: German Rivera ; devel@driverdev.osuosl.org; > > linux-kernel@vger.kernel.org; agraf@suse.de; arnd@arndb.de; Leo Li > > ; Roy Pledge ; Roy Pledge > > ; Haiying Wang ; Stuart > > Yoder > > Subject: [PATCH 6/9] bus: fsl-mc: dpio: add QBMan portal APIs for DPAA2 > > > > From: Roy Pledge > > > > Add QBman APIs for frame queue and buffer pool operations. > > > > Signed-off-by: Roy Pledge > > Signed-off-by: Haiying Wang > > Signed-off-by: Stuart Yoder > > --- > > drivers/bus/fsl-mc/dpio/Makefile | 2 +- > > drivers/bus/fsl-mc/dpio/qbman-portal.c | 1009 > > ++++++++++++++++++++++++++++++++ > > drivers/bus/fsl-mc/dpio/qbman-portal.h | 464 +++++++++++++++ > > 3 files changed, 1474 insertions(+), 1 deletion(-) > > create mode 100644 drivers/bus/fsl-mc/dpio/qbman-portal.c > > create mode 100644 drivers/bus/fsl-mc/dpio/qbman-portal.h > > > > diff --git a/drivers/bus/fsl-mc/dpio/Makefile b/drivers/bus/fsl- > > mc/dpio/Makefile > > index 128befc..6588498 100644 > > --- a/drivers/bus/fsl-mc/dpio/Makefile > > +++ b/drivers/bus/fsl-mc/dpio/Makefile > > @@ -6,4 +6,4 @@ subdir-ccflags-y := -Werror > > > > obj-$(CONFIG_FSL_MC_DPIO) += fsl-mc-dpio.o > > > > -fsl-mc-dpio-objs := dpio.o > > +fsl-mc-dpio-objs := dpio.o qbman-portal.o > > diff --git a/drivers/bus/fsl-mc/dpio/qbman-portal.c b/drivers/bus/fsl- > > mc/dpio/qbman-portal.c > > new file mode 100644 > > index 0000000..1eb3dd9 > > --- /dev/null > > +++ b/drivers/bus/fsl-mc/dpio/qbman-portal.c > > [...] > > > +/** > > + * qbman_swp_pull() - Issue the pull dequeue command > > + * @s: the software portal object > > + * @d: the software portal descriptor which has been configured with > > + * the set of qbman_pull_desc_set_*() calls > > + * > > + * Return 0 for success, and -EBUSY if the software portal is not ready > > + * to do pull dequeue. > > + */ > > +int qbman_swp_pull(struct qbman_swp *s, struct qbman_pull_desc *d) > > +{ > > + struct qbman_pull_desc *p; > > + > > + if (!atomic_dec_and_test(&s->vdq.available)) { > > + atomic_inc(&s->vdq.available); > > + return -EBUSY; > > + } > > + s->vdq.storage = (void *)d->rsp_addr_virt; > > + d->tok = 1; > > + p = qbman_get_cmd(s, QBMAN_CENA_SWP_VDQCR); > > + *p = *d; > > + dma_wmb(); > > + > > + /* Set the verb byte, have to substitute in the valid-bit */ > > + p->verb |= s->vdq.valid_bit; > > + s->vdq.valid_bit ^= QB_VALID_BIT; > > + > > + return 0; > > +} > > + > [...] > > + > > +/** > > + * qbman_result_has_new_result() - Check and get the dequeue response > > from the > > + * dq storage memory set in pull dequeue command > > + * @s: the software portal object > > + * @dq: the dequeue result read from the memory > > + * > > + * Return 1 for getting a valid dequeue result, or 0 for not getting a valid > > + * dequeue result. > > + * > > + * Only used for user-provided storage of dequeue results, not DQRR. For > > + * efficiency purposes, the driver will perform any required endianness > > + * conversion to ensure that the user's dequeue result storage is in host- > > endian > > + * format. As such, once the user has called > > qbman_result_has_new_result() and > > + * been returned a valid dequeue result, they should not call it again on > > + * the same memory location (except of course if another dequeue > > command has > > + * been executed to produce a new result to that location). > > + */ > > +int qbman_result_has_new_result(struct qbman_swp *s, const struct > > dpaa2_dq *dq) > > +{ > > + if (!dq->dq.tok) > > + return 0; > > While testing the Ethernet driver I discovered that sometimes the above > check fails. > > When we check a store entry for the first time, if the hardware didn't > manage to fill it with a valid respose yet, we may find a non-null value in the > token field (because the stores have uninitialized memory). So by only > checking that token is !=0, we risk processing an uninitialized memory area > as a valid dequeue entry. > > We should always compare the token field against 1, the value that is given > to the hardware on the dequeue command. It might also be a good idea > to use a define here, to make it clear 1 is a magic value. > > And I think we should also zero the stores when they are first allocated, > since even with the proposed fix there's still a (much smaller) risk of finding > our exact token value in an uninitialized memory area. Thanks. Will fix this on v3 respin. Stuart