mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-14 12:37:32 +00:00
watchdog: Fix kref imbalance seen if handle_boot_enabled=0
[ Upstream commit914d65f3f0
] If handle_boot_enabled is set to 0, the watchdog driver module use counter will not be increased and kref_get() will not be called when registering the watchdog. Subsequently, on open, this does not happen either because the code believes that it was already done because the hardware watchdog is marked as running. We could introduce a state variable to indicate this state, but let's just increase the module use counter and call kref_get() unconditionally if the hardware watchdog is running when a driver is registering itself to keep the code simple. Fixes:2501b01531
("watchdog: core: add option to avoid early ...") Cc: Sebastian Reichel <sebastian.reichel@collabora.co.uk> Signed-off-by: Guenter Roeck <linux@roeck-us.net> Signed-off-by: Wim Van Sebroeck <wim@iguana.be> Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
08b8109010
commit
71233e2541
1 changed files with 5 additions and 6 deletions
|
@ -966,14 +966,13 @@ static int watchdog_cdev_register(struct watchdog_device *wdd, dev_t devno)
|
|||
* and schedule an immediate ping.
|
||||
*/
|
||||
if (watchdog_hw_running(wdd)) {
|
||||
if (handle_boot_enabled) {
|
||||
__module_get(wdd->ops->owner);
|
||||
kref_get(&wd_data->kref);
|
||||
__module_get(wdd->ops->owner);
|
||||
kref_get(&wd_data->kref);
|
||||
if (handle_boot_enabled)
|
||||
queue_delayed_work(watchdog_wq, &wd_data->work, 0);
|
||||
} else {
|
||||
else
|
||||
pr_info("watchdog%d running and kernel based pre-userspace handler disabled\n",
|
||||
wdd->id);
|
||||
}
|
||||
wdd->id);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
Loading…
Reference in a new issue