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: imx-dma: fix wrong callback invoke From: Leonid Iziumtsev Message-Id: <20190115171523.702-1-leonid.iziumtsev@gmail.com> Date: Tue, 15 Jan 2019 17:15:23 +0000 To: dmaengine@vger.kernel.org, Dan Williams , Vinod Koul , linux-kernel@vger.kernel.org, m.grzeschik@pengutronix.de Cc: Leonid Iziumtsev List-ID: T25jZSB0aGUgImxkX3F1ZXVlIiBsaXN0IGlzIG5vdCBlbXB0eSwgbmV4dCBkZXNjcmlwdG9yIHdp bGwgbWlncmF0ZQppbnRvICJsZF9hY3RpdmUiIGxpc3QuIFRoZSAiZGVzYyIgdmFyaWFibGUgd2ls bCBiZSBvdmVyd3JpdHRlbgpkdXJpbmcgdGhhdCB0cmFuc2l0aW9uLiBBbmQgbGF0ZXIgdGhlIGRt YWVuZ2luZV9kZXNjX2dldF9jYWxsYmFja19pbnZva2UoKQp3aWxsIHVzZSBpdCBhcyBhbiBhcmd1 bWVudC4gQXMgcmVzdWx0IHdlIGludm9rZSB3cm9uZyBjYWxsYmFjay4KClRoYXQgYmVoYXZpb3Vy IHdhcyBpbiBwbGFjZSBzaW5jZToKY29tbWl0IGZjYWFiYTZjNzEzNiAoImRtYWVuZ2luZTogaW14 LWRtYTogZml4IGNhbGxiYWNrIHBhdGggaW4gdGFza2xldCIpLgpCdXQgYWZ0ZXIgY29tbWl0IDRj ZDEzYzIxYjIwNyAoInNvZnRpcnE6IExldCBrc29mdGlycWQgZG8gaXRzIGpvYiIpCnRoaW5ncyBn b3Qgd29yc2UsIHNpbmNlIHBvc3NpYmxlIGRlbGF5IGJldHdlZW4gdGFza2xldF9zY2hlZHVsZSgp CmZyb20gRE1BIGlycSBoYW5kbGVyIGFuZCBhY3R1YWwgdGFza2xldCBmdW5jdGlvbiBleGVjdXRp b24gZ290IGJpZ2dlci4KQW5kIHRoYXQgZ2F2ZSBtb3JlIHRpbWUgZm9yIG5ldyBETUEgcmVxdWVz dCB0byBiZSBzdWJtaXR0ZWQgYW5kCnRvIGJlIHB1dCBpbnRvICJsZF9xdWV1ZSIgbGlzdC4KCkl0 IGhhcyBiZWVuIG5vdGljZWQgdGhhdCBETUEgaXNzdWUgaXMgY2F1c2luZyBwcm9ibGVtcyBmb3Ig Im14Yy1tbWMiCmRyaXZlci4gV2hpbGUgc3RyZXNzaW5nIHRoZSBzeXN0ZW0gd2l0aCBoZWF2eSBu ZXR3b3JrIHRyYWZmaWMgYW5kCndyaXRpbmcvcmVhZGluZyB0by9mcm9tIHNkIGNhcmQgc2ltdWx0 YW5lb3VzbHkgdGhlIHRpbWVvdXQgbWF5IGhhcHBlbjoKCjEwMDEzMDAwLnNkaGNpOiBteGNtY2lf d2F0Y2hkb2c6IHJlYWQgdGltZSBvdXQgKHN0YXR1cyA9IDB4MzAwMDQ5MDApCgpUaGF0IG9mdGVu IGxlYWQgdG8gZmlsZSBzeXN0ZW0gY29ycnVwdGlvbi4KClNpZ25lZC1vZmYtYnk6IExlb25pZCBJ eml1bXRzZXYgPGxlb25pZC5peml1bXRzZXZAZ21haWwuY29tPgotLS0KIGRyaXZlcnMvZG1hL2lt eC1kbWEuYyB8IDggKysrKy0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDQg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaW14LWRtYS5jIGIvZHJpdmVy cy9kbWEvaW14LWRtYS5jCmluZGV4IGMyZmZmM2Y2YzljYS4uNGEwOWFmM2NkNTQ2IDEwMDY0NAot LS0gYS9kcml2ZXJzL2RtYS9pbXgtZG1hLmMKKysrIGIvZHJpdmVycy9kbWEvaW14LWRtYS5jCkBA IC02MTgsNyArNjE4LDcgQEAgc3RhdGljIHZvaWQgaW14ZG1hX3Rhc2tsZXQodW5zaWduZWQgbG9u ZyBkYXRhKQogewogCXN0cnVjdCBpbXhkbWFfY2hhbm5lbCAqaW14ZG1hYyA9ICh2b2lkICopZGF0 YTsKIAlzdHJ1Y3QgaW14ZG1hX2VuZ2luZSAqaW14ZG1hID0gaW14ZG1hYy0+aW14ZG1hOwotCXN0 cnVjdCBpbXhkbWFfZGVzYyAqZGVzYzsKKwlzdHJ1Y3QgaW14ZG1hX2Rlc2MgKmRlc2MsICpuZXh0 X2Rlc2M7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpbXhk bWEtPmxvY2ssIGZsYWdzKTsKQEAgLTY0OCwxMCArNjQ4LDEwIEBAIHN0YXRpYyB2b2lkIGlteGRt YV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKIAlsaXN0X21vdmVfdGFpbChpbXhkbWFjLT5s ZF9hY3RpdmUubmV4dCwgJmlteGRtYWMtPmxkX2ZyZWUpOwogCiAJaWYgKCFsaXN0X2VtcHR5KCZp bXhkbWFjLT5sZF9xdWV1ZSkpIHsKLQkJZGVzYyA9IGxpc3RfZmlyc3RfZW50cnkoJmlteGRtYWMt PmxkX3F1ZXVlLCBzdHJ1Y3QgaW14ZG1hX2Rlc2MsCi0JCQkJCW5vZGUpOworCQluZXh0X2Rlc2Mg PSBsaXN0X2ZpcnN0X2VudHJ5KCZpbXhkbWFjLT5sZF9xdWV1ZSwKKwkJCQkJICAgICBzdHJ1Y3Qg aW14ZG1hX2Rlc2MsIG5vZGUpOwogCQlsaXN0X21vdmVfdGFpbChpbXhkbWFjLT5sZF9xdWV1ZS5u ZXh0LCAmaW14ZG1hYy0+bGRfYWN0aXZlKTsKLQkJaWYgKGlteGRtYV94ZmVyX2Rlc2MoZGVzYykg PCAwKQorCQlpZiAoaW14ZG1hX3hmZXJfZGVzYyhuZXh0X2Rlc2MpIDwgMCkKIAkJCWRldl93YXJu KGlteGRtYS0+ZGV2LCAiJXM6IGNoYW5uZWw6ICVkIGNvdWxkbid0IHhmZXIgZGVzY1xuIiwKIAkJ CQkgX19mdW5jX18sIGlteGRtYWMtPmNoYW5uZWwpOwogCX0K 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.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_PASS,USER_AGENT_GIT 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 57ED3C43387 for ; Tue, 15 Jan 2019 17:16:42 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 2798420657 for ; Tue, 15 Jan 2019 17:16:42 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="VRfOIStb" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732998AbfAORQk (ORCPT ); Tue, 15 Jan 2019 12:16:40 -0500 Received: from mail-lf1-f65.google.com ([209.85.167.65]:44988 "EHLO mail-lf1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732625AbfAORQj (ORCPT ); Tue, 15 Jan 2019 12:16:39 -0500 Received: by mail-lf1-f65.google.com with SMTP id z13so2613486lfe.11; Tue, 15 Jan 2019 09:16:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=2gv+25Lx+MVqStXVMiZm18qbvZyUO+MHfeqnZflo9OE=; b=VRfOIStbEwKk/spk3SEjr8t/QD8qofGk8k3xNH6PzYPvDXh5LalW7t0JGV7pNvnrgw xIX+gDQgqrHfVpGooD9qZdawHw27OXa+bsfkVOD5Uz2eFe5V9nRUDnfhFDMsrbCt12B1 77LDBgeM78Ogkj+ri2JKfOfsaprpG3vVPVMKuglNsCXvdaXAi6J+pq1YVfPONAGd+8tM /6YYTnpUt7gVcjmHx5fEn0hdRZAZmDMZUaqPaiVSN4egBQeEjDSRLOQNbMZx4mxdWPxf JFRc8kcB+R0BS/ihgN4YBkbjWoVQdTEsklyNiBwKc5X8XUcQUwOevxCMWLGz0o0YR6do 8/dQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=2gv+25Lx+MVqStXVMiZm18qbvZyUO+MHfeqnZflo9OE=; b=HGaWRI4ROrRIjMTy+O+ylvCh4LlkUSmmLdOOUMlMsfUoAv2jL90hUN3V/PsiRLGg4s KdMV+pHWy3Tlzi66mUkPGDC/XHU2GG5uoQpSmwv3WFd0F0PcrsJuVLLzHkfK9sY4Ao5f TUhBlsZ9wDzs7KCZ4oepObQh6b1z0qduKcNh2KhJV9eXsA5RCGcc2mUuTCQAKaSikdx3 LdLxNQdDdGmv4rJKYwEeh/0PSdYSzMmnI+Cc8MKsx60+8rMCCxo193CQWDjonoL2RZ+W j7TYM8Wmmx3WYTLEqU5qAeNHzphXjJlZBgPgqEcvWtcR0ugdmkUXj6MZYCg8PmSFreuf LIgg== X-Gm-Message-State: AJcUukfFU2qaxI7CoIGsZt1Q+jpYkPG8YiLvsaJC54v72PfeGNP7Y1Iv fXGD021VVJkTz+YK8hO1mOo= X-Google-Smtp-Source: ALg8bN7IENMy/O8wrvj5OCUvbEoX3ToP5k1TwU5czuTyBkuT9pxXWUM4/Iv6XeMNZEKxiAMiTEJxWw== X-Received: by 2002:a19:41c4:: with SMTP id o187mr3760420lfa.32.1547572597255; Tue, 15 Jan 2019 09:16:37 -0800 (PST) Received: from c5c146071e14 (c-11c0e555.09-37-73746f39.bbcust.telenor.se. [85.229.192.17]) by smtp.gmail.com with ESMTPSA id p10-v6sm646311ljh.59.2019.01.15.09.16.36 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 15 Jan 2019 09:16:36 -0800 (PST) Received: from root by c5c146071e14 with local (Exim 4.89) (envelope-from ) id 1gjSKJ-0000C0-3W; Tue, 15 Jan 2019 17:16:35 +0000 From: Leonid Iziumtsev To: dmaengine@vger.kernel.org, Dan Williams , Vinod Koul , linux-kernel@vger.kernel.org, m.grzeschik@pengutronix.de Cc: Leonid Iziumtsev Subject: [PATCH] dmaengine: imx-dma: fix wrong callback invoke Date: Tue, 15 Jan 2019 17:15:23 +0000 Message-Id: <20190115171523.702-1-leonid.iziumtsev@gmail.com> X-Mailer: git-send-email 2.11.0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Once the "ld_queue" list is not empty, next descriptor will migrate into "ld_active" list. The "desc" variable will be overwritten during that transition. And later the dmaengine_desc_get_callback_invoke() will use it as an argument. As result we invoke wrong callback. That behaviour was in place since: commit fcaaba6c7136 ("dmaengine: imx-dma: fix callback path in tasklet"). But after commit 4cd13c21b207 ("softirq: Let ksoftirqd do its job") things got worse, since possible delay between tasklet_schedule() from DMA irq handler and actual tasklet function execution got bigger. And that gave more time for new DMA request to be submitted and to be put into "ld_queue" list. It has been noticed that DMA issue is causing problems for "mxc-mmc" driver. While stressing the system with heavy network traffic and writing/reading to/from sd card simultaneously the timeout may happen: 10013000.sdhci: mxcmci_watchdog: read time out (status = 0x30004900) That often lead to file system corruption. Signed-off-by: Leonid Iziumtsev --- drivers/dma/imx-dma.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/dma/imx-dma.c b/drivers/dma/imx-dma.c index c2fff3f6c9ca..4a09af3cd546 100644 --- a/drivers/dma/imx-dma.c +++ b/drivers/dma/imx-dma.c @@ -618,7 +618,7 @@ static void imxdma_tasklet(unsigned long data) { struct imxdma_channel *imxdmac = (void *)data; struct imxdma_engine *imxdma = imxdmac->imxdma; - struct imxdma_desc *desc; + struct imxdma_desc *desc, *next_desc; unsigned long flags; spin_lock_irqsave(&imxdma->lock, flags); @@ -648,10 +648,10 @@ static void imxdma_tasklet(unsigned long data) list_move_tail(imxdmac->ld_active.next, &imxdmac->ld_free); if (!list_empty(&imxdmac->ld_queue)) { - desc = list_first_entry(&imxdmac->ld_queue, struct imxdma_desc, - node); + next_desc = list_first_entry(&imxdmac->ld_queue, + struct imxdma_desc, node); list_move_tail(imxdmac->ld_queue.next, &imxdmac->ld_active); - if (imxdma_xfer_desc(desc) < 0) + if (imxdma_xfer_desc(next_desc) < 0) dev_warn(imxdma->dev, "%s: channel: %d couldn't xfer desc\n", __func__, imxdmac->channel); } -- 2.11.0