Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1733320
| From | Thomas Gleixner <tglx@linutronix.de> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | Re: d57108d4f6 ("watchdog/core: Get rid of the thread .."): BUG: unable to handle kernel NULL pointer dereference at 0000000000000208 |
| Date | 2017-09-16 19:40 +0200 |
| Message-ID | <uqpep-4Lo-5@gated-at.bofh.it> (permalink) |
| References | <upKbf-1XT-1@gated-at.bofh.it> <upTHA-8eD-25@gated-at.bofh.it> <upYnU-2Ux-25@gated-at.bofh.it> <uq1F8-5pk-7@gated-at.bofh.it> <uqkHL-1AN-1@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
On Sat, 16 Sep 2017, Fengguang Wu wrote:
> > > [ 0.038086] Performance Events: unsupported p6 CPU model 61 no PMU
> > > driver, software events only.
>
> What's your host CPU? I can reproduce it in Nehalem, Haswell and Sandy
> Bridge machines with the attached script.
My bad. I booted the wrong config ....
> > > [ 0.041031] Hierarchical SRCU implementation.
> > > [ 0.046210] NMI watchdog: Perf event create on CPU 0 failed with -2
> > > [ 0.046980] NMI watchdog: Perf NMI watchdog permanetely disabled
> > >
> > > Confused
> >
> > I still can't reproduce. Can you please apply the debug patch below and
> > provide the output?
>
> OK. I'll try and report back tomorrow.
Don't bother. I found it already. On UP we have:
#define for_each_cpu(cpu, mask) \
for ((cpu) = 0; (cpu) < 1; (cpu)++, (void)mask)
which is a total fail as it breaks any code which uses for_each_cpu() or
any of the other variants on UP by assuming that all cpumask have bit 0
set.
That means any code which does not have conditional code for some of the
cpumask functions is potentially broken. Sigh.
The simple cure for the watchdog is below.
Thanks,
tglx
8<------------------
diff --git a/kernel/watchdog_hld.c b/kernel/watchdog_hld.c
index b2931154b5f2..d4c0f75b189e 100644
--- a/kernel/watchdog_hld.c
+++ b/kernel/watchdog_hld.c
@@ -221,7 +221,12 @@ void hardlockup_detector_perf_cleanup(void)
struct perf_event *event = per_cpu(watchdog_ev, cpu);
per_cpu(watchdog_ev, cpu) = NULL;
- perf_event_release_kernel(event);
+ /*
+ * Check the event, because on UP for_each_cpu() assumes
+ * idiotically that all masks handed in have bit 0 set.
+ */
+ if (event)
+ perf_event_release_kernel(event);
}
cpumask_clear(&dead_events_mask);
}
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Re: d57108d4f6 ("watchdog/core: Get rid of the thread .."): BUG: unable to handle kernel NULL pointer dereference at 0000000000000208 Thomas Gleixner <tglx@linutronix.de> - 2017-09-15 10:00 +0200
Re: d57108d4f6 ("watchdog/core: Get rid of the thread .."): BUG: unable to handle kernel NULL pointer dereference at 0000000000000208 Thomas Gleixner <tglx@linutronix.de> - 2017-09-15 15:00 +0200
Re: d57108d4f6 ("watchdog/core: Get rid of the thread .."): BUG: unable to handle kernel NULL pointer dereference at 0000000000000208 Thomas Gleixner <tglx@linutronix.de> - 2017-09-15 18:30 +0200
Re: d57108d4f6 ("watchdog/core: Get rid of the thread .."): BUG: unable to handle kernel NULL pointer dereference at 0000000000000208 Fengguang Wu <fengguang.wu@intel.com> - 2017-09-16 14:50 +0200
Re: d57108d4f6 ("watchdog/core: Get rid of the thread .."): BUG: unable to handle kernel NULL pointer dereference at 0000000000000208 Thomas Gleixner <tglx@linutronix.de> - 2017-09-16 19:40 +0200
Re: d57108d4f6 ("watchdog/core: Get rid of the thread .."): BUG: unable to handle kernel NULL pointer dereference at 0000000000000208 Linus Torvalds <torvalds@linux-foundation.org> - 2017-09-16 20:00 +0200
Re: d57108d4f6 ("watchdog/core: Get rid of the thread .."): BUG: unable to handle kernel NULL pointer dereference at 0000000000000208 Thomas Gleixner <tglx@linutronix.de> - 2017-09-16 20:20 +0200
Re: d57108d4f6 ("watchdog/core: Get rid of the thread .."): BUG: unable to handle kernel NULL pointer dereference at 0000000000000208 Linus Torvalds <torvalds@linux-foundation.org> - 2017-09-16 20:30 +0200
Re: d57108d4f6 ("watchdog/core: Get rid of the thread .."): BUG: unable to handle kernel NULL pointer dereference at 0000000000000208 Thomas Gleixner <tglx@linutronix.de> - 2017-09-16 23:50 +0200
Re: d57108d4f6 ("watchdog/core: Get rid of the thread .."): BUG: unable to handle kernel NULL pointer dereference at 0000000000000208 Linus Torvalds <torvalds@linux-foundation.org> - 2017-09-17 00:10 +0200
csiph-web