From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754362AbcFUDAQ (ORCPT ); Mon, 20 Jun 2016 23:00:16 -0400 Received: from mailout1.samsung.com ([203.254.224.24]:37618 "EHLO mailout1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754295AbcFUDAN (ORCPT ); Mon, 20 Jun 2016 23:00:13 -0400 X-AuditID: cbfee68d-f79876d000001436-1a-5768a557cc5f From: Seung-Woo Kim To: "'Shawn Lin'" , jh80.chung@samsung.com, ulf.hansson@linaro.org, linux-mmc@vger.kernel.org, linux-kernel@vger.kernel.org, sw0312.kim@samsung.com References: <001501d1cace$9b8f2b60$d2ad8220$@samsung.com> In-reply-to: Subject: RE: mmc: dw_mmc: warning with CONFIG_DMA_API_DEBUG Date: Tue, 21 Jun 2016 11:24:24 +0900 Message-id: <000801d1cb64$070dfb60$1529f220$@samsung.com> MIME-version: 1.0 Content-type: text/plain; charset=us-ascii Content-transfer-encoding: 7bit X-Mailer: Microsoft Outlook 14.0 Thread-index: AQI6zlycJxi3Q0JpniuY3Cm7WIZgugIPl9BGASmb5JqfB2FKQA== Content-language: ko X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrEIsWRmVeSWpSXmKPExsWyRsSkUDd8aUa4wao1ohY3frWxWlzeNYfN 4sj/fkaLO0/Ws1rMmPySzeL42nAHNo871/awefydtZ/Fo2/LKkaPz5vkAliiuGxSUnMyy1KL 9O0SuDIWn7zBWNBuXDFx23nGBsZGjS5GTg4JAROJqYfnMkHYYhIX7q1n62Lk4hASWMEoMXvX fzaYok2bX7NCJGYxSmy/dx7K+cAosfbRQrAqNgEdif1LfoMlRATWM0qs/tbMCFF1lFGi4yhI hpODU8BJYt3WB0AdHBzCAtYS81flgIRZBFQlJn64zwhi8wpYSpyYdhXKFpT4MfkeC4jNLKAl sX7ncSYIW15i85q3zBDnKUjsOPsarF4EaPzmO92MEDUiEvtevAO7QULgErvExoddLBDLBCS+ TT7EAnKDhICsxKYDUHMkJQ6uuMEygVF8FpLVs5CsnoVk9SwkKxYwsqxiFE0tSC4oTkovMtQr TswtLs1L10vOz93ECIzK0/+e9e5gvH3A+hCjAAejEg8vQ1xGuBBrYllxZe4hRlOgiyYyS4km 5wNjP68k3tDYzMjC1MTU2Mjc0kxJnFdR6mewkEB6YklqdmpqQWpRfFFpTmrxIUYmDk6pBkau lKel5zZpPmZkUfilfeN6fnWZV+s3c1mjDL3/RaVXL/rnViz5EnBq/0kXvbV7b+z1PKDx5dfp NfJp3XJHl0m++1S54Y66UO3+PwemXbRMdXs7qbbOaaEGu1bAuWs/9gjkL6o/YNRwqWi1t++p izxFT/y7zlnz7q5vfKn9YW7YO9MQvp1FwSuVWIozEg21mIuKEwEM9BbsxQIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrPIsWRmVeSWpSXmKPExsVy+t9jQd3wpRnhBrtu8Fvc+NXGanF51xw2 iyP/+xkt7jxZz2oxY/JLNovja8Md2DzuXNvD5vF31n4Wj74tqxg9Pm+SC2CJamC0yUhNTEkt UkjNS85PycxLt1XyDo53jjc1MzDUNbS0MFdSyEvMTbVVcvEJ0HXLzAFarqRQlphTChQKSCwu VtK3wzQhNMRN1wKmMULXNyQIrsfIAA0krGHMWHzyBmNBu3HFxG3nGRsYGzW6GDk5JARMJDZt fs0KYYtJXLi3nq2LkYtDSGAWo8T2e+dZIZwPjBJrHy1kA6liE9CR2L/kN1hCRGA9o8Tqb82M EFVHGSU6jv4Gm8Up4CSxbusDoA4ODmEBa4n5q3JAwiwCqhITP9xnBLF5BSwlTky7CmULSvyY fI8FxGYW0JJYv/M4E4QtL7F5zVtmiPMUJHacfQ1WLwI0fvOdbkaIGhGJfS/eMU5gFJyFZNQs JKNmIRk1C0nLAkaWVYwSqQXJBcVJ6bmGeanlesWJucWleel6yfm5mxjBkf9MagfjwV3uhxgF OBiVeHgrDDPChVgTy4orcw8xSnAwK4nwnlwMFOJNSaysSi3Kjy8qzUktPsRoCvTsRGYp0eR8 YFLKK4k3NDYxM7I0Mje0MDI2VxLnffx/XZiQQHpiSWp2ampBahFMHxMHp1QDo23hhNVnuxJZ 1iypeeMr7yxXdOfuLkHfTIODFz2DDnlOKVoxgeNNf8OH22tbL20Mvc87Y1lrziTur3sVr3jk 7d3/N+kvv+ls7qslTz2+SU9iT1tcf2zL/9V3e2tdL2Y31XtGbpK6uE7iweRul5RrdoxhXQ8y f6w9t2oZyz+lPRaR51Olv7M7vFNiKc5INNRiLipOBAArmoTKEgMAAA== DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hello Shawn, > -----Original Message----- > From: Shawn Lin [mailto:shawn.lin@rock-chips.com] > Sent: Tuesday, June 21, 2016 10:52 AM > To: Seung-Woo Kim; jh80.chung@samsung.com; ulf.hansson@linaro.org; linux-mmc@vger.kernel.org; linux- > kernel@vger.kernel.org > Cc: shawn.lin@rock-chips.com > Subject: Re: mmc: dw_mmc: warning with CONFIG_DMA_API_DEBUG > > On 2016/6/20 16:34, Seung-Woo Kim wrote: > > Hi folks, > > > > During booting test on my Exynos5422 based Odroid-XU3, kernel compiled > > with CONFIG_DMA_API_DEBUG reported following warning: > > > > ------------[ cut here ]------------ > > WARNING: CPU: 0 PID: 0 at lib/dma-debug.c:1096 check_unmap+0x7bc/0xb38 > > dwmmc_exynos 12200000.mmc: DMA-API: device driver tries to free DMA memory it has not allocated [device > address=0x000000006d9d2200] > > Thanks for this report and fix. > > DTO(the same as IDMAC-RI/TI) interrupts may or may not come together > with DATA_ERR. If DATA_ERR occur without geting DTO, we should issue > CMD12 manually to generate DTO. It's a ugly deisgn for dwmmc but from > the vendor's ask. > > So you should never think we complete the xfer without > checking DATA_ERR. This way you got the warning. > > So could you try this one: With your patch, there is no more the DMA API waring in my environment. Best Regards, - Seung-Woo Kim > > --- a/drivers/mmc/host/dw_mmc.c > +++ b/drivers/mmc/host/dw_mmc.c > @@ -2474,7 +2474,8 @@ static irqreturn_t dw_mci_interrupt(int irq, void > *dev_id) > mci_writel(host, IDSTS64, SDMMC_IDMAC_INT_TI | > > SDMMC_IDMAC_INT_RI); > mci_writel(host, IDSTS64, SDMMC_IDMAC_INT_NI); > - host->dma_ops->complete((void *)host); > + if (!test_bit(EVENT_DATA_ERROR, > &host->pending_events)) > + host->dma_ops->complete((void *)host); > } > } else { > pending = mci_readl(host, IDSTS); > @@ -2482,7 +2483,8 @@ static irqreturn_t dw_mci_interrupt(int irq, void > *dev_id) > mci_writel(host, IDSTS, SDMMC_IDMAC_INT_TI | > > SDMMC_IDMAC_INT_RI); > mci_writel(host, IDSTS, SDMMC_IDMAC_INT_NI); > - host->dma_ops->complete((void *)host); > + if (!test_bit(EVENT_DATA_ERROR, > &host->pending_events)) > + host->dma_ops->complete((void *)host); > } > } > > > > [size=128 bytes] > > Modules linked in: > > CPU: 0 PID: 0 Comm: swapper/0 Not tainted 4.7.0-rc4 #26 > > Hardware name: SAMSUNG EXYNOS (Flattened Device Tree) > > [] (unwind_backtrace) from [] (show_stack+0x20/0x24) > > [] (show_stack) from [] (dump_stack+0x80/0x94) > > [] (dump_stack) from [] (__warn+0xf8/0x110) > > [] (__warn) from [] (warn_slowpath_fmt+0x48/0x50) > > [] (warn_slowpath_fmt) from [] (check_unmap+0x7bc/0xb38) > > [] (check_unmap) from [] (debug_dma_unmap_sg+0x118/0x148) > > [] (debug_dma_unmap_sg) from [] (dw_mci_dma_cleanup+0x7c/0xb8) > > [] (dw_mci_dma_cleanup) from [] (dw_mci_stop_dma+0x40/0x50) > > [] (dw_mci_stop_dma) from [] (dw_mci_tasklet_func+0x130/0x3b4) > > [] (dw_mci_tasklet_func) from [] (tasklet_action+0xb4/0x150) > > [] (tasklet_action) from [] (__do_softirq+0xe4/0x3cc) > > [] (__do_softirq) from [] (irq_exit+0xd0/0x10c) > > [] (irq_exit) from [] (__handle_domain_irq+0x90/0xfc) > > [] (__handle_domain_irq) from [] (gic_handle_irq+0x64/0xa8) > > [] (gic_handle_irq) from [] (__irq_svc+0x54/0x90) > > Exception stack(0xc1101ef8 to 0xc1101f40) > > 1ee0: 00000001 00000000 > > 1f00: 00000000 c011b600 c1100000 c110753c 00000000 c11c3984 c11074d4 c1107548 > > 1f20: 00000000 c1101f54 c1101f58 c1101f48 c010a1fc c010a200 60000013 ffffffff > > [] (__irq_svc) from [] (arch_cpu_idle+0x48/0x4c) > > [] (arch_cpu_idle) from [] (default_idle_call+0x30/0x3c) > > [] (default_idle_call) from [] (cpu_startup_entry+0x358/0x3b4) > > [] (cpu_startup_entry) from [] (rest_init+0x94/0x98) > > [] (rest_init) from [] (start_kernel+0x3a4/0x3b0) > > [] (start_kernel) from [<4000807c>] (0x4000807c) > > ---[ end trace 256f83eed365daf0 ]--- > > > > The warning occurs because after complete callback function, > > dw_mci_dmac_complete_dma() is called, then dw_mci_stop_dma() is called > > again. So it causes dma_unmap_sg() is called twice for same sg. It > > occurs during clock setting at booting time. > > > > Simply, clearing host->using_dma flag on dw_mci_dmac_complete_dma() and > > dw_mci_stop_dma() like following fixes the issue, but I am not sure > > this approach is proper. > > --- > > diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c > > index 2cc6123..a71c94b 100644 > > --- a/drivers/mmc/host/dw_mmc.c > > +++ b/drivers/mmc/host/dw_mmc.c > > @@ -388,6 +388,7 @@ static void dw_mci_stop_dma(struct dw_mci *host) > > if (host->using_dma) { > > host->dma_ops->stop(host); > > host->dma_ops->cleanup(host); > > + host->using_dma = 0; > > } > > > > /* Data transfer was stopped by the interrupt handler */ > > @@ -455,6 +456,7 @@ static void dw_mci_dmac_complete_dma(void *arg) > > DMA_FROM_DEVICE); > > > > host->dma_ops->cleanup(host); > > + host->using_dma = 0; > > > > /* > > * If the card was removed, data will be NULL. No point in trying to > > @@ -943,8 +945,6 @@ static int dw_mci_submit_data_dma(struct dw_mci *host, struct mmc_data *data) > > int sg_len; > > u32 temp; > > > > - host->using_dma = 0; > > - > > /* If we don't have a channel, we can't do DMA */ > > if (!host->use_dma) > > return -ENODEV; > > --- > > > > Best Regards, > > - Seung-Woo Kim > > > > -- > > To unsubscribe from this list: send the line "unsubscribe linux-mmc" in > > the body of a message to majordomo@vger.kernel.org > > More majordomo info at http://vger.kernel.org/majordomo-info.html > > > > > -- > Best Regards > Shawn Lin >