All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sujit Reddy Thumma <sthumma@codeaurora.org>
To: "Dong, Chuanxiao" <chuanxiao.dong@intel.com>, ulf.hansson@stericsson.com
Cc: Viresh Kumar <viresh.kumar@st.com>, Chris Ball <cjb@laptop.org>,
	"linux-mmc@vger.kernel.org" <linux-mmc@vger.kernel.org>,
	Shiraz HASHIM <shiraz.hashim@st.com>,
	Armando VISCONTI <armando.visconti@st.com>
Subject: Re: [Query] mmc/sdhci: Suspend hangs if card is inserted at suspend.
Date: Tue, 15 Nov 2011 13:41:45 +0530	[thread overview]
Message-ID: <4EC21EC1.2090607@codeaurora.org> (raw)
In-Reply-To: <5D8008F58939784290FAB48F549751984E6510F91D@shsmsx502.ccr.corp.intel.com>

Hi Ulf,

I see similar issue with your patch in 3.2 "mmc: core: Prevent too long 
response times for suspend".

                 if (mmc_try_claim_host(host)) {
<snip>
/* if CONFIG_MMC_UNSAFE_RESUME is not set, remove() callback would get 
blocked until mmcqd gets mmc_claim_host() causing deadlock here */
                                 if (host->bus_ops->remove)
                                         host->bus_ops->remove(host);
<snip>
                 } else {
                         err = -EBUSY;
                 }
         }

Proabably, we can do something like this:

diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
index 5278ffb..0177d4a 100644
--- a/drivers/mmc/core/core.c
+++ b/drivers/mmc/core/core.c
@@ -2309,6 +2309,7 @@ int mmc_suspend_host(struct mmc_host *host)
                                  * We simply "remove" the card in this 
case.
                                  * It will be redetected on resume.
                                  */
+                               mmc_do_release_host(host);
                                 if (host->bus_ops->remove)
                                         host->bus_ops->remove(host);
                                 mmc_claim_host(host);
@@ -2317,8 +2318,9 @@ int mmc_suspend_host(struct mmc_host *host)
                                 mmc_release_host(host);
                                 host->pm_flags = 0;
                                 err = 0;
+                       } else {
+                               mmc_do_release_host(host);
                         }
-                       mmc_do_release_host(host);
                 } else {
                         err = -EBUSY;
                 }

Please let me know if you agree. I can post a patch for this.


Thanks
Sujit

On 11/15/2011 12:27 PM, Dong, Chuanxiao wrote:
> Hi Viresh,
> I also meet the hang issue when suspending a system with a mounted SD card. Actually it caused by a dead lock of mmc_claim_host. Maybe we faced the same issue.
> So may be the two mails in the attachment can help you.
>
> Thanks
> Chuanxiao
>
>> -----Original Message-----
>> From: linux-mmc-owner@vger.kernel.org
>> [mailto:linux-mmc-owner@vger.kernel.org] On Behalf Of Viresh Kumar
>> Sent: Tuesday, November 15, 2011 1:47 PM
>> To: Chris Ball
>> Cc: linux-mmc@vger.kernel.org; Shiraz HASHIM; Armando VISCONTI
>> Subject: Re: [Query] mmc/sdhci: Suspend hangs if card is inserted at suspend.
>>
>> On 11/12/2011 8:54 AM, Chris Ball wrote:
>>> On Fri, Nov 11 2011, Viresh Kumar wrote:
>>>>> Controller specific suspend/resume are still not called, so i think it might
>>>>> be related to core code. I am using 2.6.37 kernel version.
>>>>>
>>>>> Any help on this?
>>> Please try to reproduce on 3.1 and let us know if it's present there.
>>
>> Hi Chris,
>>
>> Support for SPEAr13xx is not present on 3.1 and it will take some time to
>> move support there. I have a bit more info which might able you to guide us:
>>
>> file: drivers/mmc/card/queue.c
>>
>> static int mmc_queue_thread(void *d)
>> {
>> 	...
>> 	do {
>> 		req = blk_fetch_request(q);
>> 		...
>> 		if (!req) {
>> 			if (kthread_should_stop()) {
>> 				set_current_state(TASK_RUNNING);
>> 				break;
>> 			}
>> 			up(&mq->thread_sem);
>> 			schedule();
>> 			down(&mq->thread_sem);
>> 			continue;
>> 		}
>> 		set_current_state(TASK_RUNNING);
>> 		mq->issue_fn(mq, req);
>> 	} while (1);
>> 	...
>> }
>>
>> - In normal cases, i.e. when we are able to stop this thread,
>>    req is returned as NULL from blk_fetch_request()
>> - Suspend hang only occurs when the card is mounted.
>> - When suspend hangs, req is not returned as NULL and the card is
>>    already removed by kernel and so we never check kthread_should_stop().
>>    So it hangs.
>>
>> --
>> viresh
>> --
>> 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


-- 
Thanks & Regards,
Sujit Reddy Thumma

Sent by an employee of the Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.

  parent reply	other threads:[~2011-11-15  8:11 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-11-11  6:45 [Query] mmc/sdhci: Suspend hangs if card is inserted at suspend Viresh Kumar
2011-11-12  3:24 ` Chris Ball
2011-11-15  5:46   ` Viresh Kumar
2011-11-15  6:57     ` Dong, Chuanxiao
2011-11-15  7:10       ` Viresh Kumar
2011-11-15  7:23         ` Dong, Chuanxiao
2011-11-15  8:11       ` Sujit Reddy Thumma [this message]
2011-11-17 17:46         ` 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=4EC21EC1.2090607@codeaurora.org \
    --to=sthumma@codeaurora.org \
    --cc=armando.visconti@st.com \
    --cc=chuanxiao.dong@intel.com \
    --cc=cjb@laptop.org \
    --cc=linux-mmc@vger.kernel.org \
    --cc=shiraz.hashim@st.com \
    --cc=ulf.hansson@stericsson.com \
    --cc=viresh.kumar@st.com \
    /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.