> If the HW watchdog is running, the start function should not be called > on open. It would be called after the watchdog was stopped and is then > started again. With that, opening the watchdog the first time would not > call this function, and started_by_fw would remain true. Closing it would > then stopp the watchdog and call pm_runtime_put(). The next open() would > hit the above case, and not call pm_runtime_get_sync(). pm would then be > out of sync. > > What am I missing ? Obviously, I was missing something. I didn't see that the watchdog core calls ->ping instead of ->start when WDOG_HW_RUNNING is set. And once I knew about it, I even found it in the documentation: + Note: when you register the watchdog timer device with this bit set, + then opening /dev/watchdog will skip the start operation but send a keepalive + request instead. This makes all my code to keep the refcnt balanced very moot. Sorry for the noise. I will fix up things and retest.