watchdog/hardlockup/perf: Simplify deferred event destroy
authorThomas Gleixner <tglx@linutronix.de>
Tue, 12 Sep 2017 19:37:22 +0000 (21:37 +0200)
committerIngo Molnar <mingo@kernel.org>
Thu, 14 Sep 2017 09:41:08 +0000 (11:41 +0200)
Now that all functionality is properly serialized against CPU hotplug,
remove the extra per cpu storage which holds the disabled events for
cleanup. The core makes sure that cleanup happens before new events are
created.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Don Zickus <dzickus@redhat.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Chris Metcalf <cmetcalf@mellanox.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Nicholas Piggin <npiggin@gmail.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Sebastian Siewior <bigeasy@linutronix.de>
Cc: Ulrich Obergfell <uobergfe@redhat.com>
Link: http://lkml.kernel.org/r/20170912194148.340708074@linutronix.de
Signed-off-by: Ingo Molnar <mingo@kernel.org>
kernel/watchdog_hld.c

index 509bb6b59c4148d9c4eb7e07acab2e3a9f4d4842..b2931154b5f2809993a5c91bf8f76a6136e134ba 100644 (file)
@@ -21,7 +21,6 @@
 static DEFINE_PER_CPU(bool, hard_watchdog_warn);
 static DEFINE_PER_CPU(bool, watchdog_nmi_touch);
 static DEFINE_PER_CPU(struct perf_event *, watchdog_ev);
-static DEFINE_PER_CPU(struct perf_event *, dead_event);
 static struct cpumask dead_events_mask;
 
 static unsigned long hardlockup_allcpu_dumped;
@@ -204,8 +203,6 @@ void hardlockup_detector_perf_disable(void)
 
        if (event) {
                perf_event_disable(event);
-               this_cpu_write(watchdog_ev, NULL);
-               this_cpu_write(dead_event, event);
                cpumask_set_cpu(smp_processor_id(), &dead_events_mask);
                watchdog_cpus--;
        }
@@ -221,9 +218,9 @@ void hardlockup_detector_perf_cleanup(void)
        int cpu;
 
        for_each_cpu(cpu, &dead_events_mask) {
-               struct perf_event *event = per_cpu(dead_event, cpu);
+               struct perf_event *event = per_cpu(watchdog_ev, cpu);
 
-               per_cpu(dead_event, cpu) = NULL;
+               per_cpu(watchdog_ev, cpu) = NULL;
                perf_event_release_kernel(event);
        }
        cpumask_clear(&dead_events_mask);