Lines Matching full:cpu
24 static void __deadlock_check(int cpu, const cpumask_t *waiters, bool *found) in __deadlock_check() argument
29 if (i == cpu) { in __deadlock_check()
30 printf("CPU%d", cpu); in __deadlock_check()
34 __deadlock_check(cpu, &on_cpu_info[i].waiters, found); in __deadlock_check()
36 printf(" <=> CPU%d", i); in __deadlock_check()
42 static void deadlock_check(int me, int cpu) in deadlock_check() argument
46 __deadlock_check(cpu, &on_cpu_info[me].waiters, &found); in deadlock_check()
48 printf(" <=> CPU%d deadlock detectd\n", me); in deadlock_check()
53 static void cpu_wait(int cpu) in cpu_wait() argument
57 if (cpu == me) in cpu_wait()
60 cpumask_set_cpu(me, &on_cpu_info[cpu].waiters); in cpu_wait()
61 deadlock_check(me, cpu); in cpu_wait()
62 while (!cpu_idle(cpu)) in cpu_wait()
64 cpumask_clear_cpu(me, &on_cpu_info[cpu].waiters); in cpu_wait()
69 int cpu = smp_processor_id(); in do_idle() local
71 if (cpu == 0) in do_idle()
75 set_cpu_idle(cpu, true); in do_idle()
78 while (cpu_idle(cpu)) in do_idle()
81 on_cpu_info[cpu].func(on_cpu_info[cpu].data); in do_idle()
86 void on_cpu_async(int cpu, void (*func)(void *data), void *data) in on_cpu_async() argument
88 if (cpu == smp_processor_id()) { in on_cpu_async()
93 assert_msg(cpu != 0 || cpu0_calls_idle, "Waiting on CPU0, which is unlikely to idle. " in on_cpu_async()
96 smp_boot_secondary_nofail(cpu, do_idle); in on_cpu_async()
99 cpu_wait(cpu); in on_cpu_async()
101 if (cpu_idle(cpu)) in on_cpu_async()
106 on_cpu_info[cpu].func = func; in on_cpu_async()
107 on_cpu_info[cpu].data = data; in on_cpu_async()
109 set_cpu_idle(cpu, false); in on_cpu_async()
116 int cpu, me = smp_processor_id(); in on_cpumask_async() local
118 for_each_cpu(cpu, mask) { in on_cpumask_async()
119 if (cpu == me) in on_cpumask_async()
121 on_cpu_async(cpu, func, data); in on_cpumask_async()
129 int cpu, me = smp_processor_id(); in on_cpumask() local
135 for_each_cpu(cpu, &tmp) in on_cpumask()
136 on_cpu_async(cpu, func, data); in on_cpumask()
140 for_each_cpu(cpu, &tmp) { in on_cpumask()
141 cpumask_set_cpu(me, &on_cpu_info[cpu].waiters); in on_cpumask()
142 deadlock_check(me, cpu); in on_cpumask()
146 for_each_cpu(cpu, &tmp) in on_cpumask()
147 cpumask_clear_cpu(me, &on_cpu_info[cpu].waiters); in on_cpumask()
151 void on_cpu(int cpu, void (*func)(void *data), void *data) in on_cpu() argument
153 on_cpu_async(cpu, func, data); in on_cpu()
154 cpu_wait(cpu); in on_cpu()