mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-30 08:02:30 +00:00
cf392d10b6
This patch adds the ability for a given state to have multiple instances. Until now all states have a single instance and the startup / teardown callback use global variables. A few drivers need to perform a the same callbacks on multiple "instances". Currently we have three drivers in tree which all have a global list which they iterate over. With multi instance they support don't need their private list and the functionality has been moved into core code. Plus we hold the hotplug lock in core so no cpus comes/goes while instances are registered and we do rollback in error case :) Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Will Deacon <will.deacon@arm.com> Cc: rt@linutronix.de Link: http://lkml.kernel.org/r/1471024183-12666-3-git-send-email-bigeasy@linutronix.de Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
94 lines
1.8 KiB
C
94 lines
1.8 KiB
C
#undef TRACE_SYSTEM
|
|
#define TRACE_SYSTEM cpuhp
|
|
|
|
#if !defined(_TRACE_CPUHP_H) || defined(TRACE_HEADER_MULTI_READ)
|
|
#define _TRACE_CPUHP_H
|
|
|
|
#include <linux/tracepoint.h>
|
|
|
|
TRACE_EVENT(cpuhp_enter,
|
|
|
|
TP_PROTO(unsigned int cpu,
|
|
int target,
|
|
int idx,
|
|
int (*fun)(unsigned int)),
|
|
|
|
TP_ARGS(cpu, target, idx, fun),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( unsigned int, cpu )
|
|
__field( int, target )
|
|
__field( int, idx )
|
|
__field( void *, fun )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->cpu = cpu;
|
|
__entry->target = target;
|
|
__entry->idx = idx;
|
|
__entry->fun = fun;
|
|
),
|
|
|
|
TP_printk("cpu: %04u target: %3d step: %3d (%pf)",
|
|
__entry->cpu, __entry->target, __entry->idx, __entry->fun)
|
|
);
|
|
|
|
TRACE_EVENT(cpuhp_multi_enter,
|
|
|
|
TP_PROTO(unsigned int cpu,
|
|
int target,
|
|
int idx,
|
|
int (*fun)(unsigned int, struct hlist_node *),
|
|
struct hlist_node *node),
|
|
|
|
TP_ARGS(cpu, target, idx, fun, node),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( unsigned int, cpu )
|
|
__field( int, target )
|
|
__field( int, idx )
|
|
__field( void *, fun )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->cpu = cpu;
|
|
__entry->target = target;
|
|
__entry->idx = idx;
|
|
__entry->fun = fun;
|
|
),
|
|
|
|
TP_printk("cpu: %04u target: %3d step: %3d (%pf)",
|
|
__entry->cpu, __entry->target, __entry->idx, __entry->fun)
|
|
);
|
|
|
|
TRACE_EVENT(cpuhp_exit,
|
|
|
|
TP_PROTO(unsigned int cpu,
|
|
int state,
|
|
int idx,
|
|
int ret),
|
|
|
|
TP_ARGS(cpu, state, idx, ret),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( unsigned int, cpu )
|
|
__field( int, state )
|
|
__field( int, idx )
|
|
__field( int, ret )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->cpu = cpu;
|
|
__entry->state = state;
|
|
__entry->idx = idx;
|
|
__entry->ret = ret;
|
|
),
|
|
|
|
TP_printk(" cpu: %04u state: %3d step: %3d ret: %d",
|
|
__entry->cpu, __entry->state, __entry->idx, __entry->ret)
|
|
);
|
|
|
|
#endif
|
|
|
|
/* This part must be outside protection */
|
|
#include <trace/define_trace.h>
|