On 25/11/15 14:10, Guenter Roeck wrote: > On 11/25/2015 05:02 AM, Simon Arlott wrote: >> On Wed, November 25, 2015 02:44, Guenter Roeck wrote: >>> The "running" flag should no longer be needed. watchdog_active() >>> should provide that information. >> >> I'm going to need to keep that because I need to know if it's running >> in the interrupt handler, and wdd->lock is a mutex. >> >>>> @@ -306,17 +202,18 @@ unregister_timer: >>>> >>>> static int bcm63xx_wdt_remove(struct platform_device *pdev) >>>> { >>>> - if (!nowayout) >>>> - bcm63xx_wdt_hw_stop(); >>>> + struct watchdog_device *wdd = platform_get_drvdata(pdev); >>>> >>>> - misc_deregister(&bcm63xx_wdt_miscdev); >>>> bcm63xx_timer_unregister(TIMER_WDT_ID); >>>> + watchdog_unregister_device(wdd); >>> >>> Shouldn't that come first, before unregistering the timer ? >> >> No, because wdd->dev is used in the interrupt handler. I will have to >> move registration of the interrupt to after creating the watchdog >> because it could currently be used before wdd->dev is set. >> > > Does unregistering the timer disable the interrupt ? No, it sets the callback for that timer to NULL so that it won't be called. -- Simon Arlott