From ab7c4ee66191ec260aede972074b5d13263ae0c2 Mon Sep 17 00:00:00 2001 From: Zhijian Li Date: Mon, 14 Aug 2023 12:33:19 +0800 Subject: [PATCH] [Celestica-E1031] Enable CPU watchdog (#16083) Enable CPU watchdog on Celestica-E1031. --- .../platform-modules-haliburton.install | 2 + .../platform-modules-haliburton.postinst | 5 +- .../haliburton/script/cpu_wdt | 89 +++++++++++++++++++ .../haliburton/systemd/cpu_wdt.service | 10 +++ 4 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 platform/broadcom/sonic-platform-modules-cel/haliburton/script/cpu_wdt create mode 100644 platform/broadcom/sonic-platform-modules-cel/haliburton/systemd/cpu_wdt.service diff --git a/platform/broadcom/sonic-platform-modules-cel/debian/platform-modules-haliburton.install b/platform/broadcom/sonic-platform-modules-cel/debian/platform-modules-haliburton.install index 6c58afe6d5..c3d598623e 100644 --- a/platform/broadcom/sonic-platform-modules-cel/debian/platform-modules-haliburton.install +++ b/platform/broadcom/sonic-platform-modules-cel/debian/platform-modules-haliburton.install @@ -1,5 +1,6 @@ haliburton/cfg/haliburton-modules.conf etc/modules-load.d haliburton/systemd/platform-modules-haliburton.service lib/systemd/system +haliburton/systemd/cpu_wdt.service lib/systemd/system haliburton/script/fancontrol.sh etc/init.d haliburton/script/fancontrol.service lib/systemd/system services/fancontrol/fancontrol usr/local/bin @@ -8,4 +9,5 @@ services/platform_api/platform_api_mgnt.sh usr/local/bin haliburton/script/popmsg.sh usr/local/bin haliburton/script/udev_prefix.sh usr/local/bin haliburton/script/reload_udev.sh usr/local/bin +haliburton/script/cpu_wdt usr/local/bin haliburton/script/50-ttyUSB-C0.rules etc/udev/rules.d diff --git a/platform/broadcom/sonic-platform-modules-cel/debian/platform-modules-haliburton.postinst b/platform/broadcom/sonic-platform-modules-cel/debian/platform-modules-haliburton.postinst index 57ac1be341..d427f17579 100644 --- a/platform/broadcom/sonic-platform-modules-cel/debian/platform-modules-haliburton.postinst +++ b/platform/broadcom/sonic-platform-modules-cel/debian/platform-modules-haliburton.postinst @@ -3,6 +3,7 @@ depmod -a sudo chmod +x /usr/local/bin/udev_prefix.sh sudo chmod +x /usr/local/bin/popmsg.sh sudo chmod +x /usr/local/bin/reload_udev.sh +sudo chmod +x /usr/local/bin/cpu_wdt /usr/local/bin/platform_api_mgnt.sh install /etc/init.d/fancontrol.sh install @@ -10,6 +11,8 @@ sudo chmod +x /usr/local/bin/reload_udev.sh systemctl enable platform-modules-haliburton.service systemctl enable fancontrol.service +systemctl enable cpu_wdt.service systemctl start platform-modules-haliburton.service -systemctl start fancontrol.service \ No newline at end of file +systemctl start fancontrol.service +systemctl start cpu_wdt.service diff --git a/platform/broadcom/sonic-platform-modules-cel/haliburton/script/cpu_wdt b/platform/broadcom/sonic-platform-modules-cel/haliburton/script/cpu_wdt new file mode 100644 index 0000000000..8eed59013b --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-cel/haliburton/script/cpu_wdt @@ -0,0 +1,89 @@ +#!/bin/bash + +SYSLOG_IDENTIFIER="cpu_wdt" +CPUWDT_MAIN_TASK_RUNNING_FLAG=true +TIMEOUT=180 +KEEPALIVE=60 + +function log_info() +{ + logger -p info -t ${SYSLOG_IDENTIFIER} "$@" +} + +function usage() +{ + echo "Usage: $0 ACTION [OPTIONS]..." + echo "" + echo "Actions:" + echo " start Start CPU WDT" + echo " stop Stop CPU WDT" + echo "" + echo "Options:" + echo " -h Show this help" + echo " -t WDT timeout period: {30|60|180}, default 180" + echo " -k WDT keep alive period, {1..(timeout-5)}, default 60" + exit 1 +} + +function validate_action() +{ + if [[ "${ACTION}" != "start" && "${ACTION}" != "stop" ]]; then + echo -e "Invalid action: ${ACTION}\n" + usage + fi +} + +function validate_options() +{ + if [[ ${TIMEOUT} != "30" && ${TIMEOUT} != "60" && ${TIMEOUT} != "180" ]]; then + echo -e "Invalid timeout value: ${TIMEOUT}\n" + usage + fi + if [[ ${KEEPALIVE} -le 0 || ${KEEPALIVE} -gt $((TIMEOUT - 5)) ]]; then + echo "Invalid keepalive value: ${KEEPALIVE}" + echo "" + usage + fi +} + +trap 'log_info "Caught SIGHUP - ignoring..."' SIGHUP +trap 'log_info "Caught SIGINT - exiting..."; CPUWDT_MAIN_TASK_RUNNING_FLAG=false' SIGINT +trap 'log_info "Caught SIGTERM - exiting..."; CPUWDT_MAIN_TASK_RUNNING_FLAG=false' SIGTERM + +ACTION=$1 +shift +validate_action + +while getopts "t:k:" OPTION; do + case $OPTION in + t) + TIMEOUT=${OPTARG} + ;; + k) + KEEPALIVE=${OPTARG} + ;; + *) + usage + esac +done + +validate_options + +if [[ "${ACTION}" == "start" ]]; then + # enable + log_info "Enable CPU WDT.." + watchdogutil arm -s "${TIMEOUT}" > /dev/null + log_info "CPU WDT has been enabled with $TIMEOUT seconds timeout" + + # keep alive + log_info "Enable keep alive messaging every $KEEPALIVE seconds" + while [[ ${CPUWDT_MAIN_TASK_RUNNING_FLAG} == "true" ]]; do + watchdogutil arm -s "${TIMEOUT}" > /dev/null + sleep "${KEEPALIVE}" + done + log_info "Keep alive messaging has been disabled" +fi + +log_info "Disable CPU WDT.." +watchdogutil disarm +log_info "CPU WDT has been disabled!" diff --git a/platform/broadcom/sonic-platform-modules-cel/haliburton/systemd/cpu_wdt.service b/platform/broadcom/sonic-platform-modules-cel/haliburton/systemd/cpu_wdt.service new file mode 100644 index 0000000000..51cc537c20 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-cel/haliburton/systemd/cpu_wdt.service @@ -0,0 +1,10 @@ +[Unit] +Description=CPU WDT +After=platform-modules-haliburton.service +Requires=platform-modules-haliburton.service + +[Service] +ExecStart=-/usr/local/bin/cpu_wdt start + +[Install] +WantedBy=multi-user.target