566 lines · 13.0 KB · C
RawDownload
		return 0; 	cpus_read_lock();	static_call_lock();	ret = __static_call_init(NULL, __start_static_call_sites,				 __stop_static_call_sites);	static_call_unlock();	cpus_read_unlock(); 	if (ret) {		pr_err("Failed to allocate memory for static_call!\n");		BUG();	} #ifdef CONFIG_MODULES	if (!static_call_initialized)		register_module_notifier(&static_call_module_nb);#endif 	static_call_initialized = 1;	return 0;}early_initcall(static_call_init); #ifdef CONFIG_STATIC_CALL_SELFTEST static int func_a(int x){	return x+1;} static int func_b(int x){	return x+2;} DEFINE_STATIC_CALL(sc_selftest, func_a); static struct static_call_data {      int (*func)(int);      int val;      int expect;} static_call_data [] __initdata = {      { NULL,   2, 3 },      { func_b, 2, 4 },      { func_a, 2, 3 }}; static int __init test_static_call_init(void){      int i;       for (i = 0; i < ARRAY_SIZE(static_call_data); i++ ) {	      struct static_call_data *scd = &static_call_data[i];               if (scd->func)                      static_call_update(sc_selftest, scd->func);               WARN_ON(static_call(sc_selftest)(scd->val) != scd->expect);      }       return 0;}early_initcall(test_static_call_init); #endif /* CONFIG_STATIC_CALL_SELFTEST */

Lines 501–566 of 566. Previous lines