From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758569AbbFADpV (ORCPT ); Sun, 31 May 2015 23:45:21 -0400 Received: from mailout2.samsung.com ([203.254.224.25]:41905 "EHLO mailout2.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754175AbbFADpN (ORCPT ); Sun, 31 May 2015 23:45:13 -0400 X-AuditID: cbfee68f-f793b6d000005f66-3f-556bd54626e7 Message-id: <556BD546.1060208@samsung.com> Date: Mon, 01 Jun 2015 12:45:10 +0900 From: Jaehoon Chung User-Agent: Mozilla/5.0 (X11; Linux i686; rv:31.0) Gecko/20100101 Thunderbird/31.6.0 MIME-version: 1.0 To: Prabu Thangamuthu , Seungwon Jeon , Jaehoon Chung , Ulf Hansson , "linux-mmc@vger.kernel.org" , "linux-kernel@vger.kernel.org" Cc: Manjunath M Bettegowda Subject: Re: [PATCH v2] mmc: dw_mmc: insmod followed by rmmod will hung for eMMC References: <705D14B1C7978B40A723277C067CEDE245184BC7@IN01WEMBXB.internal.synopsys.com> In-reply-to: <705D14B1C7978B40A723277C067CEDE245184BC7@IN01WEMBXB.internal.synopsys.com> Content-type: text/plain; charset=windows-1252 Content-transfer-encoding: 7bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprLIsWRmVeSWpSXmKPExsWyRsSkUNftanaowa4L1hY3frWxWlzeNYfN 4sj/fkaLFbPnsllM2Hqc1eLD/YvMFsfXhjuwe9y5tofNo2/LKkaPLfs/M3p83iQXwBLFZZOS mpNZllqkb5fAlbHvxzSmgqt8FfNWnGRpYLzB3cXIySEhYCKx8t4WNghbTOLCvfVANheHkMBS RokNb8+xwxRtO/6aBSKxiFGip+8bO4TzgFGi/cQSFpAqXgEtiWO/ephBbBYBVYmV928xgdhs AjoS278dB7NFBcIkHqzbywpRLyjxY/I9sKkiAguYJJ5/2g7WzCxgJtF05g/YamGBAIm7/TPB 7hMSiJTYNR1iEKdAlMS5X2+BbA6gej2J+xe1IFrlJTavecsMMlNC4Bi7xNLNM9ggDhKQ+Db5 EAtIvYSArMSmA8wQn0lKHFxxg2UCo9gsJCfNQpg6C8nUBYzMqxhFUwuSC4qT0ouM9YoTc4tL 89L1kvNzNzECY+30v2f9OxjvHrA+xCjAwajEw5vRnR0qxJpYVlyZe4jRFOiIicxSosn5wIjO K4k3NDYzsjA1MTU2Mrc0UxLnXSj1M1hIID2xJDU7NbUgtSi+qDQntfgQIxMHp1QDY67MjBob dfE1vCyJCsejN7tJe/fcijBazVQUWxF9MXhTFqehq6dE36d1x1Utllz+xXNWZ/krab+XT4+5 f3h77uoCrh91Tx19HfZsqm6SmVnwJXDChL+7ZpnppmyWmXgxUeq+oWTuySPn+PUnZM050NN9 VDB/Xrm1xIGY378633Mai4kt6D16QomlOCPRUIu5qDgRAHtONTKwAgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrOIsWRmVeSWpSXmKPExsVy+t9jAV23q9mhBot3m1nc+NXGanF51xw2 iyP/+xktVsyey2YxYetxVosP9y8yWxxfG+7A7nHn2h42j74tqxg9tuz/zOjxeZNcAEtUA6NN RmpiSmqRQmpecn5KZl66rZJ3cLxzvKmZgaGuoaWFuZJCXmJuqq2Si0+ArltmDtAFSgpliTml QKGAxOJiJX07TBNCQ9x0LWAaI3R9Q4LgeowM0EDCGsaMfT+mMRVc5auYt+IkSwPjDe4uRk4O CQETiW3HX7NA2GISF+6tZ+ti5OIQEljEKNHT940dwnnAKNF+YglYFa+AlsSxXz3MIDaLgKrE yvu3mEBsNgEdie3fjoPZogJhEg/W7WWFqBeU+DH5HgvIIBGBBUwSzz9tB2tmFjCTaDrzhx3E FhYIkLjbP5MNxBYSiJTYNR1iEKdAlMS5X2+BbA6gej2J+xe1IFrlJTavecs8gVFgFpIVsxCq ZiGpWsDIvIpRNLUguaA4KT3XUK84Mbe4NC9dLzk/dxMjOJKfSe1gXNlgcYhRgINRiYc3szs7 VIg1say4MvcQowQHs5II76NLQCHelMTKqtSi/Pii0pzU4kOMpsAAmMgsJZqcD0wyeSXxhsYm ZkaWRuaGFkbG5krivCfzfUKFBNITS1KzU1MLUotg+pg4OKUaGGfvWsxxz/WBY/wOxxyOpunl dpFHsv1+TT4z2SS63bO1i/OxxpXo7ICa047yAc8KX39hmXuLdxHbhimvRSYf+iRWfKXeVizz gMPZXM68hIWME+eeOjPxq+sUlZOr207f0t7d7FdmNOvGq3XdRb95Kv9sfh1S8lPyYV9ge9w9 RiW106+/zWOvWa7EUpyRaKjFXFScCAC1lHMC+gIAAA== 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 Hi, Prabu. Thanks for resending the patch. Will apply this patch at my tree. Thanks! Best Regards, Jaehoon Chung On 05/28/2015 09:21 PM, Prabu Thangamuthu wrote: > Remove module of dw_mmc driver will hung for eMMC devices if we follow the > steps which are listed below, > insmod dw_mmc.ko > insmod dw_mmc-pci.ko > rmmod dw_mmc-pci.ko > > The root cause for this issue is, dw_mci_remove() will disable all the > interrupts by programming 0x0 to INTMASK register then it will call > dw_mci_cleanup_slot(). But dw_mci_cleanup_slot() is issuing CMD6 to > disable the eMMC boot partition and it is waiting for Command Complete > interrupt. Since INTMASK was already cleared by dw_mci_remove(), Command > Complete interrupt is not reaching the system. This leads to process hung. > > Signed-off-by: Prabu Thangamuthu > --- > Change log v2: > -Added prefix "mmc:" to the commit message header. > -Updated the Commit Message. > > drivers/mmc/host/dw_mmc.c | 6 +++--- > 1 files changed, 3 insertions(+), 3 deletions(-) > > diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c > index 55179f1..40e9d8e 100644 > --- a/drivers/mmc/host/dw_mmc.c > +++ b/drivers/mmc/host/dw_mmc.c > @@ -2926,15 +2926,15 @@ void dw_mci_remove(struct dw_mci *host) > { > int i; > > - mci_writel(host, RINTSTS, 0xFFFFFFFF); > - mci_writel(host, INTMASK, 0); /* disable all mmc interrupt first */ > - > for (i = 0; i < host->num_slots; i++) { > dev_dbg(host->dev, "remove slot %d\n", i); > if (host->slot[i]) > dw_mci_cleanup_slot(host->slot[i], i); > } > > + mci_writel(host, RINTSTS, 0xFFFFFFFF); > + mci_writel(host, INTMASK, 0); /* disable all mmc interrupt first */ > + > /* disable clock to CIU */ > mci_writel(host, CLKENA, 0); > mci_writel(host, CLKSRC, 0); >