Messages in this thread | | | From | Ulrich Obergfell <> | Subject | [PATCH 0/5] improve handling of errors returned by kthread_park() | Date | Mon, 28 Sep 2015 22:44:07 +0200 |
| |
The original watchdog_park_threads() function that was introduced by commit 81a4beef91ba4a9e8ad6054ca9933dff7e25ff28 takes a very simple approach to handle errors returned by kthread_park(): It attempts to roll back all watchdog threads to the unparked state. However, this may be undesired behaviour from the perspective of the caller which may want to handle errors as appropriate in its specific context. Currently, there are two possible call chains:
- watchdog suspend/resume interface
lockup_detector_suspend watchdog_park_threads
- write to parameters in /proc/sys/kernel
proc_watchdog_update watchdog_enable_all_cpus update_watchdog_all_cpus watchdog_park_threads
Instead of 'blindly' attempting to unpark the watchdog threads if a kthread_park() call fails, the new approach is to disable the lockup detectors in the above call chains. Failure becomes visible to the user as follows:
- error messages from lockup_detector_suspend() or watchdog_enable_all_cpus()
- the state that can be read from /proc/sys/kernel/watchdog_enabled
- the 'write' system call in the latter call chain returns an error
Ulrich Obergfell (5): watchdog: fix error handling in proc_watchdog_thresh() watchdog: move watchdog_disable_all_cpus() outside of ifdef watchdog: implement error handling in update_watchdog_all_cpus() and callers watchdog: implement error handling in lockup_detector_suspend() watchdog: do not unpark threads in watchdog_park_threads() on error
kernel/watchdog.c | 60 +++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 43 insertions(+), 17 deletions(-)
-- 1.7.11.7
| |