Skip to content
Snippets Groups Projects
Select Git revision
  • a1eae7800eb73b76fb604d5510cbc42a5265be86
  • master default protected
  • android-msm-bullhead-3.10-nougat_kgdb_less_changes
  • android-msm-bullhead-3.10-nougat_kgdb
  • android-msm-bullhead-3.10-nougat_klist
  • android-4.4
  • android-msm-vega-4.4-oreo-daydream
  • android-msm-wahoo-4.4-p-preview-5
  • android-msm-wahoo-4.4-pie
  • android-msm-marlin-3.18-p-preview-5
  • android-msm-marlin-3.18-pie
  • android-msm-wahoo-2018.07-oreo-m2
  • android-msm-wahoo-2018.07-oreo-m4
  • android-msm-wahoo-4.4-p-preview-4
  • android-msm-bullhead-3.10-oreo-m6
  • android-msm-angler-3.10-oreo-m6
  • android-msm-marlin-3.18-p-preview-4
  • android-msm-stargazer-3.18-oreo-wear-dr
  • android-msm-catshark-3.18-oreo-wear-dr
  • android-msm-wahoo-4.4-oreo-m2
  • android-msm-wahoo-4.4-oreo-m4
  • android-daydreamos-8.0.0_r0.5
  • android-8.1.0_r0.92
  • android-8.1.0_r0.91
  • android-daydreamos-8.0.0_r0.4
  • android-p-preview-5_r0.2
  • android-p-preview-5_r0.1
  • android-9.0.0_r0.5
  • android-9.0.0_r0.4
  • android-9.0.0_r0.2
  • android-9.0.0_r0.1
  • android-8.1.0_r0.81
  • android-8.1.0_r0.80
  • android-8.1.0_r0.78
  • android-8.1.0_r0.76
  • android-8.1.0_r0.75
  • android-8.1.0_r0.72
  • android-8.1.0_r0.70
  • android-p-preview-4_r0.2
  • android-p-preview-4_r0.1
  • android-wear-8.0.0_r0.30
41 results

cpu-notifier-error-inject.c

Blame
  • cpu-notifier-error-inject.c 1.53 KiB
    #include <linux/kernel.h>
    #include <linux/cpu.h>
    #include <linux/module.h>
    #include <linux/notifier.h>
    
    static int priority;
    static int cpu_up_prepare_error;
    static int cpu_down_prepare_error;
    
    module_param(priority, int, 0);
    MODULE_PARM_DESC(priority, "specify cpu notifier priority");
    
    module_param(cpu_up_prepare_error, int, 0644);
    MODULE_PARM_DESC(cpu_up_prepare_error,
    		"specify error code to inject CPU_UP_PREPARE action");
    
    module_param(cpu_down_prepare_error, int, 0644);
    MODULE_PARM_DESC(cpu_down_prepare_error,
    		"specify error code to inject CPU_DOWN_PREPARE action");
    
    static int err_inject_cpu_callback(struct notifier_block *nfb,
    				unsigned long action, void *hcpu)
    {
    	int err = 0;
    
    	switch (action) {
    	case CPU_UP_PREPARE:
    	case CPU_UP_PREPARE_FROZEN:
    		err = cpu_up_prepare_error;
    		break;
    	case CPU_DOWN_PREPARE:
    	case CPU_DOWN_PREPARE_FROZEN:
    		err = cpu_down_prepare_error;
    		break;
    	}
    	if (err)
    		printk(KERN_INFO "Injecting error (%d) at cpu notifier\n", err);
    
    	return notifier_from_errno(err);
    }
    
    static struct notifier_block err_inject_cpu_notifier = {
    	.notifier_call = err_inject_cpu_callback,
    };
    
    static int err_inject_init(void)
    {
    	err_inject_cpu_notifier.priority = priority;
    
    	return register_hotcpu_notifier(&err_inject_cpu_notifier);
    }
    
    static void err_inject_exit(void)
    {
    	unregister_hotcpu_notifier(&err_inject_cpu_notifier);
    }
    
    module_init(err_inject_init);
    module_exit(err_inject_exit);
    
    MODULE_DESCRIPTION("CPU notifier error injection module");
    MODULE_LICENSE("GPL");
    MODULE_AUTHOR("Akinobu Mita <akinobu.mita@gmail.com>");