All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael Wang <wangyun@linux.vnet.ibm.com>
To: Michael Wang <wangyun@linux.vnet.ibm.com>
Cc: linux-kernel@vger.kernel.org, peterz@infradead.org,
	mingo@redhat.com, svaidy@linux.vnet.ibm.com, wfg@linux.intel.com
Subject: Re: [PATCH] sched: fix should_resched() to avoid do schedule in atomic
Date: Sat, 06 Oct 2012 17:06:27 +0800	[thread overview]
Message-ID: <506FF493.6050407@linux.vnet.ibm.com> (raw)
In-Reply-To: <5062796F.8050802@linux.vnet.ibm.com>

On 09/26/2012 11:41 AM, Michael Wang wrote:
> On 09/18/2012 11:13 AM, Michael Wang wrote:
>> This patch try to fix the BUG:
>>
>> [    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
>>
>> The process to trigger the BUG is:
>>
>> 	native_smp_prepare_cpus()
>> 	preempt_disable()		//preempt_count++
>> 	__irq_alloc_descs()
>> 	mutex_lock()
>> 	might_sleep()			//should_resched() return true
>> 	__schedule()
>> 	preempt_disable()		//preempt_count++
>> 	schedule_bug()			//preempt_count > 1, report bug
>>
>> So the issue is that should_resched() should not return true while the preempt
>> already disabled.
> 
> Hi, Peter
> 
> Could we use this solution to fix the bug?

Please tell me if it's wrong, I really want to help fix it.

Regards,
Michael Wang

> 
> Regards,
> Michael Wang
> 
>>
>> This patch will fix the issue, then might_sleep() won't do schedule in atomic
>> any more.
>>
>> Reported-by: Fengguang Wu <wfg@linux.intel.com>
>> Signed-off-by: Michael Wang <wangyun@linux.vnet.ibm.com>
>> ---
>>  kernel/sched/core.c |    2 +-
>>  1 files changed, 1 insertions(+), 1 deletions(-)
>>
>> diff --git a/kernel/sched/core.c b/kernel/sched/core.c
>> index b38f00e..2b7cd15 100644
>> --- a/kernel/sched/core.c
>> +++ b/kernel/sched/core.c
>> @@ -4171,7 +4171,7 @@ SYSCALL_DEFINE0(sched_yield)
>>
>>  static inline int should_resched(void)
>>  {
>> -	return need_resched() && !(preempt_count() & PREEMPT_ACTIVE);
>> +	return need_resched() && !preempt_count();
>>  }
>>
>>  static void __cond_resched(void)
>>
> 


  reply	other threads:[~2012-10-06  9:06 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1347937984-5817-1-git-send-email-wangyun@linux.vnet.ibm.com>
2012-09-26  3:41 ` [PATCH] sched: fix should_resched() to avoid do schedule in atomic Michael Wang
2012-10-06  9:06   ` Michael Wang [this message]
2012-10-06  9:12     ` Michael Wang
2012-10-09  2:20 ` 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=506FF493.6050407@linux.vnet.ibm.com \
    --to=wangyun@linux.vnet.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=svaidy@linux.vnet.ibm.com \
    --cc=wfg@linux.intel.com \
    /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.