of-reconfig-notifier-error-inject.c (1346B)
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 8static int priority; 9module_param(priority, int, 0); 10MODULE_PARM_DESC(priority, "specify OF reconfig notifier priority"); 11 12static 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 23static struct dentry *dir; 24 25static 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 41static void err_inject_exit(void) 42{ 43 of_reconfig_notifier_unregister(&reconfig_err_inject.nb); 44 debugfs_remove_recursive(dir); 45} 46 47module_init(err_inject_init); 48module_exit(err_inject_exit); 49 50MODULE_DESCRIPTION("OF reconfig notifier error injection module"); 51MODULE_LICENSE("GPL"); 52MODULE_AUTHOR("Akinobu Mita <akinobu.mita@gmail.com>");