1c1474e50551f1dabeeddbfd91f96e82d15bc5790Jin Li#!/bin/sh 2c1474e50551f1dabeeddbfd91f96e82d15bc5790Jin Li 3e469ab15b2332629432b9347d6ad71dfef885e95Xing Gu# cpuhotplug_hotplug.sh - Collection of functions for hotplugging 450512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# operations. 550512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 650512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# Routines in this library are set up to allow timing to be done 737550cf5a86c7ca7424a2a318dd64e550f13f5dfChris Dearman# by defining $TIME to a timing command. 850512d9c147b0e8a05d4d814af3ba83852a79304subrata_modakTIME=${TIME:-""} 950512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 1050512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# get_all_irqs() 1150512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# 1250512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# Gets list of all available IRQs in the system 1350512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# 1450512d9c147b0e8a05d4d814af3ba83852a79304subrata_modakget_all_irqs() 1550512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak{ 1650512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak echo `egrep [0-9]+: /proc/interrupts | cut -d ':' -f 1` 1750512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak return 1850512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak} 1950512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 2050512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# migrate_irq(CPU, IRQS) 2137550cf5a86c7ca7424a2a318dd64e550f13f5dfChris Dearman# 2250512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# Sets the smp_affinity for the list of $IRQS to the given 2350512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# CPU number 2450512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# 2550512d9c147b0e8a05d4d814af3ba83852a79304subrata_modakmigrate_irq() 2650512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak{ 2750512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak CPU=${1#cpu} 2850512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak MASK=$((1<<${CPU})) 2950512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak IRQS=$2 30a60c6c8f08dcd7d9760ab0a164689d52f912c266Wei Jiangang for irq in ${IRQS}; do 31c1474e50551f1dabeeddbfd91f96e82d15bc5790Jin Li echo $MASK > /proc/irq/${irq}/smp_affinity || \ 32c1474e50551f1dabeeddbfd91f96e82d15bc5790Jin Li tst_resm TINFO "It is NOT permitted to change the IRQ $irq smp_affinity" 3350512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak done 3450512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak} 3550512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 3650512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 3750512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# get_affinity(PID) 3850512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# 3950512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# Echos the CPU affinity for the given process ID to stdout 4050512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# 4150512d9c147b0e8a05d4d814af3ba83852a79304subrata_modakget_affinity_mask() 4250512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak{ 4350512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak AFFINITY=`taskset -p ${1}` 4450512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak echo ${AFFINITY} 4550512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak return 4650512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak} 4750512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 4850512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# set_affinity(PID, CPU) 4950512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# 5050512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# Sets the affinity for the given PID to the specified CPU. 5150512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# 5250512d9c147b0e8a05d4d814af3ba83852a79304subrata_modakset_affinity() 5350512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak{ 5450512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak PID="$1" 5550512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak CPU="$2" 5650512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak MASK=$((1<<${CPU_TO_TEST})) 5750512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak `taskset -p ${MASK} ${PID} > /dev/null 2>&1` 5850512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak return $? 5950512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak} 6050512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 6150512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# online_cpu(CPU) 6250512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# 6350512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# Onlines the given CPU. Returns a true value if it was able 6450512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# to perform the online operation successfully, false otherwise. 6550512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# 6650512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# $CPU should either be a specific number like 4, or the cpu name, 6737550cf5a86c7ca7424a2a318dd64e550f13f5dfChris Dearman# as in 'cpu4'. 6850512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# 6950512d9c147b0e8a05d4d814af3ba83852a79304subrata_modakonline_cpu() 7050512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak{ 7150512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak CPU=${1#cpu} 7250512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak if [ ! -w /sys/devices/system/cpu/cpu${CPU}/online ]; then 7350512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak return 1 7450512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak fi 754cb969a72e34e61e2584c5282577aa5d95b112dfStanislav Kholmanskikh 764cb969a72e34e61e2584c5282577aa5d95b112dfStanislav Kholmanskikh cpu_is_online ${CPU} && return 0 774cb969a72e34e61e2584c5282577aa5d95b112dfStanislav Kholmanskikh 7850512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak $TIME echo 1 > /sys/devices/system/cpu/cpu${CPU}/online 7950512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak RC=$? 8050512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak report_timing "Online cpu ${CPU}" 8150512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak return $RC 8250512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak} 8350512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 8450512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 8550512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# offline_cpu(CPU) 8650512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# 8750512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# Offlines the given CPU. Returns a true value if it was able 8850512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# to perform the offline operation successfully, false otherwise. 8950512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# 9050512d9c147b0e8a05d4d814af3ba83852a79304subrata_modakoffline_cpu() 9150512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak{ 9250512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak CPU=${1#cpu} 9350512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak if [ ! -w /sys/devices/system/cpu/cpu${CPU}/online ]; then 9450512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak return 1 9550512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak fi 964cb969a72e34e61e2584c5282577aa5d95b112dfStanislav Kholmanskikh 974cb969a72e34e61e2584c5282577aa5d95b112dfStanislav Kholmanskikh ! cpu_is_online ${CPU} && return 0 984cb969a72e34e61e2584c5282577aa5d95b112dfStanislav Kholmanskikh 9950512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak $TIME echo 0 > /sys/devices/system/cpu/cpu${CPU}/online 10050512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak RC=$? 10150512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak report_timing "Offline cpu ${CPU}" 10250512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak return $RC 10350512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak} 10450512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 10522f3ba1ede4cacd5df765f3e4b86ca90dd7ff75cXing Gu# get_cpus_num() 10622f3ba1ede4cacd5df765f3e4b86ca90dd7ff75cXing Gu# 10722f3ba1ede4cacd5df765f3e4b86ca90dd7ff75cXing Gu# Prints the number of all available CPUs, regardless of whether they're 10822f3ba1ede4cacd5df765f3e4b86ca90dd7ff75cXing Gu# currently online or offline. 10922f3ba1ede4cacd5df765f3e4b86ca90dd7ff75cXing Gu# 11022f3ba1ede4cacd5df765f3e4b86ca90dd7ff75cXing Guget_cpus_num() 11122f3ba1ede4cacd5df765f3e4b86ca90dd7ff75cXing Gu{ 11222f3ba1ede4cacd5df765f3e4b86ca90dd7ff75cXing Gu [ -d /sys/devices/system/cpu/cpu0 ] || return -1 11322f3ba1ede4cacd5df765f3e4b86ca90dd7ff75cXing Gu NUM=`ls /sys/devices/system/cpu/ \ 11422f3ba1ede4cacd5df765f3e4b86ca90dd7ff75cXing Gu | grep -c "cpu[0-9][0-9]*"` 11522f3ba1ede4cacd5df765f3e4b86ca90dd7ff75cXing Gu return $NUM 11622f3ba1ede4cacd5df765f3e4b86ca90dd7ff75cXing Gu} 11750512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 11850512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# get_all_cpus() 11950512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# 12050512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# Prints a list of all available CPUs, regardless of whether they're 12150512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# currently online or offline. 12250512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# 12350512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# This routine will work even if the CPUs are not hotpluggable, however 12450512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# it requires you have sysfs enabled in the kernel. 12550512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# 12650512d9c147b0e8a05d4d814af3ba83852a79304subrata_modakget_all_cpus() 12750512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak{ 1289d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh [ -d /sys/devices/system/cpu ] || return 1 1299d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh (cd /sys/devices/system/cpu; ls -d cpu[0-9]*) 13050512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak} 13150512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 1329d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh# get_present_cpus() 1339d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh# 1349d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh# Prints a list of present CPUs, regardless of whether they're 1359d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh# currently online or offline. 1369d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh# 1379d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikhget_present_cpus() 1389d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh{ 1399d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh local present_mask="/sys/devices/system/cpu/present" 1409d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh local present_cpus="" 1419d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh 1429d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh # if sysfs present mask is missing, assume all cpu are present 1439d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh if [ ! -e "$present_mask" ]; then 1449d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh get_all_cpus 1459d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh return 1469d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh fi 1479d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh 1489d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh for part in $(cat $present_mask | tr "," " "); do 1499d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh if echo $part | grep -q "-"; then 1509d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh range_low=$(echo $part | cut -d - -f 1) 1519d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh range_high=$(echo $part | cut -d - -f 2) 1529d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh else 153df19c394e2631f2f9179d3519a5af8aa05318419Han, NingX range_low=$part 154df19c394e2631f2f9179d3519a5af8aa05318419Han, NingX range_high=$part 1559d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh fi 1569d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh for cpu in $(seq $range_low $range_high); do 1579d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh if [ -e /sys/devices/system/cpu/cpu$cpu ]; then 1589d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh present_cpus="$present_cpus cpu$cpu" 1599d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh fi 1609d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh done 1619d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh done 1629d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh echo $present_cpus 1639d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh} 1649d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh 1659d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh# get_present_cpus_num() 1669d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh# 1679d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh# Prints the number of present CPUs 1689d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh# 1699d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikhget_present_cpus_num() 1709d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh{ 17126777407207f2a43d88c13437737d2ca3737650cGuangwen Feng echo $(get_present_cpus | wc -w) 1729d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh} 1739d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh 1749d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh# get_hotplug_cpus() 1759d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh# 1769d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh# Prints a list of present hotpluggable CPUs, regardless of whether they're 1779d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh# currently online or offline. 1789d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh# 1799d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikhget_hotplug_cpus() 1809d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh{ 1812f438250824cd0ae59185b5bda6d7bf15709dc7cJames Morse local present_cpus="$(get_present_cpus)" 1829d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh local hotplug_cpus="" 1839d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh 1849d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh for cpu in $present_cpus; do 1859d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh if [ -e /sys/devices/system/cpu/$cpu/online ]; then 1869d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh hotplug_cpus="$hotplug_cpus $cpu" 1879d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh fi 1889d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh done 1899d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh echo $hotplug_cpus 1909d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh} 1919d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh 1929d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh# get_hotplug_cpus_num() 1939d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh# 1949d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh# Prints the number of hotpluggable CPUs 1959d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh# 1969d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikhget_hotplug_cpus_num() 1979d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh{ 19826777407207f2a43d88c13437737d2ca3737650cGuangwen Feng echo $(get_hotplug_cpus | wc -w) 1999d6b355c2b3603be1c1dc60a1981424d3f266f7aStanislav Kholmanskikh} 20050512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 20150512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# get_all_cpu_states() 20250512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# 20350512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# Collects the current online/offline state of CPUs in the 20450512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# system, printing it in a format that can be passed to 20550512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# set_all_cpu_states() later. 20650512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# 20750512d9c147b0e8a05d4d814af3ba83852a79304subrata_modakget_all_cpu_states() 20850512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak{ 209e469ab15b2332629432b9347d6ad71dfef885e95Xing Gu echo `cd /sys/devices/system/cpu/ && grep '' */online | \ 210e469ab15b2332629432b9347d6ad71dfef885e95Xing Gu sed -e 's/\/online//'` 21150512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak return 21250512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak} 21350512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 21450512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# set_all_cpu_states(STATES) 21550512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# 2164cb969a72e34e61e2584c5282577aa5d95b112dfStanislav Kholmanskikh# Sets all of the CPU states according to STATES, which must be 21750512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# of the form "cpuX:Y", where X is the CPU number and Y its state. 21850512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# Each must be on a separate line. 21950512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# 22050512d9c147b0e8a05d4d814af3ba83852a79304subrata_modakset_all_cpu_states() 22150512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak{ 2224cb969a72e34e61e2584c5282577aa5d95b112dfStanislav Kholmanskikh for cpu_state in $1; do 2234cb969a72e34e61e2584c5282577aa5d95b112dfStanislav Kholmanskikh cpu=`echo $cpu_state | cut -d: -f 1` 2244cb969a72e34e61e2584c5282577aa5d95b112dfStanislav Kholmanskikh state=`echo $cpu_state | cut -d: -f 2` 22550512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak if [ $state = 1 ]; then 22650512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak online_cpu $cpu 22750512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak else 22850512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak offline_cpu $cpu 22950512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak fi 23050512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak done 23150512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak} 23250512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 23350512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 23450512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# get_online_cpus() 23550512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# 23650512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# Prints a list of all CPUs currently online. This function only 23750512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# works if the system's CPUs have hotplug capabilities 23850512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# 23950512d9c147b0e8a05d4d814af3ba83852a79304subrata_modakget_online_cpus() 24050512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak{ 24150512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak echo `cd /sys/devices/system/cpu/ && grep 1 */online | cut -d '/' -f 1` 24250512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak return 24350512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak} 24450512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 24550512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 24650512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# get_offline_cpus() 24750512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# 24850512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# Prints a list of all CPUs currently offline. This function only 24950512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# works if the system's CPUs have hotplug capabilities 25050512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# 25150512d9c147b0e8a05d4d814af3ba83852a79304subrata_modakget_offline_cpus() 25250512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak{ 25350512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak echo `cd /sys/devices/system/cpu/ && grep 0 */online | cut -d '/' -f 1` 25450512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak return 25550512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak} 25650512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 25750512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# cpu_is_valid(CPU) 25850512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# 25950512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# Checks to see if the given CPU number is available for hotplugging 26050512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# in the system. Returns 0 if the CPU is available, 1 otherwise. 26150512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# 26250512d9c147b0e8a05d4d814af3ba83852a79304subrata_modakcpu_is_valid() 26350512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak{ 26450512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak CPU=${1#cpu} 26550512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak echo "CPU is $CPU" 26650512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak cat /sys/devices/system/cpu/cpu${CPU}/online > /dev/null 2>&1 26750512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak return $? 26850512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak} 26950512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 27050512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 27150512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# cpu_is_online(CPU) 27250512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# 273c1474e50551f1dabeeddbfd91f96e82d15bc5790Jin Li# Returns a 0 value if the given CPU number is currently online, 274c1474e50551f1dabeeddbfd91f96e82d15bc5790Jin Li# 1 otherwise. This function requires the system's CPUs have 27550512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# hotplug capabilities. 27650512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak# 27750512d9c147b0e8a05d4d814af3ba83852a79304subrata_modakcpu_is_online() 27850512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak{ 27950512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak CPU=${1#cpu} 28050512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak if [ `cat /sys/devices/system/cpu/cpu${CPU}/online` = "1" ]; then 28150512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak return 0 28237550cf5a86c7ca7424a2a318dd64e550f13f5dfChris Dearman else 28350512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak return 1 28450512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak fi 28550512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak} 286