All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ulf Hansson <ulf.hansson@linaro.org>
To: Adrian Hunter <adrian.hunter@intel.com>
Cc: linux-mmc <linux-mmc@vger.kernel.org>,
	Jaehoon Chung <jh80.chung@samsung.com>,
	Linus Walleij <linus.walleij@linaro.org>,
	Chaotian Jing <chaotian.jing@mediatek.com>
Subject: Re: [PATCH 4/4] mmc: core: Don't use ->card_busy() and CMD13 in combination when polling
Date: Tue, 25 Oct 2016 10:45:49 +0200	[thread overview]
Message-ID: <CAPDyKFoMzDvjOvZmuNp7eKz3rx1-sSzhXO2oLAcVj9MHBfZdkQ@mail.gmail.com> (raw)
In-Reply-To: <e9e44d6e-f2a6-13f0-4938-3fa1757b40e8@intel.com>

On 21 October 2016 at 11:19, Adrian Hunter <adrian.hunter@intel.com> wrote:
> On 20/10/16 11:19, Ulf Hansson wrote:
>> When polling for busy after sending a MMC_SWITCH command, both the optional
>> ->card_busy() callback and CMD13 are being used in conjunction.
>>
>> This doesn't make sense. Instead it's more reasonable to rely solely on the
>> ->card_busy() callback when it exists. Let's change that and instead use
>> the CMD13 as a fall-back. In this way we avoid sending CMD13, unless it's
>> really needed.
>>
>> Within this context, let's also take the opportunity to make some
>> additional clean-ups and clarifications to the related code.
>>
>> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
>> ---
>>  drivers/mmc/core/mmc_ops.c | 30 ++++++++++++++----------------
>>  1 file changed, 14 insertions(+), 16 deletions(-)
>>
>> diff --git a/drivers/mmc/core/mmc_ops.c b/drivers/mmc/core/mmc_ops.c
>> index a84a880..481bbdb 100644
>> --- a/drivers/mmc/core/mmc_ops.c
>> +++ b/drivers/mmc/core/mmc_ops.c
>> @@ -495,34 +495,32 @@ static int mmc_poll_for_busy(struct mmc_card *card, unsigned int timeout_ms,
>>       timeout = jiffies + msecs_to_jiffies(timeout_ms) + 1;
>>       do {
>>               /*
>> -              * Due to the possibility of being preempted after
>> -              * sending the status command, check the expiration
>> -              * time first.
>> +              * Due to the possibility of being preempted while polling,
>> +              * check the expiration time first.
>>                */
>>               expired = time_after(jiffies, timeout);
>> -             if (send_status) {
>> +
>> +             if (host->ops->card_busy) {
>> +                     busy = host->ops->card_busy(host);
>
> I didn't really have time to look at these patches, sorry :-(.  But this
> loop looks like it could use a cond_resched()

Yes, something like that is definitely needed! Although, I suggest we
do that improvement on top of this change, if you are fine with that
approach?

The reason is that I am also pondering over, whether it could make
sense to poll with a dynamically increased interval. At least when
using ->card_busy().
Let's say by starting at 1 us interval, then at each poll attempt we
double the interval time. We would then rather use a combination of
udelay(), usleep_range() and msleep() to accomplish what you propose.
Does that make sense to you?

Kind regards
Uffe

  reply	other threads:[~2016-10-25  8:45 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20161020082027epcas1p47e0913622727117286f7ad026259eb2b@epcas1p4.samsung.com>
2016-10-20  8:19 ` [PATCH 0/4] mmc: core: Clean-up and improve polling code in __mmc_switch() Ulf Hansson
2016-10-20  8:19   ` [PATCH 1/4] mmc: core: Make mmc_switch_status() available for mmc core Ulf Hansson
2016-10-20  8:19   ` [PATCH 2/4] mmc: core: Clarify code which deals with polling in __mmc_switch() Ulf Hansson
2016-10-20  8:19   ` [PATCH 3/4] mmc: core: Factor out code related to " Ulf Hansson
2016-10-20  8:19   ` [PATCH 4/4] mmc: core: Don't use ->card_busy() and CMD13 in combination when polling Ulf Hansson
2016-10-21  9:19     ` Adrian Hunter
2016-10-25  8:45       ` Ulf Hansson [this message]
2016-10-25 10:58         ` Adrian Hunter
2016-10-24  7:49     ` Linus Walleij
2016-10-25  8:44       ` Ulf Hansson
2016-10-21  7:49   ` [PATCH 0/4] mmc: core: Clean-up and improve polling code in __mmc_switch() Jaehoon Chung
2016-10-21  8:22     ` Ulf Hansson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAPDyKFoMzDvjOvZmuNp7eKz3rx1-sSzhXO2oLAcVj9MHBfZdkQ@mail.gmail.com \
    --to=ulf.hansson@linaro.org \
    --cc=adrian.hunter@intel.com \
    --cc=chaotian.jing@mediatek.com \
    --cc=jh80.chung@samsung.com \
    --cc=linus.walleij@linaro.org \
    --cc=linux-mmc@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.