From: Michael Wang <wangyun@linux.vnet.ibm.com>
To: Fengguang Wu <fengguang.wu@intel.com>
Cc: Thomas Gleixner <tglx@linutronix.de>,
Yinghai Lu <yinghai@kernel.org>,
Suresh Siddha <suresh.b.siddha@intel.com>,
LKML <linux-kernel@vger.kernel.org>
Subject: Re: BUG: scheduling while atomic, under native_smp_prepare_cpus()
Date: Mon, 20 Aug 2012 17:20:35 +0800 [thread overview]
Message-ID: <50320163.5080703@linux.vnet.ibm.com> (raw)
In-Reply-To: <20120817134944.GA539@localhost>
On 08/17/2012 09:49 PM, Fengguang Wu wrote:
Hi, FengGuang
native_smp_prepare_cpus has already disabled the preempt before
reach __irq_alloc_descs(), and sleep in mutex_lock() cause the bug.
May be the follow patch could help to solve the issue(actually I
think the true problem should be in _cond_resched...).
I can't do test by my self since I can't reproduce the issue on my
machine, the kernel_init thread never got a need sched flag set at
that moment in my case...
Regards,
Michael Wang
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 4376c9f..3396c33 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -3321,7 +3321,8 @@ static inline void schedule_debug(struct task_struct *prev)
* schedule() atomically, we ignore that path for now.
* Otherwise, whine if we are scheduling when we should not be.
*/
- if (unlikely(in_atomic_preempt_off() && !prev->exit_state))
+ if (unlikely(in_atomic_preempt_off() && !prev->exit_state
+ && system_state == SYSTEM_RUNNING))
__schedule_bug(prev);
rcu_sleep_check();
> Trace one (full config/dmesg attached):
>
> [ 0.042794] init IO_APIC IRQs [ 0.043305] apic 2 pin 0 not
> connected [ 0.043953] BUG: scheduling while atomic:
> swapper/0/1/0x10000002 [ 0.044017] no locks held by swapper/0/1. [
> 0.044692] Pid: 1, comm: swapper/0 Not tainted
> 3.6.0-rc1-00420-gb7aebb9 #34 [ 0.045861] Call Trace: [ 0.048071]
> [<c106361e>] __schedule_bug+0x5e/0x70 [ 0.048890] [<c1b28701>]
> __schedule+0x91/0xb10 [ 0.049660] [<c14472ea>] ?
> vsnprintf+0x33a/0x450 [ 0.050444] [<c1060006>] ?
> lg_local_lock+0x6/0x70 [ 0.051256] [<c14fb5b1>] ?
> wait_for_xmitr+0x31/0x90 [ 0.052019] [<c144fd55>] ?
> do_raw_spin_unlock+0xa5/0xf0 [ 0.052903] [<c1b2a532>] ?
> _raw_spin_unlock+0x22/0x30 [ 0.053759] [<c105cdbb>] ?
> up+0x1b/0x70 [ 0.054421] [<c1065d6b>] __cond_resched+0x1b/0x30 [
> 0.055228] [<c1b292d5>] _cond_resched+0x45/0x50 [ 0.056020]
> [<c1b26c58>] mutex_lock_nested+0x28/0x370 [ 0.056884]
> [<c1034222>] ? console_unlock+0x3a2/0x4e0 [ 0.057741]
> [<c1ac8559>] __irq_alloc_descs+0x39/0x1c0 [ 0.058589]
> [<c10223bc>] io_apic_setup_irq_pin+0x2c/0x310 [ 0.060042]
> [<c20638df>] setup_IO_APIC+0x101/0x744 [ 0.060878] [<c1021d51>] ?
> clear_IO_APIC+0x31/0x50 [ 0.061695] [<c20600f4>]
> native_smp_prepare_cpus+0x538/0x680 [ 0.062644] [<c2056a91>] ?
> do_one_initcall+0x12c/0x12c [ 0.063517] [<c2056a91>] ?
> do_one_initcall+0x12c/0x12c [ 0.064016] [<c2056adc>]
> kernel_init+0x4b/0x17f [ 0.064790] [<c2056a91>] ?
> do_one_initcall+0x12c/0x12c [ 0.065660] [<c1b2bbd6>]
> kernel_thread_helper+0x6/0x10 [ 0.066592] IOAPIC[0]: Set routing
> entry (2-1 -> 0x41 -> IRQ 1 Mode:0 Active:0 Dest:1) [ 0.068045]
> IOAPIC[0]: Set routing entry (2-2 -> 0x51 -> IRQ 0 Mode:0 Active:0
> Dest:1)
>
> Trace two (triggered by another config):
>
> [ 0.288018] tlb_flushall_shift is 0xffffffff [ 0.316019]
> Freeing SMP alternatives: 20k freed [ 0.364022] BUG: scheduling
> while atomic: swapper/0/1/0x10000002 [ 0.364022] no locks held by
> swapper/0/1. [ 0.368023] Pid: 1, comm: swapper/0 Not tainted
> 3.6.0-rc1 #1 [ 0.368023] Call Trace: [ 0.368023] [<79812e23>]
> __schedule_bug+0x41/0x53 [ 0.372023] [<79820393>]
> __schedule+0x62/0x488 [ 0.376023] [<792d17ae>] ?
> radix_tree_lookup+0xa/0xc [ 0.376023] [<79071f4e>] ?
> rcu_irq_exit+0x61/0x66 [ 0.376023] [<79026be7>] ?
> irq_exit+0x60/0x6c [ 0.376023] [<790035df>] ? do_IRQ+0x6c/0x80 [
> 0.380023] [<7903d794>] __cond_resched+0x16/0x26 [ 0.380023]
> [<79820888>] _cond_resched+0x13/0x1c [ 0.380023] [<7909f30a>]
> slab_pre_alloc_hook.isra.44+0x2e/0x33 [ 0.380023] [<790a09c6>]
> kmem_cache_alloc+0x1b/0xbb [ 0.384024] [<792ce416>] ?
> alloc_cpumask_var_node+0x1a/0x72 [ 0.384024] [<792ce416>]
> alloc_cpumask_var_node+0x1a/0x72 [ 0.384024] [<792ce486>]
> alloc_cpumask_var+0xb/0xd [ 0.388024] [<792ce493>]
> zalloc_cpumask_var+0xb/0xd [ 0.388024] [<79bfe1fd>]
> native_smp_prepare_cpus+0x93/0x380 [ 0.388024] [<79bf6a7e>] ?
> do_one_initcall+0x10c/0x10c [ 0.388024] [<79bf6ac6>]
> kernel_init+0x48/0x16e [ 0.392024] [<79bf6a7e>] ?
> do_one_initcall+0x10c/0x10c [ 0.392024] [<7982241e>]
> kernel_thread_helper+0x6/0xd [ 0.400025] smpboot: SMP disabled [
> 0.400025] Performance Events:
>
> Thanks, Fengguang
>
next prev parent reply other threads:[~2012-08-20 9:20 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-17 13:49 BUG: scheduling while atomic, under native_smp_prepare_cpus() Fengguang Wu
2012-08-20 9:20 ` Michael Wang [this message]
2012-08-20 9:27 ` Fengguang Wu
2012-08-20 9:42 ` Michael Wang
2012-08-21 16:50 ` Fengguang Wu
2012-08-22 2:07 ` Michael Wang
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=50320163.5080703@linux.vnet.ibm.com \
--to=wangyun@linux.vnet.ibm.com \
--cc=fengguang.wu@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=suresh.b.siddha@intel.com \
--cc=tglx@linutronix.de \
--cc=yinghai@kernel.org \
/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.