From 379c58568dbb247ed6583434ff4658c0794b977d Mon Sep 17 00:00:00 2001 From: Wenji Huang Date: Wed, 2 Dec 2009 17:45:20 +0800 Subject: [PATCH] Make tapset and tests compatible with old kernel * tapset/ioscheduler.stp : Make probe optional. * tapset/irq.stp : Ditto. * tapset/scheduler.stp : Ditto. * tapset/tcpmib.stp : Ditto. * tapset/linuxmib.stp : Switch variable by version. * tapset/tty.stp : Ditto. * testsuite/buildok/irq.stp : Make probe test optional. * testsuite/buildok/tty.stp : Ditto. * testsuite/systemtap.examples/network/netdev.stp : Ditto. * testsuite/buildok/tcpmib-all-probes.stp : Add embedded functions. --- tapset/ioscheduler.stp | 16 ++++----- tapset/irq.stp | 16 ++++----- tapset/linuxmib.stp | 4 +++ tapset/scheduler.stp | 7 +++- tapset/tcpmib.stp | 16 ++++++++- tapset/tty.stp | 34 ++++++++++++++++--- testsuite/buildok/irq.stp | 6 ++-- testsuite/buildok/tcpmib-all-probes.stp | 22 +++++++----- testsuite/buildok/tty.stp | 8 ++--- .../systemtap.examples/network/netdev.stp | 4 +-- 10 files changed, 94 insertions(+), 39 deletions(-) diff --git a/tapset/ioscheduler.stp b/tapset/ioscheduler.stp index 7f26cf237..9b3535773 100644 --- a/tapset/ioscheduler.stp +++ b/tapset/ioscheduler.stp @@ -155,7 +155,7 @@ probe ioscheduler.elv_completed_request * */ probe ioscheduler.elv_add_request.tp - = kernel.trace("block_rq_insert") + = kernel.trace("block_rq_insert") ? { q = $q elevator_name = kernel_string($q->elevator->elevator_type->elevator_name) @@ -197,7 +197,7 @@ probe ioscheduler.elv_add_request = * */ probe ioscheduler_trace.elv_completed_request - = kernel.trace("block_rq_complete") + = kernel.trace("block_rq_complete") ? { elevator_name = kernel_string($q->elevator->elevator_type->elevator_name) rq = $rq @@ -224,7 +224,7 @@ rq_flags = $rq==0? 0:$rq->cmd_flags * */ probe ioscheduler_trace.elv_issue_request - = kernel.trace("block_rq_issue") + = kernel.trace("block_rq_issue") ? { elevator_name = kernel_string($q->elevator->elevator_type->elevator_name) rq = $rq @@ -251,7 +251,7 @@ rq_flags = $rq==0? 0:$rq->cmd_flags * */ probe ioscheduler_trace.elv_requeue_request - = kernel.trace("block_rq_requeue") + = kernel.trace("block_rq_requeue") ? { elevator_name = kernel_string($q->elevator->elevator_type->elevator_name) rq = $rq @@ -277,7 +277,7 @@ rq_flags = $rq==0? 0:$rq->cmd_flags * */ probe ioscheduler_trace.elv_abort_request - = kernel.trace("block_rq_abort") + = kernel.trace("block_rq_abort") ? { elevator_name = kernel_string($q->elevator->elevator_type->elevator_name) rq = $rq @@ -299,7 +299,7 @@ rq_flags = $rq==0? 0:$rq->cmd_flags * @rq_queue : request queue * */ -probe ioscheduler_trace.plug = kernel.trace("block_plug") +probe ioscheduler_trace.plug = kernel.trace("block_plug") ? { rq_queue = $q } @@ -311,7 +311,7 @@ probe ioscheduler_trace.plug = kernel.trace("block_plug") * @rq_queue : request queue * */ -probe ioscheduler_trace.unplug_io = kernel.trace("block_unplug_io") +probe ioscheduler_trace.unplug_io = kernel.trace("block_unplug_io") ? { rq_queue = $q } @@ -322,7 +322,7 @@ probe ioscheduler_trace.unplug_io = kernel.trace("block_unplug_io") * @rq_queue : request queue * */ -probe ioscheduler_trace.unplug_timer = kernel.trace("block_unplug_timer") +probe ioscheduler_trace.unplug_timer = kernel.trace("block_unplug_timer") ? { rq_queue = $q } diff --git a/tapset/irq.stp b/tapset/irq.stp index 6a9b9147e..5d9196595 100644 --- a/tapset/irq.stp +++ b/tapset/irq.stp @@ -17,7 +17,7 @@ * @wq_thread : task_struct of the workqueue thread. * @cpu : cpu for which the worker thread is created. */ -probe workqueue.create = kernel.trace("workqueue_creation") +probe workqueue.create = kernel.trace("workqueue_creation") ? { wq_thread = $wq_thread cpu = $cpu @@ -29,7 +29,7 @@ probe workqueue.create = kernel.trace("workqueue_creation") * @work : work_struct* being queued. * @work_func : pointer to handler func. */ -probe workqueue.insert = kernel.trace("workqueue_insertion") +probe workqueue.insert = kernel.trace("workqueue_insertion") ? { wq_thread = $wq_thread work = $work @@ -42,7 +42,7 @@ probe workqueue.insert = kernel.trace("workqueue_insertion") * @work : work_struct* being executed. * @work_func : pointer to handler func. */ -probe workqueue.execute = kernel.trace("workqueue_execution") +probe workqueue.execute = kernel.trace("workqueue_execution") ? { wq_thread = $wq_thread work = $work @@ -53,7 +53,7 @@ probe workqueue.execute = kernel.trace("workqueue_execution") * probe workqueue.destroy : probes destruction of each worker thread of each cpu for a workqueue. * @wq_thread : task_struct of the workqueue thread. */ -probe workqueue.destroy = kernel.trace("workqueue_destruction") +probe workqueue.destroy = kernel.trace("workqueue_destruction") ? { wq_thread = $wq_thread } @@ -84,7 +84,7 @@ probe workqueue.destroy = kernel.trace("workqueue_destruction") * @thread : thread pointer for threaded interrupts. * @thread_flags : Flags related to thread. */ -probe irq_handler.entry = kernel.trace("irq_handler_entry") +probe irq_handler.entry = kernel.trace("irq_handler_entry") ? { irq = $irq action = $action @@ -125,7 +125,7 @@ probe irq_handler.entry = kernel.trace("irq_handler_entry") * @thread : thread pointer for threaded interrupts. * @thread_flags : Flags related to thread. */ -probe irq_handler.exit = kernel.trace("irq_handler_exit") +probe irq_handler.exit = kernel.trace("irq_handler_exit") ? { irq = $irq action = $action @@ -150,7 +150,7 @@ probe irq_handler.exit = kernel.trace("irq_handler_exit") * @vec : softirq_action vector. * @action : pointer to softirq handler just about to execute. */ -probe softirq.entry = kernel.trace("softirq_entry") +probe softirq.entry = kernel.trace("softirq_entry") ? { h = $h vec = $vec @@ -164,7 +164,7 @@ probe softirq.entry = kernel.trace("softirq_entry") * @vec : softirq_action vector. * @action : pointer to softirq handler that just finished execution. */ -probe softirq.exit = kernel.trace("softirq_exit") +probe softirq.exit = kernel.trace("softirq_exit") ? { h = $h vec = $vec diff --git a/tapset/linuxmib.stp b/tapset/linuxmib.stp index e19755a9e..90145b62b 100644 --- a/tapset/linuxmib.stp +++ b/tapset/linuxmib.stp @@ -94,7 +94,11 @@ probe linuxmib.ListenDrops=kernel.function("tcp_v4_syn_recv_sock").return */ probe linuxmib.TCPMemoryPressures=kernel.function("tcp_enter_memory_pressure") { +%( kernel_v >= "2.6.27" %? sk = $sk +%: + sk = 0; +%) op = 1; if ( $tcp_memory_pressure ) next key = linuxmib_filter_key(sk,op); diff --git a/tapset/scheduler.stp b/tapset/scheduler.stp index 324aa769c..1610dc0ab 100644 --- a/tapset/scheduler.stp +++ b/tapset/scheduler.stp @@ -285,7 +285,11 @@ probe __scheduler.migrate.kp1 = kernel.function("pull_task") } probe __scheduler.migrate.kp = kernel.function("set_task_cpu") { +%( kernel_v >= "2.6.23" %? cpu_to = $new_cpu +%: + cpu_to = $cpu +%) } probe __scheduler.migrate.tp = kernel.trace("sched_migrate_task") { @@ -384,7 +388,8 @@ probe scheduler.process_fork * @pid: pid of the process sending signal * @signal_number: signal number */ -probe __scheduler.signal_send.kp = kernel.function("__send_signal") +probe __scheduler.signal_send.kp = kernel.function("__send_signal") !, + kernel.function("send_signal") { pid = $t->tgid } diff --git a/tapset/tcpmib.stp b/tapset/tcpmib.stp index 8b443309a..497fb7ddf 100644 --- a/tapset/tcpmib.stp +++ b/tapset/tcpmib.stp @@ -99,6 +99,16 @@ function tcpmib_remote_port:long(sk:long) CATCH_DEREF_FAULT(); %} +function tcpmib_filter_key:long (sk:long, op:long) { + // ensure all these functions will build + if ( tcpmib_get_state(sk) ) return 0 + if ( tcpmib_local_addr(sk) ) return 0 + if ( tcpmib_remote_addr(sk) ) return 0 + if ( tcpmib_local_port(sk) ) return 0 + if ( tcpmib_remote_port(sk) ) return 0 + return op +} + /** * probe tcpmib.ActiveOpens - Count an active opening of a socket. * @sk: Pointer to the struct sock being acted on. @@ -209,7 +219,7 @@ tcpmib.EstabResets=kernel.function("tcp_set_state") * */ probe -tcpmib.InSegs=kernel.function("__inet_lookup_established").return +tcpmib.InSegs=kernel.function("__inet_lookup_established").return ? { sk=$return op=1 @@ -292,7 +302,11 @@ function __tcpmib_input_route_type_new:long (skb:long) probe tcpmib.OutRsts.A=kernel.function("tcp_v4_send_reset") { +%( kernel_v >= "2.6.20" %? sk = $sk; +%: + sk = 0; +%) skb = $skb op = 1; if ( _is_reset(skb) ) next diff --git a/tapset/tty.stp b/tapset/tty.stp index f6ce8ea90..2c4507d21 100644 --- a/tapset/tty.stp +++ b/tapset/tty.stp @@ -22,7 +22,11 @@ probe tty.open = kernel.function("tty_open") { inode_state = $inode->i_state inode_flags = $inode->i_flags +%( kernel_v >= "2.6.20" %? file_name = d_name($filp->f_path->dentry) +%: + file_name = d_name($filp->f_dentry) +%) file_mode = $filp->f_mode file_flags = $filp->f_flags } @@ -41,7 +45,11 @@ probe tty.release = kernel.function("tty_release") { inode_state = $inode->i_state inode_flags = $inode->i_flags +%( kernel_v >= "2.6.20" %? file_name = d_name($filp->f_path->dentry) +%: + file_name = d_name($filp->f_dentry) +%) file_mode = $filp->f_mode file_flags = $filp->f_flags } @@ -58,7 +66,7 @@ probe tty.release = kernel.function("tty_release") { * @new_ypixel: the new ypixel value * @new_xpixel: the new xpixel value */ -probe tty.resize = kernel.function("tty_do_resize"){ +probe tty.resize = kernel.function("tty_do_resize") ? { name = kernel_string($tty->name) old_row = $tty->winsize->ws_row old_col = $tty->winsize->ws_col @@ -78,7 +86,11 @@ probe tty.resize = kernel.function("tty_do_resize"){ * @arg: the ioctl argument */ probe tty.ioctl = kernel.function("tty_ioctl"){ +%( kernel_v >= "2.6.20" %? name = kernel_string($file->f_path->dentry->d_iname) +%: + name = kernel_string($file->f_dentry->d_iname) +%) cmd = $cmd arg = $arg @@ -90,7 +102,7 @@ probe tty.ioctl = kernel.function("tty_ioctl"){ * @name: the driver .dev_name name * @module: the module name */ -probe tty.init = kernel.function("tty_init_dev"){ +probe tty.init = kernel.function("tty_init_dev") ? { driver_name = kernel_string($driver->driver_name) name = kernel_string($driver->name) module = kernel_string($driver->owner->name) @@ -130,11 +142,17 @@ probe tty.unregister = kernel.function("tty_unregister_device"){ * @wait_key: the wait queue key */ probe tty.poll = kernel.function("tty_poll"){ +%( kernel_v >= "2.6.20" %? file_name = d_name($filp->f_path->dentry) +%: + file_name = d_name($filp->f_dentry) +%) +%( kernel_v >= "2.6.31" %? if ($wait) wait_key = $wait->key else +%) wait_key = 0 } @@ -166,11 +184,15 @@ probe tty.receive = kernel.function("n_tty_receive_buf"){ * @driver_name: the driver name * @file_name: the file name lreated to the tty */ -probe tty.write = kernel.function("n_tty_write"){ +probe tty.write = kernel.function("n_tty_write") ? { buffer = kernel_string($buf) nr = $nr +%( kernel_v >= "2.6.20" %? file_name = d_name($file->f_path->dentry) +%: + file_name = d_name($file->f_dentry) +%) driver_name = kernel_string($tty->driver->driver_name) } @@ -181,9 +203,13 @@ probe tty.write = kernel.function("n_tty_write"){ * @driver_name: the driver name * @file_name: the file name lreated to the tty */ -probe tty.read = kernel.function("n_tty_read"){ +probe tty.read = kernel.function("n_tty_read") ? { buffer = kernel_string($buf) nr = $nr +%( kernel_v >= "2.6.20" %? file_name = d_name($file->f_path->dentry) +%: + file_name = d_name($file->f_dentry) +%) driver_name = kernel_string($tty->driver->driver_name) } diff --git a/testsuite/buildok/irq.stp b/testsuite/buildok/irq.stp index b1a141dc4..7f1c2ab66 100644 --- a/testsuite/buildok/irq.stp +++ b/testsuite/buildok/irq.stp @@ -2,6 +2,6 @@ // Tests if all probes in irq tapset are resolvable -probe workqueue.* {} -probe irq_handler.* {} -probe softirq.* {} +probe workqueue.* !, never {} +probe irq_handler.* !, never {} +probe softirq.* !, never {} diff --git a/testsuite/buildok/tcpmib-all-probes.stp b/testsuite/buildok/tcpmib-all-probes.stp index f20ba8bb4..8d1105e1b 100755 --- a/testsuite/buildok/tcpmib-all-probes.stp +++ b/testsuite/buildok/tcpmib-all-probes.stp @@ -4,12 +4,18 @@ probe tcpmib.* {} -function tcpmib_filter_key:long (sk:long, op:long) { - // Insure all these functions will build - if ( tcpmib_get_state(sk) ) return 0 - if ( tcpmib_local_addr(sk) ) return 0 - if ( tcpmib_remote_addr(sk) ) return 0 - if ( tcpmib_local_port(sk) ) return 0 - if ( tcpmib_remote_port(sk) ) return 0 - return op +probe begin{ + print(tcpmib_get_state(0) + + tcpmib_local_addr(0) + + tcpmib_remote_addr(0) + + tcpmib_local_port(0) + + tcpmib_remote_port(0) + + _rtn_local() + + _is_reset(0) + +%( kernel_v < "2.6.31" %? + __tcpmib_input_route_type_old(0) +%: + __tcpmib_input_route_type_new(0) +%) + ) } diff --git a/testsuite/buildok/tty.stp b/testsuite/buildok/tty.stp index 0b5018d95..3e717f6e1 100755 --- a/testsuite/buildok/tty.stp +++ b/testsuite/buildok/tty.stp @@ -24,7 +24,7 @@ probe tty.open { printf("File: %s mode %x flags %x\n", file_name, file_mode, file_flags) } -probe tty.resize { +probe tty.resize ? { printf("Resizing %s from %dx%d (%d/%d) to %dx%d (%d/%d)\n", name, old_row, old_col, old_xpixel, old_ypixel, new_row, new_col, new_xpixel, new_ypixel) } @@ -33,7 +33,7 @@ probe tty.ioctl { printf("Ioctling file %s with %d %d\n", name, cmd, arg) } -probe tty.init { +probe tty.init ? { printf("new tty with name %s from driver %s and module %s\nn", driver_name, name, module) } @@ -42,10 +42,10 @@ probe tty.receive { } -probe tty.write { +probe tty.write ? { printf("Buffer %s (len %d) wrote on file %s (driver %s)\n", buffer, nr, file_name, driver_name) } -probe tty.read { +probe tty.read ? { printf("Reading tty file %s (driver %s) to a buffer with size %d containing %s\n", file_name, driver_name, nr, buffer) } diff --git a/testsuite/systemtap.examples/network/netdev.stp b/testsuite/systemtap.examples/network/netdev.stp index faf4d2aef..660c87219 100755 --- a/testsuite/systemtap.examples/network/netdev.stp +++ b/testsuite/systemtap.examples/network/netdev.stp @@ -8,7 +8,7 @@ ############################################################ -probe netdev.get_stats{ +probe netdev.get_stats ? { printf("%s was asked for statistics structure\n", dev_name) } @@ -31,7 +31,7 @@ probe netdev.set_promiscuity { printf("Device %s leaving promiscuous mode\n", dev_name) } -probe netdev.change_rx_flag { +probe netdev.change_rx_flag ? { printf("Device %s is changing its RX flags to %d\n", dev_name, flags) } -- 2.43.5