This source file includes following definitions.
- cpu_stop_init_done
- cpu_stop_signal_done
- __cpu_stop_queue_work
- cpu_stop_queue_work
- stop_one_cpu
- set_state
- ack_state
- stop_machine_yield
- multi_cpu_stop
- cpu_stop_queue_two_works
- stop_two_cpus
- stop_one_cpu_nowait
- queue_stop_cpus_work
- __stop_cpus
- stop_cpus
- try_stop_cpus
- cpu_stop_should_run
- cpu_stopper_thread
- stop_machine_park
- cpu_stop_create
- cpu_stop_park
- stop_machine_unpark
- cpu_stop_init
- stop_machine_cpuslocked
- stop_machine
- stop_machine_from_inactive_cpu
1
2
3
4
5
6
7
8
9
10 #include <linux/compiler.h>
11 #include <linux/completion.h>
12 #include <linux/cpu.h>
13 #include <linux/init.h>
14 #include <linux/kthread.h>
15 #include <linux/export.h>
16 #include <linux/percpu.h>
17 #include <linux/sched.h>
18 #include <linux/stop_machine.h>
19 #include <linux/interrupt.h>
20 #include <linux/kallsyms.h>
21 #include <linux/smpboot.h>
22 #include <linux/atomic.h>
23 #include <linux/nmi.h>
24 #include <linux/sched/wake_q.h>
25
26
27
28
29
30 struct cpu_stop_done {
31 atomic_t nr_todo;
32 int ret;
33 struct completion completion;
34 };
35
36
37 struct cpu_stopper {
38 struct task_struct *thread;
39
40 raw_spinlock_t lock;
41 bool enabled;
42 struct list_head works;
43
44 struct cpu_stop_work stop_work;
45 };
46
47 static DEFINE_PER_CPU(struct cpu_stopper, cpu_stopper);
48 static bool stop_machine_initialized = false;
49
50
51 static DEFINE_MUTEX(stop_cpus_mutex);
52 static bool stop_cpus_in_progress;
53
54 static void cpu_stop_init_done(struct cpu_stop_done *done, unsigned int nr_todo)
55 {
56 memset(done, 0, sizeof(*done));
57 atomic_set(&done->nr_todo, nr_todo);
58 init_completion(&done->completion);
59 }
60
61
62 static void cpu_stop_signal_done(struct cpu_stop_done *done)
63 {
64 if (atomic_dec_and_test(&done->nr_todo))
65 complete(&done->completion);
66 }
67
68 static void __cpu_stop_queue_work(struct cpu_stopper *stopper,
69 struct cpu_stop_work *work,
70 struct wake_q_head *wakeq)
71 {
72 list_add_tail(&work->list, &stopper->works);
73 wake_q_add(wakeq, stopper->thread);
74 }
75
76
77 static bool cpu_stop_queue_work(unsigned int cpu, struct cpu_stop_work *work)
78 {
79 struct cpu_stopper *stopper = &per_cpu(cpu_stopper, cpu);
80 DEFINE_WAKE_Q(wakeq);
81 unsigned long flags;
82 bool enabled;
83
84 preempt_disable();
85 raw_spin_lock_irqsave(&stopper->lock, flags);
86 enabled = stopper->enabled;
87 if (enabled)
88 __cpu_stop_queue_work(stopper, work, &wakeq);
89 else if (work->done)
90 cpu_stop_signal_done(work->done);
91 raw_spin_unlock_irqrestore(&stopper->lock, flags);
92
93 wake_up_q(&wakeq);
94 preempt_enable();
95
96 return enabled;
97 }
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123 int stop_one_cpu(unsigned int cpu, cpu_stop_fn_t fn, void *arg)
124 {
125 struct cpu_stop_done done;
126 struct cpu_stop_work work = { .fn = fn, .arg = arg, .done = &done };
127
128 cpu_stop_init_done(&done, 1);
129 if (!cpu_stop_queue_work(cpu, &work))
130 return -ENOENT;
131
132
133
134
135 cond_resched();
136 wait_for_completion(&done.completion);
137 return done.ret;
138 }
139
140
141 enum multi_stop_state {
142
143 MULTI_STOP_NONE,
144
145 MULTI_STOP_PREPARE,
146
147 MULTI_STOP_DISABLE_IRQ,
148
149 MULTI_STOP_RUN,
150
151 MULTI_STOP_EXIT,
152 };
153
154 struct multi_stop_data {
155 cpu_stop_fn_t fn;
156 void *data;
157
158 unsigned int num_threads;
159 const struct cpumask *active_cpus;
160
161 enum multi_stop_state state;
162 atomic_t thread_ack;
163 };
164
165 static void set_state(struct multi_stop_data *msdata,
166 enum multi_stop_state newstate)
167 {
168
169 atomic_set(&msdata->thread_ack, msdata->num_threads);
170 smp_wmb();
171 WRITE_ONCE(msdata->state, newstate);
172 }
173
174
175 static void ack_state(struct multi_stop_data *msdata)
176 {
177 if (atomic_dec_and_test(&msdata->thread_ack))
178 set_state(msdata, msdata->state + 1);
179 }
180
181 void __weak stop_machine_yield(const struct cpumask *cpumask)
182 {
183 cpu_relax();
184 }
185
186
187 static int multi_cpu_stop(void *data)
188 {
189 struct multi_stop_data *msdata = data;
190 enum multi_stop_state newstate, curstate = MULTI_STOP_NONE;
191 int cpu = smp_processor_id(), err = 0;
192 const struct cpumask *cpumask;
193 unsigned long flags;
194 bool is_active;
195
196
197
198
199
200 local_save_flags(flags);
201
202 if (!msdata->active_cpus) {
203 cpumask = cpu_online_mask;
204 is_active = cpu == cpumask_first(cpumask);
205 } else {
206 cpumask = msdata->active_cpus;
207 is_active = cpumask_test_cpu(cpu, cpumask);
208 }
209
210
211 do {
212
213 stop_machine_yield(cpumask);
214 newstate = READ_ONCE(msdata->state);
215 if (newstate != curstate) {
216 curstate = newstate;
217 switch (curstate) {
218 case MULTI_STOP_DISABLE_IRQ:
219 local_irq_disable();
220 hard_irq_disable();
221 break;
222 case MULTI_STOP_RUN:
223 if (is_active)
224 err = msdata->fn(msdata->data);
225 break;
226 default:
227 break;
228 }
229 ack_state(msdata);
230 } else if (curstate > MULTI_STOP_PREPARE) {
231
232
233
234
235
236 touch_nmi_watchdog();
237 }
238 } while (curstate != MULTI_STOP_EXIT);
239
240 local_irq_restore(flags);
241 return err;
242 }
243
244 static int cpu_stop_queue_two_works(int cpu1, struct cpu_stop_work *work1,
245 int cpu2, struct cpu_stop_work *work2)
246 {
247 struct cpu_stopper *stopper1 = per_cpu_ptr(&cpu_stopper, cpu1);
248 struct cpu_stopper *stopper2 = per_cpu_ptr(&cpu_stopper, cpu2);
249 DEFINE_WAKE_Q(wakeq);
250 int err;
251
252 retry:
253
254
255
256
257
258
259
260 preempt_disable();
261 raw_spin_lock_irq(&stopper1->lock);
262 raw_spin_lock_nested(&stopper2->lock, SINGLE_DEPTH_NESTING);
263
264 if (!stopper1->enabled || !stopper2->enabled) {
265 err = -ENOENT;
266 goto unlock;
267 }
268
269
270
271
272
273
274
275
276
277
278
279 if (unlikely(stop_cpus_in_progress)) {
280 err = -EDEADLK;
281 goto unlock;
282 }
283
284 err = 0;
285 __cpu_stop_queue_work(stopper1, work1, &wakeq);
286 __cpu_stop_queue_work(stopper2, work2, &wakeq);
287
288 unlock:
289 raw_spin_unlock(&stopper2->lock);
290 raw_spin_unlock_irq(&stopper1->lock);
291
292 if (unlikely(err == -EDEADLK)) {
293 preempt_enable();
294
295 while (stop_cpus_in_progress)
296 cpu_relax();
297
298 goto retry;
299 }
300
301 wake_up_q(&wakeq);
302 preempt_enable();
303
304 return err;
305 }
306
307
308
309
310
311
312
313
314
315
316
317 int stop_two_cpus(unsigned int cpu1, unsigned int cpu2, cpu_stop_fn_t fn, void *arg)
318 {
319 struct cpu_stop_done done;
320 struct cpu_stop_work work1, work2;
321 struct multi_stop_data msdata;
322
323 msdata = (struct multi_stop_data){
324 .fn = fn,
325 .data = arg,
326 .num_threads = 2,
327 .active_cpus = cpumask_of(cpu1),
328 };
329
330 work1 = work2 = (struct cpu_stop_work){
331 .fn = multi_cpu_stop,
332 .arg = &msdata,
333 .done = &done
334 };
335
336 cpu_stop_init_done(&done, 2);
337 set_state(&msdata, MULTI_STOP_PREPARE);
338
339 if (cpu1 > cpu2)
340 swap(cpu1, cpu2);
341 if (cpu_stop_queue_two_works(cpu1, &work1, cpu2, &work2))
342 return -ENOENT;
343
344 wait_for_completion(&done.completion);
345 return done.ret;
346 }
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366 bool stop_one_cpu_nowait(unsigned int cpu, cpu_stop_fn_t fn, void *arg,
367 struct cpu_stop_work *work_buf)
368 {
369 *work_buf = (struct cpu_stop_work){ .fn = fn, .arg = arg, };
370 return cpu_stop_queue_work(cpu, work_buf);
371 }
372
373 static bool queue_stop_cpus_work(const struct cpumask *cpumask,
374 cpu_stop_fn_t fn, void *arg,
375 struct cpu_stop_done *done)
376 {
377 struct cpu_stop_work *work;
378 unsigned int cpu;
379 bool queued = false;
380
381
382
383
384
385
386 preempt_disable();
387 stop_cpus_in_progress = true;
388 barrier();
389 for_each_cpu(cpu, cpumask) {
390 work = &per_cpu(cpu_stopper.stop_work, cpu);
391 work->fn = fn;
392 work->arg = arg;
393 work->done = done;
394 if (cpu_stop_queue_work(cpu, work))
395 queued = true;
396 }
397 barrier();
398 stop_cpus_in_progress = false;
399 preempt_enable();
400
401 return queued;
402 }
403
404 static int __stop_cpus(const struct cpumask *cpumask,
405 cpu_stop_fn_t fn, void *arg)
406 {
407 struct cpu_stop_done done;
408
409 cpu_stop_init_done(&done, cpumask_weight(cpumask));
410 if (!queue_stop_cpus_work(cpumask, fn, arg, &done))
411 return -ENOENT;
412 wait_for_completion(&done.completion);
413 return done.ret;
414 }
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444 int stop_cpus(const struct cpumask *cpumask, cpu_stop_fn_t fn, void *arg)
445 {
446 int ret;
447
448
449 mutex_lock(&stop_cpus_mutex);
450 ret = __stop_cpus(cpumask, fn, arg);
451 mutex_unlock(&stop_cpus_mutex);
452 return ret;
453 }
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473 int try_stop_cpus(const struct cpumask *cpumask, cpu_stop_fn_t fn, void *arg)
474 {
475 int ret;
476
477
478 if (!mutex_trylock(&stop_cpus_mutex))
479 return -EAGAIN;
480 ret = __stop_cpus(cpumask, fn, arg);
481 mutex_unlock(&stop_cpus_mutex);
482 return ret;
483 }
484
485 static int cpu_stop_should_run(unsigned int cpu)
486 {
487 struct cpu_stopper *stopper = &per_cpu(cpu_stopper, cpu);
488 unsigned long flags;
489 int run;
490
491 raw_spin_lock_irqsave(&stopper->lock, flags);
492 run = !list_empty(&stopper->works);
493 raw_spin_unlock_irqrestore(&stopper->lock, flags);
494 return run;
495 }
496
497 static void cpu_stopper_thread(unsigned int cpu)
498 {
499 struct cpu_stopper *stopper = &per_cpu(cpu_stopper, cpu);
500 struct cpu_stop_work *work;
501
502 repeat:
503 work = NULL;
504 raw_spin_lock_irq(&stopper->lock);
505 if (!list_empty(&stopper->works)) {
506 work = list_first_entry(&stopper->works,
507 struct cpu_stop_work, list);
508 list_del_init(&work->list);
509 }
510 raw_spin_unlock_irq(&stopper->lock);
511
512 if (work) {
513 cpu_stop_fn_t fn = work->fn;
514 void *arg = work->arg;
515 struct cpu_stop_done *done = work->done;
516 int ret;
517
518
519 preempt_count_inc();
520 ret = fn(arg);
521 if (done) {
522 if (ret)
523 done->ret = ret;
524 cpu_stop_signal_done(done);
525 }
526 preempt_count_dec();
527 WARN_ONCE(preempt_count(),
528 "cpu_stop: %ps(%p) leaked preempt count\n", fn, arg);
529 goto repeat;
530 }
531 }
532
533 void stop_machine_park(int cpu)
534 {
535 struct cpu_stopper *stopper = &per_cpu(cpu_stopper, cpu);
536
537
538
539
540
541 stopper->enabled = false;
542 kthread_park(stopper->thread);
543 }
544
545 extern void sched_set_stop_task(int cpu, struct task_struct *stop);
546
547 static void cpu_stop_create(unsigned int cpu)
548 {
549 sched_set_stop_task(cpu, per_cpu(cpu_stopper.thread, cpu));
550 }
551
552 static void cpu_stop_park(unsigned int cpu)
553 {
554 struct cpu_stopper *stopper = &per_cpu(cpu_stopper, cpu);
555
556 WARN_ON(!list_empty(&stopper->works));
557 }
558
559 void stop_machine_unpark(int cpu)
560 {
561 struct cpu_stopper *stopper = &per_cpu(cpu_stopper, cpu);
562
563 stopper->enabled = true;
564 kthread_unpark(stopper->thread);
565 }
566
567 static struct smp_hotplug_thread cpu_stop_threads = {
568 .store = &cpu_stopper.thread,
569 .thread_should_run = cpu_stop_should_run,
570 .thread_fn = cpu_stopper_thread,
571 .thread_comm = "migration/%u",
572 .create = cpu_stop_create,
573 .park = cpu_stop_park,
574 .selfparking = true,
575 };
576
577 static int __init cpu_stop_init(void)
578 {
579 unsigned int cpu;
580
581 for_each_possible_cpu(cpu) {
582 struct cpu_stopper *stopper = &per_cpu(cpu_stopper, cpu);
583
584 raw_spin_lock_init(&stopper->lock);
585 INIT_LIST_HEAD(&stopper->works);
586 }
587
588 BUG_ON(smpboot_register_percpu_thread(&cpu_stop_threads));
589 stop_machine_unpark(raw_smp_processor_id());
590 stop_machine_initialized = true;
591 return 0;
592 }
593 early_initcall(cpu_stop_init);
594
595 int stop_machine_cpuslocked(cpu_stop_fn_t fn, void *data,
596 const struct cpumask *cpus)
597 {
598 struct multi_stop_data msdata = {
599 .fn = fn,
600 .data = data,
601 .num_threads = num_online_cpus(),
602 .active_cpus = cpus,
603 };
604
605 lockdep_assert_cpus_held();
606
607 if (!stop_machine_initialized) {
608
609
610
611
612
613 unsigned long flags;
614 int ret;
615
616 WARN_ON_ONCE(msdata.num_threads != 1);
617
618 local_irq_save(flags);
619 hard_irq_disable();
620 ret = (*fn)(data);
621 local_irq_restore(flags);
622
623 return ret;
624 }
625
626
627 set_state(&msdata, MULTI_STOP_PREPARE);
628 return stop_cpus(cpu_online_mask, multi_cpu_stop, &msdata);
629 }
630
631 int stop_machine(cpu_stop_fn_t fn, void *data, const struct cpumask *cpus)
632 {
633 int ret;
634
635
636 cpus_read_lock();
637 ret = stop_machine_cpuslocked(fn, data, cpus);
638 cpus_read_unlock();
639 return ret;
640 }
641 EXPORT_SYMBOL_GPL(stop_machine);
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665 int stop_machine_from_inactive_cpu(cpu_stop_fn_t fn, void *data,
666 const struct cpumask *cpus)
667 {
668 struct multi_stop_data msdata = { .fn = fn, .data = data,
669 .active_cpus = cpus };
670 struct cpu_stop_done done;
671 int ret;
672
673
674 BUG_ON(cpu_active(raw_smp_processor_id()));
675 msdata.num_threads = num_active_cpus() + 1;
676
677
678 while (!mutex_trylock(&stop_cpus_mutex))
679 cpu_relax();
680
681
682 set_state(&msdata, MULTI_STOP_PREPARE);
683 cpu_stop_init_done(&done, num_active_cpus());
684 queue_stop_cpus_work(cpu_active_mask, multi_cpu_stop, &msdata,
685 &done);
686 ret = multi_cpu_stop(&msdata);
687
688
689 while (!completion_done(&done.completion))
690 cpu_relax();
691
692 mutex_unlock(&stop_cpus_mutex);
693 return ret ?: done.ret;
694 }