From: Don Zickus <dzickus@redhat.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>,
Andrew Morton <akpm@linux-foundation.org>,
Ingo Molnar <mingo@elte.hu>,
linux-kernel@vger.kernel.org
Subject: Re: fix BUG: using smp_processor_id() in touch_nmi_watchdog and touch_softlockup_watchdog
Date: Mon, 16 Aug 2010 09:34:52 -0400 [thread overview]
Message-ID: <20100816133452.GS4879@redhat.com> (raw)
In-Reply-To: <1281946970.1926.998.camel@laptop>
On Mon, Aug 16, 2010 at 10:22:50AM +0200, Peter Zijlstra wrote:
> On Fri, 2010-08-13 at 13:21 +0300, Sergey Senozhatsky wrote:
>
> > [ 67.703556] BUG: using smp_processor_id() in preemptible [00000000] code: s2disk/5139
> > [ 67.703563] caller is touch_nmi_watchdog+0x15/0x2c
> > [ 67.703566] Pid: 5139, comm: s2disk Not tainted 2.6.36-rc0-git12-07921-g60bf26a-dirty #116
> > [ 67.703568] Call Trace:
> > [ 67.703575] [<ffffffff811f6bf1>] debug_smp_processor_id+0xc9/0xe4
> > [ 67.703578] [<ffffffff81092766>] touch_nmi_watchdog+0x15/0x2c
> > [ 67.703584] [<ffffffff81222950>] acpi_os_stall+0x34/0x40
> > [ 67.703589] [<ffffffff812398d2>] acpi_ex_system_do_stall+0x34/0x38
>
> Which could mean two things, either ACPI got funny on us, or Don's new
> watchdog stuff has a hole in it.
it could. :-)
>
>
> > ---
> >
> > diff --git a/kernel/watchdog.c b/kernel/watchdog.c
> > index 613bc1f..8822f1e 100644
> > --- a/kernel/watchdog.c
> > +++ b/kernel/watchdog.c
> > @@ -116,13 +116,14 @@ static unsigned long get_sample_period(void)
> > static void __touch_watchdog(void)
> > {
> > int this_cpu = smp_processor_id();
> > -
> > - __get_cpu_var(watchdog_touch_ts) = get_timestamp(this_cpu);
> > + per_cpu(watchdog_touch_ts, this_cpu) = get_timestamp(this_cpu);
> > }
>
> That change seems sensible enough..
ok.
>
> > void touch_softlockup_watchdog(void)
> > {
> > - __get_cpu_var(watchdog_touch_ts) = 0;
> > + int this_cpu = get_cpu();
> > + per_cpu(watchdog_touch_ts, this_cpu) = 0;
> > + put_cpu();
> > }
> > EXPORT_SYMBOL(touch_softlockup_watchdog);
> >
> > @@ -142,7 +143,9 @@ void touch_all_softlockup_watchdogs(void)
> > #ifdef CONFIG_HARDLOCKUP_DETECTOR
> > void touch_nmi_watchdog(void)
> > {
> > - __get_cpu_var(watchdog_nmi_touch) = true;
> > + int this_cpu = get_cpu();
> > + per_cpu(watchdog_nmi_touch, this_cpu) = true;
> > + put_cpu();
> > touch_softlockup_watchdog();
> > }
> > EXPORT_SYMBOL(touch_nmi_watchdog);
>
> These other two really are about assumptions we make on the call sites,
> which at the very least are violated by ACPI.
>
> Don/Ingo, remember if we require touch_*_watchdog callers to have
> preemption disabled? Or is the proposed patch sensible?
I don't recall any requirement to have preemption disabled when using
those functions. It seems sensible to put it in the
touch_{softlockup|nmi}_watchdog code.
I assume the reason for having preemption disabled when using
smp_processor_id() is that the code could migrate to another cpu when
rescheduled?
I don't see a problem with the patch, but my low level understanding of
the __get_cpu_var vs. per_cpu isn't very strong.
Cheers,
Don
>
next prev parent reply other threads:[~2010-08-16 13:35 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-13 10:21 fix BUG: using smp_processor_id() in touch_nmi_watchdog and touch_softlockup_watchdog Sergey Senozhatsky
2010-08-16 8:22 ` Peter Zijlstra
2010-08-16 13:34 ` Don Zickus [this message]
2010-08-16 13:46 ` Peter Zijlstra
2010-08-16 14:08 ` [PATCH] fix BUG " Sergey Senozhatsky
2010-08-16 14:30 ` Don Zickus
2010-08-17 4:27 ` Yong Zhang
2010-08-17 2:59 ` Frederic Weisbecker
2010-08-17 3:16 ` Yong Zhang
2010-08-17 8:39 ` Sergey Senozhatsky
2010-08-17 9:05 ` Yong Zhang
2010-08-17 9:24 ` Sergey Senozhatsky
2010-08-17 9:37 ` Yong Zhang
2010-08-17 10:28 ` Sergey Senozhatsky
2010-08-17 12:48 ` Yong Zhang
2010-08-17 10:39 ` Sergey Senozhatsky
2010-08-17 12:56 ` Yong Zhang
2010-08-17 13:13 ` Don Zickus
2010-08-18 2:48 ` Frederic Weisbecker
2010-08-18 20:01 ` Andrew Morton
2010-08-19 2:27 ` Don Zickus
2010-08-20 2:57 ` Don Zickus
2010-08-20 3:42 ` Andrew Morton
2010-08-20 12:34 ` Don Zickus
2010-08-26 17:17 ` acpi_os_stall() and touch_nmi_watchdog() (was Re: [PATCH] fix BUG using smp_processor_id() in touch_nmi_watchdog and touch_softlockup_watchdog) Len Brown
2010-08-20 15:02 ` [PATCH] fix BUG using smp_processor_id() in touch_nmi_watchdog and touch_softlockup_watchdog Yong Zhang
2010-08-26 10:14 ` Maxim Levitsky
2010-08-26 14:40 ` Don Zickus
2010-08-17 7:56 ` [PATCH] fix BUG using smp_processor_id() in touch_nmi_watchdog and touch_softlockup_watchdog (v2) Sergey Senozhatsky
2010-08-16 14:12 ` fix BUG: using smp_processor_id() in touch_nmi_watchdog and touch_softlockup_watchdog Don Zickus
2010-08-16 14:29 ` Peter Zijlstra
2010-08-16 14:06 ` Yong Zhang
2010-08-18 19:33 ` Andrew Morton
2010-08-18 21:44 ` Cyrill Gorcunov
2010-09-22 9:00 ` [PATCH] avoid second smp_processor_id() call in __touch_watchdog Sergey Senozhatsky
2010-09-22 14:41 ` Don Zickus
2010-09-22 16:27 ` Frederic Weisbecker
2010-09-22 16:39 ` Peter Zijlstra
2010-09-22 16:47 ` Frederic Weisbecker
2010-09-24 19:34 ` Don Zickus
2010-09-25 17:43 ` Sergey Senozhatsky
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=20100816133452.GS4879@redhat.com \
--to=dzickus@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=peterz@infradead.org \
--cc=sergey.senozhatsky@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.