static int start_kicker(void) { #ifdef CONFIG_LOCAL_WDT int i; for(i = 0; i < CPU_NR; i++){ wk_tsk[i] = kthread_create(kwdt_thread, (void *)(unsigned long)i, "wdtk-%d", i); if (IS_ERR(wk_tsk[i])) { int ret = PTR_ERR(wk_tsk[i]); wk_tsk[i] = NULL; return ret; } wk_start_kick_cpu(i); } #else //spin_lock(&lock); wk_tsk = kthread_create(kwdt_thread, &data, "wdtk"); //spin_unlock(&lock); if (IS_ERR(wk_tsk)) { int ret = PTR_ERR(wk_tsk); wk_tsk = NULL; return ret; } wake_up_process(wk_tsk); #endif return 0; }
static int start_kicker(void) { int i; wk_cpu_update_bit_flag(0, 1); for (i = 0; i < CPU_NR; i++) { wk_tsk[i] = kthread_create(kwdt_thread, (void *)(unsigned long)i, "wdtk-%d", i); if (IS_ERR(wk_tsk[i])) { int ret = PTR_ERR(wk_tsk[i]); wk_tsk[i] = NULL; return ret; } /* wk_cpu_update_bit_flag(i,1); */ wk_start_kick_cpu(i); } g_kicker_init = 1; printk("[WDK] WDT start kicker done\n"); return 0; }