pm-notifier-error-inject.c 1.2 KB

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