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: rcar-dmac: Check the done lists in rcar_dmac_chan_get_residue() From: Yoshihiro Shimoda Message-Id: Date: Thu, 1 Mar 2018 05:39:24 +0000 To: "vinod.koul@intel.com" Cc: "dmaengine@vger.kernel.org" , "linux-renesas-soc@vger.kernel.org" List-ID: SGkgVmlub2QsCgpXb3VsZCB5b3UgcmV2aWV3IHRoaXMgcGF0Y2g/Ck9yLCBzaG91bGQgSSByZWJh c2UgdGhpcyBvbiB0aGUgbGF0ZXN0IHlvdXIgcmVwbz8KCkJlc3QgcmVnYXJkcywKWW9zaGloaXJv IFNoaW1vZGEKCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0KPiBGcm9tOiBZb3NoaWhpcm8g U2hpbW9kYQo+IFNlbnQ6IEZyaWRheSwgRmVicnVhcnkgMiwgMjAxOCA3OjA1IFBNCj4gVG86IHZp bm9kLmtvdWxAaW50ZWwuY29tCj4gQ2M6IGRtYWVuZ2luZUB2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4 LXJlbmVzYXMtc29jQHZnZXIua2VybmVsLm9yZzsgWW9zaGloaXJvIFNoaW1vZGEgPHlvc2hpaGly by5zaGltb2RhLnVoQHJlbmVzYXMuY29tPgo+IFN1YmplY3Q6IFtQQVRDSF0gZG1hZW5naW5lOiBy Y2FyLWRtYWM6IENoZWNrIHRoZSBkb25lIGxpc3RzIGluIHJjYXJfZG1hY19jaGFuX2dldF9yZXNp ZHVlKCkKPiAKPiBUaGlzIHBhdGNoIGZpeGVzIGFuIGlzc3VlIHRoYXQgYSByYWNlIGNvbmRpdGlv biBoYXBwZW5zIGJldHdlZW4gYSBjbGllbnQKPiBkcml2ZXIgYW5kIHRoZSByY2FyLWRtYWMgZHJp dmVyOgo+IAo+IC0gVGhlIHJjYXJfZG1hY19pc3JfdHJhbnNmZXJfZW5kKCkgaXMgY2FsbGVkLgo+ ICAtIFRoZSBkb25lIGxpc3QgYXBwZWFycywgYW5kIGRlc2MucnVubmluZyBpcyB0aGUgbmV4dCBh Y3RpdmUgbGlzdC4KPiAtIHJjYXJfZG1hY19jaGFuX2dldF9yZXNpZHVlKCkgaXMgY2FsbGVkIGJ5 IGEgY2xpZW50IGRyaXZlciBiZWZvcmUKPiAgIHJjYXJfZG1hY19pc3JfY2hhbm5lbF90aHJlYWQo KSBpcyBjYWxsZWQuCj4gIC0gVGhlIHJjYXJfZG1hY19jaGFuX2dldF9yZXNpZHVlKCkgd2lsbCBu b3QgZmluZCBhbnkgZGVzY3JpcHRvcnMuCj4gIC0gQW5kLCB0aGUgZm9sbG93aW5nIFdBUk5JTkcg aGFwcGVuczoKPiAJV0FSTigxLCAiTm8gZGVzY3JpcHRvciBmb3IgY29va2llISIpOwo+IAo+IFRo ZSBzaC1zY2kgZHJpdmVyIHdpdGggSFNDSUYgKDkyMSw2MDBicHMpIG9uIFItQ2FyIEgzIGNhbiBj YXVzZSB0aGlzCj4gc2l0dWF0aW9uLgo+IFNvLCB0aGlzIHBhdGNoIGNoZWNrcyB0aGUgZG9uZSBs aXN0cyBpbiByY2FyX2RtYWNfY2hhbl9nZXRfcmVzaWR1ZSgpCj4gYW5kIHJldHVybnMgemVybyBp ZiB0aGUgZG9uZSBsaXN0cyBoYXMgdGhlIGFyZ3VtZW50IGNvb2tpZS4KPiAKPiBUZXN0ZWQtYnk6 IE5ndXllbiBWaWV0IER1bmcgPGR1bmcubmd1eWVuLmFqQHJlbmVzYXMuY29tPgo+IFNpZ25lZC1v ZmYtYnk6IFlvc2hpaGlybyBTaGltb2RhIDx5b3NoaWhpcm8uc2hpbW9kYS51aEByZW5lc2FzLmNv bT4KPiAtLS0KPiAgZHJpdmVycy9kbWEvc2gvcmNhci1kbWFjLmMgfCA5ICsrKysrKysrKwo+ICAx IGZpbGUgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv ZG1hL3NoL3JjYXItZG1hYy5jIGIvZHJpdmVycy9kbWEvc2gvcmNhci1kbWFjLmMKPiBpbmRleCAy YjJjN2RiLi5mNzQ4YmU2IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZG1hL3NoL3JjYXItZG1hYy5j Cj4gKysrIGIvZHJpdmVycy9kbWEvc2gvcmNhci1kbWFjLmMKPiBAQCAtMTI2NCw4ICsxMjY0LDE3 IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgcmNhcl9kbWFjX2NoYW5fZ2V0X3Jlc2lkdWUoc3RydWN0 IHJjYXJfZG1hY19jaGFuICpjaGFuLAo+ICAJICogSWYgdGhlIGNvb2tpZSBkb2Vzbid0IGNvcnJl c3BvbmQgdG8gdGhlIGN1cnJlbnRseSBydW5uaW5nIHRyYW5zZmVyCj4gIAkgKiB0aGVuIHRoZSBk ZXNjcmlwdG9yIGhhc24ndCBiZWVuIHByb2Nlc3NlZCB5ZXQsIGFuZCB0aGUgcmVzaWR1ZSBpcwo+ ICAJICogZXF1YWwgdG8gdGhlIGZ1bGwgZGVzY3JpcHRvciBzaXplLgo+ICsJICogQWxzbywgYSBj bGllbnQgZHJpdmVyIGlzIHBvc3NpYmxlIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBiZWZvcmUKPiAr CSAqIHJjYXJfZG1hY19pc3JfY2hhbm5lbF90aHJlYWQoKSBydW5zLiBJbiB0aGlzIGNhc2UsIHRo ZSAiZGVzYy5ydW5uaW5nIgo+ICsJICogd2lsbCBiZSB0aGUgbmV4dCBkZXNjcmlwdG9yLCBhbmQg dGhlIGRvbmUgbGlzdCB3aWxsIGFwcGVhci4gU28sIGlmCj4gKwkgKiB0aGUgYXJndW1lbnQgY29v a2llIG1hdGNoZXMgdGhlIGRvbmUgbGlzdCdzIGNvb2tpZSwgd2UgY2FuIGFzc3VtZQo+ICsJICog dGhlIHJlc2lkdWUgaXMgemVyby4KPiAgCSAqLwo+ICAJaWYgKGNvb2tpZSAhPSBkZXNjLT5hc3lu Y190eC5jb29raWUpIHsKPiArCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRlc2MsICZjaGFuLT5kZXNj LmRvbmUsIG5vZGUpIHsKPiArCQkJaWYgKGNvb2tpZSA9PSBkZXNjLT5hc3luY190eC5jb29raWUp Cj4gKwkJCQlyZXR1cm4gMDsKPiArCQl9Cj4gIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXNjLCAm Y2hhbi0+ZGVzYy5wZW5kaW5nLCBub2RlKSB7Cj4gIAkJCWlmIChjb29raWUgPT0gZGVzYy0+YXN5 bmNfdHguY29va2llKQo+ICAJCQkJcmV0dXJuIGRlc2MtPnNpemU7Cj4gLS0KPiAxLjkuMQotLS0K VG8gdW5zdWJzY3JpYmUgZnJvbSB0aGlzIGxpc3Q6IHNlbmQgdGhlIGxpbmUgInVuc3Vic2NyaWJl IGRtYWVuZ2luZSIgaW4KdGhlIGJvZHkgb2YgYSBtZXNzYWdlIHRvIG1ham9yZG9tb0B2Z2VyLmtl cm5lbC5vcmcKTW9yZSBtYWpvcmRvbW8gaW5mbyBhdCAgaHR0cDovL3ZnZXIua2VybmVsLm9yZy9t YWpvcmRvbW8taW5mby5odG1sCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from relmlor2.renesas.com ([210.160.252.172]:17688 "EHLO relmlie1.idc.renesas.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S966023AbeCAFjb (ORCPT ); Thu, 1 Mar 2018 00:39:31 -0500 From: Yoshihiro Shimoda To: "vinod.koul@intel.com" CC: "dmaengine@vger.kernel.org" , "linux-renesas-soc@vger.kernel.org" Subject: RE: [PATCH] dmaengine: rcar-dmac: Check the done lists in rcar_dmac_chan_get_residue() Date: Thu, 1 Mar 2018 05:39:24 +0000 Message-ID: References: <1517565915-14234-1-git-send-email-yoshihiro.shimoda.uh@renesas.com> In-Reply-To: <1517565915-14234-1-git-send-email-yoshihiro.shimoda.uh@renesas.com> Content-Language: ja-JP Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Sender: linux-renesas-soc-owner@vger.kernel.org List-ID: Hi Vinod, Would you review this patch? Or, should I rebase this on the latest your repo? Best regards, Yoshihiro Shimoda > -----Original Message----- > From: Yoshihiro Shimoda > Sent: Friday, February 2, 2018 7:05 PM > To: vinod.koul@intel.com > Cc: dmaengine@vger.kernel.org; linux-renesas-soc@vger.kernel.org; Yoshihi= ro Shimoda > Subject: [PATCH] dmaengine: rcar-dmac: Check the done lists in rcar_dmac_= chan_get_residue() >=20 > This patch fixes an issue that a race condition happens between a client > driver and the rcar-dmac driver: >=20 > - The rcar_dmac_isr_transfer_end() is called. > - The done list appears, and desc.running is the next active list. > - rcar_dmac_chan_get_residue() is called by a client driver before > rcar_dmac_isr_channel_thread() is called. > - The rcar_dmac_chan_get_residue() will not find any descriptors. > - And, the following WARNING happens: > WARN(1, "No descriptor for cookie!"); >=20 > The sh-sci driver with HSCIF (921,600bps) on R-Car H3 can cause this > situation. > So, this patch checks the done lists in rcar_dmac_chan_get_residue() > and returns zero if the done lists has the argument cookie. >=20 > Tested-by: Nguyen Viet Dung > Signed-off-by: Yoshihiro Shimoda > --- > drivers/dma/sh/rcar-dmac.c | 9 +++++++++ > 1 file changed, 9 insertions(+) >=20 > diff --git a/drivers/dma/sh/rcar-dmac.c b/drivers/dma/sh/rcar-dmac.c > index 2b2c7db..f748be6 100644 > --- a/drivers/dma/sh/rcar-dmac.c > +++ b/drivers/dma/sh/rcar-dmac.c > @@ -1264,8 +1264,17 @@ static unsigned int rcar_dmac_chan_get_residue(str= uct rcar_dmac_chan *chan, > * If the cookie doesn't correspond to the currently running transfer > * then the descriptor hasn't been processed yet, and the residue is > * equal to the full descriptor size. > + * Also, a client driver is possible to call this function before > + * rcar_dmac_isr_channel_thread() runs. In this case, the "desc.running= " > + * will be the next descriptor, and the done list will appear. So, if > + * the argument cookie matches the done list's cookie, we can assume > + * the residue is zero. > */ > if (cookie !=3D desc->async_tx.cookie) { > + list_for_each_entry(desc, &chan->desc.done, node) { > + if (cookie =3D=3D desc->async_tx.cookie) > + return 0; > + } > list_for_each_entry(desc, &chan->desc.pending, node) { > if (cookie =3D=3D desc->async_tx.cookie) > return desc->size; > -- > 1.9.1