/*
* Subject to the GPL, version 2.
*/
#include "xmalloc.h"
struct panic_handler {
void *arg;
pid_t pid;
bool is_enabled;
void (*on_panic)(void *arg);
struct panic_handler *next;
};
static struct panic_handler *panic_handlers;
void panic_handler_add(void (*on_panic)(void *arg), void *arg)
{
struct panic_handler *handler = xmallocz(sizeof(*handler));
handler->arg = arg;
handler->pid = getpid();
handler->is_enabled = true;
handler->on_panic = on_panic;
handler->next = panic_handlers;
panic_handlers = handler;
};
void call_panic_handlers(void)
{
struct panic_handler *it;
pid_t pid = getpid();
for (it = panic_handlers; it; it = it->next) {
if (it->pid == pid && it->is_enabled) {
it->is_enabled = false;
it->on_panic(it->arg);
}
}
}
='main'>index : net-next.git
oprofile/nmi timer: Convert to hotplug state machine
Install the callbacks via the state machine and let the core invoke
the callbacks on the already online CPUs.
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Cc: oprofile-list@lists.sf.net
Cc: Robert Richter <rric@kernel.org>
Cc: rt@linutronix.de
Link: http://lkml.kernel.org/r/20161126231350.10321-6-bigeasy@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>