forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
usb: cdns3: Put the cdns set active part outside the spin lock
[ Upstream commit 2319b9c ] The device may be scheduled during the resume process, so this cannot appear in atomic operations. Since pm_runtime_set_active will resume suppliers, put set active outside the spin lock, which is only used to protect the struct cdns data structure, otherwise the kernel will report the following warning: BUG: sleeping function called from invalid context at drivers/base/power/runtime.c:1163 in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 651, name: sh preempt_count: 1, expected: 0 RCU nest depth: 0, expected: 0 CPU: 0 PID: 651 Comm: sh Tainted: G WC 6.1.20 #1 Hardware name: Freescale i.MX8QM MEK (DT) Call trace: dump_backtrace.part.0+0xe0/0xf0 show_stack+0x18/0x30 dump_stack_lvl+0x64/0x80 dump_stack+0x1c/0x38 __might_resched+0x1fc/0x240 __might_sleep+0x68/0xc0 __pm_runtime_resume+0x9c/0xe0 rpm_get_suppliers+0x68/0x1b0 __pm_runtime_set_status+0x298/0x560 cdns_resume+0xb0/0x1c0 cdns3_controller_resume.isra.0+0x1e0/0x250 cdns3_plat_resume+0x28/0x40 Signed-off-by: Xiaolei Wang <[email protected]> Acked-by: Peter Chen <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Greg Kroah-Hartman <[email protected]> Signed-off-by: Sasha Levin <[email protected]>
- Loading branch information
1 parent
dfd46f7
commit d3f372e
Showing
4 changed files
with
20 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -522,9 +522,8 @@ int cdns_suspend(struct cdns *cdns) | |
} | ||
EXPORT_SYMBOL_GPL(cdns_suspend); | ||
|
||
int cdns_resume(struct cdns *cdns, u8 set_active) | ||
int cdns_resume(struct cdns *cdns) | ||
{ | ||
struct device *dev = cdns->dev; | ||
enum usb_role real_role; | ||
bool role_changed = false; | ||
int ret = 0; | ||
|
@@ -556,15 +555,23 @@ int cdns_resume(struct cdns *cdns, u8 set_active) | |
if (cdns->roles[cdns->role]->resume) | ||
cdns->roles[cdns->role]->resume(cdns, cdns_power_is_lost(cdns)); | ||
|
||
return 0; | ||
} | ||
EXPORT_SYMBOL_GPL(cdns_resume); | ||
|
||
void cdns_set_active(struct cdns *cdns, u8 set_active) | ||
{ | ||
struct device *dev = cdns->dev; | ||
|
||
if (set_active) { | ||
pm_runtime_disable(dev); | ||
pm_runtime_set_active(dev); | ||
pm_runtime_enable(dev); | ||
} | ||
|
||
return 0; | ||
return; | ||
} | ||
EXPORT_SYMBOL_GPL(cdns_resume); | ||
EXPORT_SYMBOL_GPL(cdns_set_active); | ||
#endif /* CONFIG_PM_SLEEP */ | ||
|
||
MODULE_AUTHOR("Peter Chen <[email protected]>"); | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters