diff options
-rw-r--r-- | runtime/lket/b2a/Makefile | 4 | ||||
-rw-r--r-- | stapprobes.5.in | 2 | ||||
-rw-r--r-- | tapset/ChangeLog | 6 | ||||
-rw-r--r-- | tapset/LKET/Changelog | 10 | ||||
-rwxr-xr-x | tapset/LKET/ioscheduler.stp | 28 | ||||
-rwxr-xr-x | tapset/LKET/lket_trace.stp | 33 | ||||
-rwxr-xr-x | tapset/LKET/netdev.stp | 6 | ||||
-rwxr-xr-x | tapset/LKET/pagefault.stp | 2 | ||||
-rwxr-xr-x | tapset/LKET/process.stp | 4 | ||||
-rwxr-xr-x | tapset/LKET/scsi.stp | 36 | ||||
-rwxr-xr-x | tapset/LKET/tskdispatch.stp | 13 | ||||
-rw-r--r-- | tapset/scheduler.stp | 4 |
12 files changed, 91 insertions, 57 deletions
diff --git a/runtime/lket/b2a/Makefile b/runtime/lket/b2a/Makefile index 3cb39c8a..1e3780c7 100644 --- a/runtime/lket/b2a/Makefile +++ b/runtime/lket/b2a/Makefile @@ -1,5 +1,5 @@ all: - gcc -O2 -D_GNU_SOURCE -Wall lket_b2a.c -o b2a `pkg-config --cflags --libs glib-2.0` + gcc -O2 -D_GNU_SOURCE -Wall lket_b2a.c -o lket-b2a `pkg-config --cflags --libs glib-2.0` clean: - rm -f b2a + rm -f lket-b2a diff --git a/stapprobes.5.in b/stapprobes.5.in index ab1f0197..26511529 100644 --- a/stapprobes.5.in +++ b/stapprobes.5.in @@ -251,4 +251,4 @@ kernel.syscall.*.return refers to the group of probe aliases with any name in the third position .SH SEE ALSO -.IR stap (1) +.IR stap (1) lket (5) diff --git a/tapset/ChangeLog b/tapset/ChangeLog index 1fc64c62..3e2e2d7a 100644 --- a/tapset/ChangeLog +++ b/tapset/ChangeLog @@ -1,3 +1,9 @@ +2006-05-25 Li Guanglei <guanglei@cn.ibm.com> + + * LKET/*.stp: explicitly add type qualifier for different arch + to make _stp_vsnprintf get the argument by va_arg correctly. + * scheduler.stp: add prev_task and next_task variable. + 2006-05-24 Josh Stone <joshua.i.stone@intel.com> PR 2677 diff --git a/tapset/LKET/Changelog b/tapset/LKET/Changelog index af1b9dab..780ceefe 100644 --- a/tapset/LKET/Changelog +++ b/tapset/LKET/Changelog @@ -1,7 +1,13 @@ +2006-05-25 Li Guanglei <guanglei@cn.ibm.com> + + * hookid_defs.stp, ioscheduler.stp, lket_trace.stp, netdev.stp, + pagefault.stp, process.stp, scsi.stp, syscalls.stp, tskdispatch.stp, + utils.stp: explicitly add type qualifier for different arch to + make _stp_vsnprintf get the argument by va_arg correctly. + 2006-05-18 Li Guanglei <guanglei@cn.ibm.com> Initial version by Li Guanglei. * hookid_defs.stp, ioscheduler.stp, lket_trace.stp, netdev.stp, - pagefault.stp, process.stp, scsi.stp, syscalls.stp, tskdispatch.stp, - utils.stp + pagefault.stp, process.stp, scsi.stp, syscalls.stp, tskdispatch.stp, utils.stp diff --git a/tapset/LKET/ioscheduler.stp b/tapset/LKET/ioscheduler.stp index 8e238a8d..4d68537c 100755 --- a/tapset/LKET/ioscheduler.stp +++ b/tapset/LKET/ioscheduler.stp @@ -63,10 +63,10 @@ function log_ioscheduler_tracedata_others(var_id:long, var_q:long, var_rq:long, _stp_stack_sprint (str, CONTEXT->regs, 0); _lket_trace(_GROUP_IOSCHED, THIS->var_id, "%0s%1b%1b%0s", q->elevator->elevator_type->elevator_name, - rq->rq_disk->major, rq->rq_disk->first_minor, _stp_string_ptr(str)); + (_FMT_)rq->rq_disk->major, (_FMT_)rq->rq_disk->first_minor, _stp_string_ptr(str)); } else { _lket_trace(_GROUP_IOSCHED, THIS->var_id, "%0s%1b%1b", q->elevator->elevator_type->elevator_name, - rq->rq_disk->major, rq->rq_disk->first_minor); + (_FMT_)rq->rq_disk->major, (_FMT_)rq->rq_disk->first_minor); } %} @@ -85,10 +85,10 @@ function log_ioscheduler_tracedata_others(var_id:long, var_q:long, var_rq:long, _stp_stack_sprint (str, CONTEXT->regs, 0); _lket_trace(_GROUP_IOSCHED, THIS->var_id, "%0s%1b%1b%0s", q->elevator.elevator_name, - rq->rq_disk->major, rq->rq_disk->first_minor, _stp_string_ptr(str)); + (_FMT_)rq->rq_disk->major, (_FMT_)rq->rq_disk->first_minor, _stp_string_ptr(str)); } else { _lket_trace(_GROUP_IOSCHED, THIS->var_id, "%0s%1b%1b", q->elevator.elevator_name, - rq->rq_disk->major, rq->rq_disk->first_minor); + (_FMT_)rq->rq_disk->major, (_FMT_)rq->rq_disk->first_minor); } %} @@ -118,22 +118,22 @@ function log_ioscheduler_tracedata_elv_next(var_id:long, var:long, backtrace:lon if(list_empty(&(q->queue_head))) { _lket_trace(_GROUP_IOSCHED, THIS->var_id, "%0s%1b%1b%0s", - q->elevator->elevator_type->elevator_name, -1, -1, _stp_string_ptr(str)); + q->elevator->elevator_type->elevator_name, (_FMT_)-1, (_FMT_)-1, _stp_string_ptr(str)); } else { rq = list_entry_rq(q->queue_head.next); _lket_trace(_GROUP_IOSCHED, THIS->var_id, "%0s%1b%1b%0s", - q->elevator->elevator_type->elevator_name, rq->rq_disk->major, - rq->rq_disk->first_minor, _stp_string_ptr(str)); + q->elevator->elevator_type->elevator_name, (_FMT_)rq->rq_disk->major, + (_FMT_)rq->rq_disk->first_minor, _stp_string_ptr(str)); } } else { if(list_empty(&(q->queue_head))) { _lket_trace(_GROUP_IOSCHED, THIS->var_id, "%0s%1b%1b", - q->elevator->elevator_type->elevator_name, -1, -1); + q->elevator->elevator_type->elevator_name, (_FMT_)-1, (_FMT_)-1); } else { rq = list_entry_rq(q->queue_head.next); _lket_trace(_GROUP_IOSCHED, THIS->var_id, "%0s%1b%1b", - q->elevator->elevator_type->elevator_name, rq->rq_disk->major, - rq->rq_disk->first_minor); + q->elevator->elevator_type->elevator_name, (_FMT_)rq->rq_disk->major, + (_FMT_)rq->rq_disk->first_minor); } } @@ -160,20 +160,20 @@ function log_ioscheduler_tracedata_elv_next(var_id:long, var:long, backtrace:lon if(list_empty(&(q->queue_head))) { _lket_trace(_GROUP_IOSCHED, THIS->var_id, "%0s%1b%1b%0s", - q->elevator.elevator_name, -1, -1, _stp_string_ptr(str)); + q->elevator.elevator_name, (_FMT_)-1, (_FMT_)-1, _stp_string_ptr(str)); } else { rq = list_entry_rq(q->queue_head.next); _lket_trace(_GROUP_IOSCHED, THIS->var_id, "%0s%1b%1b%0s", q->elevator.elevator_name, - rq->rq_disk->major, rq->rq_disk->first_minor, _stp_string_ptr(str)); + (_FMT_)rq->rq_disk->major, (_FMT_)rq->rq_disk->first_minor, _stp_string_ptr(str)); } } else { if(list_empty(&(q->queue_head))) { _lket_trace(_GROUP_IOSCHED, THIS->var_id, "%0s%1b%1b", - q->elevator.elevator_name, -1, -1); + q->elevator.elevator_name, (_FMT_)-1, (_FMT_)-1); } else { rq = list_entry_rq(q->queue_head.next); _lket_trace(_GROUP_IOSCHED, THIS->var_id, "%0s%1b%1b", q->elevator.elevator_name, - rq->rq_disk->major, rq->rq_disk->first_minor); + (_FMT_)rq->rq_disk->major, (_FMT_)rq->rq_disk->first_minor); } } diff --git a/tapset/LKET/lket_trace.stp b/tapset/LKET/lket_trace.stp index d06d09d2..5e3739d4 100755 --- a/tapset/LKET/lket_trace.stp +++ b/tapset/LKET/lket_trace.stp @@ -5,11 +5,23 @@ // Public License (GPL); either version 2, or (at your option) any // later version. +%{ +#if defined(ASCII_TRACE) +#ifndef _FMT_ +#define _FMT_ unsigned int +#endif +#else +#ifndef _FMT_ +#define _FMT_ int64_t +#endif +#endif +%} + function lket_trace_header_init() %{ /* header info for binary format*/ -#if !defined(ASCII_TRACE) && !defined(ASCII_TRACE_LEGACY) +#if !defined(ASCII_TRACE) #define MAGIC_NUMBER 0xAEFCDB6B #define LKET_TRACE_VER_MAJOR 0x01 @@ -21,8 +33,9 @@ function lket_trace_header_init() #define LKET_HEADER_LEN 0 /* fake number, bin_write will fill in the actual length of trace header */ - _stp_printf("%4b%2n%1b%1b%1b%1b", MAGIC_NUMBER, LKET_HEADER_LEN, LKET_TRACE_VER_MAJOR, - LKET_TRACE_VER_MINOR, BIG_ENDIAN, BITS_WIDTH); + _stp_printf("%4b%2n%1b%1b%1b%1b", (_FMT_)MAGIC_NUMBER, (_FMT_)LKET_HEADER_LEN, + (_FMT_)LKET_TRACE_VER_MAJOR, (_FMT_)LKET_TRACE_VER_MINOR, + (_FMT_)BIG_ENDIAN, (_FMT_)BITS_WIDTH); _stp_print_flush(); #endif @@ -101,9 +114,9 @@ void fmt_change(char *oldfmt) do_gettimeofday (&tv); \ fmt_change(fmt); \ _stp_printf(newfmt, \ - GroupID, hookID, tv.tv_sec, tv.tv_usec, current->tgid, \ - current->parent->pid, current->pid, \ - current->thread_info->cpu, args);\ + (_FMT_)GroupID, (_FMT_)hookID, (_FMT_)tv.tv_sec, (_FMT_)tv.tv_usec,\ + (_FMT_)current->tgid, (_FMT_)current->parent->pid,\ + (_FMT_)current->pid, (_FMT_)current->thread_info->cpu, args);\ } while(0) #else //binary trace @@ -118,10 +131,10 @@ static inline int this_event_len(void) struct timeval tv; \ do_gettimeofday (&tv); \ _stp_printf("%1b%2n%1b%1b%4b%4b%4b%4b%4b%1b"fmt, \ - (int64_t)STP_BIN_PACKET, (int64_t)GroupID, (int64_t)hookID, \ - (int64_t)tv.tv_sec, (int64_t)tv.tv_usec, (int64_t)current->tgid, \ - (int64_t)current->parent->pid, (int64_t)current->pid, \ - (int64_t)current->thread_info->cpu, args);\ + (_FMT_)STP_BIN_PACKET, (_FMT_)GroupID, (_FMT_)hookID, \ + (_FMT_)tv.tv_sec, (_FMT_)tv.tv_usec, (_FMT_)current->tgid, \ + (_FMT_)current->parent->pid, (_FMT_)current->pid, \ + (_FMT_)current->thread_info->cpu, args);\ } while(0) #endif diff --git a/tapset/LKET/netdev.stp b/tapset/LKET/netdev.stp index 04413b23..9c79d036 100755 --- a/tapset/LKET/netdev.stp +++ b/tapset/LKET/netdev.stp @@ -33,7 +33,7 @@ probe addevent.netdev.transmit function log_netdev_extra(var_id:long, var:long, backtrace:long) %{ - struct sk_buff *skb = (struct sk_buff *)THIS->var; + struct sk_buff *skb = (struct sk_buff *)((long)THIS->var); /* dev_name | Length of actual data | protocol | Buffer size @@ -58,9 +58,9 @@ function log_netdev_extra(var_id:long, var:long, backtrace:long) _stp_stack_sprint (str, CONTEXT->regs, 0); _lket_trace(_GROUP_NETDEV, THIS->var_id, "%0s%4b%2b%4b%0s", skb->dev->name, - skb->len, skb->protocol, skb->truesize, _stp_string_ptr(str)); + (_FMT_)skb->len, (_FMT_)skb->protocol, (_FMT_)skb->truesize, _stp_string_ptr(str)); } else { _lket_trace(_GROUP_NETDEV, THIS->var_id, "%0s%4b%2b%4b", skb->dev->name, - skb->len, skb->protocol, skb->truesize); + (_FMT_)skb->len, (_FMT_)skb->protocol, (_FMT_)skb->truesize); } %} diff --git a/tapset/LKET/pagefault.stp b/tapset/LKET/pagefault.stp index bdef3fcc..0675f4e8 100755 --- a/tapset/LKET/pagefault.stp +++ b/tapset/LKET/pagefault.stp @@ -7,7 +7,7 @@ function log_pagefault_tracedata(var_id:long, var_addr:long, var_rwflag:long) %{ - _lket_trace(_GROUP_PAGEFAULT, THIS->var_id, "%8b%1b", (long)(THIS->var_addr), (THIS->var_rwflag)?1:0); + _lket_trace(_GROUP_PAGEFAULT, THIS->var_id, "%8b%1b", (int64_t)(THIS->var_addr), (_FMT_)((THIS->var_rwflag)?1:0)); %} diff --git a/tapset/LKET/process.stp b/tapset/LKET/process.stp index e17a5514..039847b3 100755 --- a/tapset/LKET/process.stp +++ b/tapset/LKET/process.stp @@ -17,7 +17,7 @@ function log_execve_tracedata(var_id:long, var:long) function log_fork_tracedata(var_id:long, var:long) %{ pid_t pid = (pid_t)THIS->var; - _lket_trace(_GROUP_PROCESS, THIS->var_id, "%4b", pid); + _lket_trace(_GROUP_PROCESS, THIS->var_id, "%4b", (_FMT_)pid); %} @@ -36,7 +36,7 @@ function process_snapshot() name for each entry */ list_for_each(cur, head) { tsk = (struct task_struct *)(list_entry(cur, struct task_struct, tasks)); - _lket_trace(_GROUP_PROCESS, _HOOKID_PROCESS_SNAPSHOT, "%4b%0s", tsk->pid, tsk->comm); + _lket_trace(_GROUP_PROCESS, _HOOKID_PROCESS_SNAPSHOT, "%4b%0s", (_FMT_)tsk->pid, tsk->comm); _stp_print_flush(); } %} diff --git a/tapset/LKET/scsi.stp b/tapset/LKET/scsi.stp index 0f38b33c..d6e254e0 100755 --- a/tapset/LKET/scsi.stp +++ b/tapset/LKET/scsi.stp @@ -78,11 +78,11 @@ function log_scsi_ioentry(var_id:long, var_q:long, var_rq:long, backtrace:long) if(THIS->backtrace == 1) { String str = _stp_string_init (0); _stp_stack_sprint (str, CONTEXT->regs, 0); - _lket_trace(_GROUP_SCSI, THIS->var_id, "%1b%1b%1b%0s", rq->rq_disk->major, - rq->rq_disk->first_minor, sdev->sdev_state, _stp_string_ptr(str)); + _lket_trace(_GROUP_SCSI, THIS->var_id, "%1b%1b%1b%0s", (_FMT_)rq->rq_disk->major, + (_FMT_)rq->rq_disk->first_minor, (_FMT_)sdev->sdev_state, _stp_string_ptr(str)); } else { - _lket_trace(_GROUP_SCSI, THIS->var_id, "%1b%1b%1b", rq->rq_disk->major, - rq->rq_disk->first_minor, sdev->sdev_state); + _lket_trace(_GROUP_SCSI, THIS->var_id, "%1b%1b%1b", (_FMT_)rq->rq_disk->major, + (_FMT_)rq->rq_disk->first_minor, (_FMT_)sdev->sdev_state); } %} @@ -129,14 +129,14 @@ function log_scsi_dispatch(var_id:long, var:long, backtrace:long) String str = _stp_string_init (0); _stp_stack_sprint (str, CONTEXT->regs, 0); - _lket_trace(_GROUP_SCSI, THIS->var_id, "%1b%4b%1b%8b%4b%8b%0s", cmd->device->sdev_state, - scsi_info, cmd->sc_data_direction, cmd->request_buffer, cmd->request_bufflen, - cmd->device->host->cmd_pid, _stp_string_ptr(str)); + _lket_trace(_GROUP_SCSI, THIS->var_id, "%1b%4b%1b%8b%4b%8b%0s", (_FMT_)cmd->device->sdev_state, + (_FMT_)scsi_info, (_FMT_)cmd->sc_data_direction, (int64_t)((long)cmd->request_buffer), + (_FMT_)cmd->request_bufflen, (int64_t)cmd->device->host->cmd_pid, _stp_string_ptr(str)); } else { - _lket_trace(_GROUP_SCSI, THIS->var_id, "%1b%4b%1b%8b%4b%8b", cmd->device->sdev_state, - scsi_info, cmd->sc_data_direction, cmd->request_buffer, cmd->request_bufflen, - cmd->device->host->cmd_pid); + _lket_trace(_GROUP_SCSI, THIS->var_id, "%1b%4b%1b%8b%4b%8b", (_FMT_)cmd->device->sdev_state, + (_FMT_)scsi_info, (_FMT_)cmd->sc_data_direction, (int64_t)((long)cmd->request_buffer), + (_FMT_)cmd->request_bufflen, (int64_t)cmd->device->host->cmd_pid); } %} @@ -165,11 +165,13 @@ function log_scsi_dispatch(var_id:long, var:long, backtrace:long) String str = _stp_string_init (0); _stp_stack_sprint (str, CONTEXT->regs, 0); - _lket_trace(_GROUP_SCSI, THIS->var_id, "%1b%4b%1b%8b%4b%8b%0s", cmd->device->sdev_state, scsi_info, - cmd->sc_data_direction, cmd->request_buffer, cmd->request_bufflen, 0, _stp_string_ptr(str)); + _lket_trace(_GROUP_SCSI, THIS->var_id, "%1b%4b%1b%8b%4b%8b%0s", (_FMT_)cmd->device->sdev_state, + (_FMT_)scsi_info, (_FMT_)cmd->sc_data_direction, (int64_t)((long)cmd->request_buffer), + (_FMT_)cmd->request_bufflen, (int64_t)0, _stp_string_ptr(str)); } else { - _lket_trace(_GROUP_SCSI, THIS->var_id, "%1b%4b%1b%8b%4b%8b", cmd->device->sdev_state, scsi_info, - cmd->sc_data_direction, cmd->request_buffer, cmd->request_bufflen, 0); + _lket_trace(_GROUP_SCSI, THIS->var_id, "%1b%4b%1b%8b%4b%8b", (_FMT_)cmd->device->sdev_state, + (_FMT_)scsi_info, (_FMT_)cmd->sc_data_direction, (int64_t)((long)cmd->request_buffer), + (_FMT_)cmd->request_bufflen, (int64_t)0); } %} %) @@ -186,7 +188,8 @@ function log_scsi_iodone_extra(var_id:long, var:long) (cmd->device->id & 0xFF); /* scsi_info|data_direction|cmd_identifier| */ - _lket_trace(_GROUP_SCSI, THIS->var_id, "%4b%1b%8b", scsi_info, cmd->sc_data_direction, cmd->pid); + _lket_trace(_GROUP_SCSI, THIS->var_id, "%4b%1b%8b", (_FMT_)scsi_info, (_FMT_)cmd->sc_data_direction, + (int64_t)cmd->pid); %} /* log the info about scsi_dispatching_cmd */ @@ -202,5 +205,6 @@ function log_scsi_iocompleted(var_id:long, var_cmd:long, var_goodbytes:long) (cmd->device->id & 0xFF); /* scsi_info|data_direction|cmd_identifier|goodbytes */ - _lket_trace(_GROUP_SCSI, THIS->var_id, "%4b%1b%8b%4b", scsi_info, cmd->sc_data_direction, cmd->pid, goodbytes); + _lket_trace(_GROUP_SCSI, THIS->var_id, "%4b%1b%8b%4b", (_FMT_)scsi_info, (_FMT_)cmd->sc_data_direction, + (int64_t)cmd->pid, (_FMT_)goodbytes); %} diff --git a/tapset/LKET/tskdispatch.stp b/tapset/LKET/tskdispatch.stp index bb758144..9cc3bf4f 100755 --- a/tapset/LKET/tskdispatch.stp +++ b/tapset/LKET/tskdispatch.stp @@ -37,9 +37,9 @@ probe addevent.tskdispatch.ctxswitch target_pid = target() cur_pid = pid() if( stp_pid() != cur_pid ) { /* skip stpd itself */ - if(target_pid == 0 || (target_pid !=0 && ($prev->pid == target_pid - || $new->pid == target_pid))) { - log_ctxswitch_tracedata(HOOKID_TASK_CTXSWITCH, $prev, $new) + if(target_pid == 0 || (target_pid !=0 && (prev_pid == target_pid + || next_pid == target_pid))) { + log_ctxswitch_tracedata(HOOKID_TASK_CTXSWITCH, prev_task, next_task) } } } @@ -51,7 +51,8 @@ function log_ctxswitch_tracedata(var_id:long, prev:long, next_pid:long) prev_tsk = (struct task_struct *)((long)THIS->prev); next_tsk = (struct task_struct *)((long)THIS->next_pid); - _lket_trace(_GROUP_TASK, THIS->var_id, "%4b%4b%1b", prev_tsk->pid, next_tsk->pid, prev_tsk->state); + _lket_trace(_GROUP_TASK, THIS->var_id, "%4b%4b%1b", (_FMT_)prev_tsk->pid, (_FMT_)next_tsk->pid, + (_FMT_)prev_tsk->state); %} function log_cpuidle_tracedata(var_id:long, backtrace:long) @@ -61,9 +62,9 @@ function log_cpuidle_tracedata(var_id:long, backtrace:long) if(THIS->backtrace == 1) { String str = _stp_string_init (0); _stp_stack_sprint (str, CONTEXT->regs, 0); - _lket_trace(_GROUP_TASK, THIS->var_id, "%4b%0s", cur->pid, _stp_string_ptr(str)); + _lket_trace(_GROUP_TASK, THIS->var_id, "%4b%0s", (_FMT_)cur->pid, _stp_string_ptr(str)); } else { - _lket_trace(_GROUP_TASK, THIS->var_id, "%4b", cur->pid); + _lket_trace(_GROUP_TASK, THIS->var_id, "%4b", (_FMT_)cur->pid); } %} diff --git a/tapset/scheduler.stp b/tapset/scheduler.stp index 442a8105..66f0a644 100644 --- a/tapset/scheduler.stp +++ b/tapset/scheduler.stp @@ -126,10 +126,14 @@ probe scheduler.ctxswitch %( arch == "ppc64" %? prev_pid = $prev->pid next_pid = $new->pid + prev_task = $prev + next_task = $new prevtsk_state = $prev->state %: prev_pid = $prev_p->pid next_pid = $next_p->pid + prev_task = $prev_p + next_task = $next_p prevtsk_state = $prev_p->pid %) } |