diff --git a/src/queuelat/determine_maximum_mpps.sh b/src/queuelat/determine_maximum_mpps.sh
index f785147f1bbd..fdede472728c 100755
--- a/src/queuelat/determine_maximum_mpps.sh
+++ b/src/queuelat/determine_maximum_mpps.sh
@@ -6,12 +6,84 @@
 #  A script to determine the maximum mpps. Logic:
 #  Increase mpps in 0.5 units 
 # 
-# NOTE: please set "PREAMBLE" to the command line you use for 
-# 
-PREAMBLE="taskset -c 2 chrt -f 1"
 MAXLAT="20000"
 CYCLES_PER_PACKET="300"
 OUTFILE=/usr/tmp/outfile
+PRIO=1
+CPULIST=0
+SCHED=""
+
+usage()
+{
+	echo "Usage:"
+	echo "$(basename $0) [OPTIONS]"
+	echo
+	echo "-c cpulist"
+	echo "	List of processors to run on. The default is processor 0"
+	echo "	Numbers are separated by commas and may include ranges. Eg. 0,3,7-11"
+	echo "-m maxlat"
+	echo "	maximum latency in nanoseconds. The default is 20000"
+	echo "	if the maximum is exceeded, that run of queuelat quits"
+	echo "-n cycles"
+	echo "	Estimated number of cycles it takes to process one packet"
+	echo "	The default is 300"
+	echo "-f"
+	echo "	Set the scheduling policy to SCHED_FIFO."
+	echo "	This is the default if not specified"
+	echo "-r"
+	echo "	Set the scheduling policy to SCHED_RR".
+	echo "-p priority"
+	echo "	default priority = 1. Valid numbers are from 1 to 99"
+	echo "-h"
+	echo "	help"
+	echo "	print this help message and exit"
+	exit
+}
+
+get_cpuinfo_mhz()
+{
+	grep "cpu MHz" /proc/cpuinfo | cut -f 3 -d " " | sort -rn | head -n1
+}
+
+# Check that the scheduling policy hasn't already been set
+# Exit with an error message if it has
+check_sched()
+{
+	if [ "${SCHED}" != "" ]; then
+		echo "Specify -f or -r, but not both"
+		usage
+	fi
+}
+
+# Process command line options
+while getopts ":c:frp:m:n:h" opt; do
+	case ${opt} in
+		c ) CPULIST="${OPTARG}" ;;
+		m ) MAXLAT="${OPTARG}" ;;
+		n ) CYCLES_PER_PACKET="${OPTARG}" ;;
+		f ) check_sched; SCHED="-f" ;;
+		r ) check_sched; SCHED="-r" ;;
+		p ) PRIO="${OPTARG}" ;;
+		h ) usage ;;
+		* ) echo "no such option"; usage ;;
+	esac
+done
+
+shift $((OPTIND -1 ))
+
+# If the user hasn't specified a scheduling policy
+# then set it to the default SCHED_FIFO
+if [ "${SCHED}" == "" ]; then
+	SCHED="-f"
+fi
+
+# Error checking that the user entered a priority between 1 and 99
+if [[ "${PRIO}" -lt "1" ]] || [[ "${PRIO}" -gt "99" ]]; then
+	echo "PRIO must be a number between 1 and 99"
+	usage
+fi
+
+PREAMBLE="taskset -c ${CPULIST} chrt ${SCHED} ${PRIO}"
 
 echo "Determining maximum mpps the machine can handle"
 echo "Will take a few minutes to determine mpps value"
@@ -21,7 +93,7 @@ for mpps in $(seq 3 3 50); do
 	echo testing "$mpps" Mpps
 
 	OUTFILE=$(mktemp)
-	$PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f "$(sh get_cpuinfo_mhz.sh)" -p "$mpps" -t 30 > "$OUTFILE"
+	$PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f "$(get_cpuinfo_mhz)" -p "$mpps" -t 30 > "$OUTFILE"
 
 	exceeded=$(grep exceeded "$OUTFILE")
 	if [ ! -z "$exceeded" ]; then
@@ -37,7 +109,7 @@ for mpps in $(seq $first_mpps -1 3); do
 	echo testing "$mpps" Mpps
 
 	OUTFILE=$(mktemp)
-	$PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f "$(sh get_cpuinfo_mhz.sh)" -p "$mpps" -t 30 > "$OUTFILE"
+	$PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f "$(get_cpuinfo_mhz)" -p "$mpps" -t 30 > "$OUTFILE"
 
 	exceeded=$(grep exceeded "$OUTFILE")
 	if [ -z "$exceeded" ]; then
@@ -54,7 +126,7 @@ for mpps in $(seq "$second_mpps" 0.3 $first_mpps); do
 	echo testing "$mpps" Mpps
 
 	OUTFILE=$(mktemp)
-	$PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f "$(sh get_cpuinfo_mhz.sh)" -p "$mpps" -t 30 > "$OUTFILE"
+	$PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f "$(get_cpuinfo_mhz)" -p "$mpps" -t 30 > "$OUTFILE"
 
 	exceeded=$(grep exceeded "$OUTFILE")
 	if [ ! -z "$exceeded" ]; then
@@ -71,7 +143,7 @@ for mpps in $(seq "$third_mpps" -0.1 3); do
 	echo testing "$mpps" Mpps
 
 	OUTFILE=$(mktemp)
-	$PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f "$(sh get_cpuinfo_mhz.sh)" -p "$mpps" -t 30 > "$OUTFILE"
+	$PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f "$(get_cpuinfo_mhz)" -p "$mpps" -t 30 > "$OUTFILE"
 
 	exceeded=$(grep exceeded "$OUTFILE")
 	if [ -z "$exceeded" ]; then
@@ -90,7 +162,7 @@ while [ $queuelat_failure == 1 ]; do
 	echo "$mpps Mpps"
 
 	for i in $(seq 1 10); do
-		$PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f "$(get_cpuinfo_mhz.sh)" -p "$mpps" -t 30 > "$OUTFILE"
+		$PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f "$(get_cpuinfo_mhz)" -p "$mpps" -t 30 > "$OUTFILE"
 		exceeded=$(grep exceeded "$OUTFILE")
 
 		if [ ! -z "$exceeded" ]; then
@@ -113,7 +185,7 @@ while [ $queuelat_failure == 1 ]; do
 	echo -n "Starting 10 minutes run with "
 	echo "$mpps Mpps"
 
-	$PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f "$(get_cpuinfo_mhz.sh)" -p "$mpps" -t 600 > "$OUTFILE"
+	$PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f "$(get_cpuinfo_mhz)" -p "$mpps" -t 600 > "$OUTFILE"
 	exceeded=$(grep exceeded "$OUTFILE")
 
 	if [ ! -z "$exceeded" ]; then
