1*09c434b8SThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only 2048b9c35SAkinobu Mita #include <linux/kernel.h> 3048b9c35SAkinobu Mita #include <linux/module.h> 4048b9c35SAkinobu Mita #include <linux/suspend.h> 5048b9c35SAkinobu Mita 6048b9c35SAkinobu Mita #include "notifier-error-inject.h" 7048b9c35SAkinobu Mita 8048b9c35SAkinobu Mita static int priority; 9048b9c35SAkinobu Mita module_param(priority, int, 0); 10048b9c35SAkinobu Mita MODULE_PARM_DESC(priority, "specify PM notifier priority"); 11048b9c35SAkinobu Mita 12048b9c35SAkinobu Mita static struct notifier_err_inject pm_notifier_err_inject = { 13048b9c35SAkinobu Mita .actions = { 14048b9c35SAkinobu Mita { NOTIFIER_ERR_INJECT_ACTION(PM_HIBERNATION_PREPARE) }, 15048b9c35SAkinobu Mita { NOTIFIER_ERR_INJECT_ACTION(PM_SUSPEND_PREPARE) }, 16048b9c35SAkinobu Mita { NOTIFIER_ERR_INJECT_ACTION(PM_RESTORE_PREPARE) }, 17048b9c35SAkinobu Mita {} 18048b9c35SAkinobu Mita } 19048b9c35SAkinobu Mita }; 20048b9c35SAkinobu Mita 21048b9c35SAkinobu Mita static struct dentry *dir; 22048b9c35SAkinobu Mita err_inject_init(void)23048b9c35SAkinobu Mitastatic int err_inject_init(void) 24048b9c35SAkinobu Mita { 25048b9c35SAkinobu Mita int err; 26048b9c35SAkinobu Mita 27048b9c35SAkinobu Mita dir = notifier_err_inject_init("pm", notifier_err_inject_dir, 28048b9c35SAkinobu Mita &pm_notifier_err_inject, priority); 29048b9c35SAkinobu Mita if (IS_ERR(dir)) 30048b9c35SAkinobu Mita return PTR_ERR(dir); 31048b9c35SAkinobu Mita 32048b9c35SAkinobu Mita err = register_pm_notifier(&pm_notifier_err_inject.nb); 33048b9c35SAkinobu Mita if (err) 34048b9c35SAkinobu Mita debugfs_remove_recursive(dir); 35048b9c35SAkinobu Mita 36048b9c35SAkinobu Mita return err; 37048b9c35SAkinobu Mita } 38048b9c35SAkinobu Mita err_inject_exit(void)39048b9c35SAkinobu Mitastatic void err_inject_exit(void) 40048b9c35SAkinobu Mita { 41048b9c35SAkinobu Mita unregister_pm_notifier(&pm_notifier_err_inject.nb); 42048b9c35SAkinobu Mita debugfs_remove_recursive(dir); 43048b9c35SAkinobu Mita } 44048b9c35SAkinobu Mita 45048b9c35SAkinobu Mita module_init(err_inject_init); 46048b9c35SAkinobu Mita module_exit(err_inject_exit); 47048b9c35SAkinobu Mita 48048b9c35SAkinobu Mita MODULE_DESCRIPTION("PM notifier error injection module"); 49048b9c35SAkinobu Mita MODULE_LICENSE("GPL"); 50048b9c35SAkinobu Mita MODULE_AUTHOR("Akinobu Mita <akinobu.mita@gmail.com>"); 51