Merge tag 'trace-v4.19-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace
Steven writes: "tracing: Two fixes for 4.19 This fixes two bugs: - Fix size mismatch of tracepoint array - Have preemptirq test module use same clock source of the selftest" * tag 'trace-v4.19-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace: tracing: Use trace_clock_local() for looping in preemptirq_delay_test.c tracepoint: Fix tracepoint array element size mismatch
This commit is contained in:
@@ -20,6 +20,7 @@
|
||||
#include <linux/export.h>
|
||||
#include <linux/rbtree_latch.h>
|
||||
#include <linux/error-injection.h>
|
||||
#include <linux/tracepoint-defs.h>
|
||||
|
||||
#include <linux/percpu.h>
|
||||
#include <asm/module.h>
|
||||
@@ -430,7 +431,7 @@ struct module {
|
||||
|
||||
#ifdef CONFIG_TRACEPOINTS
|
||||
unsigned int num_tracepoints;
|
||||
struct tracepoint * const *tracepoints_ptrs;
|
||||
tracepoint_ptr_t *tracepoints_ptrs;
|
||||
#endif
|
||||
#ifdef HAVE_JUMP_LABEL
|
||||
struct jump_entry *jump_entries;
|
||||
|
@@ -35,6 +35,12 @@ struct tracepoint {
|
||||
struct tracepoint_func __rcu *funcs;
|
||||
};
|
||||
|
||||
#ifdef CONFIG_HAVE_ARCH_PREL32_RELOCATIONS
|
||||
typedef const int tracepoint_ptr_t;
|
||||
#else
|
||||
typedef struct tracepoint * const tracepoint_ptr_t;
|
||||
#endif
|
||||
|
||||
struct bpf_raw_event_map {
|
||||
struct tracepoint *tp;
|
||||
void *bpf_func;
|
||||
|
@@ -99,6 +99,29 @@ extern void syscall_unregfunc(void);
|
||||
#define TRACE_DEFINE_ENUM(x)
|
||||
#define TRACE_DEFINE_SIZEOF(x)
|
||||
|
||||
#ifdef CONFIG_HAVE_ARCH_PREL32_RELOCATIONS
|
||||
static inline struct tracepoint *tracepoint_ptr_deref(tracepoint_ptr_t *p)
|
||||
{
|
||||
return offset_to_ptr(p);
|
||||
}
|
||||
|
||||
#define __TRACEPOINT_ENTRY(name) \
|
||||
asm(" .section \"__tracepoints_ptrs\", \"a\" \n" \
|
||||
" .balign 4 \n" \
|
||||
" .long __tracepoint_" #name " - . \n" \
|
||||
" .previous \n")
|
||||
#else
|
||||
static inline struct tracepoint *tracepoint_ptr_deref(tracepoint_ptr_t *p)
|
||||
{
|
||||
return *p;
|
||||
}
|
||||
|
||||
#define __TRACEPOINT_ENTRY(name) \
|
||||
static tracepoint_ptr_t __tracepoint_ptr_##name __used \
|
||||
__attribute__((section("__tracepoints_ptrs"))) = \
|
||||
&__tracepoint_##name
|
||||
#endif
|
||||
|
||||
#endif /* _LINUX_TRACEPOINT_H */
|
||||
|
||||
/*
|
||||
@@ -253,19 +276,6 @@ extern void syscall_unregfunc(void);
|
||||
return static_key_false(&__tracepoint_##name.key); \
|
||||
}
|
||||
|
||||
#ifdef CONFIG_HAVE_ARCH_PREL32_RELOCATIONS
|
||||
#define __TRACEPOINT_ENTRY(name) \
|
||||
asm(" .section \"__tracepoints_ptrs\", \"a\" \n" \
|
||||
" .balign 4 \n" \
|
||||
" .long __tracepoint_" #name " - . \n" \
|
||||
" .previous \n")
|
||||
#else
|
||||
#define __TRACEPOINT_ENTRY(name) \
|
||||
static struct tracepoint * const __tracepoint_ptr_##name __used \
|
||||
__attribute__((section("__tracepoints_ptrs"))) = \
|
||||
&__tracepoint_##name
|
||||
#endif
|
||||
|
||||
/*
|
||||
* We have no guarantee that gcc and the linker won't up-align the tracepoint
|
||||
* structures, so we create an array of pointers that will be used for iteration
|
||||
|
Reference in New Issue
Block a user