[Bug translator/19396] systemtap can't find certain kernel tracepoints

dsmith at redhat dot com sourceware-bugzilla@sourceware.org
Wed Jan 6 17:12:00 GMT 2016


https://sourceware.org/bugzilla/show_bug.cgi?id=19396

--- Comment #1 from David Smith <dsmith at redhat dot com> ---
I'm seeing something wacky here. This is on 2.6.32-573.el6.ppc64:

====
# stap --poison-cache -L 'kernel.trace("*module*")'
kernel.trace("jbd:module_free") $mod:struct module*
kernel.trace("jbd:module_get") $mod:struct module* $ip:long unsigned int
$refcnt:int
kernel.trace("jbd:module_load") $mod:struct module*
kernel.trace("jbd:module_put") $mod:struct module* $ip:long unsigned int
$refcnt:int
kernel.trace("jbd:module_request") $name:char* $wait:bool $ip:long unsigned int
====

So, when '--poison-cache' is used, for some reason stap thinks the module_*
tracepoints are in the "jbd" subsystem instead of in the "module" subsystem.
But, you can list them as being in the "module" subsystem:

====
# stap -L 'kernel.trace("*module*")'
kernel.trace("module:module_free") $mod:struct module*
kernel.trace("module:module_get") $mod:struct module* $ip:long unsigned int
$refcnt:int
kernel.trace("module:module_load") $mod:struct module*
kernel.trace("module:module_put") $mod:struct module* $ip:long unsigned int
$refcnt:int
kernel.trace("module:module_request") $name:char* $wait:bool $ip:long unsigned
int
====

You can actually see them in either subsystem:

====
# stap -L 'kernel.trace("jbd:module*")'
kernel.trace("jbd:module_free") $mod:struct module*
kernel.trace("jbd:module_get") $mod:struct module* $ip:long unsigned int
$refcnt:int
kernel.trace("jbd:module_load") $mod:struct module*
kernel.trace("jbd:module_put") $mod:struct module* $ip:long unsigned int
$refcnt:int
kernel.trace("jbd:module_request") $name:char* $wait:bool $ip:long unsigned int
# stap -L 'kernel.trace("module:module*")'
kernel.trace("module:module_free") $mod:struct module*
kernel.trace("module:module_get") $mod:struct module* $ip:long unsigned int
$refcnt:int
kernel.trace("module:module_load") $mod:struct module*
kernel.trace("module:module_put") $mod:struct module* $ip:long unsigned int
$refcnt:int
kernel.trace("module:module_request") $name:char* $wait:bool $ip:long unsigned
int
====

Note that if you try this with a completely non-existing subsystem, you do get
the correct result (of nothing):

====
# stap -L 'kernel.trace("foo:module*")'
#
====

It looks like you can look up the module tracepoints in about any (existing)
subsystem:

====
# stap -L 'kernel.trace("ext4:module*")'
kernel.trace("ext4:module_free") $mod:struct module*
kernel.trace("ext4:module_get") $mod:struct module* $ip:long unsigned int
$refcnt:int
kernel.trace("ext4:module_load") $mod:struct module*
kernel.trace("ext4:module_put") $mod:struct module* $ip:long unsigned int
$refcnt:int
kernel.trace("ext4:module_request") $name:char* $wait:bool $ip:long unsigned
int
# stap -L 'kernel.trace("skb:module*")'
kernel.trace("skb:module_free") $mod:struct module*
kernel.trace("skb:module_get") $mod:struct module* $ip:long unsigned int
$refcnt:int
kernel.trace("skb:module_load") $mod:struct module*
kernel.trace("skb:module_put") $mod:struct module* $ip:long unsigned int
$refcnt:int
kernel.trace("skb:module_request") $name:char* $wait:bool $ip:long unsigned int
# stap -L 'kernel.trace("net:module*")'
kernel.trace("net:module_free") $mod:struct module*
kernel.trace("net:module_get") $mod:struct module* $ip:long unsigned int
$refcnt:int
kernel.trace("net:module_load") $mod:struct module*
kernel.trace("net:module_put") $mod:struct module* $ip:long unsigned int
$refcnt:int
kernel.trace("net:module_request") $name:char* $wait:bool $ip:long unsigned int
# stap -L 'kernel.trace("block:module*")' 
kernel.trace("block:module_free") $mod:struct module*
kernel.trace("block:module_get") $mod:struct module* $ip:long unsigned int
$refcnt:int
kernel.trace("block:module_load") $mod:struct module*
kernel.trace("block:module_put") $mod:struct module* $ip:long unsigned int
$refcnt:int
kernel.trace("block:module_request") $name:char* $wait:bool $ip:long unsigned
int
====

Also note this isn't just because I used a wildcard, since the following works:

====
# stap -L 'kernel.trace("block:module_free")'
kernel.trace("block:module_free") $mod:struct module*
====

-- 
You are receiving this mail because:
You are the assignee for the bug.


More information about the Systemtap mailing list