18cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#!/bin/sh 28cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# 38cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# opcontrol is a script to control OProfile 48cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# opcontrol --help and opcontrol --list-events have info 58cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# 68cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# Copyright 2002 78cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# Read the file COPYING 88cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# 98cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# Authors: John Levon, Philippe Elie, Will Cohen, Jens Wilke, Daniel Hansel 108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# 118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# Copyright IBM Corporation 2007 128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# 138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# NOTE: This script should be as shell independent as possible 148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike DoddSYSCTL=do_sysctl 168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# A replacement function for the sysctl (procps package) utility which is 188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# missing on some distribution (e.g. slack 7.0). 198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# Handles only the -w option of sysctl. 208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodddo_sysctl() 218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$1" != "-w"; then 238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "$0 unknown sysctl option" >&2 248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd shift 288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd arg=`echo $1 | awk -F= '{print $1}'` 308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd val=`echo $1 | awk -F= '{print $2}'` 318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd dev_name=`echo $arg | tr . /` 338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test ! -f /proc/sys/$dev_name; then 358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "/proc/sys/$dev_name does not exist or is not a regular file" >&2 368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo $val > /proc/sys/$dev_name 398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# check value is set 438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodderror_if_empty() 448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test -z "$2"; then 468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "No value given for option $1" >&2 478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd do_help 488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 527a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown# guess_number_base() checks if string is a valid octal(8), hexidecimal(16), 537a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown# or decimal number(10). The value is returned in $?. Returns 0, if string 547a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown# isn't a octal, hexidecimal, or decimal number. 557a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brownguess_number_base() 567a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown{ 577a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if [[ "$1" =~ ^0[0-7]*$ ]] ; then 587a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown return 8; 597a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown elif [[ "$1" =~ ^0x[0-9a-fA-F]+$ ]] ; then 607a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown return 16; 617a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown elif [[ "$1" =~ ^[1-9][0-9]*$ ]] ; then 627a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown return 10; 637a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown else 647a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown return 0; 657a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown fi 667a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown} 677a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 687a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown# check value is a valid number 697a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brownerror_if_not_number() 707a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown{ 717a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown guess_number_base $2 727a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if test "$?" -eq 0 ; then 737a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown echo "Argument for $1, $2, is not a valid number." >&2 747a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown exit 1 757a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown fi 767a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown} 778cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 788cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# rm_device arguments $1=file_name 798cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddrm_device() 808cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 818cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test -c "$1"; then 828cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd vecho "Removing $1" 838cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd rm "$1" 848cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 858cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 868cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 878cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 888cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# create_device arguments $1=file_name $2=MAJOR_NR $3=MINOR_NR 898cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddcreate_device() 908cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 918cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd vecho "Doing mknod $1" 928cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mknod "$1" c $2 $3 938cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$?" != "0"; then 948cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Couldn't mknod $1" >&2 958cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 968cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 978cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd chmod 700 "$1" 988cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 998cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1008cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1018cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddmove_and_remove() 1028cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 1038cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test -e $1; then 1048cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mv $1 $SAMPLES_DIR/.tmp_reset.$$ 1058cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd rm -rf $SAMPLES_DIR/.tmp_reset.$$ 1068cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 1078cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 1088cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1098cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# verbose echo 1118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddvecho() 1128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 1138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test -n "$VERBOSE"; then 1148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo $@ 1158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 1168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 1178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddis_tool_available() 1208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 1218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if which $1 &>/dev/null; then 1228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test -x `which $1`; then 1238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return 1 1248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 1258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 1268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return 0 1288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 1298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# print help message 1328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodddo_help() 1338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 1348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd cat >&2 <<EOF 1358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddopcontrol: usage: 1368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd -l/--list-events list event types and unit masks 1378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd -?/--help this message 1388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd -v/--version show version 1398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd --init loads the oprofile module and oprofilefs 1408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd --setup give setup arguments (may be omitted) 1418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd --status show configuration 1428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd --start-daemon start daemon without starting profiling 1438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd -s/--start start data collection 1448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd -d/--dump flush the collected profiling data 1458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd -t/--stop stop data collection 1468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd -h/--shutdown stop data collection and kill daemon 1478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd -V/--verbose[=all,sfile,arcs,samples,module,misc,ext] 1488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd be verbose in the daemon log 1498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd --reset clears out data from current session 1508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd --save=name save data from current session to session_name 1518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd --deinit unload the oprofile module and oprofilefs 1528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd -e/--event=eventspec 1548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd Choose an event. May be specified multiple times. Of the form 1568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd "default" or "name:count:unitmask:kernel:user", where : 1578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd name: event name, e.g. CPU_CLK_UNHALTED or RTC_INTERRUPTS 1598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd count: reset counter value e.g. 100000 1608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd unitmask: hardware unit mask e.g. 0x0f 1618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd kernel: whether to profile kernel: 0 or 1 1628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd user: whether to profile userspace: 0 or 1 1638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd -p/--separate=type,[types] 1658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1668cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd Separate profiles as follows : 1678cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1688cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd none: no profile separation 1698cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd library: separate shared library profiles per-application 1708cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd kernel: same as library, plus kernel profiles 1718cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd thread: per-thread/process profiles 1728cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd cpu: per CPU profiles 1738cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd all: all of the above 1748cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1757a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown -c/--callgraph=#depth enable callgraph sample collection with a 1767a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown maximum depth. Use '0' to disable callgraph 1777a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown profiling. 1788cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd --session-dir=dir place sample database in dir instead of 1798cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd default location (/var/lib/oprofile) 1808cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd -i/--image=name[,names] list of binaries to profile (default is "all") 1818cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd --vmlinux=file vmlinux kernel image 1828cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd --no-vmlinux no kernel image (vmlinux) available 1838cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd --kernel-range=start,end kernel range vma address in hexadecimal 1847a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown --buffer-size=num kernel buffer size in sample units. 1857a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown Rules: A non-zero value goes into effect after 1867a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown a '--shutdown/start' sequence. A value of 1877a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown zero sets this parameter back to default value 1887a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown but does not go into effect until after a 1897a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown '--deinit/init' sequence. 1907a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown --buffer-watershed kernel buffer watershed in sample units (2.6 1917a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown kernel). Same rules as defined for 1927a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown buffer-size. 1937a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown --cpu-buffer-size=num per-cpu buffer size in units (2.6 kernel) 1947a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown Same rules as defined for buffer-size. 1957a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown --note-table-size kernel notes buffer size in notes units (2.4 1967a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown kernel) 1978cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1988cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd --xen Xen image (for Xen only) 1997a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown --active-domains=<list> List of domains in profiling session (for Xen) 2008cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd (list contains domain ids separated by commas) 2018cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike DoddEOF 2028cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 2038cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 2048cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 2058cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# load the module and mount oprofilefs 2068cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddload_module_26() 2078cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 2088cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd grep oprofilefs /proc/filesystems >/dev/null 2098cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$?" -ne 0; then 2108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd modprobe oprofile 2118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$?" != "0"; then 2128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # couldn't load the module 2138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return 2148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 2158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd grep oprofile /proc/modules >/dev/null 2168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$?" != "0"; then 2178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # didn't find module 2188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return 2198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 2208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd grep oprofilefs /proc/filesystems >/dev/null 2218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$?" -ne 0; then 2228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # filesystem still not around 2238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return 2248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 2258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 2268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mkdir /dev/oprofile >/dev/null 2>&1 2278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd grep oprofilefs /etc/mtab >/dev/null 2288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$?" -ne 0; then 2298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mount -t oprofilefs nodev /dev/oprofile >/dev/null 2308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 2318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd KERNEL_SUPPORT=yes 2328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd OPROFILE_AVAILABLE=yes 2338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 2348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 2358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 2368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddload_module_24() 2378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 2388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd grep oprof /proc/devices >/dev/null 2398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$?" -ne 0; then 2408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd modprobe oprofile 2418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$?" != "0"; then 2428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # couldn't load a module 2438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return 2448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 2458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd grep oprofile /proc/modules >/dev/null 2468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$?" != "0"; then 2478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # didn't find module 2488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return 2498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 2508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 2518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd KERNEL_SUPPORT=no 2528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd OPROFILE_AVAILABLE=yes 2538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 2548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 2558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 2568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddload_module() 2578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 2588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd OPROFILE_AVAILABLE=no 2598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd load_module_26 2608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$OPROFILE_AVAILABLE" != "yes"; then 2618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd load_module_24 2628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 2638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$OPROFILE_AVAILABLE" != "yes"; then 2648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Kernel doesn't support oprofile" >&2 2658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 2668cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 2678cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 2688cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 2698cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# setup variables related to path or daemon. Set vars according to following 2708cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# relationship: command-line-option > config-file-settings > defaults. 2718cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# Note that upon entry SESSION_DIR may be set by command-line option. 2728cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodddo_init_daemon_vars() 2738cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 2748cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # load settings from config file, keeping command-line value 2758cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # of SESSION_DIR if necessary. 2768cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test -n "$SESSION_DIR"; then 2778cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SAVED=$SESSION_DIR 2788cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 2798cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd do_load_setup 2808cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test -n "$SAVED"; then 2818cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SESSION_DIR=$SAVED 2828cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 2838cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 2848cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # daemon parameters (as in op_config.h). Note that we preserve 2858cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # any previous value of SESSION_DIR 2868cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test -z "$SESSION_DIR"; then 2878cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SESSION_DIR="/var/lib/oprofile" 2888cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 2898cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd LOCK_FILE="$SESSION_DIR/lock" 2908cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SAMPLES_DIR="$SESSION_DIR/samples" 2918cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd LOG_FILE="$SAMPLES_DIR/oprofiled.log" 2928cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd CURRENT_SAMPLES_DIR="$SAMPLES_DIR/current" 2938cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 2948cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 2958cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 2968cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# pick the appropriate device mount based on kernel 2978cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodddecide_oprofile_device_mount() 2988cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 2998cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$KERNEL_SUPPORT" = "yes"; then 3008cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd MOUNT="/dev/oprofile" 3018cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 3028cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd MOUNT="/proc/sys/dev/oprofile" 3038cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 3048cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 3058cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 3068cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 3078cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# pick the appropriate locations device for oprofile based on kernel 3088cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodddecide_oprofile_device() 3098cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 3108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$KERNEL_SUPPORT" = "yes"; then 3118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd DEVICE_FILE="$MOUNT/buffer" 3128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 3138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd DEVICE_FILE="$SESSION_DIR/opdev" 3148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd NOTE_DEVICE_FILE="$SESSION_DIR/opnotedev" 3158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd HASH_MAP_DEVICE_FILE="$SESSION_DIR/ophashmapdev" 3168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 3178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 3188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 3198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# initialise parameters 3208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodddo_init() 3218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 3228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # for these three buffer size == 0 means use the default value 3238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # hard-coded in op_user.h 3248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd BUF_SIZE=0 3258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd BUF_WATERSHED=0 3268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd CPU_BUF_SIZE=0 3278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd NOTE_SIZE=0 3288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd VMLINUX= 3298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd XENIMAGE="none" 3308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd VERBOSE="" 3318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SEPARATE_LIB=0 3328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SEPARATE_KERNEL=0 3338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SEPARATE_THREAD=0 3348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SEPARATE_CPU=0 3358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd CALLGRAPH=0 3368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd IBS_FETCH_EVENTS="" 3378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd IBS_FETCH_COUNT=0 3388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd IBS_FETCH_UNITMASK=0 3398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd IBS_OP_EVENTS="" 3408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd IBS_OP_COUNT=0 3418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd IBS_OP_UNITMASK=0 3428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 3438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd OPROFILED="$OPDIR/oprofiled" 3448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 3458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # location for daemon setup information 3468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SETUP_DIR="/root/.oprofile" 3478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SETUP_FILE="$SETUP_DIR/daemonrc" 3488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 3498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # initialize daemon vars 3508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd decide_oprofile_device_mount 3518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd CPUTYPE=`cat $MOUNT/cpu_type` 3528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd OP_COUNTERS=`ls $MOUNT/ | grep "^[0-9]\+\$" | tr "\n" " "` 3538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd NR_CHOSEN=0 3548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 3558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd do_init_daemon_vars 3568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd decide_oprofile_device 3578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 3588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd DEFAULT_EVENT=`$OPHELP --get-default-event` 3598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 3608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd IS_TIMER=0 3618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd IS_PERFMON=0 3628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$CPUTYPE" = "timer"; then 3638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd IS_TIMER=1 3648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 3658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd case "$CPUTYPE" in 3668cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ia64/*) 3678cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd IS_PERFMON=$KERNEL_SUPPORT 3688cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 3698cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd esac 3708cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 3718cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 3728cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 3738cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 3748cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddcreate_dir() 3758cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 3768cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test ! -d "$1"; then 3778cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mkdir -p "$1" 3788cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$?" != "0"; then 3798cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Couldn't mkdir -p $1" >&2 3808cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 3818cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 3828cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd chmod 755 "$1" 3838cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 3848cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 3858cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 3868cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddget_event() 3878cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 3888cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd GOTEVENT=`eval "echo \\$CHOSEN_EVENTS_$1"` 3898cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 3908cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 3918cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddset_event() 3928cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 3938cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd eval "CHOSEN_EVENTS_$1=$2" 3948cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 3958cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 3968cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 3978cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# save all the setup related information 3988cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodddo_save_setup() 3998cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 4008cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd create_dir "$SETUP_DIR" 4018cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 4028cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd touch $SETUP_FILE 4038cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd chmod 644 $SETUP_FILE 4048cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd >$SETUP_FILE 4058cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 4068cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "SESSION_DIR=$SESSION_DIR" >>$SETUP_FILE 4078cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 4088cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$NR_CHOSEN" != "0"; then 4098cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd for f in `seq 0 $((NR_CHOSEN - 1))`; do 4108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd get_event $f 4118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "CHOSEN_EVENTS_${f}=$GOTEVENT" >>$SETUP_FILE 4128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd done 4138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 4148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 4158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "NR_CHOSEN=$NR_CHOSEN" >>$SETUP_FILE 4168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 4178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "SEPARATE_LIB=$SEPARATE_LIB" >> $SETUP_FILE 4188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "SEPARATE_KERNEL=$SEPARATE_KERNEL" >> $SETUP_FILE 4198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "SEPARATE_THREAD=$SEPARATE_THREAD" >> $SETUP_FILE 4208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "SEPARATE_CPU=$SEPARATE_CPU" >> $SETUP_FILE 4218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "VMLINUX=$VMLINUX" >> $SETUP_FILE 4228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "IMAGE_FILTER=$IMAGE_FILTER" >> $SETUP_FILE 4238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # write the actual information to file 4248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$BUF_SIZE" != "0"; then 4258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "BUF_SIZE=$BUF_SIZE" >> $SETUP_FILE 4268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 4278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$BUF_WATERSHED" != "0"; then 4288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "BUF_WATERSHED=$BUF_WATERSHED" >> $SETUP_FILE 4298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 4308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$KERNEL_SUPPORT" = "yes"; then 4318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "CPU_BUF_SIZE=$CPU_BUF_SIZE" >> $SETUP_FILE 4328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 4338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$KERNEL_SUPPORT" != "yes"; then 4348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "NOTE_SIZE=$NOTE_SIZE" >> $SETUP_FILE 4358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 4368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "CALLGRAPH=$CALLGRAPH" >> $SETUP_FILE 4378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$KERNEL_RANGE"; then 4388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "KERNEL_RANGE=$KERNEL_RANGE" >> $SETUP_FILE 4398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 4408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "XENIMAGE=$XENIMAGE" >> $SETUP_FILE 4418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$XEN_RANGE"; then 4428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "XEN_RANGE=$XEN_RANGE" >> $SETUP_FILE 4438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 4448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 4458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 4468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 4478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# reload all the setup-related information 4488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodddo_load_setup() 4498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 4508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test -f "$SETUP_FILE"; then 4518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # load the actual information from file 4528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # FIXME this is insecure, arbitrary commands could be added to 4538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # $SETUP_FILE and be executed as root 4548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd . $SETUP_FILE 4558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 4568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 4578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 4588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 4598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddcheck_valid_args() 4608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 4618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test -z "$VMLINUX"; then 4628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "No vmlinux file specified. You must specify the correct vmlinux file, e.g." >&2 4638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "opcontrol --vmlinux=/path/to/vmlinux" >&2 4648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "If you do not have a vmlinux file, use " >&2 4658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "opcontrol --no-vmlinux" >&2 4668cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Enter opcontrol --help for full options" >&2 4678cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 4688cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 4698cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 4708cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test -f "$VMLINUX"; then 4718cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return 4728cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 4738cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 4748cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$VMLINUX" = "none"; then 4758cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return 4768cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 4778cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 4788cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "The specified vmlinux file \"$VMLINUX\" doesn't exist." >&2 4798cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 4808cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 4818cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# similar check for Xen image 4828cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test -f "$XENIMAGE"; then 4838cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return 4848cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 4858cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 4868cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$XENIMAGE" = "none"; then 4878cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return 4888cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 4898cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 4908cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "The specified XenImage file \"$XENIMAGE\" does not exist." >&2 4918cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 4928cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 4938cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 4948cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 4958cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# get start and end points of a file image (linux kernel or xen) 4968cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# get_image_range parameter: $1=type_of_image (linux or xen) 4978cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddget_image_range() 4988cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 4998cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$1" = "xen"; then 5008cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test ! -z "$XEN_RANGE"; then 5018cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return; 5028cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 5038cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd FILE_IMAGE="$XENIMAGE" 5048cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 5058cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test ! -z "$KERNEL_RANGE"; then 5068cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return; 5078cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 5088cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd FILE_IMAGE="$VMLINUX" 5098cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 5108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 5118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$FILE_IMAGE" = "none"; then 5128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return; 5138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 5148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 5158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if is_tool_available objdump; then 5168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "objdump is not installed on this system, use opcontrol --kernel-range=start,end or opcontrol --xen-range= or install objdump" 5178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 5188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 5198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 5208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # start at the start of .text, and end at _etext 5218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd range_info=`objdump -h $FILE_IMAGE 2>/dev/null | grep " .text "` 5228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd tmp1=`echo $range_info | awk '{print $4}'` 5238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd tmp2=`objdump -t $FILE_IMAGE 2>/dev/null | grep "_etext$" | awk '{ print $1 }'` 5248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 5258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test -z "$tmp1" -o -z "$tmp2"; then 5268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "The specified file $FILE_IMAGE does not seem to be valid" >&2 5278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Make sure you are using the non-compressed image file (e.g. vmlinux not vmlinuz)" >&2 5288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd vecho "found start as \"$tmp1\", end as \"$tmp2\"" >&2 5298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 5308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 5318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 5328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$1" = "xen"; then 5338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd XEN_RANGE="`echo $tmp1`,`echo $tmp2`" 5348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd vecho "XEN_RANGE $XEN_RANGE" 5358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 5368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd KERNEL_RANGE="`echo $tmp1`,`echo $tmp2`" 5378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd vecho "KERNEL_RANGE $KERNEL_RANGE" 5388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 5398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 5408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 5418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 5428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# validate --separate= parameters. This function is called with IFS=, 5438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# so on each argument is splitted 5448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddvalidate_separate_args() 5458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 5468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd error_if_empty $1 $2 # we need at least one argument 5478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd local i=1 5488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SEPARATE_LIB=0 5498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SEPARATE_KERNEL=0 5508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SEPARATE_THREAD=0 5518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SEPARATE_CPU=0 5528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd while [ "$i" -lt "$#" ]; do 5538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd shift 5548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd case "$1" in 5558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd lib|library) 5568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SEPARATE_LIB=1 5578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 5588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd kernel) 5598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # first implied by second 5608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SEPARATE_LIB=1 5618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SEPARATE_KERNEL=1 5628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 5638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd thread) 5648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SEPARATE_THREAD=1 5658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 5668cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd cpu) 5678cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SEPARATE_CPU=1 5688cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 5698cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd all) 5708cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SEPARATE_LIB=1 5718cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SEPARATE_KERNEL=1 5728cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SEPARATE_THREAD=1 5738cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SEPARATE_CPU=1 5748cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 5758cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd none) 5768cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SEPARATE_LIB=0 5778cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SEPARATE_KERNEL=0 5788cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SEPARATE_THREAD=0 5798cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SEPARATE_CPU=0 5808cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 5818cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd *) 5828cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "invalid --separate= argument: $1" 5838cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 5848cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd esac 5858cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd done 5868cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 5878cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 5888cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 5898cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# check the counters make sense, and resolve the hardware allocation 5908cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddverify_counters() 5918cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 5928cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$IS_TIMER" = 1; then 5938cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$NR_CHOSEN" != 0; then 5948cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "You cannot specify any performance counter events" >&2 5958cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "because OProfile is in timer mode." >&2 5968cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 5978cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 5988cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return 5998cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 6008cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 6018cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd OPHELP_ARGS= 6028cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 6038cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$NR_CHOSEN" != 0; then 6048cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd for f in `seq 0 $((NR_CHOSEN - 1))`; do 6058cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd get_event $f 6068cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$GOTEVENT" != ""; then 6078cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd verify_ibs $GOTEVENT 6088cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd OPHELP_ARGS="$OPHELP_ARGS $GOTEVENT" 6098cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 6108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd done 6118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 6128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test ! -z "$OPHELP_ARGS" ; then 6138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd HW_CTRS=`$OPHELP --check-events $OPHELP_ARGS --callgraph=$CALLGRAPH` 6148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$?" != 0; then 6158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 6168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 6178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 6188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 6198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 6208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 6218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 6228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# setup any needed default value in chosen events 6238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddnormalise_events() 6248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 6258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$NR_CHOSEN" -le 0 || test "$IS_TIMER" = 1; then 6268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return 6278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 6288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 6298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd for f in `seq 0 $((NR_CHOSEN - 1))`; do 6308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd get_event $f 6318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$GOTEVENT" != ""; then 6328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd EVENT=`echo $GOTEVENT | awk -F: '{print $1}'` 6338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd EVENT_VAL=`$OPHELP $EVENT` 6348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$?" != 0; then 6358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 6368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 6378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd COUNT=`echo $GOTEVENT | awk -F: '{print $2}'` 6388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd UNIT_MASK=`echo $GOTEVENT | awk -F: '{print $3}'` 6398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd KERNEL=`echo $GOTEVENT | awk -F: '{print $4}'` 6408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd USER=`echo $GOTEVENT | awk -F: '{print $5}'` 6418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test -z "$UNIT_MASK"; then 6428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd TMPEVENT="$EVENT:$COUNT" 6438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd UNIT_MASK=`$OPHELP --unit-mask $TMPEVENT` 6448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$?" != 0; then 6458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 6468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 6478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 6488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test -z "$KERNEL"; then 6498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd KERNEL=1 6508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 6518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test -z "$USER"; then 6528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd USER=1 6538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 6548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 6558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd set_event $f "$EVENT:$COUNT:$UNIT_MASK:$KERNEL:$USER" 6568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 6578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd done 6588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 6598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 6608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 6618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# get and check specified options 6628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodddo_options() 6638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 6648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd EXCLUSIVE_ARGC=0 6658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SETUP=no 6668cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd NEED_SETUP=no 6678cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SEEN_EVENT=0 6688cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 6698cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # note: default settings have already been loaded 6708cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 6718cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd while [ "$#" -ne 0 ] 6728cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd do 6738cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd arg=`printf %s $1 | awk -F= '{print $1}'` 6748cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd val=`printf %s $1 | awk -F= '{print $2}'` 6758cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd shift 6768cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test -z "$val"; then 6778cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd local possibleval=$1 6788cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd printf %s $1 "$possibleval" | grep ^- >/dev/null 2>&1 6798cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$?" != "0"; then 6808cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd val=$possibleval 6818cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if [ "$#" -ge 1 ]; then 6828cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd shift 6838cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 6848cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 6858cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 6868cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 6878cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd case "$arg" in 6888cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 6898cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd --init) 6908cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # this is already done in load_module 6918cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # because need to know the processor type 6928cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # and number of registers 6938cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd INIT=yes; 6948cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd EXCLUSIVE_ARGC=`expr $EXCLUSIVE_ARGC + 1` 6958cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd EXCLUSIVE_ARGV="$arg" 6968cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 6978cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 6988cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd --setup) 6998cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SETUP=yes 7008cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 7018cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 7028cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd --start-daemon) 7038cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$KERNEL_SUPPORT" != "yes"; then 7048cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "$arg unsupported. use \"--start\"" >&2 7058cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 7068cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 7078cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd START_DAEMON=yes 7088cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd EXCLUSIVE_ARGC=`expr $EXCLUSIVE_ARGC + 1` 7098cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd EXCLUSIVE_ARGV="$arg" 7108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 7118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 7128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd -s|--start) 7138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd START=yes 7148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd EXCLUSIVE_ARGC=`expr $EXCLUSIVE_ARGC + 1` 7158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd EXCLUSIVE_ARGV="$arg" 7168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 7178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 7188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd -d|--dump) 7198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd DUMP=yes 7208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ONLY_DUMP=yes 7218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd EXCLUSIVE_ARGC=`expr $EXCLUSIVE_ARGC + 1` 7228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd EXCLUSIVE_ARGV="$arg" 7238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 7248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 7258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd -t|--stop) 7268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$KERNEL_SUPPORT" != "yes"; then 7278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "$arg unsupported. use \"--shutdown\"" >&2 7288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 7298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 7308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd DUMP=yes 7318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd STOP=yes 7328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd EXCLUSIVE_ARGC=`expr $EXCLUSIVE_ARGC + 1` 7338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd EXCLUSIVE_ARGV="$arg" 7348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 7358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 7368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd -h|--shutdown) 7378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd DUMP=yes 7388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd STOP=yes 7398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd KILL_DAEMON=yes 7408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd EXCLUSIVE_ARGC=`expr $EXCLUSIVE_ARGC + 1` 7418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd EXCLUSIVE_ARGV="$arg" 7428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 7438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 7448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd --status) 7458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd STATUS=yes 7468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 7478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 7488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd --reset) 7498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd DUMP=yes 7508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd RESET=yes 7518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd EXCLUSIVE_ARGC=`expr $EXCLUSIVE_ARGC + 1` 7528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd EXCLUSIVE_ARGV="$arg" 7538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 7548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 7558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd --save) 7568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd error_if_empty $arg $val 7578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd DUMP=yes 7588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SAVE_SESSION=yes 7598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SAVE_NAME=$val 7608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd EXCLUSIVE_ARGC=`expr $EXCLUSIVE_ARGC + 1` 7618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd EXCLUSIVE_ARGV="$arg" 7628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 7638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 7648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd --deinit) 7658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd DUMP=yes 7668cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd test ! -f "$LOCK_FILE" || { 7678cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd STOP=yes 7688cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd KILL_DAEMON=yes 7698cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } 7708cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd DEINIT=yes 7718cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd EXCLUSIVE_ARGC=`expr $EXCLUSIVE_ARGC + 1` 7728cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd EXCLUSIVE_ARGV="$arg" 7738cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 7748cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 7758cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # --setup options 7768cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 7778cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd --session-dir) 7788cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # already processed 7798cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 7808cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd --buffer-size) 7818cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd error_if_empty $arg $val 7827a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown error_if_not_number $arg $val 7838cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd BUF_SIZE=$val 7848cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd DO_SETUP=yes 7858cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 7868cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd --buffer-watershed) 7878cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$KERNEL_SUPPORT" != "yes"; then 7888cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "$arg unsupported for this kernel version" 7898cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 7908cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 7918cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd error_if_empty $arg $val 7927a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown error_if_not_number $arg $val 7938cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd BUF_WATERSHED=$val 7948cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd DO_SETUP=yes 7958cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 7968cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd --cpu-buffer-size) 7978cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$KERNEL_SUPPORT" != "yes"; then 7988cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "$arg unsupported for this kernel version" 7998cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 8008cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 8018cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd error_if_empty $arg $val 8027a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown error_if_not_number $arg $val 8038cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd CPU_BUF_SIZE=$val 8048cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd DO_SETUP=yes 8058cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 8068cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd -e|--event) 8078cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd error_if_empty $arg $val 8088cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # reset any read-in defaults from daemonrc 8098cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$SEEN_EVENT" = "0"; then 8108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd NR_CHOSEN=0 8118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SEEN_EVENT=1 8128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 8138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$val" = "default"; then 8148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd val=$DEFAULT_EVENT 8158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 8168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd set_event $NR_CHOSEN "$val" 8178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd NR_CHOSEN=`expr $NR_CHOSEN + 1` 8188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd DO_SETUP=yes 8198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 8208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd -p|--separate) 8218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd OLD_IFS=$IFS 8228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd IFS=, 8238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd validate_separate_args $arg $val 8248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd IFS=$OLD_IFS 8258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd DO_SETUP=yes 8268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 8278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd -c|--callgraph) 8288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd error_if_empty $arg $val 8298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test ! -f $MOUNT/backtrace_depth; then 8308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Call-graph profiling unsupported on this kernel/hardware" >&2 8318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 8328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 8337a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown error_if_not_number $arg $val 8348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd CALLGRAPH=$val 8358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd DO_SETUP=yes 8368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 8378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd --vmlinux) 8388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd error_if_empty $arg $val 8398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd VMLINUX=$val 8408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd DO_SETUP=yes 8418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 8428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd --no-vmlinux) 8438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd VMLINUX=none 8448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd DO_SETUP=yes 8458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 8468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd --kernel-range) 8478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd error_if_empty $arg $val 8488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd KERNEL_RANGE=$val 8498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd DO_SETUP=yes 8508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 8518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd --xen) 8528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd error_if_empty $arg $val 8538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd XENIMAGE=$val 8548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd DO_SETUP=yes 8558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 8568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd --active-domains) 8578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd error_if_empty $arg $val 8588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ACTIVE_DOMAINS=$val 8598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd DO_SETUP=yes 8608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 8618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd --note-table-size) 8628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd error_if_empty $arg $val 8638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$KERNEL_SUPPORT" = "yes"; then 8648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "\"$arg\" meaningless on this kernel" >&2 8658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 8668cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 8678cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd NOTE_SIZE=$val 8688cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 8698cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd DO_SETUP=yes 8708cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 8718cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd -i|--image) 8728cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd error_if_empty $arg $val 8738cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$val" = "all"; then 8748cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd IMAGE_FILTER= 8758cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 8768cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd IMAGE_FILTER=$val 8778cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 8788cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd DO_SETUP=yes 8798cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 8808cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 8818cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd -V|--verbose) 8828cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test -z "$val"; then 8838cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd VERBOSE="all" 8848cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 8858cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd VERBOSE=$val 8868cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 8878cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 8888cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 8898cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd -l|--list-events) 8908cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd EXCLUSIVE_ARGC=`expr $EXCLUSIVE_ARGC + 1` 8918cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd EXCLUSIVE_ARGV="$arg" 8928cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exec $OPHELP 8938cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 8948cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 8958cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd *) 8968cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Unknown option \"$arg\". See opcontrol --help" >&2 8978cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 8988cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 8998cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd esac 9008cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd done 9018cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 9028cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd normalise_events 9038cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd verify_counters 9048cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 9058cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # error checking to make sure options make sense 9068cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$EXCLUSIVE_ARGC" -gt 1; then 9078cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Option \"$EXCLUSIVE_ARGV\" not valid with other options." >&2 9088cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 9098cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 9108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 9118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$SETUP" = "yes" -a "$DO_SETUP" != "yes"; then 9128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "No options specified for --setup." >&2 9138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 9148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 9158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 9168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test -n "$VERBOSE"; then 9178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$START" != "yes" -a "$START_DAEMON" != "yes"; then 9188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Option --verbose may only be used with --start or --start-daemon" >&2 9198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 9208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 9218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 9228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 9238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$DO_SETUP" = "yes"; then 9248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SETUP="$DO_SETUP" 9258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 9268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 9278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$EXCLUSIVE_ARGC" -eq 1 -a "$SETUP" = "yes"; then 9288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$EXCLUSIVE_ARGV" != "--start-daemon" -a "$EXCLUSIVE_ARGV" != "--start"; then 9298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Option \"--setup\" not valid with \"$EXCLUSIVE_ARGV\"." >&2 9308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 9318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 9328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 9338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 9348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd vecho "Parameters used:" 9358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd vecho "SESSION_DIR $SESSION_DIR" 9368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd vecho "LOCK_FILE $LOCK_FILE" 9378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd vecho "SAMPLES_DIR $SAMPLES_DIR" 9388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd vecho "CURRENT_SAMPLES_DIR $CURRENT_SAMPLES_DIR" 9398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd vecho "CPUTYPE $CPUTYPE" 9408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$BUF_SIZE" != "0"; then 9418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd vecho "BUF_SIZE $BUF_SIZE" 9428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 9438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd vecho "BUF_SIZE default value" 9448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 9458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$BUF_WATERSHED" != "0"; then 9468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd vecho "BUF_WATERSHED $BUF_WATERSHED" 9478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 9488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd vecho "BUF_WATERSHED default value" 9498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 9508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$KERNEL_SUPPORT" = "yes"; then 9518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$CPU_BUF_SIZE" != "0"; then 9528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd vecho "CPU_BUF_SIZE $CPU_BUF_SIZE" 9538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 9548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd vecho "CPU_BUF_SIZE default value" 9558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 9568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 9578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 9588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd vecho "SEPARATE_LIB $SEPARATE_LIB" 9598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd vecho "SEPARATE_KERNEL $SEPARATE_KERNEL" 9608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd vecho "SEPARATE_THREAD $SEPARATE_THREAD" 9618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd vecho "SEPARATE_CPU $SEPARATE_CPU" 9628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd vecho "CALLGRAPH $CALLGRAPH" 9638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd vecho "VMLINUX $VMLINUX" 9648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd vecho "KERNEL_RANGE $KERNEL_RANGE" 9658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd vecho "XENIMAGE $XENIMAGE" 9668cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd vecho "XEN_RANGE $XEN_RANGE" 9678cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 9688cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 9698cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 9708cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# stop any existing daemon 9718cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodddo_stop() 9728cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 9738cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test ! -f "$LOCK_FILE"; then 9748cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Daemon not running" >&2 9758cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return 9768cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 9778cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 9788cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd kill -0 `cat $LOCK_FILE` 2>/dev/null 9798cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$?" -ne 0; then 9808cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Detected stale lock file. Removing." >&2 9818cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd rm -f "$LOCK_FILE" 9828cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return 9838cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 9848cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 9858cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test $KERNEL_SUPPORT = "yes" \ 9868cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd && test 0 != $(cat /dev/oprofile/enable); then 9878cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Stopping profiling." 9888cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo 0 >/dev/oprofile/enable 9898cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 9908cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd kill -USR2 `cat $LOCK_FILE` 2>/dev/null 9918cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 9928cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 9938cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 9948cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# kill the daemon process(es) 9958cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodddo_kill_daemon() 9968cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 9978cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test ! -f "$LOCK_FILE"; then 9988cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # no error message, do_kill_daemon imply stop and stop already 9998cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # output "Daemon not running" 10008cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return 10018cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 10028cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 10038cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd kill -0 `cat $LOCK_FILE` 2>/dev/null 10048cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$?" -ne 0; then 10058cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Detected stale lock file. Removing." >&2 10068cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd rm -f "$LOCK_FILE" 10078cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return 10088cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 10098cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 10108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Killing daemon." 10118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 10128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test $KERNEL_SUPPORT = "yes"; then 10138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd kill -TERM `cat $LOCK_FILE` 10148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 10158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo 1 >/proc/sys/dev/oprofile/dump_stop 10168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 10178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 10188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd COUNT=0 10198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd while test -n "`pidof oprofiled`" 10208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd do 10218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd sleep 1 10228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 10238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # because oprofiled only sets a variable inside the 10248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # signal handler itself, it's possible to miss a 10258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # signal just before it goes to sleep waiting for 10268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # data from the kernel that never arrives. So we 10278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # remind it it needs to die - this works because 10288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # the signal will bring oprofiled out of the kernel 10298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # back into userspace 10308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test $KERNEL_SUPPORT = "yes"; then 10318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd pid=`cat $LOCK_FILE 2>/dev/null` 10328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd kill -TERM "$pid" 2>/dev/null 10338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 10348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 10358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd COUNT=`expr $COUNT + 1` 10368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 10378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # IBS can generate a large number of samples/events. 10388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # Therefore, extend the delay before killing 10398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$IBS_FETCH_COUNT" != "0" \ 10408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd -o "$IBS_OP_COUNT" != "0" ; then 10418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd DELAY_KILL=60 10428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 10438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd DELAY_KILL=15 10448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 10458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$COUNT" -eq "$DELAY_KILL"; then 10468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Daemon stuck shutting down; killing !" 10478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd kill -9 `cat $LOCK_FILE` 10488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 10498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd done 10508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd sleep 1 10518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # already removed unless we forced the kill 10528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd rm -f "$SESSION_DIR/lock" 10538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 10548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 10558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 10568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddrm_devices_24() 10578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 10588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd rm_device "$DEVICE_FILE" 10598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd rm_device "$NOTE_DEVICE_FILE" 10608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd rm_device "$HASH_MAP_DEVICE_FILE" 10618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 10628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 10638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 10648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddcreate_devices_24() 10658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 10668cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd MAJOR_NR=`grep oprof /proc/devices | awk '{print $1}'` 10678cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 10688cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd create_device $DEVICE_FILE $MAJOR_NR 0 10698cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd create_device $NOTE_DEVICE_FILE $MAJOR_NR 2 10708cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd create_device $HASH_MAP_DEVICE_FILE $MAJOR_NR 1 10718cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 10728cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 10738cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# create jitdump directory and remove any old files from 10748cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# a previous run 10758cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddprep_jitdump() { 10768cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd local dumpdir=$SESSION_DIR/jitdump 10778cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd test -d $dumpdir || { 10788cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mkdir -p $dumpdir; 10798cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd chmod 777 $dumpdir; 10808cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return; 10818cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } 10828cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # VMs may already be running when profiling is started, so 10838cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # remove only dump files that are not in use 10848cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd for I in $dumpdir/*; do 10858cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd test -f $I || continue; 10868cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd local pid=`basename $I .dump`; 10878cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test -d /proc/$pid; then 10888cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd local files=`find /proc/$pid/fd -lname $I`; 10898cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd test -n "$files" && continue; 10908cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 10918cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd rm -f $I; 10928cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd done 10938cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 10948cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 10958cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# setup and start module 10968cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodddo_setup() 10978cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 10988cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd create_dir "$SESSION_DIR" 10998cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 11008cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$KERNEL_SUPPORT" != "yes"; then 11018cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd rm_devices_24 11028cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd create_devices_24 11038cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 11048cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 11058cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd create_dir "$CURRENT_SAMPLES_DIR" 11068cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 11078cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd prep_jitdump; 11088cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 11098cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 11108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 11118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# set a sysctl/oprofilefs parameter 11128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddset_param() 11138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 11148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$KERNEL_SUPPORT" = "yes"; then 11158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo $2 >$MOUNT/$1 11168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 11178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd $SYSCTL -w dev.oprofile.$1=$2 11188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 11198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 11208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 11218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 11228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# set a sysctl/oprofilefs counter parameter 11238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddset_ctr_param() 11248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 11258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # no such thing for perfmon 11268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$IS_PERFMON" = "yes"; then 11278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return 11288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 11298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 11308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$KERNEL_SUPPORT" = "yes"; then 11318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test -e $MOUNT/$1; then 11328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo $3 >$MOUNT/$1/$2 11338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 11348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo -n "Error: counter $1 not available" 11358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test -e /proc/sys/kernel/nmi_watchdog; then 11368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo " nmi_watchdog using this resource ? Try:" 11378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "opcontrol --deinit" 11388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "echo 0 > /proc/sys/kernel/nmi_watchdog" 11398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 11408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 11418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 11428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 11438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd $SYSCTL -w dev.oprofile.$1.$2=$3 11448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 11458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 11468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 11478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 11488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# returns 1 if $CPUTYPE is a PPC64 variant 11498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddis_non_cell_ppc64_variant() 11508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 11518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd case "$1" in 11528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ppc64/*) 11538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd tmp="${1/cell/CELL}" 11548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$1" = "$tmp"; then 11558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd #No substituion occurred, so cputype is not cell 11568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return 1 11578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 11588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return 0 11598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 11608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 11618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd *) 11628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return 0; 11638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 11648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd esac 11658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 11668cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 11678cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 11688cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# The check_event_mapping_data procedure gives the 11698cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# opportunity to validate events and enforce any 11708cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# arch-specific restritions, etc. 11718cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddcheck_event_mapping_data() 11728cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 11738cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 11748cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd is_non_cell_ppc64_variant $CPUTYPE 11758cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test $? -ne 0 ; then 11768cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # For PPC64 architectures, the values required to program 11778cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # MMCRs for the given event are returned along with the event. 11788cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # Here we use those values to ensure that all chosen events 11798cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # are from the same group. 11808cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd MMCR0=`echo $EVENT_STR | awk '{print $2}'` 11818cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd MMCR1=`echo $EVENT_STR | awk '{print $3}'` 11828cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd MMCRA=`echo $EVENT_STR | awk '{print $4}'` 11838cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd MMCR0_VAL=`echo $MMCR0 | awk -F: '{print $2}'` 11848cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd MMCR1_VAL=`echo $MMCR1 | awk -F: '{print $2}'` 11858cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd MMCRA_VAL=`echo $MMCRA | awk -F: '{print $2}'` 11868cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 11878cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ## mmcr0, mmcr1, mmcra are for all ppc64 counters 11888cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # Save first event mmcr settings to compare with additional 11898cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # events. All events must have the same mmcrx values i.e. be in 11908cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # the same group. Only one event is assigned per counter, 11918cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # hence there will not be a conflict on the counters 11928cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if [ "$MMCR0_CK_VAL" = "" ] ; then 11938cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd MMCR0_CK_VAL=$MMCR0_VAL 11948cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd MMCR1_CK_VAL=$MMCR1_VAL 11958cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd MMCRA_CK_VAL=$MMCRA_VAL 11968cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 11978cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # make sure all events are from the same group 11988cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test $MMCR0_CK_VAL != $MMCR0_VAL \ 11998cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd -o $MMCR1_CK_VAL != $MMCR1_VAL \ 12008cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd -o $MMCRA_CK_VAL != $MMCRA_VAL ; then 12018cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "ERROR: The specified events are not from the same group." 12028cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo " Use 'opcontrol --list-events' to see event groupings." 12038cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 12048cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 12058cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 12068cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 12078cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # Check if all user/kernel flags per-counter are matching. 12088cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if [ "$USER_CK" = "" ] ; then 12098cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd USER_CK=$USER 12108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd KERNEL_CK=$KERNEL 12118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 12128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test $USER_CK != $USER \ 12138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd -o $KERNEL_CK != $KERNEL ; then 12148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "ERROR: All kernel/user event flags must match." 12158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 12168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 12178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 12188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 12198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if [ "$CPUTYPE" = "ppc64/cell-be" ]; then 12208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd event_num=`echo $EVENT_STR | awk '{print $1}'` 12218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # PPU event and cycle events can be measured at 12228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # the same time. SPU event can not be measured 12238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # at the same time as any other event. Similarly for 12248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # SPU Cycles 12258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 12268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # We use EVNT_MSK to track what events have already 12278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # been seen. Valid values are: 12288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # NULL string - no events seen yet 12298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # 1 - PPU CYCLES or PPU Event seen 12308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # 2 - SPU CYCLES seen 12318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # 3 - SPU EVENT seen 12328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 12338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # check if event is PPU_CYCLES 12348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if [ "$event_num" = "1" ]; then 12358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if [ "$EVNT_MSK" = "1" ] || [ "$EVNT_MSK" = "" ]; then 12368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd EVNT_MSK=1 12378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 12388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "PPU CYCLES not compatible with previously specified event" 12398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 12408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 12418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 12428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # check if event is SPU_CYCLES 12438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd elif [ "$event_num" = "2" ]; then 12448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if [ "$EVNT_MSK" = "" ]; then 12458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd EVNT_MSK=2 12468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 12478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "SPU CYCLES not compatible with any other event" 12488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 12498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 12508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 12518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # check if event is SPU Event profiling 12528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd elif [ "$event_num" -ge "4100" ] && [ "$event_num" -le "4163" ] ; then 12538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if [ "$EVNT_MSK" = "" ]; then 12548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd EVNT_MSK=3 12558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 12568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "SPU event profiling not compatible with any other event" 12578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 12588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 12598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 12608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # Check to see that the kernel supports SPU event 12618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # profiling. Note, if the file exits it should have 12628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # the LSB bit set to 1 indicating SPU event profiling 12638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # support. For now, it is sufficient to test that the 12648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # file exists. 12658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test ! -f /dev/oprofile/cell_support; then 12668cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Kernel does not support SPU event profiling" 12678cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 12688cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 12698cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 12708cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # check if event is PPU Event profiling (all other 12718cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # events are PPU events) 12728cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 12738cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if [ "$EVNT_MSK" = "1" ] || [ "$EVNT_MSK" = "" ]; then 12748cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd EVNT_MSK=1 12758cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 12768cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "PPU profiling not compatible with previously specified event" 12778cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 12788cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 12798cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 12808cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 12818cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd len=`echo -n $event_num | wc -m` 12828cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd num_chars_in_grpid=`expr $len - 2` 12838cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd GRP_NUM_VAL=`echo | awk '{print substr("'"${event_num}"'",1,"'"${num_chars_in_grpid}"'")}'` 12848cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if [ "$GRP_NUM_CK_VAL" = "" ] ; then 12858cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd GRP_NUM_CK_VAL=$GRP_NUM_VAL 12868cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 12878cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test $GRP_NUM_CK_VAL != $GRP_NUM_VAL ; then 12888cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "ERROR: The specified events are not from the same group." >&2 12898cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo " Use 'opcontrol --list-events' to see event groupings." >&2 12908cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 12918cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 12928cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 12938cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 12948cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 12958cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 12968cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodddo_param_setup() 12978cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 12988cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # different names 12998cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test $BUF_SIZE != 0; then 13008cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$KERNEL_SUPPORT" = "yes"; then 13018cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo $BUF_SIZE >$MOUNT/buffer_size 13028cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 13038cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd $SYSCTL -w dev.oprofile.bufsize=$BUF_SIZE 13048cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 13058cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 13068cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 13078cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test $BUF_WATERSHED != 0; then 13088cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$KERNEL_SUPPORT" = "yes"; then 13098cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo $BUF_WATERSHED >$MOUNT/buffer_watershed 13108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 13118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "buffer-watershed not supported - ignored" >&2 13128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 13138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 13148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 13158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test $CPU_BUF_SIZE != 0; then 13168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$KERNEL_SUPPORT" = "yes"; then 13178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo $CPU_BUF_SIZE >$MOUNT/cpu_buffer_size 13188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 13198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "cpu-buffer-size not supported - ignored" >&2 13208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 13218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 13228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 13238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test -n "$ACTIVE_DOMAINS"; then 13248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$KERNEL_SUPPORT" = "yes"; then 13258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo $ACTIVE_DOMAINS >$MOUNT/active_domains 13268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 13278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "active-domains not supported - ignored" >&2 13288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 13298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 13308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 13318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test $NOTE_SIZE != 0; then 13328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd set_param notesize $NOTE_SIZE 13338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 13348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 13358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$KERNEL_SUPPORT" = "yes" -a -f $MOUNT/backtrace_depth; then 13368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd set_param backtrace_depth $CALLGRAPH 13378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd elif test "$CALLGRAPH" != "0"; then 13388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Call-graph profiling not supported - ignored" >&2 13398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 13408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 13418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$IS_TIMER" = 1; then 13428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return 13438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 13448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 13458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # use the default setup if none set 13468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$NR_CHOSEN" = 0; then 13478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd set_event 0 $DEFAULT_EVENT 13488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd NR_CHOSEN=1 13498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd HW_CTRS=`$OPHELP --check-events $DEFAULT_EVENT --callgraph=$CALLGRAPH` 13508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Using default event: $DEFAULT_EVENT" 13518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 13528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 13538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # Necessary in this case : 13548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # opcontrol ctr0-on ctr1-on then opcontrol ctr0-on 13558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd for f in $OP_COUNTERS ; do 13568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd set_ctr_param $f enabled 0 13578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd set_ctr_param $f event 0 13588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd set_ctr_param $f count 0 13598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd done 13608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 13618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # Check if driver has IBS support 13628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test -d $MOUNT/ibs_fetch; then 13638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # Reset driver's IBS fetch setting 13648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd set_param ibs_fetch/enable 0 13658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 13668cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 13678cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test -d $MOUNT/ibs_op ; then 13688cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # Reset driver's IBS op setting 13698cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd set_param ibs_op/enable 0 13708cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 13718cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 13728cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd verify_counters 13738cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 13748cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd OPROFILED_EVENTS= 13758cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd for f in `seq 0 $((NR_CHOSEN - 1))`; do 13768cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd get_event $f 13778cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$GOTEVENT" != ""; then 13788cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd EVENT=`echo $GOTEVENT | awk -F: '{print $1}'` 13798cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd EVENT_STR=`$OPHELP $EVENT` 13808cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd EVENT_VAL=`echo $EVENT_STR | awk '{print $1}'` 13818cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd COUNT=`echo $GOTEVENT | awk -F: '{print $2}'` 13828cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd UNIT_MASK=`echo $GOTEVENT | awk -F: '{print $3}'` 13838cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd KERNEL=`echo $GOTEVENT | awk -F: '{print $4}'` 13848cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd USER=`echo $GOTEVENT | awk -F: '{print $5}'` 13858cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd CTR=`echo $HW_CTRS | awk "{print \\$$((f + 1))}"` 13868cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd check_event_mapping_data 13878cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 13888cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$EVENT" = "SPU_CYCLES"; then 13898cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$SEPARATE_KERNEL" = "1"; then 13908cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SEPARATE_KERNEL=0 13918cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Ignoring --separate=kernel option with SPU_CYCLES" 13928cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 13938cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$SEPARATE_LIB" = "0"; then 13948cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SEPARATE_LIB=1 13958cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Forcing required option --separate=lib with SPU_CYCLES" 13968cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 13978cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 13988cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # It is possible for a single application to be 13998cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # running on all SPUs simultaneously. Without 14008cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # SEPARATE_CPU, the resulting sample data would 14018cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # consist of a single sample file. If all SPUs 14028cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # were truly running the same code, the merging 14038cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # of sample data would be fine. However, an 14048cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # application file may have multiple SPU images 14058cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # embedded within it, resulting in different 14068cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # code running on different SPUs. Therefore, 14078cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # we force SEPARATE_CPU in order to properly 14088cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # handle this case. 14098cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$SEPARATE_CPU" = "0"; then 14108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SEPARATE_CPU=1 14118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Forcing required option --separate=cpu with SPU_CYCLES" 14128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 14138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 14148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 14158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 14168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if [ "$CTR" = "ibs_fetch" -o "$CTR" = "ibs_op" ] ; then 14178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # Handle IBS events setup 14188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd do_param_setup_ibs 14198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd continue 14208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 14218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 14228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$EVENT" = "RTC_INTERRUPTS"; then 14238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd set_param rtc_value $COUNT 14248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd $SYSCTL -w dev.oprofile.rtc_value=$COUNT 14258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 14268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd set_ctr_param $CTR enabled 1 14278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd set_ctr_param $CTR event $EVENT_VAL 14288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd loop_count=1 14298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd for i in ${EVENT_STR}; do 14308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd #Skip first argument of EVENT_STR (event val) since we've already 14318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd #processed that value. 14328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$loop_count" -gt 1; then 14338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd KEY=`echo $i | awk -F: '{print $1}'` 14348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd VAL=`echo $i | awk -F: '{print $2}'` 14358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd set_ctr_param "" $KEY $VAL 14368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 14378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd loop_count=$((loop_count+1)) 14388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd done 14398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd set_ctr_param $CTR count $COUNT 14408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd set_ctr_param $CTR kernel $KERNEL 14418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd set_ctr_param $CTR user $USER 14428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd set_ctr_param $CTR unit_mask $UNIT_MASK 14438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 14448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd OPROFILED_EVENTS=${OPROFILED_EVENTS}$EVENT:$EVENT_VAL: 14458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd OPROFILED_EVENTS=${OPROFILED_EVENTS}$CTR:$COUNT:$UNIT_MASK: 14468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd OPROFILED_EVENTS=${OPROFILED_EVENTS}$KERNEL:$USER, 14478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 14488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd done 14498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 14508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # For PPC64 architectures we need to set the enable_kernel and 14518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # enable_user flags for enabling/disabling user/kernel domain 14528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # profiling. All per-counter user/kernel flags must match. 14538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # This condition is checked previously by check_event_mapping_data. 14548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # This statement uses the last event's user/kernel flags to set 14558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # /dev/oprofile/enable_kernel and /dev/oprofile/enable_user. 14568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd is_non_cell_ppc64_variant $CPUTYPE 14578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test $? -ne 0 ; then 14588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd set_param "enable_kernel" $KERNEL 14598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd set_param "enable_user" $USER 14608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 14618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 14628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 14638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 14648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 14658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodddo_start_daemon() 14668cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 14678cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 14688cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test -f "$LOCK_FILE"; then 14698cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd kill -0 `cat $LOCK_FILE` 2>/dev/null 14708cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$?" -eq 0; then 14718cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return; 14728cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 14738cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Detected stale lock file. Removing." >&2 14748cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd rm -f "$LOCK_FILE" 14758cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 14768cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 14778cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 14788cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd do_setup 14798cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd check_valid_args 14808cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd get_image_range "linux" 14818cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd get_image_range "xen" 14828cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd do_param_setup 14838cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 14848cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd OPD_ARGS=" \ 14858cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd --session-dir=$SESSION_DIR \ 14868cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd --separate-lib=$SEPARATE_LIB \ 14878cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd --separate-kernel=$SEPARATE_KERNEL \ 14888cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd --separate-thread=$SEPARATE_THREAD \ 14898cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd --separate-cpu=$SEPARATE_CPU" 14908cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 14918cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$IS_TIMER" = 1; then 14928cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd OPD_ARGS="$OPD_ARGS --events=" 14938cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 14948cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if ! test -z "$OPROFILED_EVENTS"; then 14958cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd OPD_ARGS="$OPD_ARGS --events=$OPROFILED_EVENTS" 14968cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 14978cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 14988cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 14998cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$VMLINUX" = "none"; then 15008cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd OPD_ARGS="$OPD_ARGS --no-vmlinux" 15018cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 15028cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd OPD_ARGS="$OPD_ARGS --vmlinux=$VMLINUX --kernel-range=$KERNEL_RANGE" 15038cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 15048cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 15058cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if ! test "$XENIMAGE" = "none"; then 15068cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd OPD_ARGS="$OPD_ARGS --xen-image=$XENIMAGE --xen-range=$XEN_RANGE" 15078cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 15088cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 15098cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if ! test -z "$IMAGE_FILTER"; then 15108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd OPD_ARGS="$OPD_ARGS --image=$IMAGE_FILTER" 15118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 15128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 15138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test -n "$VERBOSE"; then 15148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd OPD_ARGS="$OPD_ARGS --verbose=$VERBOSE" 15158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 15168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 15178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd help_start_daemon_with_ibs 15188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 15198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd vecho "executing oprofiled $OPD_ARGS" 15208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 15218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd $OPROFILED $OPD_ARGS 15228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 15238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd COUNT=0 15248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd while ! test -f "$SESSION_DIR/lock" 15258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd do 15268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd sleep 1 15278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd COUNT=`expr $COUNT + 1` 15288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$COUNT" -eq 10; then 15298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Couldn't start oprofiled." >&2 15308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Check the log file \"$LOG_FILE\" and kernel syslog" >&2 15318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 15328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 15338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd done 15348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 15358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Daemon started." 15368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 15378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 15388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodddo_start() 15398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 15408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd prep_jitdump; 15418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$KERNEL_SUPPORT" = "yes"; then 15428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo 1 >$MOUNT/enable 15438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 15448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd kill -USR1 `cat $LOCK_FILE` 2>/dev/null 15458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Profiler running." 15468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 15478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 15488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 15498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# print status 15508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodddo_status() 15518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 15528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd OPROFILED_PID=`cat $SESSION_DIR/lock 2>/dev/null` 15538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test -n "$OPROFILED_PID" -a -d "/proc/$OPROFILED_PID"; then 15548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Daemon running: pid $OPROFILED_PID" 15558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 15568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Daemon not running" 15578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 15588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 15598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$NR_CHOSEN" != "0"; then 15608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd for f in `seq 0 $((NR_CHOSEN - 1))`; do 15618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd get_event $f 15628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Event $f: $GOTEVENT" 15638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd done 15648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 15658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 15668cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SEPARATE="" 15678cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$SEPARATE_LIB" = "1"; then 15688cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SEPARATE="library"; 15698cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 15708cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$SEPARATE_KERNEL" = "1"; then 15718cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SEPARATE="$SEPARATE kernel"; 15728cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 15738cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$SEPARATE_THREAD" = "1"; then 15748cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SEPARATE="$SEPARATE thread"; 15758cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 15768cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$SEPARATE_CPU" = "1"; then 15778cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SEPARATE="$SEPARATE cpu"; 15788cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 15798cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 15808cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test -z "$SEPARATE"; then 15818cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SEPARATE=none 15828cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 15838cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 15848cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Separate options: $SEPARATE" 15858cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "vmlinux file: $VMLINUX" 15868cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 15878cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test -z "$IMAGE_FILTER"; then 15888cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Image filter: none" 15898cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 15908cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Image filter: $IMAGE_FILTER" 15918cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 15928cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 15938cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Call-graph depth: $CALLGRAPH" 15948cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$BUF_SIZE" != "0"; then 15958cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Buffer size: $BUF_SIZE" 15968cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 15978cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$KERNEL_SUPPORT" != "yes"; then 15988cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$NOTE_SIZE" != "0"; then 15998cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Note buffer size: $NOTE_SIZE" 16008cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 16018cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 16028cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$BUF_WATERSHED" != "0"; then 16038cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "CPU buffer watershed: $BUF_WATERSHED" 16048cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 16058cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$CPU_BUF_SIZE" != "0"; then 16068cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "CPU buffer size: $CPU_BUF_SIZE" 16078cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 16088cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 16098cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 16108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 0 16118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 16128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 16138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 16148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# do_dump_data 16158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# returns 0 if successful 16168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# returns 1 if the daemon is unable to dump data 16178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# exit 1 if we need to be root to dump 16188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodddo_dump_data() 16198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 16208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # make sure that the daemon is not dead and gone 16218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test -e "$SESSION_DIR/lock"; then 16228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd OPROFILED_PID=`cat $SESSION_DIR/lock` 16238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test ! -d "/proc/$OPROFILED_PID"; then 16248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "dump fail: daemon died during last run ?" >&2 16258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return 1; 16268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 16278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 16288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return 1; 16298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 16308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 16318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$KERNEL_SUPPORT" = "yes"; then 16328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if ! test -w $MOUNT/dump; then 16338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test `id -u` != "0"; then 16348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "You must be root to dump with this kernel version" 16358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 16368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 16378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 16388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # trigger oprofiled to execute opjitconv 16397a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown echo do_jitconv >> $SESSION_DIR/opd_pipe 16408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd rm -f "$SESSION_DIR/complete_dump" 16418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo 1 > $MOUNT/dump 16428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # loop until the complete_dump file is created to 16438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # signal that the dump has been completed 16448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd while [ \( ! -e "$SESSION_DIR/complete_dump" \) ] 16458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd do 16468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test ! -d "/proc/$OPROFILED_PID"; then 16478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "dump fail: either daemon died during last run or dies during dump" >&2 16488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return 1 16498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 16508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd sleep 1; 16518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd done 16528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 16538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo 1 > $MOUNT/dump 16548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # HACK ! 16558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd sleep 2 16568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 16577a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown cp -r /dev/oprofile/stats "$SAMPLES_DIR/current" 16587a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 16598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return 0; 16608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 16618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 16628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 16638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# do_dump 16648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# returns 0 if successful 16658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# exits if unsuccessful 16668cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodddo_dump() 16678cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 16688cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd do_dump_data 16698cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test $? -ne 0 -a "$ONLY_DUMP" = "yes"; then 16708cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Unable to complete dump of oprofile data: is the oprofile daemon running?" >& 2 16718cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1; 16728cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 16738cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return 0; 16748cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 16758cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 16768cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# tell daemon to re-open the sample files 16778cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddhup_daemon() 16788cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 16798cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test -f "$LOCK_FILE"; then 16808cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo -n "Signalling daemon... " 16818cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd kill -HUP `cat $LOCK_FILE` 16828cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "done" 16838cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 16848cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 16858cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 16868cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 16878cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# move all the sample files to a sample directory 16888cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodddo_save_session() 16898cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 16908cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SAVE_DIR="${SAMPLES_DIR}/${SAVE_NAME}" 16918cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 16928cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test -e "$SAVE_DIR"; then 16938cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "session $SAVE_DIR already exists" >&2 16948cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 16958cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 16968cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 16978cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if ! test -e $CURRENT_SAMPLES_DIR; then 16988cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "$CURRENT_SAMPLES_DIR doesn't exist: nothing to save" >&2 16998cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 0 17008cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 17018cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 17028cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # FIXME: I don't think it's worth checking for empty current directory 17038cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 17048cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mv $CURRENT_SAMPLES_DIR $SAVE_DIR 17058cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$?" != "0"; then 17068cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Couldn't move $CURRENT_SAMPLES_DIR to $SAVE_DIR" >&2 17078cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 17088cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 17098cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 17108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd hup_daemon 17118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 17128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 17138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 17148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# remove all the sample files 17158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodddo_reset() 17168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 17178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test -z "$SAMPLES_DIR"; then 17188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "opcontrol:do_reset() SAMPLES_DIR is empty!" 17198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1; 17208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 17218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 17228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # daemon use {kern} and {root} subdir, it's not a typo to not use ${} 17238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd move_and_remove $SAMPLES_DIR/current/{kern} 17248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd move_and_remove $SAMPLES_DIR/current/{root} 17258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd move_and_remove $SAMPLES_DIR/current/stats 17268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 17278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # clear temp directory for jitted code 17288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd prep_jitdump; 17298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 17308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd hup_daemon 17318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 17328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 17338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 17348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodddo_deinit() 17358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 17368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # unmount /dev/oprofile if it is mounted 17378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd OPROF_FS=`grep /dev/oprofile /etc/mtab` 17388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test -n "$OPROF_FS"; then 17398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd umount /dev/oprofile 17408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 17418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # unload the oprofile module if it is around 17428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd OPROF_MOD=`lsmod | grep oprofile` 17438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test -n "$OPROF_MOD"; then 17448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Unloading oprofile module" >& 2 17458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd rmmod oprofile 17468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 17478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 17488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 17498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 17508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# The function that calls the appropriate operations 17518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodddo_operations() 17528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 17538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # INIT always done by load_module to get access to cputype 17548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # thus INIT is a noop 17558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 17568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$STATUS" = "yes"; then 17578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd do_status 17588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 17598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 17608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$SETUP" = "yes"; then 17618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd check_valid_args 17628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd do_save_setup 17638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 17648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 17658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$START_DAEMON" = "yes"; then 17668cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd do_start_daemon 17678cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 17688cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 17698cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$START" = "yes"; then 17708cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd do_start_daemon 17718cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd do_start 17728cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 17738cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 17748cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$DUMP" = "yes"; then 17758cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd do_dump 17768cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 17778cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 17788cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$SAVE_SESSION" = "yes"; then 17798cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd do_save_session 17808cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 17818cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 17828cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$STOP" = "yes"; then 17838cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd do_stop 17848cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 17858cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 17868cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$KILL_DAEMON" = "yes"; then 17878cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd do_kill_daemon 17888cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 17898cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 17908cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$RESET" = "yes"; then 17918cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd do_reset 17928cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 17938cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 17948cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$DEINIT" = "yes"; then 17958cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd do_deinit 17968cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 17978cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 17988cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 17998cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# early check for --version, --help and --session-dir 18008cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddcheck_options_early() 18018cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 18028cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 18038cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd OPHELP="$OPDIR/ophelp" 18048cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 18058cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd for i in $@; do 18068cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # added to handle arg=val parameters 18078cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd arg=`printf %s $i | awk -F= '{print $1}'` 18088cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd val=`printf %s $i | awk -F= '{print $2}'` 18098cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd case "$arg" in 18108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd -\?|--help) 18118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd do_help 18128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 0 18138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 18148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 18158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd -v|--version) 18168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo -n "`basename $0`: " 18178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd $OPHELP --version | cut -d' ' -f2- 18188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 0 18198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 18208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd --session-dir) 18218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd error_if_empty $arg $val 18228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd SESSION_DIR="$val" 18238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd DO_SETUP=yes 18248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # do not exit early 18258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 18268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 18278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd esac 18288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd done 18298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 18308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 18318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 18328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# determine which module is loaded 18338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddcheck_version() 18348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 18358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd OPROFILE_AVAILABLE=no 18368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd grep oprofilefs /etc/mtab >/dev/null 18378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$?" -eq 0; then 18388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # need to have oprofilefs mounted for this to work on 2.6 18398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd KERNEL_SUPPORT=yes 18408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd OPROFILE_AVAILABLE=yes 18418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return 18428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 18438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # need to have /proc/oprof available for this to work on 2.4 18448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd grep oprof /proc/devices >/dev/null 18458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$?" -eq 0; then 18468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd KERNEL_SUPPORT=no 18478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd OPROFILE_AVAILABLE=yes 18488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return 18498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 18508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 18518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 18528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# error out if the module is not loaded 18538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddcheck_oprofile_available() 18548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 18558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$OPROFILE_AVAILABLE" != "yes"; then 18568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Kernel support not available, missing opcontrol --init as root ?" 18578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 18588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 18598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 18608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 18618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 18628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddtry_reset_sample_file() 18638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 18648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # special case to avoid loading the module, it works only if the 18658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # daemon is not running because --reset imply --dump. Rather to check 18668cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # if the daemon is running we check if the module is loaded because 18678cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # we are only trying to avoid its load, if the check fails we fallback 18688cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # to the normal dump / reset sequence. 18698cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test -z "$2" -a "$1" = "--reset"; then 18708cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd check_version 18718cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$OPROFILE_AVAILABLE" != "yes"; then 18728cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd do_init_daemon_vars 18738cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd do_reset 18748cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 0 18758cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 18768cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 18778cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 18788cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 18798cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# 18808cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# Begin IBS Specific Functions 18818cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# 18828cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddverify_ibs() 18838cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 18848cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd IBS_EVENT=`echo $1| awk -F: '{print $1}'` 18858cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd IBS_COUNT=`echo $1 | awk -F: '{print $2}'` 18868cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd IBS_MASK=`echo $1 | awk -F: '{print $3}'` 18878cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 18888cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd IBS_TYPE=`$OPHELP --check-events $1` 18898cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$?" != "0" ; then 18908cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 18918cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 18928cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 18938cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if [ "$IBS_TYPE" = "ibs_fetch " ] ; then 18948cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # Check IBS_COUNT consistency 18958cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$IBS_FETCH_COUNT" = "0" ; then 18968cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd IBS_FETCH_COUNT=$IBS_COUNT 18978cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd IBS_FETCH_MASK=$IBS_MASK 18988cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd elif test "$IBS_FETCH_COUNT" != "$IBS_COUNT" ; then 18997a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown echo "ERROR: All IBS Fetch must have the same count." 19008cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 19018cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 19028cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 19038cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # Check IBS_MASK consistency 19048cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$IBS_FETCH_MASK" != "$IBS_MASK" ; then 19057a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown echo "ERROR: All IBS Fetch must have the same unitmask." 19067a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown exit 1 19077a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown fi 19087a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 19097a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown # Check IBS_FETCH_COUNT within range 19107a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if test "$IBS_FETCH_COUNT" -gt 1048575 ; then 19117a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown echo "ERROR: IBS Fetch count is too large." 19127a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown echo " The maximum IBS-fetch count is 1048575." 19138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 19148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 19158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 19168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd elif [ "$IBS_TYPE" = "ibs_op " ] ; then 19178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # Check IBS_COUNT consistency 19188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$IBS_OP_COUNT" = "0" ; then 19198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd IBS_OP_COUNT=$IBS_COUNT 19208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd IBS_OP_MASK=$IBS_MASK 19218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd elif test "$IBS_OP_COUNT" != "$IBS_COUNT" ; then 19228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "All IBS Op must have the same count." 19238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 19248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 19258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 19268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # Check IBS_MASK consistency 19278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$IBS_OP_MASK" != "$IBS_MASK" ; then 19288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "All IBS Op must have the same unitmask." 19298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 19308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 19317a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 19327a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown # Check IBS_OP_COUNT within range 19337a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown case "$CPUTYPE" in 19347a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown x86-64/family10) 19357a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if test "$IBS_OP_COUNT" -gt 1048575 ; then 19367a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown echo "ERROR: IBS Op count is too large." 19377a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown echo " The maximum IBS-fetch count is 1048575." 19387a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown exit 1 19397a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown fi 19407a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown ;; 19417a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 19427a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown x86-64/family12h|\ 19437a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown x86-64/family14h|\ 19447a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown x86-64/family15h) 19457a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if test "$IBS_OP_COUNT" -gt 134217727 ; then 19467a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown echo "ERROR: IBS Op count is too large." 19477a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown echo " The maximum IBS-Op count is 134217727." 19487a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown exit 1 19497a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown fi 19507a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown ;; 19517a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown *) 19527a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown esac 19538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 19548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 19558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return 19568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 19578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 19588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 19598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodddo_param_setup_ibs() 19608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 19618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$KERNEL_SUPPORT" != "yes" ; then 19628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "ERROR: No kernel support for IBS profiling." 19638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 19648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 19658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 19668cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # Check if driver has IBS support 19678cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test ! -d $MOUNT/ibs_fetch -o ! -d $MOUNT/ibs_op ; then 19688cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "ERROR: No kernel support for IBS profiling." 19698cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 19708cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 19718cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 19728cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test `echo $EVENT | \ 19738cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd awk '{ print substr($0, 1, 10)}'` = "IBS_FETCH_" ; then 19748cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$COUNT" != "0"; then 19758cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if [ "$IBS_FETCH_EVENTS" = "" ] ; then 19768cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd IBS_FETCH_EVENTS="$EVENT" 19778cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 19788cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd IBS_FETCH_EVENTS="$IBS_FETCH_EVENTS,$EVENT" 19798cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 19808cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd IBS_FETCH_COUNT=$COUNT 19818cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd set_param ibs_fetch/max_count $COUNT 19828cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd set_param ibs_fetch/rand_enable 1 19838cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd set_param ibs_fetch/enable 1 19848cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 19858cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd set_param ibs_fetch/enable 0 19868cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 19878cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 19888cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd elif test `echo $EVENT | \ 19898cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd awk '{ print substr($0, 1, 7)}'` = "IBS_OP_" ; then 19908cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$COUNT" != "0"; then 19918cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if [ "$IBS_OP_EVENTS" = "" ] ; then 19928cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd IBS_OP_EVENTS="$EVENT" 19938cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 19948cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd IBS_OP_EVENTS="$IBS_OP_EVENTS,$EVENT" 19958cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 19968cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd IBS_OP_COUNT=$COUNT 19978cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd IBS_OP_UNITMASK=$UNIT_MASK 19988cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 19998cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd set_param ibs_op/max_count $COUNT 20008cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd set_param ibs_op/enable 1 20018cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 20028cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # NOTE: We default to use dispatched_op if available. 20038cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # Some of the older family10 system does not have 20048cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd # dispatched_ops feature. 20057a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown # Dispatched op is enabled by bit 0 of the unitmask 20067a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown IBS_OP_DISPATCHED_OP=$(( IBS_OP_UNITMASK & 0x1 )) 20078cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test -f $MOUNT/ibs_op/dispatched_ops ; then 20088cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd set_param ibs_op/dispatched_ops $IBS_OP_DISPATCHED_OP 20097a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown else 20107a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if test $IBS_OP_DISPATCHED_OP -eq 1 ; then 20117a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown echo "ERROR: IBS Op dispatched ops is not supported." 20127a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown exit 1 20137a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown fi 20147a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown fi 20157a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 20167a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown # NOTE: BTA is enabled by bit 2 of the unitmask 20177a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown IBS_OP_BTA=$(( IBS_OP_UNITMASK & 0x4 )) 20187a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if test -f $MOUNT/ibs_op/branch_target; then 20197a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if [ "$IBS_OP_BTA" = "4" ] ; then 20207a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown set_param ibs_op/branch_target 1 20217a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown else 20227a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown set_param ibs_op/branch_target 0 20237a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown fi 20247a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 20257a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown # TODO: Check if write successful 20267a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown else 20277a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if test $IBS_OP_BTA -eq 1 ; then 20287a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown echo "ERROR: IBS Op Branch Target Address is not supported." 20297a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown exit 1 20307a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown fi 20318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 20328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 20338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd set_param ibs_op/enable 0 20348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 20358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 20368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 20378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 20388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 20398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddhelp_start_daemon_with_ibs() 20408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 20418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$IBS_FETCH_COUNT" != "0" -o "$IBS_OP_COUNT" != "0" ; then 20428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd OPD_ARGS="${OPD_ARGS} --ext-feature=ibs:" 20438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$IBS_FETCH_COUNT" != "0"; then 20448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd OPD_ARGS="${OPD_ARGS}fetch:$IBS_FETCH_EVENTS:$IBS_FETCH_COUNT:$IBS_FETCH_UNITMASK|" 20458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 20468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 20478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test "$IBS_OP_COUNT" != "0"; then 20488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd OPD_ARGS="${OPD_ARGS}op:$IBS_OP_EVENTS:$IBS_OP_COUNT:$IBS_OP_UNITMASK" 20498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 20508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 20518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 20528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 20538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# 20548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# End IBS Specific Functions 20558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# 20568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 20578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# main 20588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 20598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# determine the location of opcontrol and related programs 20608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddif test -z "$OPDIR"; then 20618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd BINDIR="/usr/bin" 20628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd OPCONTROL=`$BINDIR/which $0` 20638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd OPDIR=`$BINDIR/dirname $OPCONTROL` 20648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddfi 20658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 20668cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike DoddPATH=$OPDIR:/usr/local/bin:/usr/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin 20678cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 20688cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddcheck_options_early $@ 20698cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 20708cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddif test -z "$1"; then 20718cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd do_help 20728cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 0 20738cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddfi 20748cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 20758cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddif test `id -u` = "0"; then 20768cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd try_reset_sample_file $@ 20778cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 20788cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd load_module 20798cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddfi 20808cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddcheck_version 20818cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 20828cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# Except --reset, even the few operations allowed as non root needs the 20838cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd# kernel support, if we don't error out now the error message will be obscure 20848cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddcheck_oprofile_available 20858cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 20868cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodddo_init 20878cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddif test `id -u` != "0"; then 20888cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if test -z "$2"; then 20898cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd case "$1" in 20908cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd --dump|-d) 20918cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ONLY_DUMP=yes 20928cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd do_dump 20938cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 0; 20948cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 20958cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd --list-events|-l) 20968cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exec $OPHELP 20978cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 0; 20988cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 20998cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd *) 21008cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Normal users are limited to either '--dump' or '--list-events'." >&2 21018cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 21028cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; 21038cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd esac 21048cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd else 21058cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd echo "Normal users are limited to either '--dump' or '--list-events'." >&2 21068cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit 1 21078cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd fi 21088cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddfi 21098cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 21108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodddo_options $@ 21118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodddo_operations 2112