linux-kernel-markers-documentation-update-flags
PATCH 1/1 linux-kernel-markers-documentation-update-flags
linux-kernel-markers-documentation-update-flags
Documents the flag usage.
Signed-off-by Mathieu Desnoyers <[email protected]>
Documentation/marker.txt +30 -0
@@ -78,6 +78,21 @@ which saves a data cache hit, but also requires cross CPU code modification. In order to support embedded systems which use read-only memory for their code, the optimization can be disabled through menu options. +The MF_* flags can be used to control the type of marker. See the +include/marker.h header for the list of flags. They can be specified as the +first parameter of the _MARK() macro, such as the following example which is +safe wrt lockdep.c (useful for marking lockdep.c functions). + +_MARK(_MF_DEFAULT | ~_MF_LOCKDEP, subsystem_eventb, + MARK_NOARGS); + +Another example is to specify that a specific marker must never call printk : +_MARK(_MF_DEFAULT | ~_MF_PRINTK, subsystem_eventc, + "%d %s %p[struct task_struct]", + someint, somestring, current); + +Flag compatibility is checked before connecting the probe to the marker. + * Probe example
@@ -122,6 +137,13 @@ void probe_subsystem_event(const char *format, ...) va_end(ap); } +#define SUBSYSTEM_EVENTB_FORMAT MARK_NOARGS +void probe_subsystem_eventb(const char *format, ...) +{ + /* Increment counters, trace, ... but _never_ generate a call to + * lockdep.c ! */ +} + static int __init probe_init(void) { int result;
@@ -130,16 +152,24 @@ static int __init probe_init(void) probe_subsystem_event); if (!result) goto cleanup; + result = _marker_set_probe(_MF_DEFAULT & ~_MF_LOCKDEP, + "subsystem_eventb", + SUBSYSTEM_EVENTB_FORMAT, + probe_subsystem_eventb); + if (!result) + goto cleanup; return 0; cleanup: marker_remove_probe(probe_subsystem_event); + marker_remove_probe(probe_subsystem_eventb); return -EPERM; } static void __exit probe_fini(void) { marker_remove_probe(probe_subsystem_event); + marker_remove_probe(probe_subsystem_eventb); } module_init(probe_init);
Signature · 3 lines
Mathieu Desnoyers Computer Engineering Ph.D. Student, Ecole Polytechnique de Montreal OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68