pSeries-reconfig-notifier-error-inject.c 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #include <linux/kernel.h>
  2. #include <linux/module.h>
  3. #include <asm/pSeries_reconfig.h>
  4. #include "notifier-error-inject.h"
  5. static int priority;
  6. module_param(priority, int, 0);
  7. MODULE_PARM_DESC(priority, "specify pSeries reconfig notifier priority");
  8. static struct notifier_err_inject reconfig_err_inject = {
  9. .actions = {
  10. { NOTIFIER_ERR_INJECT_ACTION(PSERIES_RECONFIG_ADD) },
  11. { NOTIFIER_ERR_INJECT_ACTION(PSERIES_RECONFIG_REMOVE) },
  12. { NOTIFIER_ERR_INJECT_ACTION(PSERIES_DRCONF_MEM_ADD) },
  13. { NOTIFIER_ERR_INJECT_ACTION(PSERIES_DRCONF_MEM_REMOVE) },
  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("pSeries-reconfig",
  22. notifier_err_inject_dir, &reconfig_err_inject, priority);
  23. if (IS_ERR(dir))
  24. return PTR_ERR(dir);
  25. err = pSeries_reconfig_notifier_register(&reconfig_err_inject.nb);
  26. if (err)
  27. debugfs_remove_recursive(dir);
  28. return err;
  29. }
  30. static void err_inject_exit(void)
  31. {
  32. pSeries_reconfig_notifier_unregister(&reconfig_err_inject.nb);
  33. debugfs_remove_recursive(dir);
  34. }
  35. module_init(err_inject_init);
  36. module_exit(err_inject_exit);
  37. MODULE_DESCRIPTION("pSeries reconfig notifier error injection module");
  38. MODULE_LICENSE("GPL");
  39. MODULE_AUTHOR("Akinobu Mita <akinobu.mita@gmail.com>");