diff options
Diffstat (limited to 'sys-infiniband/ofed/files/openib')
-rw-r--r-- | sys-infiniband/ofed/files/openib | 243 |
1 files changed, 243 insertions, 0 deletions
diff --git a/sys-infiniband/ofed/files/openib b/sys-infiniband/ofed/files/openib new file mode 100644 index 000000000000..a438c2fb9f22 --- /dev/null +++ b/sys-infiniband/ofed/files/openib @@ -0,0 +1,243 @@ +#!/sbin/runscript +# Copyright 1999-2012 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/sys-infiniband/ofed/files/openib,v 1.1 2012/04/18 16:45:04 alexxy Exp $ + +# Based on openibd script from openfabrics.org, +# Copyright (c) 2006 Mellanox Technologies. All rights reserved. +# Distributed under the terms of the GNU General Public License v2 + +depend() { + after hotplug + before net # init openib before starting any ipoib interfaces +} + +OPENIB_CONFDIR=${OPENIB_CONFDIR:-/etc/infiniband} + +if [[ -r ${OPENIB_CONFDIR}/openib.conf ]] ; then + . ${OPENIB_CONFDIR}/openib.conf +fi + +# Setting OpenIB start parameters +POST_LOAD_MODULES="" + +if [ "X${SDP_LOAD}" == "Xyes" ]; then + POST_LOAD_MODULES="$POST_LOAD_MODULES ib_sdp" + IPOIB_LOAD="yes" +fi + +IPOIB=0 +if [ "X${IPOIB_LOAD}" == "Xyes" ]; then + IPOIB=1 +fi + +if [ "X${SRP_LOAD}" == "Xyes" ]; then + POST_LOAD_MODULES="$POST_LOAD_MODULES ib_srp" +fi + +if [ "X${SRP_TARGET_LOAD}" == "Xyes" ]; then + POST_LOAD_MODULES="$POST_LOAD_MODULES ib_srp_target" +fi + +if [ "X${RDMA_CM_LOAD}" == "Xyes" ]; then + POST_LOAD_MODULES="$POST_LOAD_MODULES rdma_cm" +fi + +if [ "X${UCM_LOAD}" == "Xyes" ]; then + POST_LOAD_MODULES="$POST_LOAD_MODULES ib_ucm" +fi + +if [ "X${RDS_LOAD}" == "Xyes" ]; then + POST_LOAD_MODULES="$POST_LOAD_MODULES ib_rds" +fi + +if [ "X${ISER_LOAD}" == "Xyes" ]; then + POST_LOAD_MODULES="$POST_LOAD_MODULES ib_iser" +fi + +if [ "X${RDMA_UCM_LOAD}" == "Xyes" ]; then + POST_LOAD_MODULES="$POST_LOAD_MODULES rdma_ucm" +fi + +PRE_UNLOAD_MODULES="ib_rds ib_ucm kdapl ib_srp_target scsi_target ib_srp ib_iser ib_sdp rdma_ucm rdma_cm ib_addr ib_cm ib_local_sa findex" + +# W/A for unloading modules +POST_UNLOAD_MODULES="$PRE_UNLOAD_MODULES ib_ipoib ib_sa ib_uverbs ib_umad" +# ib_mthca ib_ipath - don't unload unless they are in openib.conf +[[ "${MTHCA_LOAD}" == "yes" ]] && \ + POST_UNLOAD_MODULES="$POST_UNLOAD_MODULES ib_mthca" +[[ "${IPATH_LOAD}" == "yes" ]] && \ + POST_UNLOAD_MODULES="$POST_UNLOAD_MODULES ib_ipath ipath_core" + +[[ "${MTHCA_LOAD}" == "yes" || "${IPATH_LOAD}" == "yes" ]] && \ + POST_UNLOAD_MODULES="$POST_UNLOAD_MODULES ib_mad ib_core" + +#STATUS_MODULES="rdma_ucm ib_rds ib_srp ib_sdp rdma_cm ib_addr ib_local_sa findex ib_ipoib ib_ipath ipath_core ib_mthca ib_uverbs ib_umad ib_ucm ib_sa ib_cm ib_mad ib_core" + + +# If module $1 is loaded return - 0 else - 1 +is_module() +{ + local RC + + /bin/lsmod | grep -w "$1" > /dev/null 2>&1 + RC=$? + + return $RC +} + +unload() +{ + # Unload module $1 + if is_module $mod; then + /sbin/modprobe -r $mod > /dev/null 2>&1 + if [ $? -ne 0 ]; then + # Try rmmod if modprobe failed: case that previous installation included more IB modules. + /sbin/rmmod $mod > /dev/null 2>&1 + if [ $? -ne 0 ]; then + ewarn "Failed to unload $mod" + return 1 + fi + fi + fi +} + +start() { + local RC=0 + ebegin "Initializing Infiniband" + eindent + + # Load Mellanox HCA driver if explicitly requested + # (however, it should be loaded automatically by udev) + + einfo "Loading HCA and Access Layer drivers" + + if [[ "${MTHCA_LOAD}" == "yes" ]]; then + /sbin/modprobe ib_mthca > /dev/null 2>&1 + RC=$[ $RC + $? ] + fi + if [[ "${IPATH_LOAD}" == "yes" ]]; then + /sbin/modprobe ib_ipath > /dev/null 2>&1 + RC=$[ $RC + $? ] + fi + + # Add node description to sysfs + IBSYSDIR="/sys/class/infiniband" + if [ -d ${IBSYSDIR} ]; then + declare -i hca_id=1 + for hca in ${IBSYSDIR}/*; do + if [ -e ${hca}/node_desc ]; then + echo -n "$(hostname -s) HCA-${hca_id}" >> ${hca}/node_desc + fi + let hca_id++ + done + fi + /sbin/modprobe ib_umad > /dev/null 2>&1 + RC=$[ $RC + $? ] + /sbin/modprobe ib_uverbs > /dev/null 2>&1 + RC=$[ $RC + $? ] + + if [ $IPOIB -eq 1 ]; then + # this section is not necessary if all ib-over-ib devices are + # aliased properly in /etc/modules.d/openib + einfo "loading ib_ipoib module" + /sbin/modprobe ib_ipoib > /dev/null 2>&1 + RC=$[ $RC + $? ] + if (( ! RC )); then + # start the ipoib devices automatically... + # this is probably a bad idea (the concept is taken from the + # original SUSE/Redhat-based initscript), and should be removed. + # But it works, and is not enabled by default. So I leave it here + # for second opinions. + local ibdevs=`rc-status -u -nc |egrep 'net\.ib[0-9a-zA-Z]+.*stopped' | awk '{print $1}'` + if [ -n "$ibdevs" ] ; then + einfo "starting ipoib devices" + for ibdev in $ibdevs; do + /etc/init.d/$ibdev start + done + fi + fi + fi + + # Devices for ib_umad and ib_uverbs should now have been created. + if [ ! -d /dev/infiniband/ ]; then + eerror "udev failed to create '/dev/infiniband/' devices" + RC=1 + fi + + # Load configured modules + if [ "$POST_LOAD_MODULES" != "" ]; then + for mod in $POST_LOAD_MODULES + do + case $mod in + ib_iser) + # Voltaire requirement + /sbin/modprobe --force-modversion $mod > /dev/null 2>&1 + ;; + *) + /sbin/modprobe $mod > /dev/null 2>&1 + ;; + esac + RC=$? + [ $RC -ne 0 ] && eerror "Failed to load $mod" + done + fi + + eoutdent + eend $RC +} + +stop() { + ebegin "Stopping Infiniband" + local RC=0 + + # Check if applications which use infiniband are running + local apps="opensm osmtest ibbs ibns" + local pid + + for app in $apps + do + if ( ps -ef | grep $app | grep -v grep > /dev/null 2>&1 ); then + eerror "Please stop $app and all applications running over InfiniBand" + eend 1 + return + fi + done + + if ! is_module ib_core; then + einfo "HCA driver is not loaded" + eend 0 + return + fi + + # Unload ULPs modules + + if [ "$PRE_UNLOAD_MODULES" != "" ]; then + for mod in $PRE_UNLOAD_MODULES + do + unload $mod || { eend 1; return; } + done + fi + + # Remove srp_presistant_bind.sh before removing ib_srp module + PID_SCRPT_TO_KILL=`ps -efww | grep srp_persistent | grep -v grep | awk '{print $2}'` + if ! [ "$PID_SCRPT_TO_KILL" == "" ]; then + PID_SLEEP_TO_KILL=`ps -efww | grep $PID_SCRPT_TO_KILL | grep sleep | awk '{print $2}'` + kill -9 $PID_SCRPT_TO_KILL + fi + if ! [ "$PID_SLEEP_TO_KILL" == "" ]; then + kill -9 $PID_SLEEP_TO_KILL + fi + + # Unload OpenIB modules + + if [ "$POST_UNLOAD_MODULES" != "" ]; then + for mod in $POST_UNLOAD_MODULES + do + unload $mod || RC=1 + done + fi + + eend $RC +} + |