#!/bin/sh
# Copyright (C) HITACHI,LTD. 2005
# WRITTEN BY HITACHI SYSTEMS DEVELOPMENT LABORATORY,
# Created by M.Hiramatsu <hiramatu@sdl.hitachi.co.jp>


if [ $# -le 1 ] ; then
echo "Usage : lkst_make_mask <mask_name> <analyzer1> [<analyzer2> ...] "
exit 0
fi

LKSTM=/usr/sbin/lkstm
LKSTEH=/usr/sbin/lksteh

MNAME=$1
shift 1

function findeid() {
grep $1 /proc/lkst_etypes | cut -f1 -d,
}

function biotime() {
$LKSTM config -n $MNAME `findeid BIO_MAKE_REQ` 0x01
$LKSTM config -n $MNAME `findeid BIO_END_IO` 0x01
}

function blkqueue() {
$LKSTM config -n $MNAME `findeid BLK_GET_REQ` 0x01
$LKSTM config -n $MNAME `findeid BLK_PUT_REQ` 0x01
}

function bioqueue() {
biotime
blkqueue
}

function buffer() {
$LKSTM config -n $MNAME `findeid BUFFER_SUBMIT_BH` 0x01
$LKSTM config -n $MNAME `findeid BUFFER_ENDIO_BH` 0x01
}

function busywait() {
$LKSTM config -n $MNAME `findeid LK_SPINLOCK` 0x01
}

function netroute() {
$LKSTM config -n $MNAME `findeid NET_V4RTOUT_ENTER` 0x01
$LKSTM config -n $MNAME `findeid NET_V4RTOUT_EXIT` 0x01
$LKSTM config -n $MNAME `findeid NET_V4RTIN_ENTER` 0x01
$LKSTM config -n $MNAME `findeid NET_V4RTIN_EXIT` 0x01
}

function netsend() {
$LKSTM config -n $MNAME `findeid "NET_PKTSEND,"` 0x01
$LKSTM config -n $MNAME `findeid NET_START_XMIT` 0x01
}

function palloc() {
$LKSTM config -n $MNAME `findeid PAGE_ALLOC_ENTER` 0x01
$LKSTM config -n $MNAME `findeid PAGE_ALLOC_EXIT` 0x01
}

function proclive() {
$LKSTM config -n $MNAME `findeid PROCESS_FORK` 0x01
$LKSTM config -n $MNAME `findeid PROCESS_EXIT` 0x01
$LKSTM config -n $MNAME `findeid PROCESS_SCHED_ENTER` 0x01
}

function procstat() {
$LKSTM config -n $MNAME `findeid PROCESS_FORK` 0x01
$LKSTM config -n $MNAME `findeid PROCESS_EXIT` 0x01
$LKSTM config -n $MNAME `findeid PROCESS_SCHED_ENTER` 0x01
PSTAT=`$LKSTEH find -n procstat| cut -f1 -d\  `
if [ $PSTAT -eq 255 ]; then 
	echo "Failed to find procstat handler"
	exit -1;
fi
$LKSTM config -n $MNAME `findeid PROCESS_CONTEXTSWITCH` $PSTAT
$LKSTM config -n $MNAME `findeid "PROCESS_WAKEUP,"` $PSTAT
}

function runqueue() {
PSTAT=`$LKSTEH find -n procstat| cut -f1 -d\  `
if [ "$PSTAT" -eq 255 ]; then 
	PSTAT=1
fi
$LKSTM config -n $MNAME `findeid PROCESS_CONTEXTSWITCH` $PSTAT
}

function schedrun() {
$LKSTM config -n $MNAME `findeid PROCESS_SCHED_ENTER` 0x01
$LKSTM config -n $MNAME `findeid PROCESS_SCHED_EXIT` 0x01
}
function schedule() {
$LKSTM config -n $MNAME `findeid PROCESS_SCHED_ENTER` 0x01
$LKSTM config -n $MNAME `findeid PROCESS_SCHED_EXIT` 0x01
}
function softirq() {
$LKSTM config -n $MNAME `findeid SOFTIRQ_RAISE` 0x01
$LKSTM config -n $MNAME `findeid SOFTIRQ_ACTION` 0x01
}

function spinlock() {
$LKSTM config -n $MNAME `findeid LK_SPINTRYLOCK` 0x01
$LKSTM config -n $MNAME `findeid LK_SPINLOCK` 0x01
$LKSTM config -n $MNAME `findeid LK_SPINUNLOCK` 0x01
}

function syscall() {
SI=`$LKSTEH find -n sysinfo| cut -f1 -d\  `
if [ $SI -eq 255 ]; then 
	SI=1;
fi
$LKSTM config -n $MNAME `findeid SYSCALL_SYSENTER` $SI
$LKSTM config -n $MNAME `findeid SYSCALL_ENTRY` 0x01
$LKSTM config -n $MNAME `findeid SYSCALL_EXIT` 0x01
#$LKSTM config -n $MNAME `findeid SYSCALL_SYSENTER` 0x01
$LKSTM config -n $MNAME `findeid SYSCALL_SYSEXIT` 0x01
}

function timer() {
$LKSTM config -n $MNAME `findeid TIMER_RUN` 0x01
}

function vmscan() {
$LKSTM config -n $MNAME `findeid SHRINK_SLAB_ENTER` 0x01
$LKSTM config -n $MNAME `findeid SHRINK_CACHE_ENTER` 0x01
$LKSTM config -n $MNAME `findeid PAGE_AGING_ENTER` 0x01
$LKSTM config -n $MNAME `findeid PAGE_RECLAIM_ENTER` 0x01
$LKSTM config -n $MNAME `findeid SHRINK_SLAB_EXIT` 0x01
$LKSTM config -n $MNAME `findeid SHRINK_CACHE_EXIT` 0x01
$LKSTM config -n $MNAME `findeid PAGE_AGING_EXIT` 0x01
$LKSTM config -n $MNAME `findeid PAGE_RECLAIM_EXIT` 0x01
}

function waitqueue() {
WQ=`$LKSTEH find -n wqcounter| cut -f1 -d\  `
if [ $WQ -eq 255 ]; then 
	echo "Failed to find wqcounter handler"
	exit -1;
fi
$LKSTM config -n $MNAME `findeid PROCESS_ADD_WQ` $WQ
}

function waittime() {
WQ=`$LKSTEH find -n wqcounter| cut -f1 -d\  `
if [ $WQ -eq 255 ]; then 
	WQ=1
fi
$LKSTM config -n $MNAME `findeid PROCESS_ADD_WQ` $WQ
$LKSTM config -n $MNAME `findeid PROCESS_REM_WQ` 0x01
}

function sysinfo() {
SI=`$LKSTEH find -n sysinfo| cut -f1 -d\  `
if [ $SI -eq 255 ]; then 
	echo "Failed to find sysinfo handler"
	exit -1;
fi
$LKSTM config -n $MNAME `findeid SYSCALL_SYSENTER` $SI
}

#make a new blank maskset
$LKSTM read -m 0 -a | $LKSTM write -n $MNAME
for i in $*; do
$i
done
