From: Andrew Morton <akpm@linux-foundation.org>
To: Arjan van de Ven <arjan@infradead.org>
Cc: linux-kernel@vger.kernel.org, torvalds@linux-foundation.org,
Nick Piggin <nickpiggin@yahoo.com.au>
Subject: Re: [kerneloops] regression in 2.6.27 wrt "lock_page" and the "hwclock" program
Date: Sun, 5 Oct 2008 10:27:42 -0700 [thread overview]
Message-ID: <20081005102742.de8353b4.akpm@linux-foundation.org> (raw)
In-Reply-To: <20081005081145.30ba921b@infradead.org>
On Sun, 5 Oct 2008 08:11:45 -0700 Arjan van de Ven <arjan@infradead.org> wrote:
> On Sat, 4 Oct 2008 21:52:25 -0700
> Andrew Morton <akpm@linux-foundation.org> wrote:
>
> > On Sat, 4 Oct 2008 17:44:33 -0700 Arjan van de Ven
> > <arjan@infradead.org> wrote:
> >
> > >
> > > Details: http://www.kerneloops.org/searchweek.php?search=lock_page
> > >
> > > There's quite a few of this BUG, which seems to be an interaction
> > > between the "hwclock" program and something in 2.6.27. It's new
> > > in .27 and is currently the 8th ranked issue.....
> > >
> > > BUG: sleeping function called from invalid context at
> > > include/linux/pagemap.h:294 in_atomic():0, irqs_disabled():1
> > > INFO: lockdep is turned off.
> > > irq event stamp: 0
> > > hardirqs last enabled at (0): [<00000000>] 0x0
> > > hardirqs last disabled at (0): [<c042c3a4>]
> > > copy_process+0x2e7/0x115e softirqs last enabled at (0):
> > > [<c042c3a4>] copy_process+0x2e7/0x115e softirqs last disabled at
> > > (0): [<00000000>] 0x0 Pid: 9591, comm: hwclock Tainted: G W
> > > 2.6.27-0.372.rc8.fc10.i686 #1 [<c0427a53>] __might_sleep+0xd1/0xd6
> > > [<c0479a8b>] lock_page+0x1a/0x34
> > > [<c0479cfa>] find_lock_page+0x23/0x48
> > > [<c047a215>] filemap_fault+0x9b/0x330
> > > [<c0486493>] __do_fault+0x40/0x2e6
> > > [<c0487d63>] handle_mm_fault+0x2ec/0x6d2
> > > [<c06e8260>] do_page_fault+0x2e5/0x693
> > >
> >
> > Looks like `hwclock' disabled interrupts in userspace with sys_iopl()?
>
> static unsigned long
> atomic(const char *name, unsigned long (*op)(unsigned long),
> unsigned long arg)
> {
> unsigned long v;
> __asm__ volatile ("cli");
> v = (*op)(arg);
> __asm__ volatile ("sti");
> return v;
> }
>
> looks like it (but only on 32 bit x86, not on 64 bit x86)
I suspect this is new in hwclock? We do a might_sleep() in lock_page()
in 2.6.25 and in 2.6.26.
In which case there isn't a lot of point in changing 2.6.27.
> >
> > And then it took a pagefault, which is presumably a bug in hwclock.
> >
> > That's all a bit antisocial of it. I guess a suitable quickfix is to
> > remove the might_sleep() from lock_page() (which would be a good thing
> > from a text size POV anyway).
> >
> > But there will of course be other sites which do possibly-sleeping
> > operations on the pagefault path.
> >
> > Really, it's a bit stupid doing _any_ system calls (and a pagefault is
> > a syscall in disguise) with interrupts disabled. The kernel makes no
> > guarantees that we'll honour it. We could just enable interrupts on
> > pagefault entry - that'll teach 'em.
>
> or save - enable - <run handlers> - restore sequence
hwclock is buggy either way - it's trying to disable interrupts but
it's calling into the kernel, which will reenable interrupts, thus
losing any protection which hwclock was trying to attain.
Plus there's this little thing called "smp". I bet it doesn't disable
interrupts on all CPUs.
> it's horrible that we allowed this before, and the semantics are very
> fuzzy at best, but to go WARN_ON() for it might be a bit too much.
>
> (and yes someone really ought to fix hwclock; it's rather broken)
well yeah. Recently broken?
next prev parent reply other threads:[~2008-10-05 17:27 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-10-05 0:44 [kerneloops] regression in 2.6.27 wrt "lock_page" and the "hwclock" program Arjan van de Ven
2008-10-05 4:52 ` Andrew Morton
2008-10-05 15:11 ` Arjan van de Ven
2008-10-05 17:27 ` Andrew Morton [this message]
2008-10-05 17:38 ` Arjan van de Ven
2008-10-12 20:00 ` Karel Zak
2008-10-12 20:16 ` Linus Torvalds
2008-10-13 14:55 ` Arjan van de Ven
2008-10-14 21:04 ` Karel Zak
2008-10-13 15:26 ` Ingo Molnar
2008-10-13 15:40 ` Alan Cox
2008-10-13 15:44 ` Linus Torvalds
2008-10-13 16:02 ` Ingo Molnar
2008-10-13 16:08 ` Linus Torvalds
2008-10-13 16:21 ` Ingo Molnar
2008-10-12 19:46 ` Karel Zak
2008-10-05 18:18 ` Linus Torvalds
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=20081005102742.de8353b4.akpm@linux-foundation.org \
--to=akpm@linux-foundation.org \
--cc=arjan@infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nickpiggin@yahoo.com.au \
--cc=torvalds@linux-foundation.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox