# source these in to your shell to simplify working with # mmtrace debugfs controls... # ========================================================== # mmtrace wrappers function hex { printf "0x%lx\n" "$1" ; } _DEBUGFS=/sys/kernel/debug ## __mmt [{-V|-X}] [] __mmt() { typeset value_only=false typeset decval=true while [[ "${1#-}" != "$1" ]]; do case "$1" in -V) value_only=true shift ;; -X) decval=false # i.e., hex shift ;; esac done typeset var=mmtrace/$1 typeset vfile=$_DEBUGFS/$var if [[ ! -f $vfile ]]; then echo "No such control: $1" >&2 return 4 fi typeset oldval=$( cat $vfile ) $decval || oldval=$( hex $oldval ) typeset newval="$2" if [[ -n "$newval" ]]; then echo "setting $var to $newval:" >&2 /bin/echo -E "$newval" >$vfile typeset result=$( cat $vfile ) $decval || result=$( hex $result ) echo -e "\t$oldval => $result" >&2 else if $value_only; then echo "$oldval" else echo -e "\t$var = $oldval" fi fi } __show_mmtrace_mask() { typeset val=$( __mmt -V -s $1 mask) echo "mmtrace: $1/mask = $(hex $val)" } mmt() { typeset what="$1" typeset val="$2" case "$what" in create) __mmt create 1 ;; destroy) __mmt create 0 ;; on|enable) __mmt enable 1 ;; off|disable) __mmt enable 0 ;; mask) __mmt -X mask $val ;; uid) __mmt uid $val ;; pid) __mmt pid $val ;; subbuf_size) __mmt subbuf_size $val ;; nr_subbufs) __mmt nr_subbufs $val ;; state) __mmt create __mmt enable __mmt uid __mmt pid __mmt -X mask __mmt subbuf_size __mmt nr_subbufs ;; *) echo "mmt {state|create|destroy|on|enable|off|disable|mask []" echo " |uid []|pid []|subbuf_size |nr_subbufs <#>}" ;; esac } lsmmt() { typeset lsopts= while [[ "${1#-}" != "$1" ]]; do lsopts="$lsopts $1" shift done ls $lsopts $_DEBUGFS/mmtrace/$1 }