#!/bin/ash

# will run lock_test with whatever arguments are passed in.  default arguments
# are -wMAX_VCORES and -l10000.

# TODO: take a param up to MAXVC for how many cores we preempt per loop
# TODO: make a program that does the preemption, instead of the script.  it
# takes around 2ms to spawn, run, and wait on a program, which messes with the
# timing.  When we do this, pull in the vcore shuffling code from prov.c and
# have that be an option.
# TODO: have better options for the two preempt styles (periodic, vs total)
#
# Run this from looper.sh for multiple runs.

if [ $# -lt 2 ]
then
	echo Usage: $0 PREEMPT_DELAY_USEC ARGS_FOR_LOCK_TEST
	exit
fi

PREEMPT_DELAY=$1

shift

# for suppressing output later (no /dev/null, and also append doesn't work)
echo "" >> tmpfile

# retval of max_vcores is the value
max_vcores
MAXVC=$?
# pth_test exists to hog the machine
pthread_test 100 999999999 $MAXVC >> tmpfile 2>&1 &
PTHPID=$!
echo Launch pth_test, pid was $PTHPID

# if arguments, like -w are repeated, the second one is used
lock_test -w $MAXVC -l 10000 $@ &
LOCKPID=$!
echo Launch lock_test, pid was $LOCKPID

# while lock_test is still alive, we preempt every so often, then give it back.
# using the retval of prov -p$LOCKPID to tell us if lock_test is around
RET=0
INC=0

# This is the preempt and never return, hoping to catch deadlocks
prov -tc -p$LOCKPID -m >> tmpfile 2>&1

usleep $PREEMPT_DELAY

prov -tc -p$PTHPID -v1 >> tmpfile 2>&1
prov -tc -p$PTHPID -v2 >> tmpfile 2>&1

# giving it vc3, which it already has.  this is just a test on process existence
while [ $RET -eq 0 ]; do
	prov -tc -p$LOCKPID -v3 >> tmpfile 2>&1
	RET=$?
	usleep $PREEMPT_DELAY
done

## This is the preempt, return, preempt return cycle
#while [ $RET -eq 0 ]; do
#	prov -tc -p$LOCKPID -m >> tmpfile 2>&1
#	RET=$?
#
#	usleep $PREEMPT_DELAY
#
#	prov -tc -p$PTHPID -v1 >> tmpfile 2>&1
#	prov -tc -p$PTHPID -v2 >> tmpfile 2>&1
#
#	# the extra preempts here are to make us wait longer, to see gaps where we
#	# "locked up" more clearly.
#	usleep $PREEMPT_DELAY
#	usleep $PREEMPT_DELAY
#	usleep $PREEMPT_DELAY
#	usleep $PREEMPT_DELAY
#	usleep $PREEMPT_DELAY
#
#	let INC=$INC+1
#done

## This is the 'run for a bit, preempt a lot just once, then return all style
#prov -tc -p$LOCKPID -m >> tmpfile 2>&1
#usleep $PREEMPT_DELAY
#prov -tc -p$PTHPID -v1 >> tmpfile 2>&1
#prov -tc -p$PTHPID -v2 >> tmpfile 2>&1
#prov -tc -p$PTHPID -v3 >> tmpfile 2>&1
#prov -tc -p$PTHPID -v4 >> tmpfile 2>&1
#prov -tc -p$PTHPID -v5 >> tmpfile 2>&1
#prov -tc -p$PTHPID -v6 >> tmpfile 2>&1
#prov -tc -p$PTHPID -v7 >> tmpfile 2>&1
#prov -tc -p$PTHPID -v8 >> tmpfile 2>&1
#prov -tc -p$PTHPID -v9 >> tmpfile 2>&1
#usleep $PREEMPT_DELAY
#prov -tc -p$LOCKPID -m >> tmpfile 2>&1
#
#while [ $RET -eq 0 ]; do
#	prov -tc -p$LOCKPID -m >> tmpfile 2>&1
#	RET=$?
#	usleep $PREEMPT_DELAY
#done

echo All done, killing pth_test.  Did $INC prov-preempt loops.
kill -9 $PTHPID
