1 // SPDX-License-Identifier: GPL-2.0-only 2 #include <linux/kernel.h> 3 #include <linux/module.h> 4 #include <linux/of.h> 5 6 #include "notifier-error-inject.h" 7 8 static int priority; 9 module_param(priority, int, 0); 10 MODULE_PARM_DESC(priority, "specify OF reconfig notifier priority"); 11 12 static struct notifier_err_inject reconfig_err_inject = { 13 .actions = { 14 { NOTIFIER_ERR_INJECT_ACTION(OF_RECONFIG_ATTACH_NODE) }, 15 { NOTIFIER_ERR_INJECT_ACTION(OF_RECONFIG_DETACH_NODE) }, 16 { NOTIFIER_ERR_INJECT_ACTION(OF_RECONFIG_ADD_PROPERTY) }, 17 { NOTIFIER_ERR_INJECT_ACTION(OF_RECONFIG_REMOVE_PROPERTY) }, 18 { NOTIFIER_ERR_INJECT_ACTION(OF_RECONFIG_UPDATE_PROPERTY) }, 19 {} 20 } 21 }; 22 23 static struct dentry *dir; 24 25 static int err_inject_init(void) 26 { 27 int err; 28 29 dir = notifier_err_inject_init("OF-reconfig", 30 notifier_err_inject_dir, &reconfig_err_inject, priority); 31 if (IS_ERR(dir)) 32 return PTR_ERR(dir); 33 34 err = of_reconfig_notifier_register(&reconfig_err_inject.nb); 35 if (err) 36 debugfs_remove_recursive(dir); 37 38 return err; 39 } 40 41 static void err_inject_exit(void) 42 { 43 of_reconfig_notifier_unregister(&reconfig_err_inject.nb); 44 debugfs_remove_recursive(dir); 45 } 46 47 module_init(err_inject_init); 48 module_exit(err_inject_exit); 49 50 MODULE_DESCRIPTION("OF reconfig notifier error injection module"); 51 MODULE_LICENSE("GPL"); 52 MODULE_AUTHOR("Akinobu Mita <akinobu.mita@gmail.com>"); 53