diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-09-04 11:17:12 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-09-04 11:17:12 -0400 |
| commit | b854e4de0bf88d094476af82c0d5a80f6f2af916 (patch) | |
| tree | 6e9b0a9f28468b043bd395fd816c4b44d4ac8f58 /include | |
| parent | 458c3f60ef12996d5a5b390260a5112bb1da1615 (diff) | |
| parent | 7d992feb7694a21ee81f22894b455dadd5d1c110 (diff) | |
Merge branch 'core-rcu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull RCU updates from Ingo Molnar:
"Main RCU changes this cycle were:
- Full-system idle detection. This is for use by Frederic
Weisbecker's adaptive-ticks mechanism. Its purpose is to allow the
timekeeping CPU to shut off its tick when all other CPUs are idle.
- Miscellaneous fixes.
- Improved rcutorture test coverage.
- Updated RCU documentation"
* 'core-rcu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (30 commits)
nohz_full: Force RCU's grace-period kthreads onto timekeeping CPU
nohz_full: Add full-system-idle state machine
jiffies: Avoid undefined behavior from signed overflow
rcu: Simplify _rcu_barrier() processing
rcu: Make rcutorture emit online failures if verbose
rcu: Remove unused variable from rcu_torture_writer()
rcu: Sort rcutorture module parameters
rcu: Increase rcutorture test coverage
rcu: Add duplicate-callback tests to rcutorture
doc: Fix memory-barrier control-dependency example
rcu: Update RTFP documentation
nohz_full: Add full-system-idle arguments to API
nohz_full: Add full-system idle states and variables
nohz_full: Add per-CPU idle-state tracking
nohz_full: Add rcu_dyntick data for scalable detection of all-idle state
nohz_full: Add Kconfig parameter for scalable detection of all-idle state
nohz_full: Add testing information to documentation
rcu: Eliminate unused APIs intended for adaptive ticks
rcu: Select IRQ_WORK from TREE_PREEMPT_RCU
rculist: list_first_or_null_rcu() should use list_entry_rcu()
...
Diffstat (limited to 'include')
| -rw-r--r-- | include/asm-generic/vmlinux.lds.h | 7 | ||||
| -rw-r--r-- | include/linux/debugobjects.h | 6 | ||||
| -rw-r--r-- | include/linux/ftrace_event.h | 34 | ||||
| -rw-r--r-- | include/linux/jiffies.h | 8 | ||||
| -rw-r--r-- | include/linux/rculist.h | 5 | ||||
| -rw-r--r-- | include/linux/rcupdate.h | 26 | ||||
| -rw-r--r-- | include/trace/events/rcu.h | 82 |
7 files changed, 111 insertions, 57 deletions
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index 69732d279e8b..83e2c31e8b00 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h | |||
| @@ -122,8 +122,12 @@ | |||
| 122 | #define TRACE_PRINTKS() VMLINUX_SYMBOL(__start___trace_bprintk_fmt) = .; \ | 122 | #define TRACE_PRINTKS() VMLINUX_SYMBOL(__start___trace_bprintk_fmt) = .; \ |
| 123 | *(__trace_printk_fmt) /* Trace_printk fmt' pointer */ \ | 123 | *(__trace_printk_fmt) /* Trace_printk fmt' pointer */ \ |
| 124 | VMLINUX_SYMBOL(__stop___trace_bprintk_fmt) = .; | 124 | VMLINUX_SYMBOL(__stop___trace_bprintk_fmt) = .; |
| 125 | #define TRACEPOINT_STR() VMLINUX_SYMBOL(__start___tracepoint_str) = .; \ | ||
| 126 | *(__tracepoint_str) /* Trace_printk fmt' pointer */ \ | ||
| 127 | VMLINUX_SYMBOL(__stop___tracepoint_str) = .; | ||
| 125 | #else | 128 | #else |
| 126 | #define TRACE_PRINTKS() | 129 | #define TRACE_PRINTKS() |
| 130 | #define TRACEPOINT_STR() | ||
| 127 | #endif | 131 | #endif |
| 128 | 132 | ||
| 129 | #ifdef CONFIG_FTRACE_SYSCALLS | 133 | #ifdef CONFIG_FTRACE_SYSCALLS |
| @@ -190,7 +194,8 @@ | |||
| 190 | VMLINUX_SYMBOL(__stop___verbose) = .; \ | 194 | VMLINUX_SYMBOL(__stop___verbose) = .; \ |
| 191 | LIKELY_PROFILE() \ | 195 | LIKELY_PROFILE() \ |
| 192 | BRANCH_PROFILE() \ | 196 | BRANCH_PROFILE() \ |
| 193 | TRACE_PRINTKS() | 197 | TRACE_PRINTKS() \ |
| 198 | TRACEPOINT_STR() | ||
| 194 | 199 | ||
| 195 | /* | 200 | /* |
| 196 | * Data section helpers | 201 | * Data section helpers |
diff --git a/include/linux/debugobjects.h b/include/linux/debugobjects.h index 0e5f5785d9f2..98ffcbd4888e 100644 --- a/include/linux/debugobjects.h +++ b/include/linux/debugobjects.h | |||
| @@ -63,7 +63,7 @@ struct debug_obj_descr { | |||
| 63 | extern void debug_object_init (void *addr, struct debug_obj_descr *descr); | 63 | extern void debug_object_init (void *addr, struct debug_obj_descr *descr); |
| 64 | extern void | 64 | extern void |
| 65 | debug_object_init_on_stack(void *addr, struct debug_obj_descr *descr); | 65 | debug_object_init_on_stack(void *addr, struct debug_obj_descr *descr); |
| 66 | extern void debug_object_activate (void *addr, struct debug_obj_descr *descr); | 66 | extern int debug_object_activate (void *addr, struct debug_obj_descr *descr); |
| 67 | extern void debug_object_deactivate(void *addr, struct debug_obj_descr *descr); | 67 | extern void debug_object_deactivate(void *addr, struct debug_obj_descr *descr); |
| 68 | extern void debug_object_destroy (void *addr, struct debug_obj_descr *descr); | 68 | extern void debug_object_destroy (void *addr, struct debug_obj_descr *descr); |
| 69 | extern void debug_object_free (void *addr, struct debug_obj_descr *descr); | 69 | extern void debug_object_free (void *addr, struct debug_obj_descr *descr); |
| @@ -85,8 +85,8 @@ static inline void | |||
| 85 | debug_object_init (void *addr, struct debug_obj_descr *descr) { } | 85 | debug_object_init (void *addr, struct debug_obj_descr *descr) { } |
| 86 | static inline void | 86 | static inline void |
| 87 | debug_object_init_on_stack(void *addr, struct debug_obj_descr *descr) { } | 87 | debug_object_init_on_stack(void *addr, struct debug_obj_descr *descr) { } |
| 88 | static inline void | 88 | static inline int |
| 89 | debug_object_activate (void *addr, struct debug_obj_descr *descr) { } | 89 | debug_object_activate (void *addr, struct debug_obj_descr *descr) { return 0; } |
| 90 | static inline void | 90 | static inline void |
| 91 | debug_object_deactivate(void *addr, struct debug_obj_descr *descr) { } | 91 | debug_object_deactivate(void *addr, struct debug_obj_descr *descr) { } |
| 92 | static inline void | 92 | static inline void |
diff --git a/include/linux/ftrace_event.h b/include/linux/ftrace_event.h index 120d57a1c3a5..5eaa746735ff 100644 --- a/include/linux/ftrace_event.h +++ b/include/linux/ftrace_event.h | |||
| @@ -359,6 +359,40 @@ do { \ | |||
| 359 | __trace_printk(ip, fmt, ##args); \ | 359 | __trace_printk(ip, fmt, ##args); \ |
| 360 | } while (0) | 360 | } while (0) |
| 361 | 361 | ||
| 362 | /** | ||
| 363 | * tracepoint_string - register constant persistent string to trace system | ||
| 364 | * @str - a constant persistent string that will be referenced in tracepoints | ||
| 365 | * | ||
| 366 | * If constant strings are being used in tracepoints, it is faster and | ||
| 367 | * more efficient to just save the pointer to the string and reference | ||
| 368 | * that with a printf "%s" instead of saving the string in the ring buffer | ||
| 369 | * and wasting space and time. | ||
| 370 | * | ||
| 371 | * The problem with the above approach is that userspace tools that read | ||
| 372 | * the binary output of the trace buffers do not have access to the string. | ||
| 373 | * Instead they just show the address of the string which is not very | ||
| 374 | * useful to users. | ||
| 375 | * | ||
| 376 | * With tracepoint_string(), the string will be registered to the tracing | ||
| 377 | * system and exported to userspace via the debugfs/tracing/printk_formats | ||
| 378 | * file that maps the string address to the string text. This way userspace | ||
| 379 | * tools that read the binary buffers have a way to map the pointers to | ||
| 380 | * the ASCII strings they represent. | ||
| 381 | * | ||
| 382 | * The @str used must be a constant string and persistent as it would not | ||
| 383 | * make sense to show a string that no longer exists. But it is still fine | ||
| 384 | * to be used with modules, because when modules are unloaded, if they | ||
| 385 | * had tracepoints, the ring buffers are cleared too. As long as the string | ||
| 386 | * does not change during the life of the module, it is fine to use | ||
| 387 | * tracepoint_string() within a module. | ||
| 388 | */ | ||
| 389 | #define tracepoint_string(str) \ | ||
| 390 | ({ \ | ||
| 391 | static const char *___tp_str __tracepoint_string = str; \ | ||
| 392 | ___tp_str; \ | ||
| 393 | }) | ||
| 394 | #define __tracepoint_string __attribute__((section("__tracepoint_str"))) | ||
| 395 | |||
| 362 | #ifdef CONFIG_PERF_EVENTS | 396 | #ifdef CONFIG_PERF_EVENTS |
| 363 | struct perf_event; | 397 | struct perf_event; |
| 364 | 398 | ||
diff --git a/include/linux/jiffies.h b/include/linux/jiffies.h index 97ba4e78a37e..d235e88cfd7c 100644 --- a/include/linux/jiffies.h +++ b/include/linux/jiffies.h | |||
| @@ -101,13 +101,13 @@ static inline u64 get_jiffies_64(void) | |||
| 101 | #define time_after(a,b) \ | 101 | #define time_after(a,b) \ |
| 102 | (typecheck(unsigned long, a) && \ | 102 | (typecheck(unsigned long, a) && \ |
| 103 | typecheck(unsigned long, b) && \ | 103 | typecheck(unsigned long, b) && \ |
| 104 | ((long)(b) - (long)(a) < 0)) | 104 | ((long)((b) - (a)) < 0)) |
| 105 | #define time_before(a,b) time_after(b,a) | 105 | #define time_before(a,b) time_after(b,a) |
| 106 | 106 | ||
| 107 | #define time_after_eq(a,b) \ | 107 | #define time_after_eq(a,b) \ |
| 108 | (typecheck(unsigned long, a) && \ | 108 | (typecheck(unsigned long, a) && \ |
| 109 | typecheck(unsigned long, b) && \ | 109 | typecheck(unsigned long, b) && \ |
| 110 | ((long)(a) - (long)(b) >= 0)) | 110 | ((long)((a) - (b)) >= 0)) |
| 111 | #define time_before_eq(a,b) time_after_eq(b,a) | 111 | #define time_before_eq(a,b) time_after_eq(b,a) |
| 112 | 112 | ||
| 113 | /* | 113 | /* |
| @@ -130,13 +130,13 @@ static inline u64 get_jiffies_64(void) | |||
| 130 | #define time_after64(a,b) \ | 130 | #define time_after64(a,b) \ |
| 131 | (typecheck(__u64, a) && \ | 131 | (typecheck(__u64, a) && \ |
| 132 | typecheck(__u64, b) && \ | 132 | typecheck(__u64, b) && \ |
| 133 | ((__s64)(b) - (__s64)(a) < 0)) | 133 | ((__s64)((b) - (a)) < 0)) |
| 134 | #define time_before64(a,b) time_after64(b,a) | 134 | #define time_before64(a,b) time_after64(b,a) |
| 135 | 135 | ||
| 136 | #define time_after_eq64(a,b) \ | 136 | #define time_after_eq64(a,b) \ |
| 137 | (typecheck(__u64, a) && \ | 137 | (typecheck(__u64, a) && \ |
| 138 | typecheck(__u64, b) && \ | 138 | typecheck(__u64, b) && \ |
| 139 | ((__s64)(a) - (__s64)(b) >= 0)) | 139 | ((__s64)((a) - (b)) >= 0)) |
| 140 | #define time_before_eq64(a,b) time_after_eq64(b,a) | 140 | #define time_before_eq64(a,b) time_after_eq64(b,a) |
| 141 | 141 | ||
| 142 | #define time_in_range64(a, b, c) \ | 142 | #define time_in_range64(a, b, c) \ |
diff --git a/include/linux/rculist.h b/include/linux/rculist.h index f4b1001a4676..4106721c4e5e 100644 --- a/include/linux/rculist.h +++ b/include/linux/rculist.h | |||
| @@ -267,8 +267,9 @@ static inline void list_splice_init_rcu(struct list_head *list, | |||
| 267 | */ | 267 | */ |
| 268 | #define list_first_or_null_rcu(ptr, type, member) \ | 268 | #define list_first_or_null_rcu(ptr, type, member) \ |
| 269 | ({struct list_head *__ptr = (ptr); \ | 269 | ({struct list_head *__ptr = (ptr); \ |
| 270 | struct list_head __rcu *__next = list_next_rcu(__ptr); \ | 270 | struct list_head *__next = ACCESS_ONCE(__ptr->next); \ |
| 271 | likely(__ptr != __next) ? container_of(__next, type, member) : NULL; \ | 271 | likely(__ptr != __next) ? \ |
| 272 | list_entry_rcu(__next, type, member) : NULL; \ | ||
| 272 | }) | 273 | }) |
| 273 | 274 | ||
| 274 | /** | 275 | /** |
diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h index 4b14bdc911d7..f1f1bc39346b 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h | |||
| @@ -52,7 +52,7 @@ extern int rcutorture_runnable; /* for sysctl */ | |||
| 52 | #if defined(CONFIG_TREE_RCU) || defined(CONFIG_TREE_PREEMPT_RCU) | 52 | #if defined(CONFIG_TREE_RCU) || defined(CONFIG_TREE_PREEMPT_RCU) |
| 53 | extern void rcutorture_record_test_transition(void); | 53 | extern void rcutorture_record_test_transition(void); |
| 54 | extern void rcutorture_record_progress(unsigned long vernum); | 54 | extern void rcutorture_record_progress(unsigned long vernum); |
| 55 | extern void do_trace_rcu_torture_read(char *rcutorturename, | 55 | extern void do_trace_rcu_torture_read(const char *rcutorturename, |
| 56 | struct rcu_head *rhp, | 56 | struct rcu_head *rhp, |
| 57 | unsigned long secs, | 57 | unsigned long secs, |
| 58 | unsigned long c_old, | 58 | unsigned long c_old, |
| @@ -65,7 +65,7 @@ static inline void rcutorture_record_progress(unsigned long vernum) | |||
| 65 | { | 65 | { |
| 66 | } | 66 | } |
| 67 | #ifdef CONFIG_RCU_TRACE | 67 | #ifdef CONFIG_RCU_TRACE |
| 68 | extern void do_trace_rcu_torture_read(char *rcutorturename, | 68 | extern void do_trace_rcu_torture_read(const char *rcutorturename, |
| 69 | struct rcu_head *rhp, | 69 | struct rcu_head *rhp, |
| 70 | unsigned long secs, | 70 | unsigned long secs, |
| 71 | unsigned long c_old, | 71 | unsigned long c_old, |
| @@ -229,13 +229,9 @@ extern void rcu_irq_exit(void); | |||
| 229 | #ifdef CONFIG_RCU_USER_QS | 229 | #ifdef CONFIG_RCU_USER_QS |
| 230 | extern void rcu_user_enter(void); | 230 | extern void rcu_user_enter(void); |
| 231 | extern void rcu_user_exit(void); | 231 | extern void rcu_user_exit(void); |
| 232 | extern void rcu_user_enter_after_irq(void); | ||
| 233 | extern void rcu_user_exit_after_irq(void); | ||
| 234 | #else | 232 | #else |
| 235 | static inline void rcu_user_enter(void) { } | 233 | static inline void rcu_user_enter(void) { } |
| 236 | static inline void rcu_user_exit(void) { } | 234 | static inline void rcu_user_exit(void) { } |
| 237 | static inline void rcu_user_enter_after_irq(void) { } | ||
| 238 | static inline void rcu_user_exit_after_irq(void) { } | ||
| 239 | static inline void rcu_user_hooks_switch(struct task_struct *prev, | 235 | static inline void rcu_user_hooks_switch(struct task_struct *prev, |
| 240 | struct task_struct *next) { } | 236 | struct task_struct *next) { } |
| 241 | #endif /* CONFIG_RCU_USER_QS */ | 237 | #endif /* CONFIG_RCU_USER_QS */ |
| @@ -1015,4 +1011,22 @@ static inline bool rcu_is_nocb_cpu(int cpu) { return false; } | |||
| 1015 | #endif /* #else #ifdef CONFIG_RCU_NOCB_CPU */ | 1011 | #endif /* #else #ifdef CONFIG_RCU_NOCB_CPU */ |
| 1016 | 1012 | ||
| 1017 | 1013 | ||
| 1014 | /* Only for use by adaptive-ticks code. */ | ||
| 1015 | #ifdef CONFIG_NO_HZ_FULL_SYSIDLE | ||
| 1016 | extern bool rcu_sys_is_idle(void); | ||
| 1017 | extern void rcu_sysidle_force_exit(void); | ||
| 1018 | #else /* #ifdef CONFIG_NO_HZ_FULL_SYSIDLE */ | ||
| 1019 | |||
| 1020 | static inline bool rcu_sys_is_idle(void) | ||
| 1021 | { | ||
| 1022 | return false; | ||
| 1023 | } | ||
| 1024 | |||
| 1025 | static inline void rcu_sysidle_force_exit(void) | ||
| 1026 | { | ||
| 1027 | } | ||
| 1028 | |||
| 1029 | #endif /* #else #ifdef CONFIG_NO_HZ_FULL_SYSIDLE */ | ||
| 1030 | |||
| 1031 | |||
| 1018 | #endif /* __LINUX_RCUPDATE_H */ | 1032 | #endif /* __LINUX_RCUPDATE_H */ |
diff --git a/include/trace/events/rcu.h b/include/trace/events/rcu.h index 59ebcc89f148..ee2376cfaab3 100644 --- a/include/trace/events/rcu.h +++ b/include/trace/events/rcu.h | |||
| @@ -19,12 +19,12 @@ | |||
| 19 | */ | 19 | */ |
| 20 | TRACE_EVENT(rcu_utilization, | 20 | TRACE_EVENT(rcu_utilization, |
| 21 | 21 | ||
| 22 | TP_PROTO(char *s), | 22 | TP_PROTO(const char *s), |
| 23 | 23 | ||
| 24 | TP_ARGS(s), | 24 | TP_ARGS(s), |
| 25 | 25 | ||
| 26 | TP_STRUCT__entry( | 26 | TP_STRUCT__entry( |
| 27 | __field(char *, s) | 27 | __field(const char *, s) |
| 28 | ), | 28 | ), |
| 29 | 29 | ||
| 30 | TP_fast_assign( | 30 | TP_fast_assign( |
| @@ -51,14 +51,14 @@ TRACE_EVENT(rcu_utilization, | |||
| 51 | */ | 51 | */ |
| 52 | TRACE_EVENT(rcu_grace_period, | 52 | TRACE_EVENT(rcu_grace_period, |
| 53 | 53 | ||
| 54 | TP_PROTO(char *rcuname, unsigned long gpnum, char *gpevent), | 54 | TP_PROTO(const char *rcuname, unsigned long gpnum, const char *gpevent), |
| 55 | 55 | ||
| 56 | TP_ARGS(rcuname, gpnum, gpevent), | 56 | TP_ARGS(rcuname, gpnum, gpevent), |
| 57 | 57 | ||
| 58 | TP_STRUCT__entry( | 58 | TP_STRUCT__entry( |
| 59 | __field(char *, rcuname) | 59 | __field(const char *, rcuname) |
| 60 | __field(unsigned long, gpnum) | 60 | __field(unsigned long, gpnum) |
| 61 | __field(char *, gpevent) | 61 | __field(const char *, gpevent) |
| 62 | ), | 62 | ), |
| 63 | 63 | ||
| 64 | TP_fast_assign( | 64 | TP_fast_assign( |
| @@ -89,21 +89,21 @@ TRACE_EVENT(rcu_grace_period, | |||
| 89 | */ | 89 | */ |
| 90 | TRACE_EVENT(rcu_future_grace_period, | 90 | TRACE_EVENT(rcu_future_grace_period, |
| 91 | 91 | ||
| 92 | TP_PROTO(char *rcuname, unsigned long gpnum, unsigned long completed, | 92 | TP_PROTO(const char *rcuname, unsigned long gpnum, unsigned long completed, |
| 93 | unsigned long c, u8 level, int grplo, int grphi, | 93 | unsigned long c, u8 level, int grplo, int grphi, |
| 94 | char *gpevent), | 94 | const char *gpevent), |
| 95 | 95 | ||
| 96 | TP_ARGS(rcuname, gpnum, completed, c, level, grplo, grphi, gpevent), | 96 | TP_ARGS(rcuname, gpnum, completed, c, level, grplo, grphi, gpevent), |
| 97 | 97 | ||
| 98 | TP_STRUCT__entry( | 98 | TP_STRUCT__entry( |
| 99 | __field(char *, rcuname) | 99 | __field(const char *, rcuname) |
| 100 | __field(unsigned long, gpnum) | 100 | __field(unsigned long, gpnum) |
| 101 | __field(unsigned long, completed) | 101 | __field(unsigned long, completed) |
| 102 | __field(unsigned long, c) | 102 | __field(unsigned long, c) |
| 103 | __field(u8, level) | 103 | __field(u8, level) |
| 104 | __field(int, grplo) | 104 | __field(int, grplo) |
| 105 | __field(int, grphi) | 105 | __field(int, grphi) |
| 106 | __field(char *, gpevent) | 106 | __field(const char *, gpevent) |
| 107 | ), | 107 | ), |
| 108 | 108 | ||
| 109 | TP_fast_assign( | 109 | TP_fast_assign( |
| @@ -132,13 +132,13 @@ TRACE_EVENT(rcu_future_grace_period, | |||
| 132 | */ | 132 | */ |
| 133 | TRACE_EVENT(rcu_grace_period_init, | 133 | TRACE_EVENT(rcu_grace_period_init, |
| 134 | 134 | ||
| 135 | TP_PROTO(char *rcuname, unsigned long gpnum, u8 level, | 135 | TP_PROTO(const char *rcuname, unsigned long gpnum, u8 level, |
| 136 | int grplo, int grphi, unsigned long qsmask), | 136 | int grplo, int grphi, unsigned long qsmask), |
| 137 | 137 | ||
| 138 | TP_ARGS(rcuname, gpnum, level, grplo, grphi, qsmask), | 138 | TP_ARGS(rcuname, gpnum, level, grplo, grphi, qsmask), |
| 139 | 139 | ||
| 140 | TP_STRUCT__entry( | 140 | TP_STRUCT__entry( |
| 141 | __field(char *, rcuname) | 141 | __field(const char *, rcuname) |
| 142 | __field(unsigned long, gpnum) | 142 | __field(unsigned long, gpnum) |
| 143 | __field(u8, level) | 143 | __field(u8, level) |
| 144 | __field(int, grplo) | 144 | __field(int, grplo) |
| @@ -168,12 +168,12 @@ TRACE_EVENT(rcu_grace_period_init, | |||
| 168 | */ | 168 | */ |
| 169 | TRACE_EVENT(rcu_preempt_task, | 169 | TRACE_EVENT(rcu_preempt_task, |
| 170 | 170 | ||
| 171 | TP_PROTO(char *rcuname, int pid, unsigned long gpnum), | 171 | TP_PROTO(const char *rcuname, int pid, unsigned long gpnum), |
| 172 | 172 | ||
| 173 | TP_ARGS(rcuname, pid, gpnum), | 173 | TP_ARGS(rcuname, pid, gpnum), |
| 174 | 174 | ||
| 175 | TP_STRUCT__entry( | 175 | TP_STRUCT__entry( |
| 176 | __field(char *, rcuname) | 176 | __field(const char *, rcuname) |
| 177 | __field(unsigned long, gpnum) | 177 | __field(unsigned long, gpnum) |
| 178 | __field(int, pid) | 178 | __field(int, pid) |
| 179 | ), | 179 | ), |
| @@ -195,12 +195,12 @@ TRACE_EVENT(rcu_preempt_task, | |||
| 195 | */ | 195 | */ |
| 196 | TRACE_EVENT(rcu_unlock_preempted_task, | 196 | TRACE_EVENT(rcu_unlock_preempted_task, |
| 197 | 197 | ||
| 198 | TP_PROTO(char *rcuname, unsigned long gpnum, int pid), | 198 | TP_PROTO(const char *rcuname, unsigned long gpnum, int pid), |
| 199 | 199 | ||
| 200 | TP_ARGS(rcuname, gpnum, pid), | 200 | TP_ARGS(rcuname, gpnum, pid), |
| 201 | 201 | ||
| 202 | TP_STRUCT__entry( | 202 | TP_STRUCT__entry( |
| 203 | __field(char *, rcuname) | 203 | __field(const char *, rcuname) |
| 204 | __field(unsigned long, gpnum) | 204 | __field(unsigned long, gpnum) |
| 205 | __field(int, pid) | 205 | __field(int, pid) |
| 206 | ), | 206 | ), |
| @@ -224,14 +224,14 @@ TRACE_EVENT(rcu_unlock_preempted_task, | |||
| 224 | */ | 224 | */ |
| 225 | TRACE_EVENT(rcu_quiescent_state_report, | 225 | TRACE_EVENT(rcu_quiescent_state_report, |
| 226 | 226 | ||
| 227 | TP_PROTO(char *rcuname, unsigned long gpnum, | 227 | TP_PROTO(const char *rcuname, unsigned long gpnum, |
| 228 | unsigned long mask, unsigned long qsmask, | 228 | unsigned long mask, unsigned long qsmask, |
| 229 | u8 level, int grplo, int grphi, int gp_tasks), | 229 | u8 level, int grplo, int grphi, int gp_tasks), |
| 230 | 230 | ||
| 231 | TP_ARGS(rcuname, gpnum, mask, qsmask, level, grplo, grphi, gp_tasks), | 231 | TP_ARGS(rcuname, gpnum, mask, qsmask, level, grplo, grphi, gp_tasks), |
| 232 | 232 | ||
| 233 | TP_STRUCT__entry( | 233 | TP_STRUCT__entry( |
| 234 | __field(char *, rcuname) | 234 | __field(const char *, rcuname) |
| 235 | __field(unsigned long, gpnum) | 235 | __field(unsigned long, gpnum) |
| 236 | __field(unsigned long, mask) | 236 | __field(unsigned long, mask) |
| 237 | __field(unsigned long, qsmask) | 237 | __field(unsigned long, qsmask) |
| @@ -268,15 +268,15 @@ TRACE_EVENT(rcu_quiescent_state_report, | |||
| 268 | */ | 268 | */ |
| 269 | TRACE_EVENT(rcu_fqs, | 269 | TRACE_EVENT(rcu_fqs, |
| 270 | 270 | ||
| 271 | TP_PROTO(char *rcuname, unsigned long gpnum, int cpu, char *qsevent), | 271 | TP_PROTO(const char *rcuname, unsigned long gpnum, int cpu, const char *qsevent), |
| 272 | 272 | ||
| 273 | TP_ARGS(rcuname, gpnum, cpu, qsevent), | 273 | TP_ARGS(rcuname, gpnum, cpu, qsevent), |
| 274 | 274 | ||
| 275 | TP_STRUCT__entry( | 275 | TP_STRUCT__entry( |
| 276 | __field(char *, rcuname) | 276 | __field(const char *, rcuname) |
| 277 | __field(unsigned long, gpnum) | 277 | __field(unsigned long, gpnum) |
| 278 | __field(int, cpu) | 278 | __field(int, cpu) |
| 279 | __field(char *, qsevent) | 279 | __field(const char *, qsevent) |
| 280 | ), | 280 | ), |
| 281 | 281 | ||
| 282 | TP_fast_assign( | 282 | TP_fast_assign( |
| @@ -308,12 +308,12 @@ TRACE_EVENT(rcu_fqs, | |||
| 308 | */ | 308 | */ |
| 309 | TRACE_EVENT(rcu_dyntick, | 309 | TRACE_EVENT(rcu_dyntick, |
| 310 | 310 | ||
| 311 | TP_PROTO(char *polarity, long long oldnesting, long long newnesting), | 311 | TP_PROTO(const char *polarity, long long oldnesting, long long newnesting), |
| 312 | 312 | ||
| 313 | TP_ARGS(polarity, oldnesting, newnesting), | 313 | TP_ARGS(polarity, oldnesting, newnesting), |
| 314 | 314 | ||
| 315 | TP_STRUCT__entry( | 315 | TP_STRUCT__entry( |
| 316 | __field(char *, polarity) | 316 | __field(const char *, polarity) |
| 317 | __field(long long, oldnesting) | 317 | __field(long long, oldnesting) |
| 318 | __field(long long, newnesting) | 318 | __field(long long, newnesting) |
| 319 | ), | 319 | ), |
| @@ -352,12 +352,12 @@ TRACE_EVENT(rcu_dyntick, | |||
| 352 | */ | 352 | */ |
| 353 | TRACE_EVENT(rcu_prep_idle, | 353 | TRACE_EVENT(rcu_prep_idle, |
| 354 | 354 | ||
| 355 | TP_PROTO(char *reason), | 355 | TP_PROTO(const char *reason), |
| 356 | 356 | ||
| 357 | TP_ARGS(reason), | 357 | TP_ARGS(reason), |
| 358 | 358 | ||
| 359 | TP_STRUCT__entry( | 359 | TP_STRUCT__entry( |
| 360 | __field(char *, reason) | 360 | __field(const char *, reason) |
| 361 | ), | 361 | ), |
| 362 | 362 | ||
| 363 | TP_fast_assign( | 363 | TP_fast_assign( |
| @@ -376,13 +376,13 @@ TRACE_EVENT(rcu_prep_idle, | |||
| 376 | */ | 376 | */ |
| 377 | TRACE_EVENT(rcu_callback, | 377 | TRACE_EVENT(rcu_callback, |
| 378 | 378 | ||
| 379 | TP_PROTO(char *rcuname, struct rcu_head *rhp, long qlen_lazy, | 379 | TP_PROTO(const char *rcuname, struct rcu_head *rhp, long qlen_lazy, |
| 380 | long qlen), | 380 | long qlen), |
| 381 | 381 | ||
| 382 | TP_ARGS(rcuname, rhp, qlen_lazy, qlen), | 382 | TP_ARGS(rcuname, rhp, qlen_lazy, qlen), |
| 383 | 383 | ||
| 384 | TP_STRUCT__entry( | 384 | TP_STRUCT__entry( |
| 385 | __field(char *, rcuname) | 385 | __field(const char *, rcuname) |
| 386 | __field(void *, rhp) | 386 | __field(void *, rhp) |
| 387 | __field(void *, func) | 387 | __field(void *, func) |
| 388 | __field(long, qlen_lazy) | 388 | __field(long, qlen_lazy) |
| @@ -412,13 +412,13 @@ TRACE_EVENT(rcu_callback, | |||
| 412 | */ | 412 | */ |
| 413 | TRACE_EVENT(rcu_kfree_callback, | 413 | TRACE_EVENT(rcu_kfree_callback, |
| 414 | 414 | ||
| 415 | TP_PROTO(char *rcuname, struct rcu_head *rhp, unsigned long offset, | 415 | TP_PROTO(const char *rcuname, struct rcu_head *rhp, unsigned long offset, |
| 416 | long qlen_lazy, long qlen), | 416 | long qlen_lazy, long qlen), |
| 417 | 417 | ||
| 418 | TP_ARGS(rcuname, rhp, offset, qlen_lazy, qlen), | 418 | TP_ARGS(rcuname, rhp, offset, qlen_lazy, qlen), |
| 419 | 419 | ||
| 420 | TP_STRUCT__entry( | 420 | TP_STRUCT__entry( |
| 421 | __field(char *, rcuname) | 421 | __field(const char *, rcuname) |
| 422 | __field(void *, rhp) | 422 | __field(void *, rhp) |
| 423 | __field(unsigned long, offset) | 423 | __field(unsigned long, offset) |
| 424 | __field(long, qlen_lazy) | 424 | __field(long, qlen_lazy) |
| @@ -447,12 +447,12 @@ TRACE_EVENT(rcu_kfree_callback, | |||
| 447 | */ | 447 | */ |
| 448 | TRACE_EVENT(rcu_batch_start, | 448 | TRACE_EVENT(rcu_batch_start, |
| 449 | 449 | ||
| 450 | TP_PROTO(char *rcuname, long qlen_lazy, long qlen, long blimit), | 450 | TP_PROTO(const char *rcuname, long qlen_lazy, long qlen, long blimit), |
| 451 | 451 | ||
| 452 | TP_ARGS(rcuname, qlen_lazy, qlen, blimit), | 452 | TP_ARGS(rcuname, qlen_lazy, qlen, blimit), |
| 453 | 453 | ||
| 454 | TP_STRUCT__entry( | 454 | TP_STRUCT__entry( |
| 455 | __field(char *, rcuname) | 455 | __field(const char *, rcuname) |
| 456 | __field(long, qlen_lazy) | 456 | __field(long, qlen_lazy) |
| 457 | __field(long, qlen) | 457 | __field(long, qlen) |
| 458 | __field(long, blimit) | 458 | __field(long, blimit) |
| @@ -477,12 +477,12 @@ TRACE_EVENT(rcu_batch_start, | |||
| 477 | */ | 477 | */ |
| 478 | TRACE_EVENT(rcu_invoke_callback, | 478 | TRACE_EVENT(rcu_invoke_callback, |
| 479 | 479 | ||
| 480 | TP_PROTO(char *rcuname, struct rcu_head *rhp), | 480 | TP_PROTO(const char *rcuname, struct rcu_head *rhp), |
| 481 | 481 | ||
| 482 | TP_ARGS(rcuname, rhp), | 482 | TP_ARGS(rcuname, rhp), |
| 483 | 483 | ||
| 484 | TP_STRUCT__entry( | 484 | TP_STRUCT__entry( |
| 485 | __field(char *, rcuname) | 485 | __field(const char *, rcuname) |
| 486 | __field(void *, rhp) | 486 | __field(void *, rhp) |
| 487 | __field(void *, func) | 487 | __field(void *, func) |
| 488 | ), | 488 | ), |
| @@ -506,12 +506,12 @@ TRACE_EVENT(rcu_invoke_callback, | |||
| 506 | */ | 506 | */ |
| 507 | TRACE_EVENT(rcu_invoke_kfree_callback, | 507 | TRACE_EVENT(rcu_invoke_kfree_callback, |
| 508 | 508 | ||
| 509 | TP_PROTO(char *rcuname, struct rcu_head *rhp, unsigned long offset), | 509 | TP_PROTO(const char *rcuname, struct rcu_head *rhp, unsigned long offset), |
| 510 | 510 | ||
| 511 | TP_ARGS(rcuname, rhp, offset), | 511 | TP_ARGS(rcuname, rhp, offset), |
| 512 | 512 | ||
| 513 | TP_STRUCT__entry( | 513 | TP_STRUCT__entry( |
| 514 | __field(char *, rcuname) | 514 | __field(const char *, rcuname) |
| 515 | __field(void *, rhp) | 515 | __field(void *, rhp) |
| 516 | __field(unsigned long, offset) | 516 | __field(unsigned long, offset) |
| 517 | ), | 517 | ), |
| @@ -539,13 +539,13 @@ TRACE_EVENT(rcu_invoke_kfree_callback, | |||
| 539 | */ | 539 | */ |
| 540 | TRACE_EVENT(rcu_batch_end, | 540 | TRACE_EVENT(rcu_batch_end, |
| 541 | 541 | ||
| 542 | TP_PROTO(char *rcuname, int callbacks_invoked, | 542 | TP_PROTO(const char *rcuname, int callbacks_invoked, |
| 543 | bool cb, bool nr, bool iit, bool risk), | 543 | bool cb, bool nr, bool iit, bool risk), |
| 544 | 544 | ||
| 545 | TP_ARGS(rcuname, callbacks_invoked, cb, nr, iit, risk), | 545 | TP_ARGS(rcuname, callbacks_invoked, cb, nr, iit, risk), |
| 546 | 546 | ||
| 547 | TP_STRUCT__entry( | 547 | TP_STRUCT__entry( |
| 548 | __field(char *, rcuname) | 548 | __field(const char *, rcuname) |
| 549 | __field(int, callbacks_invoked) | 549 | __field(int, callbacks_invoked) |
| 550 | __field(bool, cb) | 550 | __field(bool, cb) |
| 551 | __field(bool, nr) | 551 | __field(bool, nr) |
| @@ -577,13 +577,13 @@ TRACE_EVENT(rcu_batch_end, | |||
| 577 | */ | 577 | */ |
| 578 | TRACE_EVENT(rcu_torture_read, | 578 | TRACE_EVENT(rcu_torture_read, |
| 579 | 579 | ||
| 580 | TP_PROTO(char *rcutorturename, struct rcu_head *rhp, | 580 | TP_PROTO(const char *rcutorturename, struct rcu_head *rhp, |
| 581 | unsigned long secs, unsigned long c_old, unsigned long c), | 581 | unsigned long secs, unsigned long c_old, unsigned long c), |
| 582 | 582 | ||
| 583 | TP_ARGS(rcutorturename, rhp, secs, c_old, c), | 583 | TP_ARGS(rcutorturename, rhp, secs, c_old, c), |
| 584 | 584 | ||
| 585 | TP_STRUCT__entry( | 585 | TP_STRUCT__entry( |
| 586 | __field(char *, rcutorturename) | 586 | __field(const char *, rcutorturename) |
| 587 | __field(struct rcu_head *, rhp) | 587 | __field(struct rcu_head *, rhp) |
| 588 | __field(unsigned long, secs) | 588 | __field(unsigned long, secs) |
| 589 | __field(unsigned long, c_old) | 589 | __field(unsigned long, c_old) |
| @@ -623,13 +623,13 @@ TRACE_EVENT(rcu_torture_read, | |||
| 623 | */ | 623 | */ |
| 624 | TRACE_EVENT(rcu_barrier, | 624 | TRACE_EVENT(rcu_barrier, |
| 625 | 625 | ||
| 626 | TP_PROTO(char *rcuname, char *s, int cpu, int cnt, unsigned long done), | 626 | TP_PROTO(const char *rcuname, const char *s, int cpu, int cnt, unsigned long done), |
| 627 | 627 | ||
| 628 | TP_ARGS(rcuname, s, cpu, cnt, done), | 628 | TP_ARGS(rcuname, s, cpu, cnt, done), |
| 629 | 629 | ||
| 630 | TP_STRUCT__entry( | 630 | TP_STRUCT__entry( |
| 631 | __field(char *, rcuname) | 631 | __field(const char *, rcuname) |
| 632 | __field(char *, s) | 632 | __field(const char *, s) |
| 633 | __field(int, cpu) | 633 | __field(int, cpu) |
| 634 | __field(int, cnt) | 634 | __field(int, cnt) |
| 635 | __field(unsigned long, done) | 635 | __field(unsigned long, done) |
