7e7ca9a22d
Now that we can support the dynamic sized string, make the lock tracing able to use it, making it safe against modules removal and consuming the right amount of memory needed for each lock name Changes in v2: adapt to the __ending_string() updates and the opening_string() removal. [ Impact: protect lock tracer against module removal ] Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Steven Rostedt <rostedt@goodmis.org>
60 lines
1.5 KiB
C
60 lines
1.5 KiB
C
#if !defined(_TRACE_LOCKDEP_H) || defined(TRACE_HEADER_MULTI_READ)
|
|
#define _TRACE_LOCKDEP_H
|
|
|
|
#include <linux/lockdep.h>
|
|
#include <linux/tracepoint.h>
|
|
|
|
#undef TRACE_SYSTEM
|
|
#define TRACE_SYSTEM lockdep
|
|
|
|
#ifdef CONFIG_LOCKDEP
|
|
|
|
TRACE_FORMAT(lock_acquire,
|
|
TP_PROTO(struct lockdep_map *lock, unsigned int subclass,
|
|
int trylock, int read, int check,
|
|
struct lockdep_map *next_lock, unsigned long ip),
|
|
TP_ARGS(lock, subclass, trylock, read, check, next_lock, ip),
|
|
TP_FMT("%s%s%s", trylock ? "try " : "",
|
|
read ? "read " : "", lock->name)
|
|
);
|
|
|
|
TRACE_FORMAT(lock_release,
|
|
TP_PROTO(struct lockdep_map *lock, int nested, unsigned long ip),
|
|
TP_ARGS(lock, nested, ip),
|
|
TP_FMT("%s", lock->name)
|
|
);
|
|
|
|
#ifdef CONFIG_LOCK_STAT
|
|
|
|
TRACE_FORMAT(lock_contended,
|
|
TP_PROTO(struct lockdep_map *lock, unsigned long ip),
|
|
TP_ARGS(lock, ip),
|
|
TP_FMT("%s", lock->name)
|
|
);
|
|
|
|
TRACE_EVENT(lock_acquired,
|
|
TP_PROTO(struct lockdep_map *lock, unsigned long ip, s64 waittime),
|
|
|
|
TP_ARGS(lock, ip, waittime),
|
|
|
|
TP_STRUCT__entry(
|
|
__string(name, lock->name)
|
|
__field(unsigned long, wait_usec)
|
|
__field(unsigned long, wait_nsec_rem)
|
|
),
|
|
TP_fast_assign(
|
|
__assign_str(name, lock->name);
|
|
__entry->wait_nsec_rem = do_div(waittime, NSEC_PER_USEC);
|
|
__entry->wait_usec = (unsigned long) waittime;
|
|
),
|
|
TP_printk("%s (%lu.%03lu us)", __get_str(name), __entry->wait_usec,
|
|
__entry->wait_nsec_rem)
|
|
);
|
|
|
|
#endif
|
|
#endif
|
|
|
|
#endif /* _TRACE_LOCKDEP_H */
|
|
|
|
/* This part must be outside protection */
|
|
#include <trace/define_trace.h>
|