You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tlp/tlp-mitigate-slowshutdown.p...

101 lines
3.5 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

commit dabd0e900f6e10c358436c584c51dd1f55c320d2
Author: Thomas Koch <linrunner@gmx.net>
Date: Sun Mar 12 20:53:32 2017 +0100
Issue #242: mitigate slow shutdown
Rationale: 'systemctl stop tlp' invokes 'nmcli radio on <device>' in systemd
context. This causes nmcli to hang for ~20 sec after switching the device.
The cause is unknown when invoking nmcli directly it doesn't hang.
Workaround:
* Execute radio switching last in 'tlp init [start|stop]'
* Add TimeoutStopSec=3 to tlp.service so systemd will kill the hanging
stop task after 3 secs.
Caveat: does not cover all cases yet. When two radios (e.g. wifi and
wwan) are to be switched, the second switch never happens.
diff --git a/tlp.in b/tlp.in
index bc2f852..fd0486c 100644
--- a/tlp.in
+++ b/tlp.in
@@ -96,23 +96,21 @@ case "$mode" in
# do init business ...
case $mode2 in
start)
- # apply radio states
- set_radio_device_states start
-
- # apply power save settings -- but only if not previously run
- # (by the udev rule) for the same power state
- if compare_and_save_power_state $pwrmode; then
- echo -n "Applying power save settings..."
- apply_common_settings $pwrmode
- [ "$pwrmode" = "1" ] && poweroff_drivebay 0
- [ "$X_TLP_USB_MODE" = "1" ] && set_usb_suspend 0 auto
- echo "done."
- fi
+ # apply power save settings
+ compare_and_save_power_state $pwrmode
+ echo -n "Applying power save settings..."
+ apply_common_settings $pwrmode
+ poweroff_drivebay $pwrmode 0
+ [ "$X_TLP_USB_MODE" = "1" ] && set_usb_suspend 0 auto
+ echo "done."
# apply battery settings
echo -n "Setting battery charge thresholds..."
set_charge_thresholds
echo "done."
+
+ # apply radio states
+ set_radio_device_states start
;;
restart|force-reload)
@@ -131,14 +129,6 @@ case "$mode" in
;;
stop)
- set_radio_device_states stop
-
- if [ "$USB_AUTOSUSPEND_DISABLE_ON_SHUTDOWN" = "1" ]; then
- echo -n "Disabling usb autosuspend..."
- set_usb_suspend 0 on
- echo "done."
- fi
-
# remove usb startup flag
[ -f $USB_DONE ] && rm $USB_DONE
@@ -149,6 +139,16 @@ case "$mode" in
echo -n "Applying power save settings..."
apply_common_settings 0
echo "done."
+
+ # disable usb autosuspend if configured
+ if [ "$USB_AUTOSUSPEND_DISABLE_ON_SHUTDOWN" = "1" ]; then
+ echo -n "Disabling usb autosuspend..."
+ set_usb_suspend 0 on
+ echo "done."
+ fi
+
+ # apply radio states
+ set_radio_device_states stop
;;
*)
diff --git a/tlp.service.in b/tlp.service.in
index 7dc4b2c..67c131c 100644
--- a/tlp.service.in
+++ b/tlp.service.in
@@ -15,6 +15,7 @@ Type=oneshot
RemainAfterExit=yes
ExecStart=@TLP_SBIN@/tlp init start
ExecStop=@TLP_SBIN@/tlp init stop
+TimeoutStopSec=3
[Install]
WantedBy=multi-user.target