of-reconfig-notifier-error-inject.c 1.3 KB

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