Skip to content

Commit

Permalink
rcu: Add const annotation to char * for RCU tracepoints and functions
Browse files Browse the repository at this point in the history
All the RCU tracepoints and functions that reference char pointers do
so with just 'char *' even though they do not modify the contents of
the string itself. This will cause warnings if a const char * is used
in one of these functions.

The RCU tracepoints store the pointer to the string to refer back to them
when the trace output is displayed. As this can be minutes, hours or
even days later, those strings had better be constant.

This change also opens the door to allow the RCU tracepoint strings and
their addresses to be exported so that userspace tracing tools can
translate the contents of the pointers of the RCU tracepoints.

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
  • Loading branch information
Steven Rostedt (Red Hat) committed Jul 29, 2013
1 parent 102c932 commit e66c33d
Show file tree
Hide file tree
Showing 9 changed files with 54 additions and 54 deletions.
4 changes: 2 additions & 2 deletions include/linux/rcupdate.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ extern int rcutorture_runnable; /* for sysctl */
#if defined(CONFIG_TREE_RCU) || defined(CONFIG_TREE_PREEMPT_RCU)
extern void rcutorture_record_test_transition(void);
extern void rcutorture_record_progress(unsigned long vernum);
extern void do_trace_rcu_torture_read(char *rcutorturename,
extern void do_trace_rcu_torture_read(const char *rcutorturename,
struct rcu_head *rhp,
unsigned long secs,
unsigned long c_old,
Expand All @@ -65,7 +65,7 @@ static inline void rcutorture_record_progress(unsigned long vernum)
{
}
#ifdef CONFIG_RCU_TRACE
extern void do_trace_rcu_torture_read(char *rcutorturename,
extern void do_trace_rcu_torture_read(const char *rcutorturename,
struct rcu_head *rhp,
unsigned long secs,
unsigned long c_old,
Expand Down
82 changes: 41 additions & 41 deletions include/trace/events/rcu.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,12 @@
*/
TRACE_EVENT(rcu_utilization,

TP_PROTO(char *s),
TP_PROTO(const char *s),

TP_ARGS(s),

TP_STRUCT__entry(
__field(char *, s)
__field(const char *, s)
),

TP_fast_assign(
Expand All @@ -51,14 +51,14 @@ TRACE_EVENT(rcu_utilization,
*/
TRACE_EVENT(rcu_grace_period,

TP_PROTO(char *rcuname, unsigned long gpnum, char *gpevent),
TP_PROTO(const char *rcuname, unsigned long gpnum, const char *gpevent),

TP_ARGS(rcuname, gpnum, gpevent),

TP_STRUCT__entry(
__field(char *, rcuname)
__field(const char *, rcuname)
__field(unsigned long, gpnum)
__field(char *, gpevent)
__field(const char *, gpevent)
),

TP_fast_assign(
Expand Down Expand Up @@ -89,21 +89,21 @@ TRACE_EVENT(rcu_grace_period,
*/
TRACE_EVENT(rcu_future_grace_period,

TP_PROTO(char *rcuname, unsigned long gpnum, unsigned long completed,
TP_PROTO(const char *rcuname, unsigned long gpnum, unsigned long completed,
unsigned long c, u8 level, int grplo, int grphi,
char *gpevent),
const char *gpevent),

TP_ARGS(rcuname, gpnum, completed, c, level, grplo, grphi, gpevent),

TP_STRUCT__entry(
__field(char *, rcuname)
__field(const char *, rcuname)
__field(unsigned long, gpnum)
__field(unsigned long, completed)
__field(unsigned long, c)
__field(u8, level)
__field(int, grplo)
__field(int, grphi)
__field(char *, gpevent)
__field(const char *, gpevent)
),

TP_fast_assign(
Expand Down Expand Up @@ -132,13 +132,13 @@ TRACE_EVENT(rcu_future_grace_period,
*/
TRACE_EVENT(rcu_grace_period_init,

TP_PROTO(char *rcuname, unsigned long gpnum, u8 level,
TP_PROTO(const char *rcuname, unsigned long gpnum, u8 level,
int grplo, int grphi, unsigned long qsmask),

TP_ARGS(rcuname, gpnum, level, grplo, grphi, qsmask),

TP_STRUCT__entry(
__field(char *, rcuname)
__field(const char *, rcuname)
__field(unsigned long, gpnum)
__field(u8, level)
__field(int, grplo)
Expand Down Expand Up @@ -168,12 +168,12 @@ TRACE_EVENT(rcu_grace_period_init,
*/
TRACE_EVENT(rcu_preempt_task,

TP_PROTO(char *rcuname, int pid, unsigned long gpnum),
TP_PROTO(const char *rcuname, int pid, unsigned long gpnum),

TP_ARGS(rcuname, pid, gpnum),

TP_STRUCT__entry(
__field(char *, rcuname)
__field(const char *, rcuname)
__field(unsigned long, gpnum)
__field(int, pid)
),
Expand All @@ -195,12 +195,12 @@ TRACE_EVENT(rcu_preempt_task,
*/
TRACE_EVENT(rcu_unlock_preempted_task,

TP_PROTO(char *rcuname, unsigned long gpnum, int pid),
TP_PROTO(const char *rcuname, unsigned long gpnum, int pid),

TP_ARGS(rcuname, gpnum, pid),

TP_STRUCT__entry(
__field(char *, rcuname)
__field(const char *, rcuname)
__field(unsigned long, gpnum)
__field(int, pid)
),
Expand All @@ -224,14 +224,14 @@ TRACE_EVENT(rcu_unlock_preempted_task,
*/
TRACE_EVENT(rcu_quiescent_state_report,

TP_PROTO(char *rcuname, unsigned long gpnum,
TP_PROTO(const char *rcuname, unsigned long gpnum,
unsigned long mask, unsigned long qsmask,
u8 level, int grplo, int grphi, int gp_tasks),

TP_ARGS(rcuname, gpnum, mask, qsmask, level, grplo, grphi, gp_tasks),

TP_STRUCT__entry(
__field(char *, rcuname)
__field(const char *, rcuname)
__field(unsigned long, gpnum)
__field(unsigned long, mask)
__field(unsigned long, qsmask)
Expand Down Expand Up @@ -268,15 +268,15 @@ TRACE_EVENT(rcu_quiescent_state_report,
*/
TRACE_EVENT(rcu_fqs,

TP_PROTO(char *rcuname, unsigned long gpnum, int cpu, char *qsevent),
TP_PROTO(const char *rcuname, unsigned long gpnum, int cpu, const char *qsevent),

TP_ARGS(rcuname, gpnum, cpu, qsevent),

TP_STRUCT__entry(
__field(char *, rcuname)
__field(const char *, rcuname)
__field(unsigned long, gpnum)
__field(int, cpu)
__field(char *, qsevent)
__field(const char *, qsevent)
),

TP_fast_assign(
Expand Down Expand Up @@ -308,12 +308,12 @@ TRACE_EVENT(rcu_fqs,
*/
TRACE_EVENT(rcu_dyntick,

TP_PROTO(char *polarity, long long oldnesting, long long newnesting),
TP_PROTO(const char *polarity, long long oldnesting, long long newnesting),

TP_ARGS(polarity, oldnesting, newnesting),

TP_STRUCT__entry(
__field(char *, polarity)
__field(const char *, polarity)
__field(long long, oldnesting)
__field(long long, newnesting)
),
Expand Down Expand Up @@ -352,12 +352,12 @@ TRACE_EVENT(rcu_dyntick,
*/
TRACE_EVENT(rcu_prep_idle,

TP_PROTO(char *reason),
TP_PROTO(const char *reason),

TP_ARGS(reason),

TP_STRUCT__entry(
__field(char *, reason)
__field(const char *, reason)
),

TP_fast_assign(
Expand All @@ -376,13 +376,13 @@ TRACE_EVENT(rcu_prep_idle,
*/
TRACE_EVENT(rcu_callback,

TP_PROTO(char *rcuname, struct rcu_head *rhp, long qlen_lazy,
TP_PROTO(const char *rcuname, struct rcu_head *rhp, long qlen_lazy,
long qlen),

TP_ARGS(rcuname, rhp, qlen_lazy, qlen),

TP_STRUCT__entry(
__field(char *, rcuname)
__field(const char *, rcuname)
__field(void *, rhp)
__field(void *, func)
__field(long, qlen_lazy)
Expand Down Expand Up @@ -412,13 +412,13 @@ TRACE_EVENT(rcu_callback,
*/
TRACE_EVENT(rcu_kfree_callback,

TP_PROTO(char *rcuname, struct rcu_head *rhp, unsigned long offset,
TP_PROTO(const char *rcuname, struct rcu_head *rhp, unsigned long offset,
long qlen_lazy, long qlen),

TP_ARGS(rcuname, rhp, offset, qlen_lazy, qlen),

TP_STRUCT__entry(
__field(char *, rcuname)
__field(const char *, rcuname)
__field(void *, rhp)
__field(unsigned long, offset)
__field(long, qlen_lazy)
Expand Down Expand Up @@ -447,12 +447,12 @@ TRACE_EVENT(rcu_kfree_callback,
*/
TRACE_EVENT(rcu_batch_start,

TP_PROTO(char *rcuname, long qlen_lazy, long qlen, long blimit),
TP_PROTO(const char *rcuname, long qlen_lazy, long qlen, long blimit),

TP_ARGS(rcuname, qlen_lazy, qlen, blimit),

TP_STRUCT__entry(
__field(char *, rcuname)
__field(const char *, rcuname)
__field(long, qlen_lazy)
__field(long, qlen)
__field(long, blimit)
Expand All @@ -477,12 +477,12 @@ TRACE_EVENT(rcu_batch_start,
*/
TRACE_EVENT(rcu_invoke_callback,

TP_PROTO(char *rcuname, struct rcu_head *rhp),
TP_PROTO(const char *rcuname, struct rcu_head *rhp),

TP_ARGS(rcuname, rhp),

TP_STRUCT__entry(
__field(char *, rcuname)
__field(const char *, rcuname)
__field(void *, rhp)
__field(void *, func)
),
Expand All @@ -506,12 +506,12 @@ TRACE_EVENT(rcu_invoke_callback,
*/
TRACE_EVENT(rcu_invoke_kfree_callback,

TP_PROTO(char *rcuname, struct rcu_head *rhp, unsigned long offset),
TP_PROTO(const char *rcuname, struct rcu_head *rhp, unsigned long offset),

TP_ARGS(rcuname, rhp, offset),

TP_STRUCT__entry(
__field(char *, rcuname)
__field(const char *, rcuname)
__field(void *, rhp)
__field(unsigned long, offset)
),
Expand Down Expand Up @@ -539,13 +539,13 @@ TRACE_EVENT(rcu_invoke_kfree_callback,
*/
TRACE_EVENT(rcu_batch_end,

TP_PROTO(char *rcuname, int callbacks_invoked,
TP_PROTO(const char *rcuname, int callbacks_invoked,
bool cb, bool nr, bool iit, bool risk),

TP_ARGS(rcuname, callbacks_invoked, cb, nr, iit, risk),

TP_STRUCT__entry(
__field(char *, rcuname)
__field(const char *, rcuname)
__field(int, callbacks_invoked)
__field(bool, cb)
__field(bool, nr)
Expand Down Expand Up @@ -577,13 +577,13 @@ TRACE_EVENT(rcu_batch_end,
*/
TRACE_EVENT(rcu_torture_read,

TP_PROTO(char *rcutorturename, struct rcu_head *rhp,
TP_PROTO(const char *rcutorturename, struct rcu_head *rhp,
unsigned long secs, unsigned long c_old, unsigned long c),

TP_ARGS(rcutorturename, rhp, secs, c_old, c),

TP_STRUCT__entry(
__field(char *, rcutorturename)
__field(const char *, rcutorturename)
__field(struct rcu_head *, rhp)
__field(unsigned long, secs)
__field(unsigned long, c_old)
Expand Down Expand Up @@ -623,13 +623,13 @@ TRACE_EVENT(rcu_torture_read,
*/
TRACE_EVENT(rcu_barrier,

TP_PROTO(char *rcuname, char *s, int cpu, int cnt, unsigned long done),
TP_PROTO(const char *rcuname, const char *s, int cpu, int cnt, unsigned long done),

TP_ARGS(rcuname, s, cpu, cnt, done),

TP_STRUCT__entry(
__field(char *, rcuname)
__field(char *, s)
__field(const char *, rcuname)
__field(const char *, s)
__field(int, cpu)
__field(int, cnt)
__field(unsigned long, done)
Expand Down
2 changes: 1 addition & 1 deletion kernel/rcu.h
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ static inline void debug_rcu_head_unqueue(struct rcu_head *head)

extern void kfree(const void *);

static inline bool __rcu_reclaim(char *rn, struct rcu_head *head)
static inline bool __rcu_reclaim(const char *rn, struct rcu_head *head)
{
unsigned long offset = (unsigned long)head->func;

Expand Down
2 changes: 1 addition & 1 deletion kernel/rcupdate.c
Original file line number Diff line number Diff line change
Expand Up @@ -377,7 +377,7 @@ EXPORT_SYMBOL_GPL(rcuhead_debug_descr);
#endif /* #ifdef CONFIG_DEBUG_OBJECTS_RCU_HEAD */

#if defined(CONFIG_TREE_RCU) || defined(CONFIG_TREE_PREEMPT_RCU) || defined(CONFIG_RCU_TRACE)
void do_trace_rcu_torture_read(char *rcutorturename, struct rcu_head *rhp,
void do_trace_rcu_torture_read(const char *rcutorturename, struct rcu_head *rhp,
unsigned long secs,
unsigned long c_old, unsigned long c)
{
Expand Down
2 changes: 1 addition & 1 deletion kernel/rcutiny.c
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,7 @@ void rcu_check_callbacks(int cpu, int user)
*/
static void __rcu_process_callbacks(struct rcu_ctrlblk *rcp)
{
char *rn = NULL;
const char *rn = NULL;
struct rcu_head *next, *list;
unsigned long flags;
RCU_TRACE(int cb_count = 0);
Expand Down
2 changes: 1 addition & 1 deletion kernel/rcutiny_plugin.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ struct rcu_ctrlblk {
RCU_TRACE(unsigned long gp_start); /* Start time for stalls. */
RCU_TRACE(unsigned long ticks_this_gp); /* Statistic for stalls. */
RCU_TRACE(unsigned long jiffies_stall); /* Jiffies at next stall. */
RCU_TRACE(char *name); /* Name of RCU type. */
RCU_TRACE(const char *name); /* Name of RCU type. */
};

/* Definition for rcupdate control block. */
Expand Down
8 changes: 4 additions & 4 deletions kernel/rcutorture.c
Original file line number Diff line number Diff line change
Expand Up @@ -267,7 +267,7 @@ rcutorture_shutdown_notify(struct notifier_block *unused1,
* Absorb kthreads into a kernel function that won't return, so that
* they won't ever access module text or data again.
*/
static void rcutorture_shutdown_absorb(char *title)
static void rcutorture_shutdown_absorb(const char *title)
{
if (ACCESS_ONCE(fullstop) == FULLSTOP_SHUTDOWN) {
pr_notice(
Expand Down Expand Up @@ -337,7 +337,7 @@ rcu_random(struct rcu_random_state *rrsp)
}

static void
rcu_stutter_wait(char *title)
rcu_stutter_wait(const char *title)
{
while (stutter_pause_test || !rcutorture_runnable) {
if (rcutorture_runnable)
Expand Down Expand Up @@ -366,7 +366,7 @@ struct rcu_torture_ops {
int (*stats)(char *page);
int irq_capable;
int can_boost;
char *name;
const char *name;
};

static struct rcu_torture_ops *cur_ops;
Expand Down Expand Up @@ -1364,7 +1364,7 @@ rcu_torture_stutter(void *arg)
}

static inline void
rcu_torture_print_module_parms(struct rcu_torture_ops *cur_ops, char *tag)
rcu_torture_print_module_parms(struct rcu_torture_ops *cur_ops, const char *tag)
{
pr_alert("%s" TORTURE_FLAG
"--- %s: nreaders=%d nfakewriters=%d "
Expand Down
Loading

0 comments on commit e66c33d

Please sign in to comment.