* one doubt about mmc_sdio_init_card function
@ 2014-07-01 5:39 Fu, Zhonghui
2014-07-02 2:52 ` Aaron Lu
2014-07-03 15:47 ` One bug of SDHCI driver Fu, Zhonghui
0 siblings, 2 replies; 17+ messages in thread
From: Fu, Zhonghui @ 2014-07-01 5:39 UTC (permalink / raw)
To: chris, ulf.hansson, jh80.chung, tgih.jun, aaron.lu, linux-mmc,
linux-kernel, jackey.shen, gregkh
Hi, all
The mmc_sdio_init_card(drivers/mmc/core/sdio.c) function calls mmc_alloc_card(drivers/mmc/core/bus.c) function to allocate a card structure. card->dev.bus is assigned with mmc_bus_type in mmc_alloc_card function. Why not assign sdio_bus_type to card->dev.bus?
struct mmc_card *mmc_alloc_card(struct mmc_host *host, struct device_type *type)
{
struct mmc_card *card;
card = kzalloc(sizeof(struct mmc_card), GFP_KERNEL);
if (!card)
return ERR_PTR(-ENOMEM);
card->host = host;
device_initialize(&card->dev);
card->dev.parent = mmc_classdev(host);
card->dev.bus = &mmc_bus_type;
card->dev.release = mmc_release_card;
card->dev.type = type;
return card;
}
Thanks,
Zhonghui
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: one doubt about mmc_sdio_init_card function
2014-07-01 5:39 one doubt about mmc_sdio_init_card function Fu, Zhonghui
@ 2014-07-02 2:52 ` Aaron Lu
2014-07-03 15:47 ` One bug of SDHCI driver Fu, Zhonghui
1 sibling, 0 replies; 17+ messages in thread
From: Aaron Lu @ 2014-07-02 2:52 UTC (permalink / raw)
To: Fu, Zhonghui, chris, ulf.hansson, jh80.chung, tgih.jun,
linux-mmc, linux-kernel, jackey.shen, gregkh
On 07/01/2014 01:39 PM, Fu, Zhonghui wrote:
>
> Hi, all
>
> The mmc_sdio_init_card(drivers/mmc/core/sdio.c) function calls mmc_alloc_card(drivers/mmc/core/bus.c) function to allocate a card structure. card->dev.bus is assigned with mmc_bus_type in mmc_alloc_card function. Why not assign sdio_bus_type to card->dev.bus?
sdio card, mmc card, sd card are all devices on the mmc bus, hence their
bus type is set to mmc_bus_type.
sdio function device is a device on the sdio bus, hence its bus type is
sdio_bus_type.
Hope this helps,
Aaron
>
>
> struct mmc_card *mmc_alloc_card(struct mmc_host *host, struct device_type *type)
> {
> struct mmc_card *card;
>
> card = kzalloc(sizeof(struct mmc_card), GFP_KERNEL);
> if (!card)
> return ERR_PTR(-ENOMEM);
>
> card->host = host;
>
> device_initialize(&card->dev);
>
> card->dev.parent = mmc_classdev(host);
> card->dev.bus = &mmc_bus_type;
> card->dev.release = mmc_release_card;
> card->dev.type = type;
>
> return card;
> }
>
>
> Thanks,
> Zhonghui
>
^ permalink raw reply [flat|nested] 17+ messages in thread
* One bug of SDHCI driver
2014-07-01 5:39 one doubt about mmc_sdio_init_card function Fu, Zhonghui
2014-07-02 2:52 ` Aaron Lu
@ 2014-07-03 15:47 ` Fu, Zhonghui
2014-07-04 2:40 ` Jaehoon Chung
1 sibling, 1 reply; 17+ messages in thread
From: Fu, Zhonghui @ 2014-07-03 15:47 UTC (permalink / raw)
To: chris, ulf.hansson, jh80.chung, tgih.jun, aaron.lu, linux-mmc,
linux-kernel, jackey.shen, gregkh
Hi, all
The statement "mmc->caps2 |= MMC_CAP2_SDIO_IRQ_NOTHREAD;" is added in "sdhci_add_host" function in host/sdhci.c file. In some cases, this will make "host->sdio_irq_thread" a NULL pointer in "mmc_sdio_resume" functon of core/sdio.c file and lead to resume failure. Could you please give me some advice how to fix this bug?
Thanks,
Zhonghui
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: One bug of SDHCI driver
2014-07-03 15:47 ` One bug of SDHCI driver Fu, Zhonghui
@ 2014-07-04 2:40 ` Jaehoon Chung
2014-07-06 15:19 ` Fu, Zhonghui
0 siblings, 1 reply; 17+ messages in thread
From: Jaehoon Chung @ 2014-07-04 2:40 UTC (permalink / raw)
To: Fu, Zhonghui, chris, ulf.hansson, tgih.jun, aaron.lu, linux-mmc,
linux-kernel, jackey.shen, gregkh
Hi,
just use the MMC_CAP2_SDIO_IRQ_NOTHREAD?
if (!err && host->sdio_irq && !(host->quirks & MMC_CAP2_SDIO_IRQ_NOTHREAD))
wake_up_process(host->sdio_irq_thread);
I didn't test this..but i believe that it will be fixed.
Best Regards,
Jaehoon Chung
On 07/04/2014 12:47 AM, Fu, Zhonghui wrote:
>
> Hi, all
>
> The statement "mmc->caps2 |= MMC_CAP2_SDIO_IRQ_NOTHREAD;" is added in "sdhci_add_host" function in host/sdhci.c file. In some cases, this will make "host->sdio_irq_thread" a NULL pointer in "mmc_sdio_resume" functon of core/sdio.c file and lead to resume failure. Could you please give me some advice how to fix this bug?
>
>
>
> Thanks,
> Zhonghui
>
>
>
>
>
>
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: One bug of SDHCI driver
2014-07-04 2:40 ` Jaehoon Chung
@ 2014-07-06 15:19 ` Fu, Zhonghui
2014-07-08 16:03 ` Fu, Zhonghui
0 siblings, 1 reply; 17+ messages in thread
From: Fu, Zhonghui @ 2014-07-06 15:19 UTC (permalink / raw)
To: Jaehoon Chung, chris, ulf.hansson, tgih.jun, aaron.lu, linux-mmc,
linux-kernel, jackey.shen, gregkh
Yes, "mmc->caps2 |= MMC_CAP2_SDIO_IRQ_NOTHREAD;" of "sdhci_add_host" function in host/sdhci.c file make oops.
"sdio_card_irq_get" function in core/sdio_irq.c file:
if (!(host->caps2 & MMC_CAP2_SDIO_IRQ_NOTHREAD)) { /* the condition is false */
atomic_set(&host->sdio_irq_thread_abort, 0);
host->sdio_irq_thread =
kthread_run(sdio_irq_thread, host,
"ksdioirqd/%s", mmc_hostname(host));
This will make "host->sdio_irq_thread" a NULL pointer in "mmc_sdio_resume" functon of core/sdio.c file.
Thanks,
Zhonghui
On 2014/7/4 10:40, Jaehoon Chung wrote:
> Hi,
>
> just use the MMC_CAP2_SDIO_IRQ_NOTHREAD?
>
> if (!err && host->sdio_irq && !(host->quirks & MMC_CAP2_SDIO_IRQ_NOTHREAD))
> wake_up_process(host->sdio_irq_thread);
>
> I didn't test this..but i believe that it will be fixed.
>
> Best Regards,
> Jaehoon Chung
>
> On 07/04/2014 12:47 AM, Fu, Zhonghui wrote:
>> Hi, all
>>
>> The statement "mmc->caps2 |= MMC_CAP2_SDIO_IRQ_NOTHREAD;" is added in "sdhci_add_host" function in host/sdhci.c file. In some cases, this will make "host->sdio_irq_thread" a NULL pointer in "mmc_sdio_resume" functon of core/sdio.c file and lead to resume failure. Could you please give me some advice how to fix this bug?
>>
>>
>>
>> Thanks,
>> Zhonghui
>>
>>
>>
>>
>>
>>
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: One bug of SDHCI driver
2014-07-06 15:19 ` Fu, Zhonghui
@ 2014-07-08 16:03 ` Fu, Zhonghui
2014-07-14 13:26 ` Chris Ball
0 siblings, 1 reply; 17+ messages in thread
From: Fu, Zhonghui @ 2014-07-08 16:03 UTC (permalink / raw)
To: Jaehoon Chung, chris, ulf.hansson, tgih.jun, aaron.lu, linux-mmc,
linux-kernel, jackey.shen, gregkh
Hi,
Why add "mmc->caps2 |= MMC_CAP2_SDIO_IRQ_NOTHREAD;" ? How to fix this bug?
Could you please give out some idea about this bug?
Thanks,
Zhonghui
On 2014/7/6 23:19, Fu, Zhonghui wrote:
> Yes, "mmc->caps2 |= MMC_CAP2_SDIO_IRQ_NOTHREAD;" of "sdhci_add_host" function in host/sdhci.c file make oops.
>
> "sdio_card_irq_get" function in core/sdio_irq.c file:
> if (!(host->caps2 & MMC_CAP2_SDIO_IRQ_NOTHREAD)) { /* the condition is false */
> atomic_set(&host->sdio_irq_thread_abort, 0);
> host->sdio_irq_thread =
> kthread_run(sdio_irq_thread, host,
> "ksdioirqd/%s", mmc_hostname(host));
>
>
> This will make "host->sdio_irq_thread" a NULL pointer in "mmc_sdio_resume" functon of core/sdio.c file.
>
>
>
> Thanks,
> Zhonghui
>
>
>
> On 2014/7/4 10:40, Jaehoon Chung wrote:
>> Hi,
>>
>> just use the MMC_CAP2_SDIO_IRQ_NOTHREAD?
>>
>> if (!err && host->sdio_irq && !(host->quirks & MMC_CAP2_SDIO_IRQ_NOTHREAD))
>> wake_up_process(host->sdio_irq_thread);
>>
>> I didn't test this..but i believe that it will be fixed.
>>
>> Best Regards,
>> Jaehoon Chung
>>
>> On 07/04/2014 12:47 AM, Fu, Zhonghui wrote:
>>> Hi, all
>>>
>>> The statement "mmc->caps2 |= MMC_CAP2_SDIO_IRQ_NOTHREAD;" is added in "sdhci_add_host" function in host/sdhci.c file. In some cases, this will make "host->sdio_irq_thread" a NULL pointer in "mmc_sdio_resume" functon of core/sdio.c file and lead to resume failure. Could you please give me some advice how to fix this bug?
>>>
>>>
>>>
>>> Thanks,
>>> Zhonghui
>>>
>>>
>>>
>>>
>>>
>>>
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: One bug of SDHCI driver
2014-07-08 16:03 ` Fu, Zhonghui
@ 2014-07-14 13:26 ` Chris Ball
0 siblings, 0 replies; 17+ messages in thread
From: Chris Ball @ 2014-07-14 13:26 UTC (permalink / raw)
To: Fu, Zhonghui
Cc: Jaehoon Chung, ulf.hansson, tgih.jun, aaron.lu, linux-mmc,
linux-kernel, jackey.shen, gregkh
Hi Zhonghui,
On Tue, Jul 08 2014, Fu, Zhonghui wrote:
> Why add "mmc->caps2 |= MMC_CAP2_SDIO_IRQ_NOTHREAD;" ? How to fix this bug?
>
> Could you please give out some idea about this bug?
Jaehoon already gave you a patch to fix this bug. Here it is again in
proper patch form. Please can you test it and let us know whether it
fixes the crash? Thanks.
From: Chris Ball <chris@printf.net>
Subject: [PATCH] mmc: core: sdio: Fix unconditional wake_up_process() on sdio thread
781e989cf59 ("mmc: sdhci: convert to new SDIO IRQ handling") and
bf3b5ec66bd ("mmc: sdio_irq: rework sdio irq handling") disabled
the use of our own custom threaded IRQ handler, but left in an
unconditional wake_up_process() on that handler at resume-time.
Reported-by: Fu, Zhonghui <zhonghui.fu@linux.intel.com>
[Patch suggested by Jaehoon Chung]
Signed-off-by: Chris Ball <chris@printf.net>
---
drivers/mmc/core/sdio.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
index e636d9e..2a128e2 100644
--- a/drivers/mmc/core/sdio.c
+++ b/drivers/mmc/core/sdio.c
@@ -992,7 +992,8 @@ static int mmc_sdio_resume(struct mmc_host *host)
}
}
- if (!err && host->sdio_irqs)
+ if (!err && host->sdio_irqs &&
+ !(host->quirks & MMC_CAP2_SDIO_IRQ_NOTHREAD))
wake_up_process(host->sdio_irq_thread);
mmc_release_host(host);
--
Chris Ball <http://printf.net/>
^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: One bug of SDHCI driver
@ 2014-07-14 13:26 ` Chris Ball
0 siblings, 0 replies; 17+ messages in thread
From: Chris Ball @ 2014-07-14 13:26 UTC (permalink / raw)
To: Fu, Zhonghui
Cc: Jaehoon Chung, ulf.hansson, tgih.jun, aaron.lu, linux-mmc,
linux-kernel, jackey.shen, gregkh
Hi Zhonghui,
On Tue, Jul 08 2014, Fu, Zhonghui wrote:
> Why add "mmc->caps2 |= MMC_CAP2_SDIO_IRQ_NOTHREAD;" ? How to fix this bug?
>
> Could you please give out some idea about this bug?
Jaehoon already gave you a patch to fix this bug. Here it is again in
proper patch form. Please can you test it and let us know whether it
fixes the crash? Thanks.
From: Chris Ball <chris@printf.net>
Subject: [PATCH] mmc: core: sdio: Fix unconditional wake_up_process() on sdio thread
781e989cf59 ("mmc: sdhci: convert to new SDIO IRQ handling") and
bf3b5ec66bd ("mmc: sdio_irq: rework sdio irq handling") disabled
the use of our own custom threaded IRQ handler, but left in an
unconditional wake_up_process() on that handler at resume-time.
Reported-by: Fu, Zhonghui <zhonghui.fu@linux.intel.com>
[Patch suggested by Jaehoon Chung]
Signed-off-by: Chris Ball <chris@printf.net>
---
drivers/mmc/core/sdio.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
index e636d9e..2a128e2 100644
--- a/drivers/mmc/core/sdio.c
+++ b/drivers/mmc/core/sdio.c
@@ -992,7 +992,8 @@ static int mmc_sdio_resume(struct mmc_host *host)
}
}
- if (!err && host->sdio_irqs)
+ if (!err && host->sdio_irqs &&
+ !(host->quirks & MMC_CAP2_SDIO_IRQ_NOTHREAD))
wake_up_process(host->sdio_irq_thread);
mmc_release_host(host);
--
Chris Ball <http://printf.net/>
^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: One bug of SDHCI driver
2014-07-14 13:26 ` Chris Ball
(?)
@ 2014-07-15 2:54 ` Fu, Zhonghui
2014-07-15 4:14 ` Jaehoon Chung
-1 siblings, 1 reply; 17+ messages in thread
From: Fu, Zhonghui @ 2014-07-15 2:54 UTC (permalink / raw)
To: Chris Ball
Cc: Jaehoon Chung, ulf.hansson, tgih.jun, aaron.lu, linux-mmc,
linux-kernel, jackey.shen, gregkh
Hi,
The data type of "host" is "struct mmc_host", and there is not "quirks" member in this structure.
Thanks,
Zhonghui
On 2014/7/14 21:26, Chris Ball wrote:
> Hi Zhonghui,
>
> On Tue, Jul 08 2014, Fu, Zhonghui wrote:
>> Why add "mmc->caps2 |= MMC_CAP2_SDIO_IRQ_NOTHREAD;" ? How to fix this bug?
>>
>> Could you please give out some idea about this bug?
> Jaehoon already gave you a patch to fix this bug. Here it is again in
> proper patch form. Please can you test it and let us know whether it
> fixes the crash? Thanks.
>
>
> From: Chris Ball <chris@printf.net>
> Subject: [PATCH] mmc: core: sdio: Fix unconditional wake_up_process() on sdio thread
>
> 781e989cf59 ("mmc: sdhci: convert to new SDIO IRQ handling") and
> bf3b5ec66bd ("mmc: sdio_irq: rework sdio irq handling") disabled
> the use of our own custom threaded IRQ handler, but left in an
> unconditional wake_up_process() on that handler at resume-time.
>
> Reported-by: Fu, Zhonghui <zhonghui.fu@linux.intel.com>
> [Patch suggested by Jaehoon Chung]
> Signed-off-by: Chris Ball <chris@printf.net>
> ---
> drivers/mmc/core/sdio.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
> index e636d9e..2a128e2 100644
> --- a/drivers/mmc/core/sdio.c
> +++ b/drivers/mmc/core/sdio.c
> @@ -992,7 +992,8 @@ static int mmc_sdio_resume(struct mmc_host *host)
> }
> }
>
> - if (!err && host->sdio_irqs)
> + if (!err && host->sdio_irqs &&
> + !(host->quirks & MMC_CAP2_SDIO_IRQ_NOTHREAD))
> wake_up_process(host->sdio_irq_thread);
> mmc_release_host(host);
>
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: One bug of SDHCI driver
2014-07-15 2:54 ` Fu, Zhonghui
@ 2014-07-15 4:14 ` Jaehoon Chung
2014-07-15 4:40 ` Jaehoon Chung
0 siblings, 1 reply; 17+ messages in thread
From: Jaehoon Chung @ 2014-07-15 4:14 UTC (permalink / raw)
To: Fu, Zhonghui, Chris Ball
Cc: Jaehoon Chung, ulf.hansson, tgih.jun, aaron.lu, linux-mmc,
linux-kernel, jackey.shen, gregkh
On 07/15/2014 11:54 AM, Fu, Zhonghui wrote:
>
> Hi,
>
> The data type of "host" is "struct mmc_host", and there is not "quirks" member in this structure.
Sorry for wrong typo.
You use the "host->caps2" instead of "host->quirks".
Best Regards,
Jaehoon Chung
>
>
> Thanks,
> Zhonghui
>
> On 2014/7/14 21:26, Chris Ball wrote:
>> Hi Zhonghui,
>>
>> On Tue, Jul 08 2014, Fu, Zhonghui wrote:
>>> Why add "mmc->caps2 |= MMC_CAP2_SDIO_IRQ_NOTHREAD;" ? How to fix this bug?
>>>
>>> Could you please give out some idea about this bug?
>> Jaehoon already gave you a patch to fix this bug. Here it is again in
>> proper patch form. Please can you test it and let us know whether it
>> fixes the crash? Thanks.
>>
>>
>> From: Chris Ball <chris@printf.net>
>> Subject: [PATCH] mmc: core: sdio: Fix unconditional wake_up_process() on sdio thread
>>
>> 781e989cf59 ("mmc: sdhci: convert to new SDIO IRQ handling") and
>> bf3b5ec66bd ("mmc: sdio_irq: rework sdio irq handling") disabled
>> the use of our own custom threaded IRQ handler, but left in an
>> unconditional wake_up_process() on that handler at resume-time.
>>
>> Reported-by: Fu, Zhonghui <zhonghui.fu@linux.intel.com>
>> [Patch suggested by Jaehoon Chung]
>> Signed-off-by: Chris Ball <chris@printf.net>
>> ---
>> drivers/mmc/core/sdio.c | 3 ++-
>> 1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
>> index e636d9e..2a128e2 100644
>> --- a/drivers/mmc/core/sdio.c
>> +++ b/drivers/mmc/core/sdio.c
>> @@ -992,7 +992,8 @@ static int mmc_sdio_resume(struct mmc_host *host)
>> }
>> }
>>
>> - if (!err && host->sdio_irqs)
>> + if (!err && host->sdio_irqs &&
>> + !(host->quirks & MMC_CAP2_SDIO_IRQ_NOTHREAD))
>> wake_up_process(host->sdio_irq_thread);
>> mmc_release_host(host);
>>
>
> --
> 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
>
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: One bug of SDHCI driver
2014-07-15 4:14 ` Jaehoon Chung
@ 2014-07-15 4:40 ` Jaehoon Chung
2014-07-20 14:51 ` Fu, Zhonghui
0 siblings, 1 reply; 17+ messages in thread
From: Jaehoon Chung @ 2014-07-15 4:40 UTC (permalink / raw)
To: Jaehoon Chung, Fu, Zhonghui, Chris Ball
Cc: ulf.hansson, tgih.jun, aaron.lu, linux-mmc, linux-kernel,
jackey.shen, gregkh
From: Chris Ball <chris@printf.net>
Subject: [PATCH] mmc: core: sdio: Fix unconditional wake_up_process() on sdio thread
781e989cf59 ("mmc: sdhci: convert to new SDIO IRQ handling") and
bf3b5ec66bd ("mmc: sdio_irq: rework sdio irq handling") disabled
the use of our own custom threaded IRQ handler, but left in an
unconditional wake_up_process() on that handler at resume-time.
Reported-by: Fu, Zhonghui <zhonghui.fu@linux.intel.com>
[Patch suggested by Jaehoon Chung]
Signed-off-by: Chris Ball <chris@printf.net>
---
drivers/mmc/core/sdio.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
index e636d9e..11cc4e0 100644
--- a/drivers/mmc/core/sdio.c
+++ b/drivers/mmc/core/sdio.c
@@ -992,7 +992,8 @@ static int mmc_sdio_resume(struct mmc_host *host)
}
}
- if (!err && host->sdio_irqs)
+ if (!err && host->sdio_irqs &&
+ !(host->caps2 & MMC_CAP2_SDIO_IRQ_NOTHREAD))
wake_up_process(host->sdio_irq_thread);
mmc_release_host(host);
--
1.7.9.5
On 07/15/2014 01:14 PM, Jaehoon Chung wrote:
> On 07/15/2014 11:54 AM, Fu, Zhonghui wrote:
>>
>> Hi,
>>
>> The data type of "host" is "struct mmc_host", and there is not "quirks" member in this structure.
> Sorry for wrong typo.
> You use the "host->caps2" instead of "host->quirks".
>
>
> Best Regards,
> Jaehoon Chung
>>
>>
>> Thanks,
>> Zhonghui
>>
>> On 2014/7/14 21:26, Chris Ball wrote:
>>> Hi Zhonghui,
>>>
>>> On Tue, Jul 08 2014, Fu, Zhonghui wrote:
>>>> Why add "mmc->caps2 |= MMC_CAP2_SDIO_IRQ_NOTHREAD;" ? How to fix this bug?
>>>>
>>>> Could you please give out some idea about this bug?
>>> Jaehoon already gave you a patch to fix this bug. Here it is again in
>>> proper patch form. Please can you test it and let us know whether it
>>> fixes the crash? Thanks.
>>>
>>>
>>> From: Chris Ball <chris@printf.net>
>>> Subject: [PATCH] mmc: core: sdio: Fix unconditional wake_up_process() on sdio thread
>>>
>>> 781e989cf59 ("mmc: sdhci: convert to new SDIO IRQ handling") and
>>> bf3b5ec66bd ("mmc: sdio_irq: rework sdio irq handling") disabled
>>> the use of our own custom threaded IRQ handler, but left in an
>>> unconditional wake_up_process() on that handler at resume-time.
>>>
>>> Reported-by: Fu, Zhonghui <zhonghui.fu@linux.intel.com>
>>> [Patch suggested by Jaehoon Chung]
>>> Signed-off-by: Chris Ball <chris@printf.net>
>>> ---
>>> drivers/mmc/core/sdio.c | 3 ++-
>>> 1 file changed, 2 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
>>> index e636d9e..2a128e2 100644
>>> --- a/drivers/mmc/core/sdio.c
>>> +++ b/drivers/mmc/core/sdio.c
>>> @@ -992,7 +992,8 @@ static int mmc_sdio_resume(struct mmc_host *host)
>>> }
>>> }
>>>
>>> - if (!err && host->sdio_irqs)
>>> + if (!err && host->sdio_irqs &&
>>> + !(host->quirks & MMC_CAP2_SDIO_IRQ_NOTHREAD))
>>> wake_up_process(host->sdio_irq_thread);
>>> mmc_release_host(host);
>>>
>>
>> --
>> 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
>>
>
> --
> 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
>
^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: One bug of SDHCI driver
2014-07-15 4:40 ` Jaehoon Chung
@ 2014-07-20 14:51 ` Fu, Zhonghui
2014-07-24 15:27 ` Fu, Zhonghui
0 siblings, 1 reply; 17+ messages in thread
From: Fu, Zhonghui @ 2014-07-20 14:51 UTC (permalink / raw)
To: Jaehoon Chung, Chris Ball
Cc: ulf.hansson, tgih.jun, aaron.lu, linux-mmc, linux-kernel,
jackey.shen, gregkh
Hi,
Chris' patch is not enough to fix this bug. I made a patch as follows and verified it can work. Could you please give out some comments about this patch?
Thanks,
Zhonghui
>From 72d6f5b56fa04290fd3a055a3333de1d89e7c8d4 Mon Sep 17 00:00:00 2001
From: Fu Zhonghui <zhonghui.fu@linux.intel.com>
Date: Sun, 20 Jul 2014 22:29:53 +0800
Subject: [PATCH] mmc: core: sdio: Fix unconditional wake_up_process() on sdio thread
781e989cf59 ("mmc: sdhci: convert to new SDIO IRQ handling") and
bf3b5ec66bd ("mmc: sdio_irq: rework sdio irq handling") disabled
the use of our own custom threaded IRQ handler, but left in an
unconditional wake_up_process() on that handler at resume-time.
Signed-off-by: Fu Zhonghui <zhonghui.fu@linux.intel.com>
---
drivers/mmc/core/sdio.c | 14 ++++++++++++--
1 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
index e636d9e..8369e56 100644
--- a/drivers/mmc/core/sdio.c
+++ b/drivers/mmc/core/sdio.c
@@ -992,8 +992,18 @@ static int mmc_sdio_resume(struct mmc_host *host)
}
}
- if (!err && host->sdio_irqs)
- wake_up_process(host->sdio_irq_thread);
+ if (!err && host->sdio_irqs) {
+ if (!(host->caps2 & MMC_CAP2_SDIO_IRQ_NOTHREAD)) {
+ wake_up_process(host->sdio_irq_thread);
+ } else {
+ mmc_release_host(host);
+ mmc_host_clk_hold(host);
+ host->ops->enable_sdio_irq(host, 1);
+ mmc_host_clk_release(host);
+ mmc_claim_host(host);
+ }
+ }
+
mmc_release_host(host);
host->pm_flags &= ~MMC_PM_KEEP_POWER;
-- 1.7.1
On 2014/7/15 12:40, Jaehoon Chung wrote:
> From: Chris Ball <chris@printf.net>
> Subject: [PATCH] mmc: core: sdio: Fix unconditional wake_up_process() on sdio thread
>
> 781e989cf59 ("mmc: sdhci: convert to new SDIO IRQ handling") and
> bf3b5ec66bd ("mmc: sdio_irq: rework sdio irq handling") disabled
> the use of our own custom threaded IRQ handler, but left in an
> unconditional wake_up_process() on that handler at resume-time.
>
> Reported-by: Fu, Zhonghui <zhonghui.fu@linux.intel.com>
> [Patch suggested by Jaehoon Chung]
> Signed-off-by: Chris Ball <chris@printf.net>
> ---
> drivers/mmc/core/sdio.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
> index e636d9e..11cc4e0 100644
> --- a/drivers/mmc/core/sdio.c
> +++ b/drivers/mmc/core/sdio.c
> @@ -992,7 +992,8 @@ static int mmc_sdio_resume(struct mmc_host *host)
> }
> }
>
> - if (!err && host->sdio_irqs)
> + if (!err && host->sdio_irqs &&
> + !(host->caps2 & MMC_CAP2_SDIO_IRQ_NOTHREAD))
> wake_up_process(host->sdio_irq_thread);
> mmc_release_host(host);
>
^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: One bug of SDHCI driver
2014-07-20 14:51 ` Fu, Zhonghui
@ 2014-07-24 15:27 ` Fu, Zhonghui
[not found] ` <53D85CBF.3070409@linux.intel.com>
0 siblings, 1 reply; 17+ messages in thread
From: Fu, Zhonghui @ 2014-07-24 15:27 UTC (permalink / raw)
To: Jaehoon Chung, Chris Ball
Cc: ulf.hansson, tgih.jun, aaron.lu, linux-mmc, linux-kernel,
jackey.shen, gregkh
Hi,
Any comments for this new patch?
Thanks,
Zhonghui
On 2014/7/20 22:51, Fu, Zhonghui wrote:
> Hi,
>
> Chris' patch is not enough to fix this bug. I made a patch as follows and verified it can work. Could you please give out some comments about this patch?
>
>
> Thanks,
> Zhonghui
>
> From 72d6f5b56fa04290fd3a055a3333de1d89e7c8d4 Mon Sep 17 00:00:00 2001
> From: Fu Zhonghui <zhonghui.fu@linux.intel.com>
> Date: Sun, 20 Jul 2014 22:29:53 +0800
> Subject: [PATCH] mmc: core: sdio: Fix unconditional wake_up_process() on sdio thread
>
> 781e989cf59 ("mmc: sdhci: convert to new SDIO IRQ handling") and
> bf3b5ec66bd ("mmc: sdio_irq: rework sdio irq handling") disabled
> the use of our own custom threaded IRQ handler, but left in an
> unconditional wake_up_process() on that handler at resume-time.
>
> Signed-off-by: Fu Zhonghui <zhonghui.fu@linux.intel.com>
> ---
> drivers/mmc/core/sdio.c | 14 ++++++++++++--
> 1 files changed, 12 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
> index e636d9e..8369e56 100644
> --- a/drivers/mmc/core/sdio.c
> +++ b/drivers/mmc/core/sdio.c
> @@ -992,8 +992,18 @@ static int mmc_sdio_resume(struct mmc_host *host)
> }
> }
>
> - if (!err && host->sdio_irqs)
> - wake_up_process(host->sdio_irq_thread);
> + if (!err && host->sdio_irqs) {
> + if (!(host->caps2 & MMC_CAP2_SDIO_IRQ_NOTHREAD)) {
> + wake_up_process(host->sdio_irq_thread);
> + } else {
> + mmc_release_host(host);
> + mmc_host_clk_hold(host);
> + host->ops->enable_sdio_irq(host, 1);
> + mmc_host_clk_release(host);
> + mmc_claim_host(host);
> + }
> + }
> +
> mmc_release_host(host);
>
> host->pm_flags &= ~MMC_PM_KEEP_POWER;
> -- 1.7.1
>
>
>
> On 2014/7/15 12:40, Jaehoon Chung wrote:
>> From: Chris Ball <chris@printf.net>
>> Subject: [PATCH] mmc: core: sdio: Fix unconditional wake_up_process() on sdio thread
>>
>> 781e989cf59 ("mmc: sdhci: convert to new SDIO IRQ handling") and
>> bf3b5ec66bd ("mmc: sdio_irq: rework sdio irq handling") disabled
>> the use of our own custom threaded IRQ handler, but left in an
>> unconditional wake_up_process() on that handler at resume-time.
>>
>> Reported-by: Fu, Zhonghui <zhonghui.fu@linux.intel.com>
>> [Patch suggested by Jaehoon Chung]
>> Signed-off-by: Chris Ball <chris@printf.net>
>> ---
>> drivers/mmc/core/sdio.c | 3 ++-
>> 1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
>> index e636d9e..11cc4e0 100644
>> --- a/drivers/mmc/core/sdio.c
>> +++ b/drivers/mmc/core/sdio.c
>> @@ -992,7 +992,8 @@ static int mmc_sdio_resume(struct mmc_host *host)
>> }
>> }
>>
>> - if (!err && host->sdio_irqs)
>> + if (!err && host->sdio_irqs &&
>> + !(host->caps2 & MMC_CAP2_SDIO_IRQ_NOTHREAD))
>> wake_up_process(host->sdio_irq_thread);
>> mmc_release_host(host);
>>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: One bug of SDHCI driver
[not found] ` <53D85CBF.3070409@linux.intel.com>
@ 2014-07-30 3:40 ` Jaehoon Chung
2014-08-05 4:56 ` Fu, Zhonghui
0 siblings, 1 reply; 17+ messages in thread
From: Jaehoon Chung @ 2014-07-30 3:40 UTC (permalink / raw)
To: Fu, Zhonghui, Chris Ball
Cc: ulf.hansson, tgih.jun, aaron.lu, linux-mmc, linux-kernel,
jackey.shen, gregkh
Hi, Zhonghui.
On 07/30/2014 11:47 AM, Fu, Zhonghui wrote:
>
> Hi,
>
> In the resume function, SDIO irq must be enabled, or the interrupts from devices on SDIO bus can't be acknowledged. I also uploaded this new patch to https://bugzilla.kernel.org/show_bug.cgi?id=80151.
> Could you please help to review it?
>
>
>
>
> Thanks,
> Zhonghui
>
> On 2014/7/24 23:27, Fu, Zhonghui wrote:
>> Hi,
>>
>> Any comments for this new patch?
>>
>> Thanks,
>> Zhonghui
>> On 2014/7/20 22:51, Fu, Zhonghui wrote:
>>> Hi,
>>>
>>> Chris' patch is not enough to fix this bug. I made a patch as follows and verified it can work. Could you please give out some comments about this patch?
>>>
>>>
>>> Thanks,
>>> Zhonghui
>>>
>>> >From 72d6f5b56fa04290fd3a055a3333de1d89e7c8d4 Mon Sep 17 00:00:00 2001
>>> From: Fu Zhonghui <zhonghui.fu@linux.intel.com>
>>> Date: Sun, 20 Jul 2014 22:29:53 +0800
>>> Subject: [PATCH] mmc: core: sdio: Fix unconditional wake_up_process() on sdio thread
>>>
>>> 781e989cf59 ("mmc: sdhci: convert to new SDIO IRQ handling") and
>>> bf3b5ec66bd ("mmc: sdio_irq: rework sdio irq handling") disabled
>>> the use of our own custom threaded IRQ handler, but left in an
>>> unconditional wake_up_process() on that handler at resume-time.
>>>
>>> Signed-off-by: Fu Zhonghui <zhonghui.fu@linux.intel.com>
>>> ---
>>> drivers/mmc/core/sdio.c | 14 ++++++++++++--
>>> 1 files changed, 12 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
>>> index e636d9e..8369e56 100644
>>> --- a/drivers/mmc/core/sdio.c
>>> +++ b/drivers/mmc/core/sdio.c
>>> @@ -992,8 +992,18 @@ static int mmc_sdio_resume(struct mmc_host *host)
>>> }
>>> }
>>>
>>> - if (!err && host->sdio_irqs)
>>> - wake_up_process(host->sdio_irq_thread);
>>> + if (!err && host->sdio_irqs) {
>>> + if (!(host->caps2 & MMC_CAP2_SDIO_IRQ_NOTHREAD)) {
>>> + wake_up_process(host->sdio_irq_thread);
>>> + } else {
>>> + mmc_release_host(host);
>>> + mmc_host_clk_hold(host);
>>> + host->ops->enable_sdio_irq(host, 1);
>>> + mmc_host_clk_release(host);
>>> + mmc_claim_host(host);
>>> + }
>>> + }
If you enable the sdio_irq, I think it needs to check whether MMC_CAP_SDIO_IRQ is set or not.
Best Regards,
Jaehoon Chung
>>> +
>>> mmc_release_host(host);
>>>
>>> host->pm_flags &= ~MMC_PM_KEEP_POWER;
>>> -- 1.7.1
>>>
>>>
>>>
>>> On 2014/7/15 12:40, Jaehoon Chung wrote:
>>>> From: Chris Ball <chris@printf.net>
>>>> Subject: [PATCH] mmc: core: sdio: Fix unconditional wake_up_process() on sdio thread
>>>>
>>>> 781e989cf59 ("mmc: sdhci: convert to new SDIO IRQ handling") and
>>>> bf3b5ec66bd ("mmc: sdio_irq: rework sdio irq handling") disabled
>>>> the use of our own custom threaded IRQ handler, but left in an
>>>> unconditional wake_up_process() on that handler at resume-time.
>>>>
>>>> Reported-by: Fu, Zhonghui <zhonghui.fu@linux.intel.com>
>>>> [Patch suggested by Jaehoon Chung]
>>>> Signed-off-by: Chris Ball <chris@printf.net>
>>>> ---
>>>> drivers/mmc/core/sdio.c | 3 ++-
>>>> 1 file changed, 2 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
>>>> index e636d9e..11cc4e0 100644
>>>> --- a/drivers/mmc/core/sdio.c
>>>> +++ b/drivers/mmc/core/sdio.c
>>>> @@ -992,7 +992,8 @@ static int mmc_sdio_resume(struct mmc_host *host)
>>>> }
>>>> }
>>>>
>>>> - if (!err && host->sdio_irqs)
>>>> + if (!err && host->sdio_irqs &&
>>>> + !(host->caps2 & MMC_CAP2_SDIO_IRQ_NOTHREAD))
>>>> wake_up_process(host->sdio_irq_thread);
>>>> mmc_release_host(host);
>>>>
>>> --
>>> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>>> the body of a message to majordomo@vger.kernel.org
>>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>> Please read the FAQ at http://www.tux.org/lkml/
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>> Please read the FAQ at http://www.tux.org/lkml/
>
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: One bug of SDHCI driver
2014-07-30 3:40 ` Jaehoon Chung
@ 2014-08-05 4:56 ` Fu, Zhonghui
2014-08-07 6:58 ` Fu, Zhonghui
0 siblings, 1 reply; 17+ messages in thread
From: Fu, Zhonghui @ 2014-08-05 4:56 UTC (permalink / raw)
To: Jaehoon Chung, Chris Ball
Cc: ulf.hansson, tgih.jun, aaron.lu, linux-mmc, linux-kernel,
jackey.shen, gregkh
Hi, Jaehoon
According to your comments, I created a new patch for this issue as follows:
Thanks,
Zhonghui
>From 6cee984e1d76ba0a3320430f8cf4318ab65fcf06 Mon Sep 17 00:00:00 2001
From: Fu Zhonghui <zhonghui.fu@linux.intel.com>
Date: Tue, 5 Aug 2014 12:44:38 +0800
Subject: [PATCH] mmc: core: sdio: Fix unconditional wake_up_process() on sdio thread
781e989cf59 ("mmc: sdhci: convert to new SDIO IRQ handling") and
bf3b5ec66bd ("mmc: sdio_irq: rework sdio irq handling") disabled
the use of our own custom threaded IRQ handler, but left in an
unconditional wake_up_process() on that handler at resume-time.
Link: https://bugzilla.kernel.org/show_bug.cgi?id=80151
In addition, the check for MMC_CAP_SDIO_IRQ capability is added
before enable sdio IRQ.
Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
Signed-off-by: Chris Ball <chris@printf.net>
Signed-off-by: Fu Zhonghui <zhonghui.fu@linux.intel.com>
---
drivers/mmc/core/sdio.c | 14 ++++++++++++--
drivers/mmc/core/sdio_irq.c | 4 ++--
2 files changed, 14 insertions(+), 4 deletions(-)
diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
index e636d9e..e04a540 100644
--- a/drivers/mmc/core/sdio.c
+++ b/drivers/mmc/core/sdio.c
@@ -992,8 +992,18 @@ static int mmc_sdio_resume(struct mmc_host *host)
}
}
- if (!err && host->sdio_irqs)
- wake_up_process(host->sdio_irq_thread);
+ if (!err && host->sdio_irqs) {
+ if (!(host->caps2 & MMC_CAP2_SDIO_IRQ_NOTHREAD)) {
+ wake_up_process(host->sdio_irq_thread);
+ } else if (host->caps & MMC_CAP_SDIO_IRQ) {
+ mmc_release_host(host);
+ mmc_host_clk_hold(host);
+ host->ops->enable_sdio_irq(host, 1);
+ mmc_host_clk_release(host);
+ mmc_claim_host(host);
+ }
+ }
+
mmc_release_host(host);
host->pm_flags &= ~MMC_PM_KEEP_POWER;
diff --git a/drivers/mmc/core/sdio_irq.c b/drivers/mmc/core/sdio_irq.c
index 5cc13c8..696eca4 100644
--- a/drivers/mmc/core/sdio_irq.c
+++ b/drivers/mmc/core/sdio_irq.c
@@ -208,7 +208,7 @@ static int sdio_card_irq_get(struct mmc_card *card)
host->sdio_irqs--;
return err;
}
- } else {
+ } else if (host->caps & MMC_CAP_SDIO_IRQ) {
mmc_host_clk_hold(host);
host->ops->enable_sdio_irq(host, 1);
mmc_host_clk_release(host);
@@ -229,7 +229,7 @@ static int sdio_card_irq_put(struct mmc_card *card)
if (!(host->caps2 & MMC_CAP2_SDIO_IRQ_NOTHREAD)) {
atomic_set(&host->sdio_irq_thread_abort, 1);
kthread_stop(host->sdio_irq_thread);
- } else {
+ } else if (host->caps & MMC_CAP_SDIO_IRQ) {
mmc_host_clk_hold(host);
host->ops->enable_sdio_irq(host, 0);
mmc_host_clk_release(host);
-- 1.7.1
On 2014/7/30 11:40, Jaehoon Chung wrote:
> Hi, Zhonghui.
>
> On 07/30/2014 11:47 AM, Fu, Zhonghui wrote:
>> Hi,
>>
>> In the resume function, SDIO irq must be enabled, or the interrupts from devices on SDIO bus can't be acknowledged. I also uploaded this new patch to https://bugzilla.kernel.org/show_bug.cgi?id=80151.
>> Could you please help to review it?
>>
>>
>>
>>
>> Thanks,
>> Zhonghui
>>
>> On 2014/7/24 23:27, Fu, Zhonghui wrote:
>>> Hi,
>>>
>>> Any comments for this new patch?
>>>
>>> Thanks,
>>> Zhonghui
>>> On 2014/7/20 22:51, Fu, Zhonghui wrote:
>>>> Hi,
>>>>
>>>> Chris' patch is not enough to fix this bug. I made a patch as follows and verified it can work. Could you please give out some comments about this patch?
>>>>
>>>>
>>>> Thanks,
>>>> Zhonghui
>>>>
>>>> >From 72d6f5b56fa04290fd3a055a3333de1d89e7c8d4 Mon Sep 17 00:00:00 2001
>>>> From: Fu Zhonghui <zhonghui.fu@linux.intel.com>
>>>> Date: Sun, 20 Jul 2014 22:29:53 +0800
>>>> Subject: [PATCH] mmc: core: sdio: Fix unconditional wake_up_process() on sdio thread
>>>>
>>>> 781e989cf59 ("mmc: sdhci: convert to new SDIO IRQ handling") and
>>>> bf3b5ec66bd ("mmc: sdio_irq: rework sdio irq handling") disabled
>>>> the use of our own custom threaded IRQ handler, but left in an
>>>> unconditional wake_up_process() on that handler at resume-time.
>>>>
>>>> Signed-off-by: Fu Zhonghui <zhonghui.fu@linux.intel.com>
>>>> ---
>>>> drivers/mmc/core/sdio.c | 14 ++++++++++++--
>>>> 1 files changed, 12 insertions(+), 2 deletions(-)
>>>>
>>>> diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
>>>> index e636d9e..8369e56 100644
>>>> --- a/drivers/mmc/core/sdio.c
>>>> +++ b/drivers/mmc/core/sdio.c
>>>> @@ -992,8 +992,18 @@ static int mmc_sdio_resume(struct mmc_host *host)
>>>> }
>>>> }
>>>>
>>>> - if (!err && host->sdio_irqs)
>>>> - wake_up_process(host->sdio_irq_thread);
>>>> + if (!err && host->sdio_irqs) {
>>>> + if (!(host->caps2 & MMC_CAP2_SDIO_IRQ_NOTHREAD)) {
>>>> + wake_up_process(host->sdio_irq_thread);
>>>> + } else {
>>>> + mmc_release_host(host);
>>>> + mmc_host_clk_hold(host);
>>>> + host->ops->enable_sdio_irq(host, 1);
>>>> + mmc_host_clk_release(host);
>>>> + mmc_claim_host(host);
>>>> + }
>>>> + }
> If you enable the sdio_irq, I think it needs to check whether MMC_CAP_SDIO_IRQ is set or not.
>
>
> Best Regards,
> Jaehoon Chung
>>>> +
>>>> mmc_release_host(host);
>>>>
>>>> host->pm_flags &= ~MMC_PM_KEEP_POWER;
>>>> -- 1.7.1
>>>>
>>>>
>>>>
>>>> On 2014/7/15 12:40, Jaehoon Chung wrote:
>>>>> From: Chris Ball <chris@printf.net>
>>>>> Subject: [PATCH] mmc: core: sdio: Fix unconditional wake_up_process() on sdio thread
>>>>>
>>>>> 781e989cf59 ("mmc: sdhci: convert to new SDIO IRQ handling") and
>>>>> bf3b5ec66bd ("mmc: sdio_irq: rework sdio irq handling") disabled
>>>>> the use of our own custom threaded IRQ handler, but left in an
>>>>> unconditional wake_up_process() on that handler at resume-time.
>>>>>
>>>>> Reported-by: Fu, Zhonghui <zhonghui.fu@linux.intel.com>
>>>>> [Patch suggested by Jaehoon Chung]
>>>>> Signed-off-by: Chris Ball <chris@printf.net>
>>>>> ---
>>>>> drivers/mmc/core/sdio.c | 3 ++-
>>>>> 1 file changed, 2 insertions(+), 1 deletion(-)
>>>>>
>>>>> diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
>>>>> index e636d9e..11cc4e0 100644
>>>>> --- a/drivers/mmc/core/sdio.c
>>>>> +++ b/drivers/mmc/core/sdio.c
>>>>> @@ -992,7 +992,8 @@ static int mmc_sdio_resume(struct mmc_host *host)
>>>>> }
>>>>> }
>>>>>
>>>>> - if (!err && host->sdio_irqs)
>>>>> + if (!err && host->sdio_irqs &&
>>>>> + !(host->caps2 & MMC_CAP2_SDIO_IRQ_NOTHREAD))
>>>>> wake_up_process(host->sdio_irq_thread);
>>>>> mmc_release_host(host);
>>>>>
>>>> --
>>>> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>>>> the body of a message to majordomo@vger.kernel.org
>>>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>>> Please read the FAQ at http://www.tux.org/lkml/
>>> --
>>> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>>> the body of a message to majordomo@vger.kernel.org
>>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>> Please read the FAQ at http://www.tux.org/lkml/
^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: One bug of SDHCI driver
2014-08-05 4:56 ` Fu, Zhonghui
@ 2014-08-07 6:58 ` Fu, Zhonghui
2014-08-11 5:53 ` Fu, Zhonghui
0 siblings, 1 reply; 17+ messages in thread
From: Fu, Zhonghui @ 2014-08-07 6:58 UTC (permalink / raw)
To: Jaehoon Chung, Chris Ball
Cc: ulf.hansson, tgih.jun, aaron.lu, linux-mmc, linux-kernel,
jackey.shen, gregkh
kindly reminder.
Thanks,
Zhonghui
On 2014/8/5 12:56, Fu, Zhonghui wrote:
> Hi, Jaehoon
>
> According to your comments, I created a new patch for this issue as follows:
>
>
> Thanks,
> Zhonghui
>
>
> From 6cee984e1d76ba0a3320430f8cf4318ab65fcf06 Mon Sep 17 00:00:00 2001
> From: Fu Zhonghui <zhonghui.fu@linux.intel.com>
> Date: Tue, 5 Aug 2014 12:44:38 +0800
> Subject: [PATCH] mmc: core: sdio: Fix unconditional wake_up_process() on sdio thread
>
> 781e989cf59 ("mmc: sdhci: convert to new SDIO IRQ handling") and
> bf3b5ec66bd ("mmc: sdio_irq: rework sdio irq handling") disabled
> the use of our own custom threaded IRQ handler, but left in an
> unconditional wake_up_process() on that handler at resume-time.
> Link: https://bugzilla.kernel.org/show_bug.cgi?id=80151
>
> In addition, the check for MMC_CAP_SDIO_IRQ capability is added
> before enable sdio IRQ.
>
> Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
> Signed-off-by: Chris Ball <chris@printf.net>
> Signed-off-by: Fu Zhonghui <zhonghui.fu@linux.intel.com>
> ---
> drivers/mmc/core/sdio.c | 14 ++++++++++++--
> drivers/mmc/core/sdio_irq.c | 4 ++--
> 2 files changed, 14 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
> index e636d9e..e04a540 100644
> --- a/drivers/mmc/core/sdio.c
> +++ b/drivers/mmc/core/sdio.c
> @@ -992,8 +992,18 @@ static int mmc_sdio_resume(struct mmc_host *host)
> }
> }
>
> - if (!err && host->sdio_irqs)
> - wake_up_process(host->sdio_irq_thread);
> + if (!err && host->sdio_irqs) {
> + if (!(host->caps2 & MMC_CAP2_SDIO_IRQ_NOTHREAD)) {
> + wake_up_process(host->sdio_irq_thread);
> + } else if (host->caps & MMC_CAP_SDIO_IRQ) {
> + mmc_release_host(host);
> + mmc_host_clk_hold(host);
> + host->ops->enable_sdio_irq(host, 1);
> + mmc_host_clk_release(host);
> + mmc_claim_host(host);
> + }
> + }
> +
> mmc_release_host(host);
>
> host->pm_flags &= ~MMC_PM_KEEP_POWER;
> diff --git a/drivers/mmc/core/sdio_irq.c b/drivers/mmc/core/sdio_irq.c
> index 5cc13c8..696eca4 100644
> --- a/drivers/mmc/core/sdio_irq.c
> +++ b/drivers/mmc/core/sdio_irq.c
> @@ -208,7 +208,7 @@ static int sdio_card_irq_get(struct mmc_card *card)
> host->sdio_irqs--;
> return err;
> }
> - } else {
> + } else if (host->caps & MMC_CAP_SDIO_IRQ) {
> mmc_host_clk_hold(host);
> host->ops->enable_sdio_irq(host, 1);
> mmc_host_clk_release(host);
> @@ -229,7 +229,7 @@ static int sdio_card_irq_put(struct mmc_card *card)
> if (!(host->caps2 & MMC_CAP2_SDIO_IRQ_NOTHREAD)) {
> atomic_set(&host->sdio_irq_thread_abort, 1);
> kthread_stop(host->sdio_irq_thread);
> - } else {
> + } else if (host->caps & MMC_CAP_SDIO_IRQ) {
> mmc_host_clk_hold(host);
> host->ops->enable_sdio_irq(host, 0);
> mmc_host_clk_release(host);
> -- 1.7.1
>
>
>
>
>
>
> On 2014/7/30 11:40, Jaehoon Chung wrote:
>> Hi, Zhonghui.
>>
>> On 07/30/2014 11:47 AM, Fu, Zhonghui wrote:
>>> Hi,
>>>
>>> In the resume function, SDIO irq must be enabled, or the interrupts from devices on SDIO bus can't be acknowledged. I also uploaded this new patch to https://bugzilla.kernel.org/show_bug.cgi?id=80151.
>>> Could you please help to review it?
>>>
>>>
>>>
>>>
>>> Thanks,
>>> Zhonghui
>>>
>>> On 2014/7/24 23:27, Fu, Zhonghui wrote:
>>>> Hi,
>>>>
>>>> Any comments for this new patch?
>>>>
>>>> Thanks,
>>>> Zhonghui
>>>> On 2014/7/20 22:51, Fu, Zhonghui wrote:
>>>>> Hi,
>>>>>
>>>>> Chris' patch is not enough to fix this bug. I made a patch as follows and verified it can work. Could you please give out some comments about this patch?
>>>>>
>>>>>
>>>>> Thanks,
>>>>> Zhonghui
>>>>>
>>>>> >From 72d6f5b56fa04290fd3a055a3333de1d89e7c8d4 Mon Sep 17 00:00:00 2001
>>>>> From: Fu Zhonghui <zhonghui.fu@linux.intel.com>
>>>>> Date: Sun, 20 Jul 2014 22:29:53 +0800
>>>>> Subject: [PATCH] mmc: core: sdio: Fix unconditional wake_up_process() on sdio thread
>>>>>
>>>>> 781e989cf59 ("mmc: sdhci: convert to new SDIO IRQ handling") and
>>>>> bf3b5ec66bd ("mmc: sdio_irq: rework sdio irq handling") disabled
>>>>> the use of our own custom threaded IRQ handler, but left in an
>>>>> unconditional wake_up_process() on that handler at resume-time.
>>>>>
>>>>> Signed-off-by: Fu Zhonghui <zhonghui.fu@linux.intel.com>
>>>>> ---
>>>>> drivers/mmc/core/sdio.c | 14 ++++++++++++--
>>>>> 1 files changed, 12 insertions(+), 2 deletions(-)
>>>>>
>>>>> diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
>>>>> index e636d9e..8369e56 100644
>>>>> --- a/drivers/mmc/core/sdio.c
>>>>> +++ b/drivers/mmc/core/sdio.c
>>>>> @@ -992,8 +992,18 @@ static int mmc_sdio_resume(struct mmc_host *host)
>>>>> }
>>>>> }
>>>>>
>>>>> - if (!err && host->sdio_irqs)
>>>>> - wake_up_process(host->sdio_irq_thread);
>>>>> + if (!err && host->sdio_irqs) {
>>>>> + if (!(host->caps2 & MMC_CAP2_SDIO_IRQ_NOTHREAD)) {
>>>>> + wake_up_process(host->sdio_irq_thread);
>>>>> + } else {
>>>>> + mmc_release_host(host);
>>>>> + mmc_host_clk_hold(host);
>>>>> + host->ops->enable_sdio_irq(host, 1);
>>>>> + mmc_host_clk_release(host);
>>>>> + mmc_claim_host(host);
>>>>> + }
>>>>> + }
>> If you enable the sdio_irq, I think it needs to check whether MMC_CAP_SDIO_IRQ is set or not.
>>
>>
>> Best Regards,
>> Jaehoon Chung
>>>>> +
>>>>> mmc_release_host(host);
>>>>>
>>>>> host->pm_flags &= ~MMC_PM_KEEP_POWER;
>>>>> -- 1.7.1
>>>>>
>>>>>
>>>>>
>>>>> On 2014/7/15 12:40, Jaehoon Chung wrote:
>>>>>> From: Chris Ball <chris@printf.net>
>>>>>> Subject: [PATCH] mmc: core: sdio: Fix unconditional wake_up_process() on sdio thread
>>>>>>
>>>>>> 781e989cf59 ("mmc: sdhci: convert to new SDIO IRQ handling") and
>>>>>> bf3b5ec66bd ("mmc: sdio_irq: rework sdio irq handling") disabled
>>>>>> the use of our own custom threaded IRQ handler, but left in an
>>>>>> unconditional wake_up_process() on that handler at resume-time.
>>>>>>
>>>>>> Reported-by: Fu, Zhonghui <zhonghui.fu@linux.intel.com>
>>>>>> [Patch suggested by Jaehoon Chung]
>>>>>> Signed-off-by: Chris Ball <chris@printf.net>
>>>>>> ---
>>>>>> drivers/mmc/core/sdio.c | 3 ++-
>>>>>> 1 file changed, 2 insertions(+), 1 deletion(-)
>>>>>>
>>>>>> diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
>>>>>> index e636d9e..11cc4e0 100644
>>>>>> --- a/drivers/mmc/core/sdio.c
>>>>>> +++ b/drivers/mmc/core/sdio.c
>>>>>> @@ -992,7 +992,8 @@ static int mmc_sdio_resume(struct mmc_host *host)
>>>>>> }
>>>>>> }
>>>>>>
>>>>>> - if (!err && host->sdio_irqs)
>>>>>> + if (!err && host->sdio_irqs &&
>>>>>> + !(host->caps2 & MMC_CAP2_SDIO_IRQ_NOTHREAD))
>>>>>> wake_up_process(host->sdio_irq_thread);
>>>>>> mmc_release_host(host);
>>>>>>
>>>>> --
>>>>> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>>>>> the body of a message to majordomo@vger.kernel.org
>>>>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>>>> Please read the FAQ at http://www.tux.org/lkml/
>>>> --
>>>> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>>>> the body of a message to majordomo@vger.kernel.org
>>>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>>> Please read the FAQ at http://www.tux.org/lkml/
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: One bug of SDHCI driver
2014-08-07 6:58 ` Fu, Zhonghui
@ 2014-08-11 5:53 ` Fu, Zhonghui
0 siblings, 0 replies; 17+ messages in thread
From: Fu, Zhonghui @ 2014-08-11 5:53 UTC (permalink / raw)
To: Jaehoon Chung, Chris Ball
Cc: ulf.hansson, tgih.jun, aaron.lu, linux-mmc, linux-kernel,
jackey.shen, gregkh
Hi, everyone
I have posted this new patch in a separate mail. Many thanks for your comments.
Thanks,
Zhonghui
On 2014/8/7 14:58, Fu, Zhonghui wrote:
> kindly reminder.
>
> Thanks,
> Zhonghui
>
> On 2014/8/5 12:56, Fu, Zhonghui wrote:
>> Hi, Jaehoon
>>
>> According to your comments, I created a new patch for this issue as follows:
>>
>>
>> Thanks,
>> Zhonghui
>>
>>
>> From 6cee984e1d76ba0a3320430f8cf4318ab65fcf06 Mon Sep 17 00:00:00 2001
>> From: Fu Zhonghui <zhonghui.fu@linux.intel.com>
>> Date: Tue, 5 Aug 2014 12:44:38 +0800
>> Subject: [PATCH] mmc: core: sdio: Fix unconditional wake_up_process() on sdio thread
>>
>> 781e989cf59 ("mmc: sdhci: convert to new SDIO IRQ handling") and
>> bf3b5ec66bd ("mmc: sdio_irq: rework sdio irq handling") disabled
>> the use of our own custom threaded IRQ handler, but left in an
>> unconditional wake_up_process() on that handler at resume-time.
>> Link: https://bugzilla.kernel.org/show_bug.cgi?id=80151
>>
>> In addition, the check for MMC_CAP_SDIO_IRQ capability is added
>> before enable sdio IRQ.
>>
>> Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
>> Signed-off-by: Chris Ball <chris@printf.net>
>> Signed-off-by: Fu Zhonghui <zhonghui.fu@linux.intel.com>
>> ---
>> drivers/mmc/core/sdio.c | 14 ++++++++++++--
>> drivers/mmc/core/sdio_irq.c | 4 ++--
>> 2 files changed, 14 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
>> index e636d9e..e04a540 100644
>> --- a/drivers/mmc/core/sdio.c
>> +++ b/drivers/mmc/core/sdio.c
>> @@ -992,8 +992,18 @@ static int mmc_sdio_resume(struct mmc_host *host)
>> }
>> }
>>
>> - if (!err && host->sdio_irqs)
>> - wake_up_process(host->sdio_irq_thread);
>> + if (!err && host->sdio_irqs) {
>> + if (!(host->caps2 & MMC_CAP2_SDIO_IRQ_NOTHREAD)) {
>> + wake_up_process(host->sdio_irq_thread);
>> + } else if (host->caps & MMC_CAP_SDIO_IRQ) {
>> + mmc_release_host(host);
>> + mmc_host_clk_hold(host);
>> + host->ops->enable_sdio_irq(host, 1);
>> + mmc_host_clk_release(host);
>> + mmc_claim_host(host);
>> + }
>> + }
>> +
>> mmc_release_host(host);
>>
>> host->pm_flags &= ~MMC_PM_KEEP_POWER;
>> diff --git a/drivers/mmc/core/sdio_irq.c b/drivers/mmc/core/sdio_irq.c
>> index 5cc13c8..696eca4 100644
>> --- a/drivers/mmc/core/sdio_irq.c
>> +++ b/drivers/mmc/core/sdio_irq.c
>> @@ -208,7 +208,7 @@ static int sdio_card_irq_get(struct mmc_card *card)
>> host->sdio_irqs--;
>> return err;
>> }
>> - } else {
>> + } else if (host->caps & MMC_CAP_SDIO_IRQ) {
>> mmc_host_clk_hold(host);
>> host->ops->enable_sdio_irq(host, 1);
>> mmc_host_clk_release(host);
>> @@ -229,7 +229,7 @@ static int sdio_card_irq_put(struct mmc_card *card)
>> if (!(host->caps2 & MMC_CAP2_SDIO_IRQ_NOTHREAD)) {
>> atomic_set(&host->sdio_irq_thread_abort, 1);
>> kthread_stop(host->sdio_irq_thread);
>> - } else {
>> + } else if (host->caps & MMC_CAP_SDIO_IRQ) {
>> mmc_host_clk_hold(host);
>> host->ops->enable_sdio_irq(host, 0);
>> mmc_host_clk_release(host);
>> -- 1.7.1
>>
>>
>>
>>
>>
>>
>> On 2014/7/30 11:40, Jaehoon Chung wrote:
>>> Hi, Zhonghui.
>>>
>>> On 07/30/2014 11:47 AM, Fu, Zhonghui wrote:
>>>> Hi,
>>>>
>>>> In the resume function, SDIO irq must be enabled, or the interrupts from devices on SDIO bus can't be acknowledged. I also uploaded this new patch to https://bugzilla.kernel.org/show_bug.cgi?id=80151.
>>>> Could you please help to review it?
>>>>
>>>>
>>>>
>>>>
>>>> Thanks,
>>>> Zhonghui
>>>>
>>>> On 2014/7/24 23:27, Fu, Zhonghui wrote:
>>>>> Hi,
>>>>>
>>>>> Any comments for this new patch?
>>>>>
>>>>> Thanks,
>>>>> Zhonghui
>>>>> On 2014/7/20 22:51, Fu, Zhonghui wrote:
>>>>>> Hi,
>>>>>>
>>>>>> Chris' patch is not enough to fix this bug. I made a patch as follows and verified it can work. Could you please give out some comments about this patch?
>>>>>>
>>>>>>
>>>>>> Thanks,
>>>>>> Zhonghui
>>>>>>
>>>>>> >From 72d6f5b56fa04290fd3a055a3333de1d89e7c8d4 Mon Sep 17 00:00:00 2001
>>>>>> From: Fu Zhonghui <zhonghui.fu@linux.intel.com>
>>>>>> Date: Sun, 20 Jul 2014 22:29:53 +0800
>>>>>> Subject: [PATCH] mmc: core: sdio: Fix unconditional wake_up_process() on sdio thread
>>>>>>
>>>>>> 781e989cf59 ("mmc: sdhci: convert to new SDIO IRQ handling") and
>>>>>> bf3b5ec66bd ("mmc: sdio_irq: rework sdio irq handling") disabled
>>>>>> the use of our own custom threaded IRQ handler, but left in an
>>>>>> unconditional wake_up_process() on that handler at resume-time.
>>>>>>
>>>>>> Signed-off-by: Fu Zhonghui <zhonghui.fu@linux.intel.com>
>>>>>> ---
>>>>>> drivers/mmc/core/sdio.c | 14 ++++++++++++--
>>>>>> 1 files changed, 12 insertions(+), 2 deletions(-)
>>>>>>
>>>>>> diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
>>>>>> index e636d9e..8369e56 100644
>>>>>> --- a/drivers/mmc/core/sdio.c
>>>>>> +++ b/drivers/mmc/core/sdio.c
>>>>>> @@ -992,8 +992,18 @@ static int mmc_sdio_resume(struct mmc_host *host)
>>>>>> }
>>>>>> }
>>>>>>
>>>>>> - if (!err && host->sdio_irqs)
>>>>>> - wake_up_process(host->sdio_irq_thread);
>>>>>> + if (!err && host->sdio_irqs) {
>>>>>> + if (!(host->caps2 & MMC_CAP2_SDIO_IRQ_NOTHREAD)) {
>>>>>> + wake_up_process(host->sdio_irq_thread);
>>>>>> + } else {
>>>>>> + mmc_release_host(host);
>>>>>> + mmc_host_clk_hold(host);
>>>>>> + host->ops->enable_sdio_irq(host, 1);
>>>>>> + mmc_host_clk_release(host);
>>>>>> + mmc_claim_host(host);
>>>>>> + }
>>>>>> + }
>>> If you enable the sdio_irq, I think it needs to check whether MMC_CAP_SDIO_IRQ is set or not.
>>>
>>>
>>> Best Regards,
>>> Jaehoon Chung
>>>>>> +
>>>>>> mmc_release_host(host);
>>>>>>
>>>>>> host->pm_flags &= ~MMC_PM_KEEP_POWER;
>>>>>> -- 1.7.1
>>>>>>
>>>>>>
>>>>>>
>>>>>> On 2014/7/15 12:40, Jaehoon Chung wrote:
>>>>>>> From: Chris Ball <chris@printf.net>
>>>>>>> Subject: [PATCH] mmc: core: sdio: Fix unconditional wake_up_process() on sdio thread
>>>>>>>
>>>>>>> 781e989cf59 ("mmc: sdhci: convert to new SDIO IRQ handling") and
>>>>>>> bf3b5ec66bd ("mmc: sdio_irq: rework sdio irq handling") disabled
>>>>>>> the use of our own custom threaded IRQ handler, but left in an
>>>>>>> unconditional wake_up_process() on that handler at resume-time.
>>>>>>>
>>>>>>> Reported-by: Fu, Zhonghui <zhonghui.fu@linux.intel.com>
>>>>>>> [Patch suggested by Jaehoon Chung]
>>>>>>> Signed-off-by: Chris Ball <chris@printf.net>
>>>>>>> ---
>>>>>>> drivers/mmc/core/sdio.c | 3 ++-
>>>>>>> 1 file changed, 2 insertions(+), 1 deletion(-)
>>>>>>>
>>>>>>> diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
>>>>>>> index e636d9e..11cc4e0 100644
>>>>>>> --- a/drivers/mmc/core/sdio.c
>>>>>>> +++ b/drivers/mmc/core/sdio.c
>>>>>>> @@ -992,7 +992,8 @@ static int mmc_sdio_resume(struct mmc_host *host)
>>>>>>> }
>>>>>>> }
>>>>>>>
>>>>>>> - if (!err && host->sdio_irqs)
>>>>>>> + if (!err && host->sdio_irqs &&
>>>>>>> + !(host->caps2 & MMC_CAP2_SDIO_IRQ_NOTHREAD))
>>>>>>> wake_up_process(host->sdio_irq_thread);
>>>>>>> mmc_release_host(host);
>>>>>>>
>>>>>> --
>>>>>> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>>>>>> the body of a message to majordomo@vger.kernel.org
>>>>>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>>>>> Please read the FAQ at http://www.tux.org/lkml/
>>>>> --
>>>>> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>>>>> the body of a message to majordomo@vger.kernel.org
>>>>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>>>> Please read the FAQ at http://www.tux.org/lkml/
^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2014-08-11 5:53 UTC | newest]
Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-07-01 5:39 one doubt about mmc_sdio_init_card function Fu, Zhonghui
2014-07-02 2:52 ` Aaron Lu
2014-07-03 15:47 ` One bug of SDHCI driver Fu, Zhonghui
2014-07-04 2:40 ` Jaehoon Chung
2014-07-06 15:19 ` Fu, Zhonghui
2014-07-08 16:03 ` Fu, Zhonghui
2014-07-14 13:26 ` Chris Ball
2014-07-14 13:26 ` Chris Ball
2014-07-15 2:54 ` Fu, Zhonghui
2014-07-15 4:14 ` Jaehoon Chung
2014-07-15 4:40 ` Jaehoon Chung
2014-07-20 14:51 ` Fu, Zhonghui
2014-07-24 15:27 ` Fu, Zhonghui
[not found] ` <53D85CBF.3070409@linux.intel.com>
2014-07-30 3:40 ` Jaehoon Chung
2014-08-05 4:56 ` Fu, Zhonghui
2014-08-07 6:58 ` Fu, Zhonghui
2014-08-11 5:53 ` Fu, Zhonghui
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.