]> git.ipfire.org Git - thirdparty/linux.git/blob - kernel/smp.c
irq_work, smp: Allow irq_work on call_single_queue
[thirdparty/linux.git] / kernel / smp.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3 * Generic helpers for smp ipi calls
4 *
5 * (C) Jens Axboe <jens.axboe@oracle.com> 2008
6 */
7
8 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
9
10 #include <linux/irq_work.h>
11 #include <linux/rcupdate.h>
12 #include <linux/rculist.h>
13 #include <linux/kernel.h>
14 #include <linux/export.h>
15 #include <linux/percpu.h>
16 #include <linux/init.h>
17 #include <linux/gfp.h>
18 #include <linux/smp.h>
19 #include <linux/cpu.h>
20 #include <linux/sched.h>
21 #include <linux/sched/idle.h>
22 #include <linux/hypervisor.h>
23
24 #include "smpboot.h"
25
26
27 #define CSD_TYPE(_csd) ((_csd)->flags & CSD_FLAG_TYPE_MASK)
28
29 struct call_function_data {
30 call_single_data_t __percpu *csd;
31 cpumask_var_t cpumask;
32 cpumask_var_t cpumask_ipi;
33 };
34
35 static DEFINE_PER_CPU_ALIGNED(struct call_function_data, cfd_data);
36
37 static DEFINE_PER_CPU_SHARED_ALIGNED(struct llist_head, call_single_queue);
38
39 static void flush_smp_call_function_queue(bool warn_cpu_offline);
40
41 int smpcfd_prepare_cpu(unsigned int cpu)
42 {
43 struct call_function_data *cfd = &per_cpu(cfd_data, cpu);
44
45 if (!zalloc_cpumask_var_node(&cfd->cpumask, GFP_KERNEL,
46 cpu_to_node(cpu)))
47 return -ENOMEM;
48 if (!zalloc_cpumask_var_node(&cfd->cpumask_ipi, GFP_KERNEL,
49 cpu_to_node(cpu))) {
50 free_cpumask_var(cfd->cpumask);
51 return -ENOMEM;
52 }
53 cfd->csd = alloc_percpu(call_single_data_t);
54 if (!cfd->csd) {
55 free_cpumask_var(cfd->cpumask);
56 free_cpumask_var(cfd->cpumask_ipi);
57 return -ENOMEM;
58 }
59
60 return 0;
61 }
62
63 int smpcfd_dead_cpu(unsigned int cpu)
64 {
65 struct call_function_data *cfd = &per_cpu(cfd_data, cpu);
66
67 free_cpumask_var(cfd->cpumask);
68 free_cpumask_var(cfd->cpumask_ipi);
69 free_percpu(cfd->csd);
70 return 0;
71 }
72
73 int smpcfd_dying_cpu(unsigned int cpu)
74 {
75 /*
76 * The IPIs for the smp-call-function callbacks queued by other
77 * CPUs might arrive late, either due to hardware latencies or
78 * because this CPU disabled interrupts (inside stop-machine)
79 * before the IPIs were sent. So flush out any pending callbacks
80 * explicitly (without waiting for the IPIs to arrive), to
81 * ensure that the outgoing CPU doesn't go offline with work
82 * still pending.
83 */
84 flush_smp_call_function_queue(false);
85 irq_work_run();
86 return 0;
87 }
88
89 void __init call_function_init(void)
90 {
91 int i;
92
93 for_each_possible_cpu(i)
94 init_llist_head(&per_cpu(call_single_queue, i));
95
96 smpcfd_prepare_cpu(smp_processor_id());
97 }
98
99 /*
100 * csd_lock/csd_unlock used to serialize access to per-cpu csd resources
101 *
102 * For non-synchronous ipi calls the csd can still be in use by the
103 * previous function call. For multi-cpu calls its even more interesting
104 * as we'll have to ensure no other cpu is observing our csd.
105 */
106 static __always_inline void csd_lock_wait(call_single_data_t *csd)
107 {
108 smp_cond_load_acquire(&csd->flags, !(VAL & CSD_FLAG_LOCK));
109 }
110
111 static __always_inline void csd_lock(call_single_data_t *csd)
112 {
113 csd_lock_wait(csd);
114 csd->flags |= CSD_FLAG_LOCK;
115
116 /*
117 * prevent CPU from reordering the above assignment
118 * to ->flags with any subsequent assignments to other
119 * fields of the specified call_single_data_t structure:
120 */
121 smp_wmb();
122 }
123
124 static __always_inline void csd_unlock(call_single_data_t *csd)
125 {
126 WARN_ON(!(csd->flags & CSD_FLAG_LOCK));
127
128 /*
129 * ensure we're all done before releasing data:
130 */
131 smp_store_release(&csd->flags, 0);
132 }
133
134 static DEFINE_PER_CPU_SHARED_ALIGNED(call_single_data_t, csd_data);
135
136 extern void send_call_function_single_ipi(int cpu);
137
138 void __smp_call_single_queue(int cpu, struct llist_node *node)
139 {
140 /*
141 * The list addition should be visible before sending the IPI
142 * handler locks the list to pull the entry off it because of
143 * normal cache coherency rules implied by spinlocks.
144 *
145 * If IPIs can go out of order to the cache coherency protocol
146 * in an architecture, sufficient synchronisation should be added
147 * to arch code to make it appear to obey cache coherency WRT
148 * locking and barrier primitives. Generic code isn't really
149 * equipped to do the right thing...
150 */
151 if (llist_add(node, &per_cpu(call_single_queue, cpu)))
152 send_call_function_single_ipi(cpu);
153 }
154
155 /*
156 * Insert a previously allocated call_single_data_t element
157 * for execution on the given CPU. data must already have
158 * ->func, ->info, and ->flags set.
159 */
160 static int generic_exec_single(int cpu, call_single_data_t *csd)
161 {
162 if (cpu == smp_processor_id()) {
163 smp_call_func_t func = csd->func;
164 void *info = csd->info;
165 unsigned long flags;
166
167 /*
168 * We can unlock early even for the synchronous on-stack case,
169 * since we're doing this from the same CPU..
170 */
171 csd_unlock(csd);
172 local_irq_save(flags);
173 func(info);
174 local_irq_restore(flags);
175 return 0;
176 }
177
178 if ((unsigned)cpu >= nr_cpu_ids || !cpu_online(cpu)) {
179 csd_unlock(csd);
180 return -ENXIO;
181 }
182
183 __smp_call_single_queue(cpu, &csd->llist);
184
185 return 0;
186 }
187
188 /**
189 * generic_smp_call_function_single_interrupt - Execute SMP IPI callbacks
190 *
191 * Invoked by arch to handle an IPI for call function single.
192 * Must be called with interrupts disabled.
193 */
194 void generic_smp_call_function_single_interrupt(void)
195 {
196 flush_smp_call_function_queue(true);
197 }
198
199 extern void irq_work_single(void *);
200
201 /**
202 * flush_smp_call_function_queue - Flush pending smp-call-function callbacks
203 *
204 * @warn_cpu_offline: If set to 'true', warn if callbacks were queued on an
205 * offline CPU. Skip this check if set to 'false'.
206 *
207 * Flush any pending smp-call-function callbacks queued on this CPU. This is
208 * invoked by the generic IPI handler, as well as by a CPU about to go offline,
209 * to ensure that all pending IPI callbacks are run before it goes completely
210 * offline.
211 *
212 * Loop through the call_single_queue and run all the queued callbacks.
213 * Must be called with interrupts disabled.
214 */
215 static void flush_smp_call_function_queue(bool warn_cpu_offline)
216 {
217 call_single_data_t *csd, *csd_next;
218 struct llist_node *entry, *prev;
219 struct llist_head *head;
220 static bool warned;
221
222 lockdep_assert_irqs_disabled();
223
224 head = this_cpu_ptr(&call_single_queue);
225 entry = llist_del_all(head);
226 entry = llist_reverse_order(entry);
227
228 /* There shouldn't be any pending callbacks on an offline CPU. */
229 if (unlikely(warn_cpu_offline && !cpu_online(smp_processor_id()) &&
230 !warned && !llist_empty(head))) {
231 warned = true;
232 WARN(1, "IPI on offline CPU %d\n", smp_processor_id());
233
234 /*
235 * We don't have to use the _safe() variant here
236 * because we are not invoking the IPI handlers yet.
237 */
238 llist_for_each_entry(csd, entry, llist) {
239 switch (CSD_TYPE(csd)) {
240 case CSD_TYPE_ASYNC:
241 case CSD_TYPE_SYNC:
242 case CSD_TYPE_IRQ_WORK:
243 pr_warn("IPI callback %pS sent to offline CPU\n",
244 csd->func);
245 break;
246
247 default:
248 pr_warn("IPI callback, unknown type %d, sent to offline CPU\n",
249 CSD_TYPE(csd));
250 break;
251 }
252 }
253 }
254
255 /*
256 * First; run all SYNC callbacks, people are waiting for us.
257 */
258 prev = NULL;
259 llist_for_each_entry_safe(csd, csd_next, entry, llist) {
260 /* Do we wait until *after* callback? */
261 if (CSD_TYPE(csd) == CSD_TYPE_SYNC) {
262 smp_call_func_t func = csd->func;
263 void *info = csd->info;
264
265 if (prev) {
266 prev->next = &csd_next->llist;
267 } else {
268 entry = &csd_next->llist;
269 }
270
271 func(info);
272 csd_unlock(csd);
273 } else {
274 prev = &csd->llist;
275 }
276 }
277
278 /*
279 * Second; run all !SYNC callbacks.
280 */
281 llist_for_each_entry_safe(csd, csd_next, entry, llist) {
282 int type = CSD_TYPE(csd);
283
284 if (type == CSD_TYPE_ASYNC) {
285 smp_call_func_t func = csd->func;
286 void *info = csd->info;
287
288 csd_unlock(csd);
289 func(info);
290 } else if (type == CSD_TYPE_IRQ_WORK) {
291 irq_work_single(csd);
292 }
293 }
294 }
295
296 void flush_smp_call_function_from_idle(void)
297 {
298 unsigned long flags;
299
300 if (llist_empty(this_cpu_ptr(&call_single_queue)))
301 return;
302
303 local_irq_save(flags);
304 flush_smp_call_function_queue(true);
305 local_irq_restore(flags);
306 }
307
308 /*
309 * smp_call_function_single - Run a function on a specific CPU
310 * @func: The function to run. This must be fast and non-blocking.
311 * @info: An arbitrary pointer to pass to the function.
312 * @wait: If true, wait until function has completed on other CPUs.
313 *
314 * Returns 0 on success, else a negative status code.
315 */
316 int smp_call_function_single(int cpu, smp_call_func_t func, void *info,
317 int wait)
318 {
319 call_single_data_t *csd;
320 call_single_data_t csd_stack = {
321 .flags = CSD_FLAG_LOCK | CSD_TYPE_SYNC,
322 };
323 int this_cpu;
324 int err;
325
326 /*
327 * prevent preemption and reschedule on another processor,
328 * as well as CPU removal
329 */
330 this_cpu = get_cpu();
331
332 /*
333 * Can deadlock when called with interrupts disabled.
334 * We allow cpu's that are not yet online though, as no one else can
335 * send smp call function interrupt to this cpu and as such deadlocks
336 * can't happen.
337 */
338 WARN_ON_ONCE(cpu_online(this_cpu) && irqs_disabled()
339 && !oops_in_progress);
340
341 /*
342 * When @wait we can deadlock when we interrupt between llist_add() and
343 * arch_send_call_function_ipi*(); when !@wait we can deadlock due to
344 * csd_lock() on because the interrupt context uses the same csd
345 * storage.
346 */
347 WARN_ON_ONCE(!in_task());
348
349 csd = &csd_stack;
350 if (!wait) {
351 csd = this_cpu_ptr(&csd_data);
352 csd_lock(csd);
353 }
354
355 csd->func = func;
356 csd->info = info;
357
358 err = generic_exec_single(cpu, csd);
359
360 if (wait)
361 csd_lock_wait(csd);
362
363 put_cpu();
364
365 return err;
366 }
367 EXPORT_SYMBOL(smp_call_function_single);
368
369 /**
370 * smp_call_function_single_async(): Run an asynchronous function on a
371 * specific CPU.
372 * @cpu: The CPU to run on.
373 * @csd: Pre-allocated and setup data structure
374 *
375 * Like smp_call_function_single(), but the call is asynchonous and
376 * can thus be done from contexts with disabled interrupts.
377 *
378 * The caller passes his own pre-allocated data structure
379 * (ie: embedded in an object) and is responsible for synchronizing it
380 * such that the IPIs performed on the @csd are strictly serialized.
381 *
382 * If the function is called with one csd which has not yet been
383 * processed by previous call to smp_call_function_single_async(), the
384 * function will return immediately with -EBUSY showing that the csd
385 * object is still in progress.
386 *
387 * NOTE: Be careful, there is unfortunately no current debugging facility to
388 * validate the correctness of this serialization.
389 */
390 int smp_call_function_single_async(int cpu, call_single_data_t *csd)
391 {
392 int err = 0;
393
394 preempt_disable();
395
396 if (csd->flags & CSD_FLAG_LOCK) {
397 err = -EBUSY;
398 goto out;
399 }
400
401 csd->flags = CSD_FLAG_LOCK;
402 smp_wmb();
403
404 err = generic_exec_single(cpu, csd);
405
406 out:
407 preempt_enable();
408
409 return err;
410 }
411 EXPORT_SYMBOL_GPL(smp_call_function_single_async);
412
413 /*
414 * smp_call_function_any - Run a function on any of the given cpus
415 * @mask: The mask of cpus it can run on.
416 * @func: The function to run. This must be fast and non-blocking.
417 * @info: An arbitrary pointer to pass to the function.
418 * @wait: If true, wait until function has completed.
419 *
420 * Returns 0 on success, else a negative status code (if no cpus were online).
421 *
422 * Selection preference:
423 * 1) current cpu if in @mask
424 * 2) any cpu of current node if in @mask
425 * 3) any other online cpu in @mask
426 */
427 int smp_call_function_any(const struct cpumask *mask,
428 smp_call_func_t func, void *info, int wait)
429 {
430 unsigned int cpu;
431 const struct cpumask *nodemask;
432 int ret;
433
434 /* Try for same CPU (cheapest) */
435 cpu = get_cpu();
436 if (cpumask_test_cpu(cpu, mask))
437 goto call;
438
439 /* Try for same node. */
440 nodemask = cpumask_of_node(cpu_to_node(cpu));
441 for (cpu = cpumask_first_and(nodemask, mask); cpu < nr_cpu_ids;
442 cpu = cpumask_next_and(cpu, nodemask, mask)) {
443 if (cpu_online(cpu))
444 goto call;
445 }
446
447 /* Any online will do: smp_call_function_single handles nr_cpu_ids. */
448 cpu = cpumask_any_and(mask, cpu_online_mask);
449 call:
450 ret = smp_call_function_single(cpu, func, info, wait);
451 put_cpu();
452 return ret;
453 }
454 EXPORT_SYMBOL_GPL(smp_call_function_any);
455
456 static void smp_call_function_many_cond(const struct cpumask *mask,
457 smp_call_func_t func, void *info,
458 bool wait, smp_cond_func_t cond_func)
459 {
460 struct call_function_data *cfd;
461 int cpu, next_cpu, this_cpu = smp_processor_id();
462
463 /*
464 * Can deadlock when called with interrupts disabled.
465 * We allow cpu's that are not yet online though, as no one else can
466 * send smp call function interrupt to this cpu and as such deadlocks
467 * can't happen.
468 */
469 WARN_ON_ONCE(cpu_online(this_cpu) && irqs_disabled()
470 && !oops_in_progress && !early_boot_irqs_disabled);
471
472 /*
473 * When @wait we can deadlock when we interrupt between llist_add() and
474 * arch_send_call_function_ipi*(); when !@wait we can deadlock due to
475 * csd_lock() on because the interrupt context uses the same csd
476 * storage.
477 */
478 WARN_ON_ONCE(!in_task());
479
480 /* Try to fastpath. So, what's a CPU they want? Ignoring this one. */
481 cpu = cpumask_first_and(mask, cpu_online_mask);
482 if (cpu == this_cpu)
483 cpu = cpumask_next_and(cpu, mask, cpu_online_mask);
484
485 /* No online cpus? We're done. */
486 if (cpu >= nr_cpu_ids)
487 return;
488
489 /* Do we have another CPU which isn't us? */
490 next_cpu = cpumask_next_and(cpu, mask, cpu_online_mask);
491 if (next_cpu == this_cpu)
492 next_cpu = cpumask_next_and(next_cpu, mask, cpu_online_mask);
493
494 /* Fastpath: do that cpu by itself. */
495 if (next_cpu >= nr_cpu_ids) {
496 if (!cond_func || cond_func(cpu, info))
497 smp_call_function_single(cpu, func, info, wait);
498 return;
499 }
500
501 cfd = this_cpu_ptr(&cfd_data);
502
503 cpumask_and(cfd->cpumask, mask, cpu_online_mask);
504 __cpumask_clear_cpu(this_cpu, cfd->cpumask);
505
506 /* Some callers race with other cpus changing the passed mask */
507 if (unlikely(!cpumask_weight(cfd->cpumask)))
508 return;
509
510 cpumask_clear(cfd->cpumask_ipi);
511 for_each_cpu(cpu, cfd->cpumask) {
512 call_single_data_t *csd = per_cpu_ptr(cfd->csd, cpu);
513
514 if (cond_func && !cond_func(cpu, info))
515 continue;
516
517 csd_lock(csd);
518 if (wait)
519 csd->flags |= CSD_TYPE_SYNC;
520 csd->func = func;
521 csd->info = info;
522 if (llist_add(&csd->llist, &per_cpu(call_single_queue, cpu)))
523 __cpumask_set_cpu(cpu, cfd->cpumask_ipi);
524 }
525
526 /* Send a message to all CPUs in the map */
527 arch_send_call_function_ipi_mask(cfd->cpumask_ipi);
528
529 if (wait) {
530 for_each_cpu(cpu, cfd->cpumask) {
531 call_single_data_t *csd;
532
533 csd = per_cpu_ptr(cfd->csd, cpu);
534 csd_lock_wait(csd);
535 }
536 }
537 }
538
539 /**
540 * smp_call_function_many(): Run a function on a set of other CPUs.
541 * @mask: The set of cpus to run on (only runs on online subset).
542 * @func: The function to run. This must be fast and non-blocking.
543 * @info: An arbitrary pointer to pass to the function.
544 * @wait: If true, wait (atomically) until function has completed
545 * on other CPUs.
546 *
547 * If @wait is true, then returns once @func has returned.
548 *
549 * You must not call this function with disabled interrupts or from a
550 * hardware interrupt handler or from a bottom half handler. Preemption
551 * must be disabled when calling this function.
552 */
553 void smp_call_function_many(const struct cpumask *mask,
554 smp_call_func_t func, void *info, bool wait)
555 {
556 smp_call_function_many_cond(mask, func, info, wait, NULL);
557 }
558 EXPORT_SYMBOL(smp_call_function_many);
559
560 /**
561 * smp_call_function(): Run a function on all other CPUs.
562 * @func: The function to run. This must be fast and non-blocking.
563 * @info: An arbitrary pointer to pass to the function.
564 * @wait: If true, wait (atomically) until function has completed
565 * on other CPUs.
566 *
567 * Returns 0.
568 *
569 * If @wait is true, then returns once @func has returned; otherwise
570 * it returns just before the target cpu calls @func.
571 *
572 * You must not call this function with disabled interrupts or from a
573 * hardware interrupt handler or from a bottom half handler.
574 */
575 void smp_call_function(smp_call_func_t func, void *info, int wait)
576 {
577 preempt_disable();
578 smp_call_function_many(cpu_online_mask, func, info, wait);
579 preempt_enable();
580 }
581 EXPORT_SYMBOL(smp_call_function);
582
583 /* Setup configured maximum number of CPUs to activate */
584 unsigned int setup_max_cpus = NR_CPUS;
585 EXPORT_SYMBOL(setup_max_cpus);
586
587
588 /*
589 * Setup routine for controlling SMP activation
590 *
591 * Command-line option of "nosmp" or "maxcpus=0" will disable SMP
592 * activation entirely (the MPS table probe still happens, though).
593 *
594 * Command-line option of "maxcpus=<NUM>", where <NUM> is an integer
595 * greater than 0, limits the maximum number of CPUs activated in
596 * SMP mode to <NUM>.
597 */
598
599 void __weak arch_disable_smp_support(void) { }
600
601 static int __init nosmp(char *str)
602 {
603 setup_max_cpus = 0;
604 arch_disable_smp_support();
605
606 return 0;
607 }
608
609 early_param("nosmp", nosmp);
610
611 /* this is hard limit */
612 static int __init nrcpus(char *str)
613 {
614 int nr_cpus;
615
616 get_option(&str, &nr_cpus);
617 if (nr_cpus > 0 && nr_cpus < nr_cpu_ids)
618 nr_cpu_ids = nr_cpus;
619
620 return 0;
621 }
622
623 early_param("nr_cpus", nrcpus);
624
625 static int __init maxcpus(char *str)
626 {
627 get_option(&str, &setup_max_cpus);
628 if (setup_max_cpus == 0)
629 arch_disable_smp_support();
630
631 return 0;
632 }
633
634 early_param("maxcpus", maxcpus);
635
636 /* Setup number of possible processor ids */
637 unsigned int nr_cpu_ids __read_mostly = NR_CPUS;
638 EXPORT_SYMBOL(nr_cpu_ids);
639
640 /* An arch may set nr_cpu_ids earlier if needed, so this would be redundant */
641 void __init setup_nr_cpu_ids(void)
642 {
643 nr_cpu_ids = find_last_bit(cpumask_bits(cpu_possible_mask),NR_CPUS) + 1;
644 }
645
646 /* Called by boot processor to activate the rest. */
647 void __init smp_init(void)
648 {
649 int num_nodes, num_cpus;
650
651 /*
652 * Ensure struct irq_work layout matches so that
653 * flush_smp_call_function_queue() can do horrible things.
654 */
655 BUILD_BUG_ON(offsetof(struct irq_work, llnode) !=
656 offsetof(struct __call_single_data, llist));
657 BUILD_BUG_ON(offsetof(struct irq_work, func) !=
658 offsetof(struct __call_single_data, func));
659 BUILD_BUG_ON(offsetof(struct irq_work, flags) !=
660 offsetof(struct __call_single_data, flags));
661
662 idle_threads_init();
663 cpuhp_threads_init();
664
665 pr_info("Bringing up secondary CPUs ...\n");
666
667 bringup_nonboot_cpus(setup_max_cpus);
668
669 num_nodes = num_online_nodes();
670 num_cpus = num_online_cpus();
671 pr_info("Brought up %d node%s, %d CPU%s\n",
672 num_nodes, (num_nodes > 1 ? "s" : ""),
673 num_cpus, (num_cpus > 1 ? "s" : ""));
674
675 /* Any cleanup work */
676 smp_cpus_done(setup_max_cpus);
677 }
678
679 /*
680 * Call a function on all processors. May be used during early boot while
681 * early_boot_irqs_disabled is set. Use local_irq_save/restore() instead
682 * of local_irq_disable/enable().
683 */
684 void on_each_cpu(void (*func) (void *info), void *info, int wait)
685 {
686 unsigned long flags;
687
688 preempt_disable();
689 smp_call_function(func, info, wait);
690 local_irq_save(flags);
691 func(info);
692 local_irq_restore(flags);
693 preempt_enable();
694 }
695 EXPORT_SYMBOL(on_each_cpu);
696
697 /**
698 * on_each_cpu_mask(): Run a function on processors specified by
699 * cpumask, which may include the local processor.
700 * @mask: The set of cpus to run on (only runs on online subset).
701 * @func: The function to run. This must be fast and non-blocking.
702 * @info: An arbitrary pointer to pass to the function.
703 * @wait: If true, wait (atomically) until function has completed
704 * on other CPUs.
705 *
706 * If @wait is true, then returns once @func has returned.
707 *
708 * You must not call this function with disabled interrupts or from a
709 * hardware interrupt handler or from a bottom half handler. The
710 * exception is that it may be used during early boot while
711 * early_boot_irqs_disabled is set.
712 */
713 void on_each_cpu_mask(const struct cpumask *mask, smp_call_func_t func,
714 void *info, bool wait)
715 {
716 int cpu = get_cpu();
717
718 smp_call_function_many(mask, func, info, wait);
719 if (cpumask_test_cpu(cpu, mask)) {
720 unsigned long flags;
721 local_irq_save(flags);
722 func(info);
723 local_irq_restore(flags);
724 }
725 put_cpu();
726 }
727 EXPORT_SYMBOL(on_each_cpu_mask);
728
729 /*
730 * on_each_cpu_cond(): Call a function on each processor for which
731 * the supplied function cond_func returns true, optionally waiting
732 * for all the required CPUs to finish. This may include the local
733 * processor.
734 * @cond_func: A callback function that is passed a cpu id and
735 * the the info parameter. The function is called
736 * with preemption disabled. The function should
737 * return a blooean value indicating whether to IPI
738 * the specified CPU.
739 * @func: The function to run on all applicable CPUs.
740 * This must be fast and non-blocking.
741 * @info: An arbitrary pointer to pass to both functions.
742 * @wait: If true, wait (atomically) until function has
743 * completed on other CPUs.
744 *
745 * Preemption is disabled to protect against CPUs going offline but not online.
746 * CPUs going online during the call will not be seen or sent an IPI.
747 *
748 * You must not call this function with disabled interrupts or
749 * from a hardware interrupt handler or from a bottom half handler.
750 */
751 void on_each_cpu_cond_mask(smp_cond_func_t cond_func, smp_call_func_t func,
752 void *info, bool wait, const struct cpumask *mask)
753 {
754 int cpu = get_cpu();
755
756 smp_call_function_many_cond(mask, func, info, wait, cond_func);
757 if (cpumask_test_cpu(cpu, mask) && cond_func(cpu, info)) {
758 unsigned long flags;
759
760 local_irq_save(flags);
761 func(info);
762 local_irq_restore(flags);
763 }
764 put_cpu();
765 }
766 EXPORT_SYMBOL(on_each_cpu_cond_mask);
767
768 void on_each_cpu_cond(smp_cond_func_t cond_func, smp_call_func_t func,
769 void *info, bool wait)
770 {
771 on_each_cpu_cond_mask(cond_func, func, info, wait, cpu_online_mask);
772 }
773 EXPORT_SYMBOL(on_each_cpu_cond);
774
775 static void do_nothing(void *unused)
776 {
777 }
778
779 /**
780 * kick_all_cpus_sync - Force all cpus out of idle
781 *
782 * Used to synchronize the update of pm_idle function pointer. It's
783 * called after the pointer is updated and returns after the dummy
784 * callback function has been executed on all cpus. The execution of
785 * the function can only happen on the remote cpus after they have
786 * left the idle function which had been called via pm_idle function
787 * pointer. So it's guaranteed that nothing uses the previous pointer
788 * anymore.
789 */
790 void kick_all_cpus_sync(void)
791 {
792 /* Make sure the change is visible before we kick the cpus */
793 smp_mb();
794 smp_call_function(do_nothing, NULL, 1);
795 }
796 EXPORT_SYMBOL_GPL(kick_all_cpus_sync);
797
798 /**
799 * wake_up_all_idle_cpus - break all cpus out of idle
800 * wake_up_all_idle_cpus try to break all cpus which is in idle state even
801 * including idle polling cpus, for non-idle cpus, we will do nothing
802 * for them.
803 */
804 void wake_up_all_idle_cpus(void)
805 {
806 int cpu;
807
808 preempt_disable();
809 for_each_online_cpu(cpu) {
810 if (cpu == smp_processor_id())
811 continue;
812
813 wake_up_if_idle(cpu);
814 }
815 preempt_enable();
816 }
817 EXPORT_SYMBOL_GPL(wake_up_all_idle_cpus);
818
819 /**
820 * smp_call_on_cpu - Call a function on a specific cpu
821 *
822 * Used to call a function on a specific cpu and wait for it to return.
823 * Optionally make sure the call is done on a specified physical cpu via vcpu
824 * pinning in order to support virtualized environments.
825 */
826 struct smp_call_on_cpu_struct {
827 struct work_struct work;
828 struct completion done;
829 int (*func)(void *);
830 void *data;
831 int ret;
832 int cpu;
833 };
834
835 static void smp_call_on_cpu_callback(struct work_struct *work)
836 {
837 struct smp_call_on_cpu_struct *sscs;
838
839 sscs = container_of(work, struct smp_call_on_cpu_struct, work);
840 if (sscs->cpu >= 0)
841 hypervisor_pin_vcpu(sscs->cpu);
842 sscs->ret = sscs->func(sscs->data);
843 if (sscs->cpu >= 0)
844 hypervisor_pin_vcpu(-1);
845
846 complete(&sscs->done);
847 }
848
849 int smp_call_on_cpu(unsigned int cpu, int (*func)(void *), void *par, bool phys)
850 {
851 struct smp_call_on_cpu_struct sscs = {
852 .done = COMPLETION_INITIALIZER_ONSTACK(sscs.done),
853 .func = func,
854 .data = par,
855 .cpu = phys ? cpu : -1,
856 };
857
858 INIT_WORK_ONSTACK(&sscs.work, smp_call_on_cpu_callback);
859
860 if (cpu >= nr_cpu_ids || !cpu_online(cpu))
861 return -ENXIO;
862
863 queue_work_on(cpu, system_wq, &sscs.work);
864 wait_for_completion(&sscs.done);
865
866 return sscs.ret;
867 }
868 EXPORT_SYMBOL_GPL(smp_call_on_cpu);