From: Michal Schmidt <mschmidt@redhat.com>
To: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Xiaotian Feng <xtfeng@gmail.com>,
linux-kernel@vger.kernel.org, John Stultz <johnstul@us.ibm.com>,
Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@elte.hu>
Subject: Re: BUG: sleeping function called from invalid context at kernel/mutex.c:280
Date: Thu, 24 Sep 2009 18:13:19 +0200 [thread overview]
Message-ID: <20090924181319.17ed46c9@leela> (raw)
In-Reply-To: <20090924172952.49697825@mschwide.boeblingen.de.ibm.com>
Dne Thu, 24 Sep 2009 17:29:52 +0200 Martin Schwidefsky napsal(a):
> On Thu, 24 Sep 2009 15:33:19 +0200
> Michal Schmidt <mschmidt@redhat.com> wrote:
> > I've just noticed the same in the latest git.
> > sysdev_resume() runs with IRQs disabled, but clocksource_resume()
> > uses a mutex. Hmm, in 2.6.30 it used to be spinlock. This was
> > changed to mutex by:
> >
> > commit 75c5158f70c065b9704b924503d96e8297838f79
> > Author: Martin Schwidefsky <schwidefsky@de.ibm.com>
> > Date: Fri Aug 14 15:47:30 2009 +0200
> >
> > timekeeping: Update clocksource with stop_machine
> >
> > update_wall_time calls change_clocksource HZ times per second to
> > check if a new clock source is available. In close to 100% of
> > all calls there is no new clock. Replace the tick based check by an
> > update done with stop_machine.
>
> Hmm, the spinlock to mutex conversion is necessary to make it possible
> to use stop_machine to install the new clocksource. At the same time
> clocksource_resume is called early in the resume cycle with interrupts
> disabled and may not take a mutex. Question is: does it have to? There
> shouldn't be any processes running that can change the list of
> installed clocksources. Can you test if this patch fixes the problem?
>
> --
> Subject: [PATCH] clocksource: resume clocksource without taking the
> clocksource mutex
>
> From: Martin Schwidefsky <schwidefsky@de.ibm.com>
>
> git commit 75c5158f70c065b9 converted the clocksource spinlock to a
> mutex. This causes the following BUG:
>
> BUG: sleeping function called from invalid context at
> kernel/mutex.c:280 in_atomic(): 0, irqs_disabled(): 1, pid: 2473,
> name: pm-suspend 2 locks held by pm-suspend/2473:
> #0: (&buffer->mutex){......}, at: [<ffffffff8115ab13>]
> sysfs_write_file+0x3c/0x137
> #1: (pm_mutex){......}, at: [<ffffffff810865b5>]
> enter_state+0x39/0x130 Pid: 2473, comm: pm-suspend Not tainted 2.6.31
> #1 Call Trace:
> [<ffffffff810792f0>] ? __debug_show_held_locks+0x22/0x24
> [<ffffffff8104a2ef>] __might_sleep+0x107/0x10b
> [<ffffffff8141fca9>] mutex_lock_nested+0x25/0x43
> [<ffffffff81073537>] clocksource_resume+0x1c/0x60
> [<ffffffff81072902>] timekeeping_resume+0x1e/0x1c8
> [<ffffffff812aee62>] __sysdev_resume+0x25/0xcf
> [<ffffffff812aef79>] sysdev_resume+0x6d/0xae
> [<ffffffff810864f8>] suspend_devices_and_enter+0x12b/0x1af
> [<ffffffff8108665b>] enter_state+0xdf/0x130
> [<ffffffff81085dc3>] state_store+0xb6/0xd3
> [<ffffffff81204c73>] kobj_attr_store+0x17/0x19
> [<ffffffff8115abd2>] sysfs_write_file+0xfb/0x137
> [<ffffffff811057d2>] vfs_write+0xae/0x10b
> [<ffffffff81208392>] ? __up_read+0x1a/0x7f
> [<ffffffff811058ef>] sys_write+0x4a/0x6e
> [<ffffffff81011b82>] system_call_fastpath+0x16/0x1b
>
> clocksource_resume is called early in the resume process, there
> is only one cpu, no processes are running and the interrupts are
> disabled. It is therefore possible to resume the clocksources
> without taking the clocksource mutex.
>
> Reported-by: Xiaotian Feng <xtfeng@gmail.com>
> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Yes, this fixes the problem.
Tested-by: Michal Schmidt <mschmidt@redhat.com>
next prev parent reply other threads:[~2009-09-24 16:08 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-09-23 9:27 BUG: sleeping function called from invalid context at kernel/mutex.c:280 Xiaotian Feng
2009-09-24 13:33 ` Michal Schmidt
2009-09-24 15:29 ` Martin Schwidefsky
2009-09-24 16:13 ` Michal Schmidt [this message]
2009-09-25 6:20 ` [tip:timers/urgent] clocksource: Resume clocksource without taking the clocksource mutex tip-bot for Martin Schwidefsky
2009-09-28 18:55 ` john stultz
2009-10-01 8:26 ` Ingo Molnar
-- strict thread matches above, loose matches on Subject: below --
2009-06-19 2:36 BUG: sleeping function called from invalid context at kernel/mutex.c:280 Dave Young
2009-06-19 2:36 ` Dave Young
2009-06-19 7:17 ` Jarek Poplawski
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=20090924181319.17ed46c9@leela \
--to=mschmidt@redhat.com \
--cc=johnstul@us.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=schwidefsky@de.ibm.com \
--cc=tglx@linutronix.de \
--cc=xtfeng@gmail.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.