From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932385AbcE0DqS (ORCPT ); Thu, 26 May 2016 23:46:18 -0400 Received: from mailout3.samsung.com ([203.254.224.33]:55729 "EHLO mailout3.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932194AbcE0DqQ (ORCPT ); Thu, 26 May 2016 23:46:16 -0400 X-AuditID: cbfee691-f79196d000001483-2a-5747c3051e8f Message-id: <5747C306.7030909@samsung.com> Date: Fri, 27 May 2016 12:46:14 +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: Shawn Lin , Ulf Hansson Cc: linux-mmc@vger.kernel.org, linux-kernel@vger.kernel.org, Doug Anderson , linux-rockchip@lists.infradead.org Subject: Re: [PATCH 2/2] mmc: dw_mmc: check card present before starting request References: <1464318141-5360-1-git-send-email-shawn.lin@rock-chips.com> In-reply-to: <1464318141-5360-1-git-send-email-shawn.lin@rock-chips.com> Content-type: text/plain; charset=windows-1252 Content-transfer-encoding: 7bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprLIsWRmVeSWpSXmKPExsWyRsSkWJf1sHu4wbsWNYuzyw6yWVzeNYfN 4sj/fkaLTw/+M1vcebKe1eL42nAHNo/ZDRdZPO5c28PmsXlJvcffWftZPD5vkgtgjeKySUnN ySxLLdK3S+DKONd5nLGgna/izPLpzA2Mu7m7GDk5JARMJBYtm8cEYYtJXLi3nq2LkYtDSGAF o8Sx1v9MMEUbJz5kgUjMYpT4uOAVK4TzgFHi/tkbLCBVvAJaEtd3r2AGsVkEVCV2/j4LZrMJ 6Ehs/3YcbJKoQJjEg3V7WSHqBSV+TL4H1isi4CexdcdWsNXMAh2MEs9WTAVLCAsESDzee5IR YttcRolL786CTeIU8JC4cKoHqIgDqENP4v5FLZAws4C8xOY1b5lB6iUETrFLfJn7iw3iIgGJ b5MPgdVLCMhKbDrADPGapMTBFTdYJjCKzUJy0yyEqbOQTF3AyLyKUTS1ILmgOCm9yFSvODG3 uDQvXS85P3cTIzDWTv97NnEH4/0D1ocYBTgYlXh4GZzdw4VYE8uKK3MPMZoCHTGRWUo0OR8Y 0Xkl8YbGZkYWpiamxkbmlmZK4rw60j+DhQTSE0tSs1NTC1KL4otKc1KLDzEycXBKNTAedt95 fAPXhb2R1xLaRH+syyxfbXmk08DZ7ZO+r7Ny/39x8e71DNP94gKsPj37ycJ2VcJuPfP1Q1Pc r17YIfm2p/7wvffvjXduvbeh+L90zm3Nb/PnvvgZvfH/LrNv03WE3n+6FRi9TUV630eXNJeX lr4BRxr3uOpnrX12tZhzl52lcb5riJObEktxRqKhFnNRcSIAo6+MvLACAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrFIsWRmVeSWpSXmKPExsVy+t9jQV3Ww+7hBgt/KlicXXaQzeLyrjls Fkf+9zNafHrwn9nizpP1rBbH14Y7sHnMbrjI4nHn2h42j81L6j3+ztrP4vF5k1wAa1QDo01G amJKapFCal5yfkpmXrqtkndwvHO8qZmBoa6hpYW5kkJeYm6qrZKLT4CuW2YO0AFKCmWJOaVA oYDE4mIlfTtME0JD3HQtYBojdH1DguB6jAzQQMIaxoxznccZC9r5Ks4sn87cwLibu4uRk0NC wERi48SHLBC2mMSFe+vZuhi5OIQEZjFKfFzwihXCecAocf/sDbAqXgEtieu7VzCD2CwCqhI7 f58Fs9kEdCS2fzvOBGKLCoRJPFi3lxWiXlDix+R7YL0iAn4SW3dsBdvALNDBKPFsxVSwhLBA gMTjvScZIbbNZZS49O4s2CROAQ+JC6d6gIo4gDr0JO5f1AIJMwvIS2xe85Z5AiPQnQg7ZiFU zUJStYCReRWjRGpBckFxUnquYV5quV5xYm5xaV66XnJ+7iZGcDw/k9rBeHCX+yFGAQ5GJR5e Bmf3cCHWxLLiytxDjBIczEoivMl7gUK8KYmVValF+fFFpTmpxYcYTYGBMJFZSjQ5H5hq8kri DY1NzIwsjcwNLYyMzZXEeR//XxcmJJCeWJKanZpakFoE08fEwSnVwLif7eYhlifbVRzUH66+ Imx0XKX3VHqab5LvbK+Zb0JSf/0Nd9I6IdvJ3L/do3KF9Z9lK3crHd7eyTpn+4H3Wx4qJx37 deDWb0Xtac/TqpeKXW5bpTLhi+anqcLMs6MX7E0UdA7281go56qxpfrHsWyOb6Jfnk5MelX8 WTtwnorBx7cvVc6+mvpdiaU4I9FQi7moOBEAPIeGkf0CAAA= 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 Shawn, On 05/27/2016 12:02 PM, Shawn Lin wrote: > The main reason to add this check is to avoid unnecessary > mmc_request like the on-going cmd and the corresponding sbc > if the card is removed. Although we have already checked this in > dw_mci_handle_cd for runtime usage of sd card and dw_mci_init_slot > for noremovable devices, but there is a timing gap before it really > calls dw_mci_get_cd as mmc_detect_change needs some delay here. > > Another gain here is that we could save some checkings of card status > after sd card been removed. > > Signed-off-by: Shawn Lin > --- > > drivers/mmc/host/dw_mmc.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c > index cb30e91..8eb7898 100644 > --- a/drivers/mmc/host/dw_mmc.c > +++ b/drivers/mmc/host/dw_mmc.c > @@ -105,6 +105,7 @@ struct idmac_desc { > static bool dw_mci_reset(struct dw_mci *host); > static bool dw_mci_ctrl_reset(struct dw_mci *host, u32 reset); > static int dw_mci_card_busy(struct mmc_host *mmc); > +static int dw_mci_get_cd(struct mmc_host *mmc); > > #if defined(CONFIG_DEBUG_FS) > static int dw_mci_req_show(struct seq_file *s, void *v) > @@ -1255,7 +1256,7 @@ static void dw_mci_request(struct mmc_host *mmc, struct mmc_request *mrq) > */ > spin_lock_bh(&host->lock); > > - if (!test_bit(DW_MMC_CARD_PRESENT, &slot->flags)) { > + if (!dw_mci_get_cd(mmc)) { > spin_unlock_bh(&host->lock); > mrq->cmd->error = -ENOMEDIUM; > mmc_request_done(mmc, mrq); I think spin_lock/unlock_bh() should be removed at here. Instead, Can it locate before calling dw_mci_queue_request()? Anyway, it looks good to me. Best Regards, Jaehoon Chung >