On Wed, Aug 29, 2018 at 09:42:38AM +0200, Wolfram Sang wrote: > To prevent removing if NOWAYOUT, we invalidate the .remove function and > suppress the bind/unbind attributes in sysfs. These are driver > capabilities, so we need to set it up at runtime during init. To avoid > boilerplate, introduce module_watchdog_driver() similar to > module_driver(). On top of that, we then build > module_watchdog_platform_driver(). Others may follow, if needed. > > Signed-off-by: Wolfram Sang <wsa+renesas@xxxxxxxxxxxxxxxxxxxx> > --- > include/linux/watchdog.h | 17 +++++++++++++++++ > 1 file changed, 17 insertions(+) > > diff --git a/include/linux/watchdog.h b/include/linux/watchdog.h > index 44985c4a1e86..c8ecbc53c807 100644 > --- a/include/linux/watchdog.h > +++ b/include/linux/watchdog.h > @@ -216,4 +216,21 @@ extern void watchdog_unregister_device(struct watchdog_device *); > /* devres register variant */ > int devm_watchdog_register_device(struct device *dev, struct watchdog_device *); > > +#define module_watchdog_driver(__driver, __register, __unregister, __nowayout, ...) \ > +static int __init __driver##_init(void) \ > +{ \ > + __driver.driver.suppress_bind_attrs = !!(__nowayout); \ > + return __register(&(__driver) ##__VA_ARGS__); \ > +} \ Sorry, I'm not familiar w/ this level of detail of the driver interface. Is the intent of the proposed changes to prevent the unload of a module if it was loaded with the "nowayout" parameter? If so, I thought the WD "nowayout" semantic was only supposed to be in effect after /dev/watchdog was opened. The proposed change looks like it makes the "nowayout" semantic take effect before /dev/watchdog is opened. Thanks > +module_init(__driver##_init); \ > +static void __exit __driver##_exit(void) \ > +{ \ > + __unregister(&(__driver), ##__VA_ARGS__); \ > +} \ > +module_exit(__driver##_exit) > + > +#define module_watchdog_platform_driver(__platform_driver, __nowayout) \ > + module_watchdog_driver(__platform_driver, platform_driver_register, \ > + platform_driver_unregister, __nowayout) > + > #endif /* ifndef _LINUX_WATCHDOG_H */ > -- > 2.11.0 -- ----------------------------------------------------------------------------- Jerry Hoemann Software Engineer Hewlett Packard Enterprise -----------------------------------------------------------------------------