概述
今天遇到这样一个错误,堆栈如下:
09-18 16:51:11.081 <3>[ 2.177138] c1 BUG: scheduling while atomic: kworker/u:0/5/0x00000002
09-18 16:51:11.081 <4>[ 2.177148] c1 Modules linked in:
09-18 16:51:11.081 <4>[ 2.177157] c1 Backtrace:
09-18 16:51:11.081 <4>[ 2.177182] c1 [<c0013ec0>] (dump_backtrace+0x0/0x118) from [<c053e848>] (dump_stack+0x20/0x24)
09-18 16:51:11.081 <4>[ 2.177194] c1 r6:d788e000 r5:d780ac00 r4:d780ac00 r3:60000093
09-18 16:51:11.081 <4>[ 2.177223] c1 [<c053e828>] (dump_stack+0x0/0x24) from [<c053f758>] (__schedule_bug+0x64/0x70)
09-18 16:51:11.081 <4>[ 2.177242] c1 [<c053f6f4>] (__schedule_bug+0x0/0x70) from [<c0546340>] (__schedule+0x80/0x618)
09-18 16:51:11.081 <4>[ 2.177253] c1 r4:c0f03940 r3:00000000
09-18 16:51:11.081 <4>[ 2.177274] c1 [<c05462c0>] (__schedule+0x0/0x618) from [<c05469c0>] (schedule+0x8c/0x90)
09-18 16:51:11.081 <4>[ 2.177293] c1 [<c0546934>] (schedule+0x0/0x90) from [<c0546d0c>] (schedule_preempt_disabled+0x20/0x2c)
09-18 16:51:11.081 <4>[ 2.177313] c1 [<c0546cec>] (schedule_preempt_disabled+0x0/0x2c) from [<c05457b0>] (__mutex_lock_slowpath+0x148/0x1bc)
09-18 16:51:11.081 <4>[ 2.177334] c1 [<c0545668>] (__mutex_lock_slowpath+0x0/0x1bc) from [<c0545888>] (mutex_lock+0x64/0x7c)
09-18 16:51:11.081 <4>[ 2.177356] c1 [<c0545824>] (mutex_lock+0x0/0x7c) from [<c024ae48>] (regulator_disable+0x24/0x58)
09-18 16:51:11.081 <4>[ 2.177368] c1 r4:d7955000 r3:c07e2188
09-18 16:51:11.081 <4>[ 2.177391] c1 [<c024ae24>] (regulator_disable+0x0/0x58) from [<c0396968>] (sdhci_sprd_set_power+0xac/0x1b4)
09-18 16:51:11.081 <4>[ 2.177403] c1 r6:00000000 r5:00000000 r4:d7162b40 r3:c07e2188
09-18 16:51:11.081 <4>[ 2.177431] c1 [<c03968bc>] (sdhci_sprd_set_power+0x0/0x1b4) from [<c0390300>] (sdhci_set_power+0x120/0x2fc)
09-18 16:51:11.081 <4>[ 2.177443] c1 r6:f5117029 r5:00000000 r4:d7162b40 r3:c03968bc
09-18 16:51:11.081 <4>[ 2.177471] c1 [<c03901e0>] (sdhci_set_power+0x0/0x2fc) from [<c03950e4>] (sdhci_set_ios+0x12c/0x920)
09-18 16:51:11.081 <4>[ 2.177483] c1 r8:f5117038 r7:ffff8ba9 r6:d7162b40 r5:d71629c8 r4:d7162800
09-18 16:51:11.081 <4>[ 2.177505] c1 r3:00000000
09-18 16:51:11.081 <4>[ 2.177523] c1 [<c0394fb8>] (sdhci_set_ios+0x0/0x920) from [<c0381fc0>] (mmc_power_off+0x1ac/0x1e4)
09-18 16:51:11.081 <4>[ 2.177542] c1 [<c0381e14>] (mmc_power_off+0x0/0x1e4) from [<c0391714>] (sdhci_hw_reset+0x1c/0x5c)
09-18 16:51:11.081 <4>[ 2.177554] c1 r6:c0581c38 r5:d7162800 r4:d7162800
09-18 16:51:11.081 <4>[ 2.177578] c1 [<c03916f8>] (sdhci_hw_reset+0x0/0x5c) from [<c0382a80>] (mmc_rescan+0x200/0x2e0)
09-18 16:51:11.081 <4>[ 2.177589] c1 r4:d7162a44 r3:c03916f8
09-18 16:51:11.081 <4>[ 2.177612] c1 [<c0382880>] (mmc_rescan+0x0/0x2e0) from [<c0053780>] (process_one_work+0x2c0/0x4fc)
09-18 16:51:11.081 <4>[ 2.177623] c1 r8:00000000 r7:d797f600 r6:c0936e40 r5:d7162a44 r4:d7824140
09-18 16:51:11.081 <4>[ 2.177645] c1 r3:c07b22e8
09-18 16:51:11.081 <4>[ 2.177662] c1 [<c00534c0>] (process_one_work+0x0/0x4fc) from [<c0053be8>] (worker_thread+0x22c/0x3b8)
09-18 16:51:11.081 <4>[ 2.177682] c1 [<c00539bc>] (worker_thread+0x0/0x3b8) from [<c0058608>] (kthread+0x9c/0xa8)
09-18 16:51:11.081 <4>[ 2.177701] c1 [<c005856c>] (kthread+0x0/0xa8) from [<c003c0b0>] (do_exit+0x0/0x7a8)
09-18 16:51:11.081 <4>[ 2.177712] c1 r6:c003c0b0 r5:c005856c r4:d783fecc
在Internet 上search后发现是由于在中断上下文中调用了引起睡眠的函数,引发调度
从上面的stack可知,由于在函数regulator_disable调用mutex_lock引起睡眠
然后开始查找中断是在何处被disable的
通过搜索代码可知,整个调用栈为:
mmc_rescan-->sdhci_hw_reset-->mmc_power_off-->mmc_set_ios-->
sdhci_set_ios--> sdhci_do_set_ios-->sdhci_set_power-->sdhci_sprd_set_power-->regulator_disable-->mutex_lock
在函数sdhci_do_set_ios中有如下过程:
static void sdhci_do_set_ios(struct sdhci_host *host, struct mmc_ios *ios)
{
.............
spin_lock_irqsave(&host->lock, flags);
..............
if (ios->power_mode == MMC_POWER_OFF)
mmc_regulator_set_ocr(host->mmc, host->vmmc, vdd_bit);
spin_lock_irqsave(&host->lock, flags);
可知sdhci_set_power确实是在关中断的情况下调用,而其后来又调用了可引起睡眠的mutex_lock,从而引发调度,产生错误
最后
以上就是冷傲毛衣为你收集整理的BUG: scheduling while atomic的全部内容,希望文章能够帮你解决BUG: scheduling while atomic所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复