#! /bin/bash
#
# Author: tlinux team <g_APD_SRDC_OS@tencent.com>
#
### BEGIN INIT INFO
# Provides: netirqaffinity
# Required-Start: $network
# Required-Stop: 
# Should-Start: irqbalance
# Should-Stop: 
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: setting up irq affinity according to /proc/interrupts
### END INIT INFO

start()
{
    if [ ! -x /usr/sbin/tlinux_set_irq_affinity.sh ]; then 
        echo "/usr/sbin/tlinux_set_irq_affinity.sh does not exist!"
        exit 1  
    fi      

    if [ ! -x /usr/sbin/tlinux_set_rps_cpus.py ]; then 
        echo "/usr/sbin/tlinux_set_rps_cpus.py does not exist!"
        exit 1  
    fi      

    kvm=`uname -r | grep kvm_guest`
    if [ -n "${kvm}" ]; then
        mutiqueue=`ls -d /proc/irq/*/*eth* | grep eth.*-.*0`
        /usr/sbin/tlinux_set_rps_cpus.py kvm
    else
        mutiqueue=`ls -d /proc/irq/*/*eth* | grep eth.*-.*1`
        /usr/sbin/tlinux_set_rps_cpus.py
    fi
    if [ -n "${mutiqueue}" ]; then 
        /usr/sbin/tlinux_set_irq_affinity.sh
    fi
    
    nvmequeue=`ls -d /proc/irq/*/* | grep nvme.*`
    if [ -n "${nvmequeue}" ]; then
        if [ ! -x /usr/sbin/tlinux_set_irq_nvme.sh ]; then
            echo "/usr/sbin/tlinux_set_irq_nvme.sh does not exist!"
            exit 1
        fi
        /usr/sbin/tlinux_set_irq_nvme.sh
    fi

    non_vol=`lspci | grep Non-Volatile`
    if [ -n "${non_vol}" ];then
        pci_bus=`lspci | grep Non-Volatile | awk -F: '{print $1}' | head -n 1`
        if [ ${pci_bus} -ge 10000 ] 2>/dev/null ;then
            if [ ! -x /usr/sbin/tlinux_set_irq_vmd_corebalance.sh ]; then
                echo "/usr/sbin/tlinux_set_irq_vmd_corebalance.sh does not exist!"
                exit 1
            fi 
            /usr/sbin/tlinux_set_irq_vmd_corebalance.sh
        fi
    fi    

    megasas_queue=`ls -d /proc/irq/*/* | grep megasas`
    if [ -n "${megasas_queue}" ]; then
        megasas_irq_num=`ls -d /proc/irq/*/megasas* | wc -l`
        if [ $megasas_irq_num -gt 1 ]; then
            if [ ! -x /usr/sbin/tlinux_set_irq_megasas.sh ]; then
                echo "/usr/sbin/tlinux_set_irq_megasas.sh does not exist!"
                exit 1
            fi
            /usr/sbin/tlinux_set_irq_megasas.sh
        fi
    fi	

    amd=`lscpu | grep "^Model name.*AMD.*EPYC"`
    if [ -n "${amd}" ]; then
        if [ ! -x /usr/sbin/tlinux_set_irq_affinity_amd.sh ]; then
            echo "/usr/sbin/tlinux_set_irq_affinity_amd.sh does not exist!"
            exit 1
        fi
        /usr/sbin/tlinux_set_irq_affinity_amd.sh

	if [ ! -x /usr/sbin/tlinux_set_rps_cpus_amd.py ]; then
            echo "/usr/sbin/tlinux_set_rps_cpus_amd.py does not exist!"
            exit 1
        fi
	/usr/sbin/tlinux_set_rps_cpus_amd.py
    fi
}

case "$1" in
	start)
		start
		;;
	stop)
		;;
	restart)
		start	
		;;
esac
