From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751450AbbL1CHi (ORCPT ); Sun, 27 Dec 2015 21:07:38 -0500 Received: from mailout3.samsung.com ([203.254.224.33]:41335 "EHLO mailout3.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750829AbbL1CH2 (ORCPT ); Sun, 27 Dec 2015 21:07:28 -0500 X-AuditID: cbfee691-f79766d0000012b6-6b-5680995e401b Date: Mon, 28 Dec 2015 02:07:26 +0000 (GMT) From: Youngjin Jang Subject: [PATCH] Move the judgement of timeout into mmc_switch_status_error() To: ulf.hansson@linaro.org, linux-mmc@vger.kernel.org, linux-kernel@vger.kernel.org Cc: demon.lee@samsung.com, js07.lee@samsung.com Reply-to: yj84.jang@samsung.com MIME-version: 1.0 X-MTR: 20151228020323416@yj84.jang Msgkey: 20151228020323416@yj84.jang X-EPLocale: ko_KR.utf-8 X-Priority: 3 X-EPWebmail-Msg-Type: personal X-EPWebmail-Reply-Demand: 0 X-EPApproval-Locale: X-EPHeader: ML X-MLAttribute: X-RootMTR: 20151228020323416@yj84.jang X-ParentMTR: X-ArchiveUser: X-CPGSPASS: N X-ConfirmMail: N,general Content-type: text/plain; charset=utf-8 MIME-version: 1.0 Message-id: <1921572.349701451268445456.JavaMail.weblogic@ep2mlwas03b> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrEIsWRmVeSWpSXmKPExsWyRsSkWDduZkOYwfapKhaXd81hc2D0+LxJ LoAxissmJTUnsyy1SN8ugSujrfkQS8EzoYo9rx6yNzAuEepi5OQQElCRmHBvGzuILSFgIvF4 63UWCFtM4sK99WxdjFxANUsZJZo2bgUq4gArmjCVGSI+h1HiW8cDsDiLgKrEotV6IL1sAjoS R7f8YQOxhQV8JdYtvckIYosIpEl0nukE28UsYC2x/UEPE8QN8hKz5zxgBbF5BQQlTs58AnWD ksSWxn3sEHFliS/Xn7BCxMUlLsy9BHUzr8SM9qdQ9XIS076uYYawpSXOz9rACPPL4u+PoeL8 Esdu72CCsAUkpp45CFWjLnHm8wE2CJtPYs3Ctyww9btOLWeG2XV/y1yoXgmJrS0Q9zALKEpM 6X4IDgZmAU2J9bv00b3CK+Am8e97Hyso2CQEpnJILFt1mnECo9IsJHWzkIyahTAKWckCRpZV jKKpBckFxUnpRaZ6xYm5xaV56XrJ+bmbGIFJ4fS/ZxN3MN4/YH2IUYCDUYmHt6OpIUyINbGs uDL3EKMpMJImMkuJJucDU09eSbyhsZmRhamJqbGRuaWZkjivjvTPYCGB9MSS1OzU1ILUovii 0pzU4kOMTBycUg2M/JkhTiG9ht6sfDwLTr9i0t3zTjtrX3RsiYbrM22tUqudSmd2cJbzFZ/t rshaEHrlZO12ZYMHrmvMSu/fi5WtmPrCOi1h+Z/zwYF5dt48B9Zu2KVT43HkZpGb6sKO/+/F 4/2THBp8nyls3q6s1fMkWczz/+TnpvmX3rwynRfYsED7IsdzuZ1KLMUZiYZazEXFiQAGaGdM BQMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrMKsWRmVeSWpSXmKPExsVy+t/tPt24mQ1hBm/6FSwu75rD5sDo8XmT XABjVJpNRmpiSmqRQmpecn5KZl66rZJ3cLxzvKmZgaGuoaWFuZJCXmJuqq2Si0+ArltmDtBQ JYWyxJxSoFBAYnGxkr6dTVF+aUmqQkZ+cYmtUrShuZGekYGeqZGeoXGslaGBgZEpUE1CWkZb 8yGWgmdCFXtePWRvYFwi1MXIySEkoCIx4d429i5GDg4JAROJCVOZQcISAmISF+6tZ+ti5AIq mcMo8a3jAVgNi4CqxKLVeiA1bAI6Eke3/GEDsYUFfCXWLb3JCGKLCKRJdJ7pZAexmQWsJbY/ 6GGCWCUvMXvOA1YQm1dAUOLkzCcsELuUJLY07mOHiCtLfLn+hBUiLi5xYe4ldgibV2JG+1Oo ejmJaV/XQN0pLXF+1gZGmJsXf38MFeeXOHZ7BxOELSAx9cxBqBp1iTOfD7BB2HwSaxa+ZYGp 33VqOTPMrvtb5kL1SkhsbYG4h1lAUWJK90NwMDALaEqs36WP7hVeATeJf9/7WCcwys5CkpqF pHsWQjeykgWMLKsYRVMLkguKk9IrTPSKE3OLS/PS9ZLzczcxghPQsyU7GBsuWB9iFOBgVOLh 7WhqCBNiTSwrrsw9xCjBwawkwrsmGijEm5JYWZValB9fVJqTWnyI0RQYZROZpUST84HJMa8k 3tDY2MTMxNTSxMLA1FxJnPf2Pr8wIYH0xJLU7NTUgtQimD4mDk6pBsZo5nm3GEWqggQmL1yu 8ymh4XOs2vIbZ6azNMXrOWzi9RMT04u3F731yPS2YdSWouy6qUlqzI+yHbMMJ+bG/P5tHLdR doZhWecbn7mpE85Lu3HG9s6K2fPYVmvJ0en8133MWoPm2Ojckf3pl9KtluJ2c9tNF8H70qsP MPxhl1o//9vSJW27PiixFGckGmoxFxUnAgAco+dFVgMAAA== DLP-Filter: Pass X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by mail.home.local id tBS27fR4028510 __mmc_switch() is possible to misjudge error. Although jiffies was overed timeout, the chance about "R1_CURRENT_STATE(status) != R1_STATE_PRG" is exists. In other words, Successful completion of CMD6 with timeout error. Kernel expects failure of __mmc_switch, but card is completed CMD6 in this case. It makes mismatch status between mmc subsystem and mmc card. Especially, in case of partition switch, If timeout occurs with normal status of CMD13 response unfortunatley, "main_md->curr" will not be set, even card switched successfully. Checking state of mmc card is needed when judging an timeout error, if it is just timeout or timeout with error. Reviewed-by: Jungseung Lee Signed-off-by: Youngjin Jang --- drivers/mmc/core/mmc_ops.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/mmc/core/mmc_ops.c b/drivers/mmc/core/mmc_ops.c index 1f44426..033f475 100644 --- a/drivers/mmc/core/mmc_ops.c +++ b/drivers/mmc/core/mmc_ops.c @@ -456,6 +456,8 @@ int mmc_switch_status_error(struct mmc_host *host, u32 status) if (status & R1_SPI_ILLEGAL_COMMAND) return -EBADMSG; } else { + if (R1_CURRENT_STATE(status) == R1_STATE_PRG) + return -ETIMEDOUT; if (status & 0xFDFFA000) pr_warn("%s: unexpected status %#x after switch\n", mmc_hostname(host), status); @@ -568,8 +570,7 @@ int __mmc_switch(struct mmc_card *card, u8 set, u8 index, u8 value, if (time_after(jiffies, timeout)) { pr_err("%s: Card stuck in programming state! %s\n", mmc_hostname(host), __func__); - err = -ETIMEDOUT; - goto out; + break; } } while (R1_CURRENT_STATE(status) == R1_STATE_PRG); -- 1.7.9.5 {.n++%ݶw{.n+{G{ayʇڙ,jfhz_(階ݢj"mG?&~iOzv^m ?I