From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: dmaengine: at_xdmac: Fix wrongfull report of a channel as in use From: Ludovic Desroches Message-Id: <20190122091317.47iwli4ru4iom7fg@M43218.corp.atmel.com> Date: Tue, 22 Jan 2019 10:13:17 +0100 To: Codrin Ciubotariu - M19940 Cc: "vkoul@kernel.org" , "dmaengine@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" List-ID: T24gVGh1LCBKYW4gMTcsIDIwMTkgYXQgMDU6MTA6MzhQTSArMDEwMCwgQ29kcmluIENpdWJvdGFy aXUgLSBNMTk5NDAgd3JvdGU6Cj4gRnJvbTogQ29kcmluIENpdWJvdGFyaXUgPGNvZHJpbi5jaXVi b3Rhcml1QG1pY3JvY2hpcC5jb20+Cj4gCj4gYXRjaGFuLT5zdGF0dXMgaXMgdXNlZCBmb3IgdHdv IHRoaW5nczoKPiAgLSBwYXNzIGNoYW5uZWwgaW50ZXJydXB0cyBzdGF0dXMgZnJvbSBpbnRlcnJ1 cHQgaGFuZGxlciB0byB0YXNrbGV0Owo+ICAtIGNoYW5uZWwgaW5mb3JtYXRpb24gbGlrZSB3aGV0 aGVyIGl0IGlzIGN5Y2xpYyBvciBwYXVzZWQ7Cj4gCj4gU2luY2UgdGhlc2Ugb3BlcmF0aW9ucyBo YXZlIG5vdGhpbmcgaW4gY29tbW9uLCB0aGlzIHBhdGNoIGFkZHMgYQo+IGRpZmZlcmVudCBzdHJ1 Y3QgbWVtYmVyIHRvIGtlZXAgdGhlIGludGVycnVwdHMgc3RhdHVzLgo+IAo+IEZpeGVzIGEgYnVn IGluIHdoaWNoIGEgY2hhbm5lbCBpcyB3cm9uZ2Z1bGx5IHJlcG9ydGVkIGFzIGluIHVzZSB3aGVu Cj4gdHJ5aW5nIHRvIG9idGFpbiBhIG5ldyBkZXNjcmlwdGlvciBmb3IgYSBwcmV2aW91c2x5IHVz ZWQgY3ljbGljIGNoYW5uZWwuCj4gCj4gU2lnbmVkLW9mZi1ieTogQ29kcmluIENpdWJvdGFyaXUg PGNvZHJpbi5jaXVib3Rhcml1QG1pY3JvY2hpcC5jb20+CkFja2VkLWJ5OiBMdWRvdmljIERlc3Jv Y2hlcyA8bHVkb3ZpYy5kZXNyb2NoZXNAbWljcm9jaGlwLmNvbT4KCkFzIFZpbm9kIHN1Z2dlc3Rl ZCwgeW91IG1heSBjaGFuZ2UgdGhlIGNvbW1pdCBtZXNzYWdlIHRvIGVtcGhhc2l6ZQp0aGF0IHRo ZSBidWcgY29tZXMgZnJvbSB0aGUgZmFjdCB0aGF0IGEgc2luZ2xlIHZhcmlhYmxlIGlzIHVzZWQg dG8gc3RvcmUKZGlmZmVyZW50IGluZm9ybWF0aW9uLgoKVGhlIEZpeGVzOiB0YWcgc2hvdWxkIGJl IGFkZGVkIHRvby4KClJlZ2FyZHMKCkx1ZG92aWMKCj4gLS0tCj4gIGRyaXZlcnMvZG1hL2F0X3hk bWFjLmMgfCAxOSArKysrKysrKysrLS0tLS0tLS0tCj4gIDEgZmlsZSBjaGFuZ2VkLCAxMCBpbnNl cnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9h dF94ZG1hYy5jIGIvZHJpdmVycy9kbWEvYXRfeGRtYWMuYwo+IGluZGV4IDRlNTU3Njg0Zjc5Mi4u ZmU2OWRjY2ZhMGMwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZG1hL2F0X3hkbWFjLmMKPiArKysg Yi9kcml2ZXJzL2RtYS9hdF94ZG1hYy5jCj4gQEAgLTIwMyw2ICsyMDMsNyBAQCBzdHJ1Y3QgYXRf eGRtYWNfY2hhbiB7Cj4gIAl1MzIJCQkJc2F2ZV9jaW07Cj4gIAl1MzIJCQkJc2F2ZV9jbmRhOwo+ ICAJdTMyCQkJCXNhdmVfY25kYzsKPiArCXUzMgkJCQlpcnFfc3RhdHVzOwo+ICAJdW5zaWduZWQg bG9uZwkJCXN0YXR1czsKPiAgCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAkJdGFza2xldDsKPiAgCXN0 cnVjdCBkbWFfc2xhdmVfY29uZmlnCQlzY29uZmlnOwo+IEBAIC0xNTgwLDggKzE1ODEsOCBAQCBz dGF0aWMgdm9pZCBhdF94ZG1hY190YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKPiAgCXN0cnVj dCBhdF94ZG1hY19kZXNjCSpkZXNjOwo+ICAJdTMyCQkJZXJyb3JfbWFzazsKPiAgCj4gLQlkZXZf ZGJnKGNoYW4yZGV2KCZhdGNoYW4tPmNoYW4pLCAiJXM6IHN0YXR1cz0weCUwOGx4XG4iLAo+IC0J CSBfX2Z1bmNfXywgYXRjaGFuLT5zdGF0dXMpOwo+ICsJZGV2X2RiZyhjaGFuMmRldigmYXRjaGFu LT5jaGFuKSwgIiVzOiBzdGF0dXM9MHglMDh4XG4iLAo+ICsJCV9fZnVuY19fLCBhdGNoYW4tPmly cV9zdGF0dXMpOwo+ICAKPiAgCWVycm9yX21hc2sgPSBBVF9YRE1BQ19DSVNfUkJFSVMKPiAgCQkg ICAgIHwgQVRfWERNQUNfQ0lTX1dCRUlTCj4gQEAgLTE1ODksMTUgKzE1OTAsMTUgQEAgc3RhdGlj IHZvaWQgYXRfeGRtYWNfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCj4gIAo+ICAJaWYgKGF0 X3hkbWFjX2NoYW5faXNfY3ljbGljKGF0Y2hhbikpIHsKPiAgCQlhdF94ZG1hY19oYW5kbGVfY3lj bGljKGF0Y2hhbik7Cj4gLQl9IGVsc2UgaWYgKChhdGNoYW4tPnN0YXR1cyAmIEFUX1hETUFDX0NJ U19MSVMpCj4gLQkJICAgfHwgKGF0Y2hhbi0+c3RhdHVzICYgZXJyb3JfbWFzaykpIHsKPiArCX0g ZWxzZSBpZiAoKGF0Y2hhbi0+aXJxX3N0YXR1cyAmIEFUX1hETUFDX0NJU19MSVMpCj4gKwkJICAg fHwgKGF0Y2hhbi0+aXJxX3N0YXR1cyAmIGVycm9yX21hc2spKSB7Cj4gIAkJc3RydWN0IGRtYV9h c3luY190eF9kZXNjcmlwdG9yICAqdHhkOwo+ICAKPiAtCQlpZiAoYXRjaGFuLT5zdGF0dXMgJiBB VF9YRE1BQ19DSVNfUkJFSVMpCj4gKwkJaWYgKGF0Y2hhbi0+aXJxX3N0YXR1cyAmIEFUX1hETUFD X0NJU19SQkVJUykKPiAgCQkJZGV2X2VycihjaGFuMmRldigmYXRjaGFuLT5jaGFuKSwgInJlYWQg YnVzIGVycm9yISEhIik7Cj4gLQkJaWYgKGF0Y2hhbi0+c3RhdHVzICYgQVRfWERNQUNfQ0lTX1dC RUlTKQo+ICsJCWlmIChhdGNoYW4tPmlycV9zdGF0dXMgJiBBVF9YRE1BQ19DSVNfV0JFSVMpCj4g IAkJCWRldl9lcnIoY2hhbjJkZXYoJmF0Y2hhbi0+Y2hhbiksICJ3cml0ZSBidXMgZXJyb3IhISEi KTsKPiAtCQlpZiAoYXRjaGFuLT5zdGF0dXMgJiBBVF9YRE1BQ19DSVNfUk9JUykKPiArCQlpZiAo YXRjaGFuLT5pcnFfc3RhdHVzICYgQVRfWERNQUNfQ0lTX1JPSVMpCj4gIAkJCWRldl9lcnIoY2hh bjJkZXYoJmF0Y2hhbi0+Y2hhbiksICJyZXF1ZXN0IG92ZXJmbG93IGVycm9yISEhIik7Cj4gIAo+ ICAJCXNwaW5fbG9jaygmYXRjaGFuLT5sb2NrKTsKPiBAQCAtMTY1Miw3ICsxNjUzLDcgQEAgc3Rh dGljIGlycXJldHVybl90IGF0X3hkbWFjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQp Cj4gIAkJCWF0Y2hhbiA9ICZhdHhkbWFjLT5jaGFuW2ldOwo+ICAJCQljaGFuX2ltciA9IGF0X3hk bWFjX2NoYW5fcmVhZChhdGNoYW4sIEFUX1hETUFDX0NJTSk7Cj4gIAkJCWNoYW5fc3RhdHVzID0g YXRfeGRtYWNfY2hhbl9yZWFkKGF0Y2hhbiwgQVRfWERNQUNfQ0lTKTsKPiAtCQkJYXRjaGFuLT5z dGF0dXMgPSBjaGFuX3N0YXR1cyAmIGNoYW5faW1yOwo+ICsJCQlhdGNoYW4tPmlycV9zdGF0dXMg PSBjaGFuX3N0YXR1cyAmIGNoYW5faW1yOwo+ICAJCQlkZXZfdmRiZyhhdHhkbWFjLT5kbWEuZGV2 LAo+ICAJCQkJICIlczogY2hhbiVkOiBpbXI9MHgleCwgc3RhdHVzPTB4JXhcbiIsCj4gIAkJCQkg X19mdW5jX18sIGksIGNoYW5faW1yLCBjaGFuX3N0YXR1cyk7Cj4gQEAgLTE2NjYsNyArMTY2Nyw3 IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBhdF94ZG1hY19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAq ZGV2X2lkKQo+ICAJCQkJIGF0X3hkbWFjX2NoYW5fcmVhZChhdGNoYW4sIEFUX1hETUFDX0NEQSks Cj4gIAkJCQkgYXRfeGRtYWNfY2hhbl9yZWFkKGF0Y2hhbiwgQVRfWERNQUNfQ1VCQykpOwo+ICAK PiAtCQkJaWYgKGF0Y2hhbi0+c3RhdHVzICYgKEFUX1hETUFDX0NJU19SQkVJUyB8IEFUX1hETUFD X0NJU19XQkVJUykpCj4gKwkJCWlmIChhdGNoYW4tPmlycV9zdGF0dXMgJiAoQVRfWERNQUNfQ0lT X1JCRUlTIHwgQVRfWERNQUNfQ0lTX1dCRUlTKSkKPiAgCQkJCWF0X3hkbWFjX3dyaXRlKGF0eGRt YWMsIEFUX1hETUFDX0dELCBhdGNoYW4tPm1hc2spOwo+ICAKPiAgCQkJdGFza2xldF9zY2hlZHVs ZSgmYXRjaGFuLT50YXNrbGV0KTsKPiAtLSAKPiAyLjE3LjEKPgo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED, USER_AGENT_NEOMUTT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9EA72C282C3 for ; Tue, 22 Jan 2019 09:13:32 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 6F7282085A for ; Tue, 22 Jan 2019 09:13:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727622AbfAVJNa (ORCPT ); Tue, 22 Jan 2019 04:13:30 -0500 Received: from esa2.microchip.iphmx.com ([68.232.149.84]:15414 "EHLO esa2.microchip.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727517AbfAVJNa (ORCPT ); Tue, 22 Jan 2019 04:13:30 -0500 X-IronPort-AV: E=Sophos;i="5.56,505,1539673200"; d="scan'208";a="25618244" Received: from smtpout.microchip.com (HELO email.microchip.com) ([198.175.253.82]) by esa2.microchip.iphmx.com with ESMTP/TLS/DHE-RSA-AES256-SHA; 22 Jan 2019 02:13:29 -0700 Received: from localhost (10.10.76.4) by chn-sv-exch06.mchp-main.com (10.10.76.107) with Microsoft SMTP Server id 14.3.352.0; Tue, 22 Jan 2019 02:13:28 -0700 Date: Tue, 22 Jan 2019 10:13:17 +0100 From: Ludovic Desroches To: Codrin Ciubotariu - M19940 CC: "vkoul@kernel.org" , "dmaengine@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" Subject: Re: [PATCH] dmaengine: at_xdmac: Fix wrongfull report of a channel as in use Message-ID: <20190122091317.47iwli4ru4iom7fg@M43218.corp.atmel.com> Mail-Followup-To: Codrin Ciubotariu - M19940 , "vkoul@kernel.org" , "dmaengine@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" References: <20190117160957.13175-1-codrin.ciubotariu@microchip.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: <20190117160957.13175-1-codrin.ciubotariu@microchip.com> User-Agent: NeoMutt/20180716 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Jan 17, 2019 at 05:10:38PM +0100, Codrin Ciubotariu - M19940 wrote: > From: Codrin Ciubotariu > > atchan->status is used for two things: > - pass channel interrupts status from interrupt handler to tasklet; > - channel information like whether it is cyclic or paused; > > Since these operations have nothing in common, this patch adds a > different struct member to keep the interrupts status. > > Fixes a bug in which a channel is wrongfully reported as in use when > trying to obtain a new descriptior for a previously used cyclic channel. > > Signed-off-by: Codrin Ciubotariu Acked-by: Ludovic Desroches As Vinod suggested, you may change the commit message to emphasize that the bug comes from the fact that a single variable is used to store different information. The Fixes: tag should be added too. Regards Ludovic > --- > drivers/dma/at_xdmac.c | 19 ++++++++++--------- > 1 file changed, 10 insertions(+), 9 deletions(-) > > diff --git a/drivers/dma/at_xdmac.c b/drivers/dma/at_xdmac.c > index 4e557684f792..fe69dccfa0c0 100644 > --- a/drivers/dma/at_xdmac.c > +++ b/drivers/dma/at_xdmac.c > @@ -203,6 +203,7 @@ struct at_xdmac_chan { > u32 save_cim; > u32 save_cnda; > u32 save_cndc; > + u32 irq_status; > unsigned long status; > struct tasklet_struct tasklet; > struct dma_slave_config sconfig; > @@ -1580,8 +1581,8 @@ static void at_xdmac_tasklet(unsigned long data) > struct at_xdmac_desc *desc; > u32 error_mask; > > - dev_dbg(chan2dev(&atchan->chan), "%s: status=0x%08lx\n", > - __func__, atchan->status); > + dev_dbg(chan2dev(&atchan->chan), "%s: status=0x%08x\n", > + __func__, atchan->irq_status); > > error_mask = AT_XDMAC_CIS_RBEIS > | AT_XDMAC_CIS_WBEIS > @@ -1589,15 +1590,15 @@ static void at_xdmac_tasklet(unsigned long data) > > if (at_xdmac_chan_is_cyclic(atchan)) { > at_xdmac_handle_cyclic(atchan); > - } else if ((atchan->status & AT_XDMAC_CIS_LIS) > - || (atchan->status & error_mask)) { > + } else if ((atchan->irq_status & AT_XDMAC_CIS_LIS) > + || (atchan->irq_status & error_mask)) { > struct dma_async_tx_descriptor *txd; > > - if (atchan->status & AT_XDMAC_CIS_RBEIS) > + if (atchan->irq_status & AT_XDMAC_CIS_RBEIS) > dev_err(chan2dev(&atchan->chan), "read bus error!!!"); > - if (atchan->status & AT_XDMAC_CIS_WBEIS) > + if (atchan->irq_status & AT_XDMAC_CIS_WBEIS) > dev_err(chan2dev(&atchan->chan), "write bus error!!!"); > - if (atchan->status & AT_XDMAC_CIS_ROIS) > + if (atchan->irq_status & AT_XDMAC_CIS_ROIS) > dev_err(chan2dev(&atchan->chan), "request overflow error!!!"); > > spin_lock(&atchan->lock); > @@ -1652,7 +1653,7 @@ static irqreturn_t at_xdmac_interrupt(int irq, void *dev_id) > atchan = &atxdmac->chan[i]; > chan_imr = at_xdmac_chan_read(atchan, AT_XDMAC_CIM); > chan_status = at_xdmac_chan_read(atchan, AT_XDMAC_CIS); > - atchan->status = chan_status & chan_imr; > + atchan->irq_status = chan_status & chan_imr; > dev_vdbg(atxdmac->dma.dev, > "%s: chan%d: imr=0x%x, status=0x%x\n", > __func__, i, chan_imr, chan_status); > @@ -1666,7 +1667,7 @@ static irqreturn_t at_xdmac_interrupt(int irq, void *dev_id) > at_xdmac_chan_read(atchan, AT_XDMAC_CDA), > at_xdmac_chan_read(atchan, AT_XDMAC_CUBC)); > > - if (atchan->status & (AT_XDMAC_CIS_RBEIS | AT_XDMAC_CIS_WBEIS)) > + if (atchan->irq_status & (AT_XDMAC_CIS_RBEIS | AT_XDMAC_CIS_WBEIS)) > at_xdmac_write(atxdmac, AT_XDMAC_GD, atchan->mask); > > tasklet_schedule(&atchan->tasklet); > -- > 2.17.1 > From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.1 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED,USER_AGENT_NEOMUTT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3B6BFC282C3 for ; Tue, 22 Jan 2019 09:13:39 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 056B320823 for ; Tue, 22 Jan 2019 09:13:38 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="PmtQPtDp" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 056B320823 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=microchip.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=W335lzVzl4uoOTKWNpqwPUFzCMOttCPhXsvynWOsn08=; b=PmtQPtDpMckas6 RE0QPVTkfF2yu4bX03MYrRAHTjGMz+NbtRHekvshmSfu3mT5itkfBsfWR1rFJmPOKYOzPoR8c83bJ dC4H1bW+XKe30FAxtlDN6Fz76AxOvYcrOKJZaKAZx6uFprRDn2pTxoUkvsq7Filre6efx8NSXvOL5 Te5Vgpwk8aaZPL16QVU7F5HNIGElLW7xgPe2o3XVpvssJ2pIoqu6ekhuq9bMeyj11iGCmOCnXbqK3 UEKbvhj9PRmGmAsY4uMNL0vkEBVu5GZZiva7U+pBj4/EK6w8ghjmeXN27Al8mvknQEeVz3mXleOid BZDfJHQJ3Sh9OngG0lTQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1gls7i-0004js-9S; Tue, 22 Jan 2019 09:13:34 +0000 Received: from esa2.microchip.iphmx.com ([68.232.149.84]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1gls7f-0004j7-Jh for linux-arm-kernel@lists.infradead.org; Tue, 22 Jan 2019 09:13:33 +0000 X-IronPort-AV: E=Sophos;i="5.56,505,1539673200"; d="scan'208";a="25618244" Received: from smtpout.microchip.com (HELO email.microchip.com) ([198.175.253.82]) by esa2.microchip.iphmx.com with ESMTP/TLS/DHE-RSA-AES256-SHA; 22 Jan 2019 02:13:29 -0700 Received: from localhost (10.10.76.4) by chn-sv-exch06.mchp-main.com (10.10.76.107) with Microsoft SMTP Server id 14.3.352.0; Tue, 22 Jan 2019 02:13:28 -0700 Date: Tue, 22 Jan 2019 10:13:17 +0100 From: Ludovic Desroches To: Codrin Ciubotariu - M19940 Subject: Re: [PATCH] dmaengine: at_xdmac: Fix wrongfull report of a channel as in use Message-ID: <20190122091317.47iwli4ru4iom7fg@M43218.corp.atmel.com> Mail-Followup-To: Codrin Ciubotariu - M19940 , "vkoul@kernel.org" , "dmaengine@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" References: <20190117160957.13175-1-codrin.ciubotariu@microchip.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20190117160957.13175-1-codrin.ciubotariu@microchip.com> User-Agent: NeoMutt/20180716 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190122_011331_682192_3B50D700 X-CRM114-Status: GOOD ( 19.62 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "dmaengine@vger.kernel.org" , "vkoul@kernel.org" , "linux-kernel@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Thu, Jan 17, 2019 at 05:10:38PM +0100, Codrin Ciubotariu - M19940 wrote: > From: Codrin Ciubotariu > > atchan->status is used for two things: > - pass channel interrupts status from interrupt handler to tasklet; > - channel information like whether it is cyclic or paused; > > Since these operations have nothing in common, this patch adds a > different struct member to keep the interrupts status. > > Fixes a bug in which a channel is wrongfully reported as in use when > trying to obtain a new descriptior for a previously used cyclic channel. > > Signed-off-by: Codrin Ciubotariu Acked-by: Ludovic Desroches As Vinod suggested, you may change the commit message to emphasize that the bug comes from the fact that a single variable is used to store different information. The Fixes: tag should be added too. Regards Ludovic > --- > drivers/dma/at_xdmac.c | 19 ++++++++++--------- > 1 file changed, 10 insertions(+), 9 deletions(-) > > diff --git a/drivers/dma/at_xdmac.c b/drivers/dma/at_xdmac.c > index 4e557684f792..fe69dccfa0c0 100644 > --- a/drivers/dma/at_xdmac.c > +++ b/drivers/dma/at_xdmac.c > @@ -203,6 +203,7 @@ struct at_xdmac_chan { > u32 save_cim; > u32 save_cnda; > u32 save_cndc; > + u32 irq_status; > unsigned long status; > struct tasklet_struct tasklet; > struct dma_slave_config sconfig; > @@ -1580,8 +1581,8 @@ static void at_xdmac_tasklet(unsigned long data) > struct at_xdmac_desc *desc; > u32 error_mask; > > - dev_dbg(chan2dev(&atchan->chan), "%s: status=0x%08lx\n", > - __func__, atchan->status); > + dev_dbg(chan2dev(&atchan->chan), "%s: status=0x%08x\n", > + __func__, atchan->irq_status); > > error_mask = AT_XDMAC_CIS_RBEIS > | AT_XDMAC_CIS_WBEIS > @@ -1589,15 +1590,15 @@ static void at_xdmac_tasklet(unsigned long data) > > if (at_xdmac_chan_is_cyclic(atchan)) { > at_xdmac_handle_cyclic(atchan); > - } else if ((atchan->status & AT_XDMAC_CIS_LIS) > - || (atchan->status & error_mask)) { > + } else if ((atchan->irq_status & AT_XDMAC_CIS_LIS) > + || (atchan->irq_status & error_mask)) { > struct dma_async_tx_descriptor *txd; > > - if (atchan->status & AT_XDMAC_CIS_RBEIS) > + if (atchan->irq_status & AT_XDMAC_CIS_RBEIS) > dev_err(chan2dev(&atchan->chan), "read bus error!!!"); > - if (atchan->status & AT_XDMAC_CIS_WBEIS) > + if (atchan->irq_status & AT_XDMAC_CIS_WBEIS) > dev_err(chan2dev(&atchan->chan), "write bus error!!!"); > - if (atchan->status & AT_XDMAC_CIS_ROIS) > + if (atchan->irq_status & AT_XDMAC_CIS_ROIS) > dev_err(chan2dev(&atchan->chan), "request overflow error!!!"); > > spin_lock(&atchan->lock); > @@ -1652,7 +1653,7 @@ static irqreturn_t at_xdmac_interrupt(int irq, void *dev_id) > atchan = &atxdmac->chan[i]; > chan_imr = at_xdmac_chan_read(atchan, AT_XDMAC_CIM); > chan_status = at_xdmac_chan_read(atchan, AT_XDMAC_CIS); > - atchan->status = chan_status & chan_imr; > + atchan->irq_status = chan_status & chan_imr; > dev_vdbg(atxdmac->dma.dev, > "%s: chan%d: imr=0x%x, status=0x%x\n", > __func__, i, chan_imr, chan_status); > @@ -1666,7 +1667,7 @@ static irqreturn_t at_xdmac_interrupt(int irq, void *dev_id) > at_xdmac_chan_read(atchan, AT_XDMAC_CDA), > at_xdmac_chan_read(atchan, AT_XDMAC_CUBC)); > > - if (atchan->status & (AT_XDMAC_CIS_RBEIS | AT_XDMAC_CIS_WBEIS)) > + if (atchan->irq_status & (AT_XDMAC_CIS_RBEIS | AT_XDMAC_CIS_WBEIS)) > at_xdmac_write(atxdmac, AT_XDMAC_GD, atchan->mask); > > tasklet_schedule(&atchan->tasklet); > -- > 2.17.1 > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel