All of lore.kernel.org
 help / color / mirror / Atom feed
* Re: [RFC PATCH] extcon: Fix sleeping in atomic context after connecting USB cable
@ 2014-09-29  4:25 함명주
  2014-09-29 10:23 ` Krzysztof Kozlowski
  0 siblings, 1 reply; 3+ messages in thread
From: 함명주 @ 2014-09-29  4:25 UTC (permalink / raw)
  To: Krzysztof Kozlowski, 최찬우, Felipe Balbi,
	우상정, linux-kernel@vger.kernel.org,
	Greg Kroah-Hartman, 한진구
  Cc: 박경민, Marek Szyprowski,
	Bartlomiej Zolnierkiewicz

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset=euc-kr, Size: 3563 bytes --]

>   
>  Kernel built with extcon and charger-manager.
> 
> After connecting the USB cable sleeping function was called from atomic
> context:
> [   63.328648] BUG: sleeping function called from invalid context at kernel/locking/mutex.c:586
[]
> [   63.388743] Workqueue: events max14577_muic_irq_work
> [   63.393707] [<c00167a4>] (unwind_backtrace) from [<c0012c08>] (show_stack+0x10/0x14)
> [   63.401422] [<c0012c08>] (show_stack) from [<c06232ec>] (dump_stack+0x70/0xbc)
> [   63.408625] [<c06232ec>] (dump_stack) from [<c0629d0c>] (mutex_lock_nested+0x24/0x410)
> [   63.416525] [<c0629d0c>] (mutex_lock_nested) from [<c0354474>] (regmap_read+0x30/0x60)
> [   63.424424] [<c0354474>] (regmap_read) from [<c0406b84>] (max14577_charger_get_property+0x1e4/0x250)
> [   63.433535] [<c0406b84>] (max14577_charger_get_property) from [<c0403834>] (is_ext_pwr_online+0x30/0x6c)
> [   63.442994] [<c0403834>] (is_ext_pwr_online) from [<c0404a54>] (charger_extcon_notifier+0x40/0x70)
> [   63.451934] [<c0404a54>] (charger_extcon_notifier) from [<c044cbe4>] (_call_per_cable+0x40/0x4c)
> [   63.460704] [<c044cbe4>] (_call_per_cable) from [<c0051560>] (notifier_call_chain+0x64/0x128)
> [   63.469209] [<c0051560>] (notifier_call_chain) from [<c0051640>] (raw_notifier_call_chain+0x18/0x20)
> [   63.478321] [<c0051640>] (raw_notifier_call_chain) from [<c044d0fc>] (extcon_update_state+0xa8/0x204)
> [   63.487522] [<c044d0fc>] (extcon_update_state) from [<c044e5f8>] (max14577_muic_chg_handler+0xdc/0x180)
> [   63.496897] [<c044e5f8>] (max14577_muic_chg_handler) from [<c044e924>] (max14577_muic_irq_work+0x7c/0xd8)
> [   63.506445] [<c044e924>] (max14577_muic_irq_work) from [<c004480c>] (process_one_work+0x198/0x66c)
> [   63.515385] [<c004480c>] (process_one_work) from [<c0044d4c>] (worker_thread+0x38/0x564)
> [   63.523455] [<c0044d4c>] (worker_thread) from [<c004c4ec>] (kthread+0xcc/0xe8)
> [   63.530661] [<c004c4ec>] (kthread) from [<c000f1f8>] (ret_from_fork+0x14/0x3c)
> [   63.543926] charger_manager: Set current limit of CHARGER : 450000uA ~ 450000uA
> [   63.548870] extcon-port jack: jack event CHGDET=usb
> [   63.550592] extcon-port jack: jack event CHGDET=charger
> [   64.188607] charger-manager charger-manager@0: Failed to get battery temperature
> [   64.200684] charger-manager charger-manager@0: CHARGING
> 
> The first sleeping function is is_ext_pwr_online()
> (drivers/power/charger-manager.c). The atomic context initiating the
> flow is set up in extcon_update_state() (drivers/extcon/extcon-class.c).
> 
> The extcon_update_state() uses spin locks which are not necessary
> because the function is not called from interrupt service routines.
> Instead, the extcon_update_state() is called from:
> 1. Threaded interrupt handlers.
> 2. Work queues.
> 
> Replace the spin lock with mutex and update the documentation of this
> function.

No. You've done it in the opposite way.

update_state is often called in a interrupt handler that cannot sleep.

For the context you've mentioned, we'd need workqueue invoked by
_call_per_cable or notifier callback.


Cheers,
MyungJoo

> 
> Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
> ---
>  drivers/extcon/extcon-class.c | 15 ++++++++-------
>  include/linux/extcon.h        |  3 ++-
>  2 files changed, 10 insertions(+), 8 deletions(-)
> 
[]
> -	spin_lock_irqsave(&edev->lock, flags);
> +	mutex_lock(&edev->lock);
[]
ÿôèº{.nÇ+‰·Ÿ®‰­†+%ŠËÿ±éݶ\x17¥Šwÿº{.nÇ+‰·¥Š{±þG«éÿŠ{ayº\x1dʇڙë,j\a­¢f£¢·hšïêÿ‘êçz_è®\x03(­éšŽŠÝ¢j"ú\x1a¶^[m§ÿÿ¾\a«þG«éÿ¢¸?™¨è­Ú&£ø§~á¶iO•æ¬z·švØ^\x14\x04\x1a¶^[m§ÿÿÃ\fÿ¶ìÿ¢¸?–I¥

^ permalink raw reply	[flat|nested] 3+ messages in thread
* [RFC PATCH] extcon: Fix sleeping in atomic context
@ 2014-09-26 11:50 Krzysztof Kozlowski
  2014-09-26 11:50 ` [RFC PATCH] extcon: Fix sleeping in atomic context after connecting USB cable Krzysztof Kozlowski
  0 siblings, 1 reply; 3+ messages in thread
From: Krzysztof Kozlowski @ 2014-09-26 11:50 UTC (permalink / raw)
  To: MyungJoo Ham, Chanwoo Choi, Felipe Balbi, Sangjung Woo,
	Krzysztof Kozlowski, linux-kernel, Greg Kroah-Hartman, Jingoo Han
  Cc: Kyungmin Park, Marek Szyprowski, Bartlomiej Zolnierkiewicz

Hi,

When kernel was built with charger manager and extcon, I encountered
a sleep in atomic context after connecting USB cable to the device.

I found this on internal kernel 3.16 on Exynos3250 development board.
Unfortunately I could not reproduce it on mainline kernel because
none of my boards were able to bring up full charging stack
(fuel gauge, charger, charger-manager, extcon).

However, after looking at source code, this should happen also on
mainline kernel.

The fix for bug is simple - use mutexes instead of spin locks. It was
tested on 3.16 but *should* work on mainline.

My questions/request for comments are:
1. Could someone verify this on mainline (test it)?
2. Should I mark it cc-stable? I think yes *but* the patch changes
   few extcon functions from non-sleeping to might_sleep.
   On mainline these affected functions are not used in atomic
   contexts but I am not sure about older stable kernels.
   Applying this to older kernel could lead to another sleep-in-atomic
   issue...


Any comments?

Best regards,
Krzysztof

Krzysztof Kozlowski (1):
  extcon: Fix sleeping in atomic context after connecting USB cable

 drivers/extcon/extcon-class.c | 15 ++++++++-------
 include/linux/extcon.h        |  3 ++-
 2 files changed, 10 insertions(+), 8 deletions(-)

-- 
1.9.1


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2014-09-29 10:23 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-09-29  4:25 [RFC PATCH] extcon: Fix sleeping in atomic context after connecting USB cable 함명주
2014-09-29 10:23 ` Krzysztof Kozlowski
  -- strict thread matches above, loose matches on Subject: below --
2014-09-26 11:50 [RFC PATCH] extcon: Fix sleeping in atomic context Krzysztof Kozlowski
2014-09-26 11:50 ` [RFC PATCH] extcon: Fix sleeping in atomic context after connecting USB cable Krzysztof Kozlowski

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.