109c434b8SThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only 29579f5bdSAkinobu Mita #include <linux/kernel.h> 39579f5bdSAkinobu Mita #include <linux/module.h> 49579f5bdSAkinobu Mita #include <linux/memory.h> 59579f5bdSAkinobu Mita 69579f5bdSAkinobu Mita #include "notifier-error-inject.h" 79579f5bdSAkinobu Mita 89579f5bdSAkinobu Mita static int priority; 99579f5bdSAkinobu Mita module_param(priority, int, 0); 109579f5bdSAkinobu Mita MODULE_PARM_DESC(priority, "specify memory notifier priority"); 119579f5bdSAkinobu Mita 129579f5bdSAkinobu Mita static struct notifier_err_inject memory_notifier_err_inject = { 139579f5bdSAkinobu Mita .actions = { 149579f5bdSAkinobu Mita { NOTIFIER_ERR_INJECT_ACTION(MEM_GOING_ONLINE) }, 159579f5bdSAkinobu Mita { NOTIFIER_ERR_INJECT_ACTION(MEM_GOING_OFFLINE) }, 169579f5bdSAkinobu Mita {} 179579f5bdSAkinobu Mita } 189579f5bdSAkinobu Mita }; 199579f5bdSAkinobu Mita 209579f5bdSAkinobu Mita static struct dentry *dir; 219579f5bdSAkinobu Mita err_inject_init(void)229579f5bdSAkinobu Mitastatic int err_inject_init(void) 239579f5bdSAkinobu Mita { 249579f5bdSAkinobu Mita int err; 259579f5bdSAkinobu Mita 269579f5bdSAkinobu Mita dir = notifier_err_inject_init("memory", notifier_err_inject_dir, 279579f5bdSAkinobu Mita &memory_notifier_err_inject, priority); 289579f5bdSAkinobu Mita if (IS_ERR(dir)) 299579f5bdSAkinobu Mita return PTR_ERR(dir); 309579f5bdSAkinobu Mita 319579f5bdSAkinobu Mita err = register_memory_notifier(&memory_notifier_err_inject.nb); 329579f5bdSAkinobu Mita if (err) 339579f5bdSAkinobu Mita debugfs_remove_recursive(dir); 349579f5bdSAkinobu Mita 359579f5bdSAkinobu Mita return err; 369579f5bdSAkinobu Mita } 379579f5bdSAkinobu Mita err_inject_exit(void)389579f5bdSAkinobu Mitastatic void err_inject_exit(void) 399579f5bdSAkinobu Mita { 409579f5bdSAkinobu Mita unregister_memory_notifier(&memory_notifier_err_inject.nb); 419579f5bdSAkinobu Mita debugfs_remove_recursive(dir); 429579f5bdSAkinobu Mita } 439579f5bdSAkinobu Mita 449579f5bdSAkinobu Mita module_init(err_inject_init); 459579f5bdSAkinobu Mita module_exit(err_inject_exit); 469579f5bdSAkinobu Mita 479579f5bdSAkinobu Mita MODULE_DESCRIPTION("memory notifier error injection module"); 489579f5bdSAkinobu Mita MODULE_LICENSE("GPL"); 499579f5bdSAkinobu Mita MODULE_AUTHOR("Akinobu Mita <akinobu.mita@gmail.com>"); 50