| #!/bin/bash | 
 | # Intel MIC Platform Software Stack (MPSS) | 
 | # | 
 | # Copyright(c) 2013 Intel Corporation. | 
 | # | 
 | # This program is free software; you can redistribute it and/or modify | 
 | # it under the terms of the GNU General Public License, version 2, as | 
 | # published by the Free Software Foundation. | 
 | # | 
 | # This program is distributed in the hope that it will be useful, but | 
 | # WITHOUT ANY WARRANTY; without even the implied warranty of | 
 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 
 | # General Public License for more details. | 
 | # | 
 | # The full GNU General Public License is included in this distribution in | 
 | # the file called "COPYING". | 
 | # | 
 | # Intel MIC User Space Tools. | 
 | # | 
 | # mpss	Start mpssd. | 
 | # | 
 | # chkconfig: 2345 95 05 | 
 | # description: start MPSS stack processing. | 
 | # | 
 | ### BEGIN INIT INFO | 
 | # Provides: mpss | 
 | # Required-Start: | 
 | # Required-Stop: | 
 | # Short-Description: MPSS stack control | 
 | # Description: MPSS stack control | 
 | ### END INIT INFO | 
 |  | 
 | # Source function library. | 
 | . /etc/init.d/functions | 
 |  | 
 | exec=/usr/sbin/mpssd | 
 | sysfs="/sys/class/mic" | 
 | mic_modules="mic_host mic_x100_dma scif vop" | 
 |  | 
 | start() | 
 | { | 
 | 	[ -x $exec ] || exit 5 | 
 |  | 
 | 	if [ "`ps -e | awk '{print $4}' | grep mpssd | head -1`" = "mpssd" ]; then | 
 | 		echo -e $"MPSSD already running! " | 
 | 		success | 
 | 		echo | 
 | 		return 0 | 
 | 	fi | 
 |  | 
 | 	echo -e $"Starting MPSS Stack" | 
 | 	echo -e $"Loading MIC drivers:" $mic_modules | 
 |  | 
 | 	modprobe -a $mic_modules | 
 | 	RETVAL=$? | 
 | 	if [ $RETVAL -ne 0 ]; then | 
 | 		failure | 
 | 		echo | 
 | 		return $RETVAL | 
 | 	fi | 
 |  | 
 | 	# Start the daemon | 
 | 	echo -n $"Starting MPSSD " | 
 | 	$exec | 
 | 	RETVAL=$? | 
 | 	if [ $RETVAL -ne 0 ]; then | 
 | 		failure | 
 | 		echo | 
 | 		return $RETVAL | 
 | 	fi | 
 | 	success | 
 | 	echo | 
 |  | 
 | 	sleep 5 | 
 |  | 
 | 	# Boot the cards | 
 | 	micctrl -b | 
 |  | 
 | 	# Wait till ping works | 
 | 	for f in $sysfs/* | 
 | 	do | 
 | 		count=100 | 
 | 		ipaddr=`cat $f/cmdline` | 
 | 		ipaddr=${ipaddr#*address,} | 
 | 		ipaddr=`echo $ipaddr | cut -d, -f1 | cut -d\; -f1` | 
 | 		while [ $count -ge 0 ] | 
 | 		do | 
 | 			echo -e "Pinging "`basename $f`" " | 
 | 			ping -c 1 $ipaddr &> /dev/null | 
 | 			RETVAL=$? | 
 | 			if [ $RETVAL -eq 0 ]; then | 
 | 				success | 
 | 				break | 
 | 			fi | 
 | 			sleep 1 | 
 | 			count=`expr $count - 1` | 
 | 		done | 
 | 		[ $RETVAL -ne 0 ] && failure || success | 
 | 		echo | 
 | 	done | 
 | 	return $RETVAL | 
 | } | 
 |  | 
 | stop() | 
 | { | 
 | 	echo -e $"Shutting down MPSS Stack: " | 
 |  | 
 | 	# Bail out if module is unloaded | 
 | 	if [ ! -d "$sysfs" ]; then | 
 | 		echo -n $"Module unloaded " | 
 | 		success | 
 | 		echo | 
 | 		return 0 | 
 | 	fi | 
 |  | 
 | 	# Shut down the cards. | 
 | 	micctrl -S | 
 |  | 
 | 	# Wait for the cards to go offline | 
 | 	for f in $sysfs/* | 
 | 	do | 
 | 		while [ "`cat $f/state`" != "ready" ] | 
 | 		do | 
 | 			sleep 1 | 
 | 			echo -e "Waiting for "`basename $f`" to become ready" | 
 | 		done | 
 | 	done | 
 |  | 
 | 	# Display the status of the cards | 
 | 	micctrl -s | 
 |  | 
 | 	# Kill MPSSD now | 
 | 	echo -n $"Killing MPSSD" | 
 | 	killall -9 mpssd 2>/dev/null | 
 | 	RETVAL=$? | 
 | 	[ $RETVAL -ne 0 ] && failure || success | 
 | 	echo | 
 | 	return $RETVAL | 
 | } | 
 |  | 
 | restart() | 
 | { | 
 | 	stop | 
 | 	sleep 5 | 
 | 	start | 
 | } | 
 |  | 
 | status() | 
 | { | 
 | 	micctrl -s | 
 | 	if [ "`ps -e | awk '{print $4}' | grep mpssd | head -n 1`" = "mpssd" ]; then | 
 | 		echo "mpssd is running" | 
 | 	else | 
 | 		echo "mpssd is stopped" | 
 | 	fi | 
 | 	return 0 | 
 | } | 
 |  | 
 | unload() | 
 | { | 
 | 	if [ ! -d "$sysfs" ]; then | 
 | 		echo -n $"No MIC_HOST Module: " | 
 | 		success | 
 | 		echo | 
 | 		return | 
 | 	fi | 
 |  | 
 | 	stop | 
 |  | 
 | 	sleep 5 | 
 | 	echo -n $"Removing MIC drivers:" $mic_modules | 
 | 	modprobe -r $mic_modules | 
 | 	RETVAL=$? | 
 | 	[ $RETVAL -ne 0 ] && failure || success | 
 | 	echo | 
 | 	return $RETVAL | 
 | } | 
 |  | 
 | case $1 in | 
 | 	start) | 
 | 		start | 
 | 		;; | 
 | 	stop) | 
 | 		stop | 
 | 		;; | 
 | 	restart) | 
 | 		restart | 
 | 		;; | 
 | 	status) | 
 | 		status | 
 | 		;; | 
 | 	unload) | 
 | 		unload | 
 | 		;; | 
 | 	*) | 
 | 		echo $"Usage: $0 {start|stop|restart|status|unload}" | 
 | 		exit 2 | 
 | esac | 
 |  | 
 | exit $? |