global target_pid
global target_name

probe scheduler.ctxswitch {
    
    if (target_pid != 0
        && next_pid != target_pid
        && prev_pid != target_pid)
            next

    if (target_name != ""
        && prev_task_name != target_name
        && next_task_name != target_name)
            next
            
    //printf("Switch from %d(%s) to %d(%s) at %d\n",prev_tid, prev_task_name,next_tid,next_task_name, gettimeofday_ns())
    printf("%d %d %d %s %d\n",gettimeofday_ns(),prev_tid, next_tid, next_task_name,next_pid )
    //printf("%d %d %d\n",gettimeofday_ns(),prev_tid, next_tid )
}

probe begin
{
    target_pid = 0
    target_name = ""

    %( $# == 1 || $# > 2 %?
        log("Wrong number of arguments, use none, 'pid nr' or 'name proc'")
        exit()
    %)

    %( $# == 2 %?
        if(@1 == "pid") 
            target_pid = strtol(@2, 10)
        if(@1 == "name")
            target_name = @2
    %)
}