Merge tag 'backlight-next-6.4' of git://git.kernel.org/pub/scm/linux/kernel/git/lee...
[linux-block.git] / kernel / softirq.c
CommitLineData
767a67b0 1// SPDX-License-Identifier: GPL-2.0-only
1da177e4
LT
2/*
3 * linux/kernel/softirq.c
4 *
5 * Copyright (C) 1992 Linus Torvalds
6 *
b10db7f0 7 * Rewritten. Old one was good in 2.2, but in 2.3 it was immoral. --ANK (990903)
1da177e4
LT
8 */
9
40322764
JP
10#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
11
9984de1a 12#include <linux/export.h>
1da177e4
LT
13#include <linux/kernel_stat.h>
14#include <linux/interrupt.h>
15#include <linux/init.h>
8b1c04ac 16#include <linux/local_lock.h>
1da177e4
LT
17#include <linux/mm.h>
18#include <linux/notifier.h>
19#include <linux/percpu.h>
20#include <linux/cpu.h>
83144186 21#include <linux/freezer.h>
1da177e4
LT
22#include <linux/kthread.h>
23#include <linux/rcupdate.h>
7e49fcce 24#include <linux/ftrace.h>
78eef01b 25#include <linux/smp.h>
3e339b5d 26#include <linux/smpboot.h>
79bf2bb3 27#include <linux/tick.h>
d532676c 28#include <linux/irq.h>
da044747 29#include <linux/wait_bit.h>
a0e39ed3 30
db1cc7ae
TG
31#include <asm/softirq_stack.h>
32
a0e39ed3 33#define CREATE_TRACE_POINTS
ad8d75ff 34#include <trace/events/irq.h>
1da177e4 35
1da177e4
LT
36/*
37 - No shared variables, all the data are CPU local.
38 - If a softirq needs serialization, let it serialize itself
39 by its own spinlocks.
40 - Even if softirq is serialized, only local cpu is marked for
41 execution. Hence, we get something sort of weak cpu binding.
42 Though it is still not clear, will it result in better locality
43 or will not.
44
45 Examples:
46 - NET RX softirq. It is multithreaded and does not require
47 any global serialization.
48 - NET TX softirq. It kicks software netdevice queues, hence
49 it is logically serialized per device, but this serialization
50 is invisible to common code.
51 - Tasklets: serialized wrt itself.
52 */
53
54#ifndef __ARCH_IRQ_STAT
0f6f47ba
FW
55DEFINE_PER_CPU_ALIGNED(irq_cpustat_t, irq_stat);
56EXPORT_PER_CPU_SYMBOL(irq_stat);
1da177e4
LT
57#endif
58
978b0116 59static struct softirq_action softirq_vec[NR_SOFTIRQS] __cacheline_aligned_in_smp;
1da177e4 60
4dd53d89 61DEFINE_PER_CPU(struct task_struct *, ksoftirqd);
1da177e4 62
ce85b4f2 63const char * const softirq_to_name[NR_SOFTIRQS] = {
f660f606 64 "HI", "TIMER", "NET_TX", "NET_RX", "BLOCK", "IRQ_POLL",
09223371 65 "TASKLET", "SCHED", "HRTIMER", "RCU"
5d592b44
JB
66};
67
1da177e4
LT
68/*
69 * we cannot loop indefinitely here to avoid userspace starvation,
70 * but we also don't want to introduce a worst case 1/HZ latency
71 * to the pending events, so lets the scheduler to balance
72 * the softirq load for us.
73 */
676cb02d 74static void wakeup_softirqd(void)
1da177e4
LT
75{
76 /* Interrupts are disabled: no need to stop preemption */
909ea964 77 struct task_struct *tsk = __this_cpu_read(ksoftirqd);
1da177e4 78
37aadc68 79 if (tsk)
1da177e4
LT
80 wake_up_process(tsk);
81}
82
4cd13c21
ED
83/*
84 * If ksoftirqd is scheduled, we do not want to process pending softirqs
3c53776e
LT
85 * right now. Let ksoftirqd handle this at its own rate, to get fairness,
86 * unless we're doing some of the synchronous softirqs.
4cd13c21 87 */
3c53776e
LT
88#define SOFTIRQ_NOW_MASK ((1 << HI_SOFTIRQ) | (1 << TASKLET_SOFTIRQ))
89static bool ksoftirqd_running(unsigned long pending)
4cd13c21
ED
90{
91 struct task_struct *tsk = __this_cpu_read(ksoftirqd);
92
3c53776e
LT
93 if (pending & SOFTIRQ_NOW_MASK)
94 return false;
b03fbd4f 95 return tsk && task_is_running(tsk) && !__kthread_should_park(tsk);
4cd13c21
ED
96}
97
ae9ef589
TG
98#ifdef CONFIG_TRACE_IRQFLAGS
99DEFINE_PER_CPU(int, hardirqs_enabled);
100DEFINE_PER_CPU(int, hardirq_context);
101EXPORT_PER_CPU_SYMBOL_GPL(hardirqs_enabled);
102EXPORT_PER_CPU_SYMBOL_GPL(hardirq_context);
103#endif
104
75e1056f 105/*
8b1c04ac
TG
106 * SOFTIRQ_OFFSET usage:
107 *
108 * On !RT kernels 'count' is the preempt counter, on RT kernels this applies
109 * to a per CPU counter and to task::softirqs_disabled_cnt.
110 *
111 * - count is changed by SOFTIRQ_OFFSET on entering or leaving softirq
112 * processing.
113 *
114 * - count is changed by SOFTIRQ_DISABLE_OFFSET (= 2 * SOFTIRQ_OFFSET)
75e1056f 115 * on local_bh_disable or local_bh_enable.
8b1c04ac 116 *
75e1056f
VP
117 * This lets us distinguish between whether we are currently processing
118 * softirq and whether we just have bh disabled.
119 */
8b1c04ac
TG
120#ifdef CONFIG_PREEMPT_RT
121
122/*
123 * RT accounts for BH disabled sections in task::softirqs_disabled_cnt and
124 * also in per CPU softirq_ctrl::cnt. This is necessary to allow tasks in a
125 * softirq disabled section to be preempted.
126 *
127 * The per task counter is used for softirq_count(), in_softirq() and
128 * in_serving_softirqs() because these counts are only valid when the task
129 * holding softirq_ctrl::lock is running.
130 *
131 * The per CPU counter prevents pointless wakeups of ksoftirqd in case that
132 * the task which is in a softirq disabled section is preempted or blocks.
133 */
134struct softirq_ctrl {
135 local_lock_t lock;
136 int cnt;
137};
138
139static DEFINE_PER_CPU(struct softirq_ctrl, softirq_ctrl) = {
140 .lock = INIT_LOCAL_LOCK(softirq_ctrl.lock),
141};
142
47c218dc
TG
143/**
144 * local_bh_blocked() - Check for idle whether BH processing is blocked
145 *
146 * Returns false if the per CPU softirq::cnt is 0 otherwise true.
147 *
148 * This is invoked from the idle task to guard against false positive
149 * softirq pending warnings, which would happen when the task which holds
150 * softirq_ctrl::lock was the only running task on the CPU and blocks on
151 * some other lock.
152 */
153bool local_bh_blocked(void)
154{
155 return __this_cpu_read(softirq_ctrl.cnt) != 0;
156}
157
8b1c04ac
TG
158void __local_bh_disable_ip(unsigned long ip, unsigned int cnt)
159{
160 unsigned long flags;
161 int newcnt;
162
163 WARN_ON_ONCE(in_hardirq());
164
165 /* First entry of a task into a BH disabled section? */
166 if (!current->softirq_disable_cnt) {
167 if (preemptible()) {
168 local_lock(&softirq_ctrl.lock);
169 /* Required to meet the RCU bottomhalf requirements. */
170 rcu_read_lock();
171 } else {
172 DEBUG_LOCKS_WARN_ON(this_cpu_read(softirq_ctrl.cnt));
173 }
174 }
175
176 /*
177 * Track the per CPU softirq disabled state. On RT this is per CPU
178 * state to allow preemption of bottom half disabled sections.
179 */
180 newcnt = __this_cpu_add_return(softirq_ctrl.cnt, cnt);
181 /*
182 * Reflect the result in the task state to prevent recursion on the
183 * local lock and to make softirq_count() & al work.
184 */
185 current->softirq_disable_cnt = newcnt;
186
187 if (IS_ENABLED(CONFIG_TRACE_IRQFLAGS) && newcnt == cnt) {
188 raw_local_irq_save(flags);
189 lockdep_softirqs_off(ip);
190 raw_local_irq_restore(flags);
191 }
192}
193EXPORT_SYMBOL(__local_bh_disable_ip);
194
195static void __local_bh_enable(unsigned int cnt, bool unlock)
196{
197 unsigned long flags;
198 int newcnt;
199
200 DEBUG_LOCKS_WARN_ON(current->softirq_disable_cnt !=
201 this_cpu_read(softirq_ctrl.cnt));
202
203 if (IS_ENABLED(CONFIG_TRACE_IRQFLAGS) && softirq_count() == cnt) {
204 raw_local_irq_save(flags);
205 lockdep_softirqs_on(_RET_IP_);
206 raw_local_irq_restore(flags);
207 }
208
209 newcnt = __this_cpu_sub_return(softirq_ctrl.cnt, cnt);
210 current->softirq_disable_cnt = newcnt;
211
212 if (!newcnt && unlock) {
213 rcu_read_unlock();
214 local_unlock(&softirq_ctrl.lock);
215 }
216}
217
218void __local_bh_enable_ip(unsigned long ip, unsigned int cnt)
219{
220 bool preempt_on = preemptible();
221 unsigned long flags;
222 u32 pending;
223 int curcnt;
224
fe13889c 225 WARN_ON_ONCE(in_hardirq());
8b1c04ac
TG
226 lockdep_assert_irqs_enabled();
227
228 local_irq_save(flags);
229 curcnt = __this_cpu_read(softirq_ctrl.cnt);
230
231 /*
232 * If this is not reenabling soft interrupts, no point in trying to
233 * run pending ones.
234 */
235 if (curcnt != cnt)
236 goto out;
237
238 pending = local_softirq_pending();
239 if (!pending || ksoftirqd_running(pending))
240 goto out;
241
242 /*
243 * If this was called from non preemptible context, wake up the
244 * softirq daemon.
245 */
246 if (!preempt_on) {
247 wakeup_softirqd();
248 goto out;
249 }
250
251 /*
252 * Adjust softirq count to SOFTIRQ_OFFSET which makes
253 * in_serving_softirq() become true.
254 */
255 cnt = SOFTIRQ_OFFSET;
256 __local_bh_enable(cnt, false);
257 __do_softirq();
258
259out:
260 __local_bh_enable(cnt, preempt_on);
261 local_irq_restore(flags);
262}
263EXPORT_SYMBOL(__local_bh_enable_ip);
75e1056f 264
de30a2b3 265/*
8b1c04ac
TG
266 * Invoked from ksoftirqd_run() outside of the interrupt disabled section
267 * to acquire the per CPU local lock for reentrancy protection.
268 */
269static inline void ksoftirqd_run_begin(void)
270{
271 __local_bh_disable_ip(_RET_IP_, SOFTIRQ_OFFSET);
272 local_irq_disable();
273}
274
275/* Counterpart to ksoftirqd_run_begin() */
276static inline void ksoftirqd_run_end(void)
277{
278 __local_bh_enable(SOFTIRQ_OFFSET, true);
279 WARN_ON_ONCE(in_interrupt());
280 local_irq_enable();
281}
282
283static inline void softirq_handle_begin(void) { }
284static inline void softirq_handle_end(void) { }
285
286static inline bool should_wake_ksoftirqd(void)
287{
288 return !this_cpu_read(softirq_ctrl.cnt);
289}
290
291static inline void invoke_softirq(void)
292{
293 if (should_wake_ksoftirqd())
294 wakeup_softirqd();
295}
296
1a90bfd2
SAS
297/*
298 * flush_smp_call_function_queue() can raise a soft interrupt in a function
299 * call. On RT kernels this is undesired and the only known functionality
300 * in the block layer which does this is disabled on RT. If soft interrupts
301 * get raised which haven't been raised before the flush, warn so it can be
302 * investigated.
303 */
304void do_softirq_post_smp_call_flush(unsigned int was_pending)
305{
306 if (WARN_ON_ONCE(was_pending != local_softirq_pending()))
307 invoke_softirq();
308}
309
8b1c04ac
TG
310#else /* CONFIG_PREEMPT_RT */
311
312/*
313 * This one is for softirq.c-internal use, where hardirqs are disabled
ae9ef589 314 * legitimately:
de30a2b3 315 */
8b1c04ac 316#ifdef CONFIG_TRACE_IRQFLAGS
0bd3a173 317void __local_bh_disable_ip(unsigned long ip, unsigned int cnt)
de30a2b3
IM
318{
319 unsigned long flags;
320
fe13889c 321 WARN_ON_ONCE(in_hardirq());
de30a2b3
IM
322
323 raw_local_irq_save(flags);
7e49fcce 324 /*
bdb43806 325 * The preempt tracer hooks into preempt_count_add and will break
7e49fcce
SR
326 * lockdep because it calls back into lockdep after SOFTIRQ_OFFSET
327 * is set and before current->softirq_enabled is cleared.
328 * We must manually increment preempt_count here and manually
329 * call the trace_preempt_off later.
330 */
bdb43806 331 __preempt_count_add(cnt);
de30a2b3
IM
332 /*
333 * Were softirqs turned off above:
334 */
9ea4c380 335 if (softirq_count() == (cnt & SOFTIRQ_MASK))
0d38453c 336 lockdep_softirqs_off(ip);
de30a2b3 337 raw_local_irq_restore(flags);
7e49fcce 338
0f1ba9a2
HC
339 if (preempt_count() == cnt) {
340#ifdef CONFIG_DEBUG_PREEMPT
f904f582 341 current->preempt_disable_ip = get_lock_parent_ip();
0f1ba9a2 342#endif
f904f582 343 trace_preempt_off(CALLER_ADDR0, get_lock_parent_ip());
0f1ba9a2 344 }
de30a2b3 345}
0bd3a173 346EXPORT_SYMBOL(__local_bh_disable_ip);
3c829c36 347#endif /* CONFIG_TRACE_IRQFLAGS */
de30a2b3 348
75e1056f
VP
349static void __local_bh_enable(unsigned int cnt)
350{
f71b74bc 351 lockdep_assert_irqs_disabled();
75e1056f 352
1a63dcd8
JFG
353 if (preempt_count() == cnt)
354 trace_preempt_on(CALLER_ADDR0, get_lock_parent_ip());
355
9ea4c380 356 if (softirq_count() == (cnt & SOFTIRQ_MASK))
0d38453c 357 lockdep_softirqs_on(_RET_IP_);
1a63dcd8
JFG
358
359 __preempt_count_sub(cnt);
75e1056f
VP
360}
361
de30a2b3 362/*
c3442697 363 * Special-case - softirqs can safely be enabled by __do_softirq(),
de30a2b3
IM
364 * without processing still-pending softirqs:
365 */
366void _local_bh_enable(void)
367{
fe13889c 368 WARN_ON_ONCE(in_hardirq());
75e1056f 369 __local_bh_enable(SOFTIRQ_DISABLE_OFFSET);
de30a2b3 370}
de30a2b3
IM
371EXPORT_SYMBOL(_local_bh_enable);
372
0bd3a173 373void __local_bh_enable_ip(unsigned long ip, unsigned int cnt)
de30a2b3 374{
fe13889c 375 WARN_ON_ONCE(in_hardirq());
f71b74bc 376 lockdep_assert_irqs_enabled();
3c829c36 377#ifdef CONFIG_TRACE_IRQFLAGS
0f476b6d 378 local_irq_disable();
3c829c36 379#endif
de30a2b3
IM
380 /*
381 * Are softirqs going to be turned on now:
382 */
75e1056f 383 if (softirq_count() == SOFTIRQ_DISABLE_OFFSET)
0d38453c 384 lockdep_softirqs_on(ip);
de30a2b3
IM
385 /*
386 * Keep preemption disabled until we are done with
387 * softirq processing:
ce85b4f2 388 */
91ea62d5 389 __preempt_count_sub(cnt - 1);
de30a2b3 390
0bed698a
FW
391 if (unlikely(!in_interrupt() && local_softirq_pending())) {
392 /*
393 * Run softirq if any pending. And do it in its own stack
394 * as we may be calling this deep in a task call stack already.
395 */
de30a2b3 396 do_softirq();
0bed698a 397 }
de30a2b3 398
bdb43806 399 preempt_count_dec();
3c829c36 400#ifdef CONFIG_TRACE_IRQFLAGS
0f476b6d 401 local_irq_enable();
3c829c36 402#endif
de30a2b3
IM
403 preempt_check_resched();
404}
0bd3a173 405EXPORT_SYMBOL(__local_bh_enable_ip);
de30a2b3 406
f02fc963
TG
407static inline void softirq_handle_begin(void)
408{
409 __local_bh_disable_ip(_RET_IP_, SOFTIRQ_OFFSET);
410}
411
412static inline void softirq_handle_end(void)
413{
414 __local_bh_enable(SOFTIRQ_OFFSET);
415 WARN_ON_ONCE(in_interrupt());
416}
417
418static inline void ksoftirqd_run_begin(void)
419{
420 local_irq_disable();
421}
422
423static inline void ksoftirqd_run_end(void)
424{
425 local_irq_enable();
426}
427
428static inline bool should_wake_ksoftirqd(void)
429{
430 return true;
431}
432
ae9ef589
TG
433static inline void invoke_softirq(void)
434{
435 if (ksoftirqd_running(local_softirq_pending()))
436 return;
437
91cc470e 438 if (!force_irqthreads() || !__this_cpu_read(ksoftirqd)) {
ae9ef589
TG
439#ifdef CONFIG_HAVE_IRQ_EXIT_ON_IRQ_STACK
440 /*
441 * We can safely execute softirq on the current stack if
442 * it is the irq stack, because it should be near empty
443 * at this stage.
444 */
445 __do_softirq();
446#else
447 /*
448 * Otherwise, irq_exit() is called on the task stack that can
449 * be potentially deep already. So call softirq in its own stack
450 * to prevent from any overrun.
451 */
452 do_softirq_own_stack();
453#endif
454 } else {
455 wakeup_softirqd();
456 }
457}
458
459asmlinkage __visible void do_softirq(void)
460{
461 __u32 pending;
462 unsigned long flags;
463
464 if (in_interrupt())
465 return;
466
467 local_irq_save(flags);
468
469 pending = local_softirq_pending();
470
471 if (pending && !ksoftirqd_running(pending))
472 do_softirq_own_stack();
473
474 local_irq_restore(flags);
475}
476
8b1c04ac
TG
477#endif /* !CONFIG_PREEMPT_RT */
478
1da177e4 479/*
34376a50
BG
480 * We restart softirq processing for at most MAX_SOFTIRQ_RESTART times,
481 * but break the loop if need_resched() is set or after 2 ms.
482 * The MAX_SOFTIRQ_TIME provides a nice upper bound in most cases, but in
483 * certain cases, such as stop_machine(), jiffies may cease to
484 * increment and so we need the MAX_SOFTIRQ_RESTART limit as
485 * well to make sure we eventually return from this method.
1da177e4 486 *
c10d7367 487 * These limits have been established via experimentation.
1da177e4
LT
488 * The two things to balance is latency against fairness -
489 * we want to handle softirqs as soon as possible, but they
490 * should not be able to lock up the box.
491 */
c10d7367 492#define MAX_SOFTIRQ_TIME msecs_to_jiffies(2)
34376a50 493#define MAX_SOFTIRQ_RESTART 10
1da177e4 494
f1a83e65
PZ
495#ifdef CONFIG_TRACE_IRQFLAGS
496/*
f1a83e65
PZ
497 * When we run softirqs from irq_exit() and thus on the hardirq stack we need
498 * to keep the lockdep irq context tracking as tight as possible in order to
499 * not miss-qualify lock contexts and miss possible deadlocks.
500 */
f1a83e65 501
5c4853b6 502static inline bool lockdep_softirq_start(void)
f1a83e65 503{
5c4853b6 504 bool in_hardirq = false;
f1a83e65 505
f9ad4a5f 506 if (lockdep_hardirq_context()) {
5c4853b6 507 in_hardirq = true;
2502ec37 508 lockdep_hardirq_exit();
5c4853b6
FW
509 }
510
f1a83e65 511 lockdep_softirq_enter();
5c4853b6
FW
512
513 return in_hardirq;
f1a83e65
PZ
514}
515
5c4853b6 516static inline void lockdep_softirq_end(bool in_hardirq)
f1a83e65
PZ
517{
518 lockdep_softirq_exit();
5c4853b6
FW
519
520 if (in_hardirq)
2502ec37 521 lockdep_hardirq_enter();
f1a83e65 522}
f1a83e65 523#else
5c4853b6
FW
524static inline bool lockdep_softirq_start(void) { return false; }
525static inline void lockdep_softirq_end(bool in_hardirq) { }
f1a83e65
PZ
526#endif
527
be7635e7 528asmlinkage __visible void __softirq_entry __do_softirq(void)
1da177e4 529{
c10d7367 530 unsigned long end = jiffies + MAX_SOFTIRQ_TIME;
907aed48 531 unsigned long old_flags = current->flags;
34376a50 532 int max_restart = MAX_SOFTIRQ_RESTART;
f1a83e65 533 struct softirq_action *h;
5c4853b6 534 bool in_hardirq;
f1a83e65 535 __u32 pending;
2e702b9f 536 int softirq_bit;
907aed48
MG
537
538 /*
e45506ac
YL
539 * Mask out PF_MEMALLOC as the current task context is borrowed for the
540 * softirq. A softirq handled, such as network RX, might set PF_MEMALLOC
541 * again if the socket is related to swapping.
907aed48
MG
542 */
543 current->flags &= ~PF_MEMALLOC;
1da177e4
LT
544
545 pending = local_softirq_pending();
829035fd 546
f02fc963 547 softirq_handle_begin();
5c4853b6 548 in_hardirq = lockdep_softirq_start();
d3759e71 549 account_softirq_enter(current);
1da177e4 550
1da177e4
LT
551restart:
552 /* Reset the pending bitmask before enabling irqs */
3f74478b 553 set_softirq_pending(0);
1da177e4 554
c70f5d66 555 local_irq_enable();
1da177e4
LT
556
557 h = softirq_vec;
558
2e702b9f
JP
559 while ((softirq_bit = ffs(pending))) {
560 unsigned int vec_nr;
561 int prev_count;
562
563 h += softirq_bit - 1;
564
565 vec_nr = h - softirq_vec;
566 prev_count = preempt_count();
567
568 kstat_incr_softirqs_this_cpu(vec_nr);
569
570 trace_softirq_entry(vec_nr);
571 h->action(h);
572 trace_softirq_exit(vec_nr);
573 if (unlikely(prev_count != preempt_count())) {
40322764 574 pr_err("huh, entered softirq %u %s %p with preempt_count %08x, exited with %08x?\n",
2e702b9f
JP
575 vec_nr, softirq_to_name[vec_nr], h->action,
576 prev_count, preempt_count());
577 preempt_count_set(prev_count);
1da177e4
LT
578 }
579 h++;
2e702b9f
JP
580 pending >>= softirq_bit;
581 }
1da177e4 582
8b1c04ac
TG
583 if (!IS_ENABLED(CONFIG_PREEMPT_RT) &&
584 __this_cpu_read(ksoftirqd) == current)
d28139c4 585 rcu_softirq_qs();
8b1c04ac 586
c70f5d66 587 local_irq_disable();
1da177e4
LT
588
589 pending = local_softirq_pending();
c10d7367 590 if (pending) {
34376a50
BG
591 if (time_before(jiffies, end) && !need_resched() &&
592 --max_restart)
c10d7367 593 goto restart;
1da177e4 594
1da177e4 595 wakeup_softirqd();
c10d7367 596 }
1da177e4 597
d3759e71 598 account_softirq_exit(current);
5c4853b6 599 lockdep_softirq_end(in_hardirq);
f02fc963 600 softirq_handle_end();
717a94b5 601 current_restore_flags(old_flags, PF_MEMALLOC);
1da177e4
LT
602}
603
8a6bc478
TG
604/**
605 * irq_enter_rcu - Enter an interrupt context with RCU watching
dde4b2b5 606 */
8a6bc478 607void irq_enter_rcu(void)
dde4b2b5 608{
d14ce74f
FW
609 __irq_enter_raw();
610
53e87e3c
FW
611 if (tick_nohz_full_cpu(smp_processor_id()) ||
612 (is_idle_task(current) && (irq_count() == HARDIRQ_OFFSET)))
5acac1be 613 tick_irq_enter();
d14ce74f
FW
614
615 account_hardirq_enter(current);
dde4b2b5
IM
616}
617
8a6bc478
TG
618/**
619 * irq_enter - Enter an interrupt context including RCU update
620 */
621void irq_enter(void)
622{
6f0e6c15 623 ct_irq_enter();
8a6bc478
TG
624 irq_enter_rcu();
625}
626
67826eae
FW
627static inline void tick_irq_exit(void)
628{
629#ifdef CONFIG_NO_HZ_COMMON
630 int cpu = smp_processor_id();
631
632 /* Make sure that timer wheel updates are propagated */
633 if ((idle_cpu(cpu) && !need_resched()) || tick_nohz_full_cpu(cpu)) {
fe13889c 634 if (!in_hardirq())
67826eae
FW
635 tick_nohz_irq_exit();
636 }
637#endif
638}
639
59bc300b 640static inline void __irq_exit_rcu(void)
1da177e4 641{
74eed016 642#ifndef __ARCH_IRQ_EXIT_IRQS_DISABLED
4cd5d111 643 local_irq_disable();
74eed016 644#else
f71b74bc 645 lockdep_assert_irqs_disabled();
74eed016 646#endif
d3759e71 647 account_hardirq_exit(current);
bdb43806 648 preempt_count_sub(HARDIRQ_OFFSET);
1da177e4
LT
649 if (!in_interrupt() && local_softirq_pending())
650 invoke_softirq();
79bf2bb3 651
67826eae 652 tick_irq_exit();
8a6bc478
TG
653}
654
59bc300b
PZ
655/**
656 * irq_exit_rcu() - Exit an interrupt context without updating RCU
657 *
658 * Also processes softirqs if needed and possible.
659 */
660void irq_exit_rcu(void)
661{
662 __irq_exit_rcu();
663 /* must be last! */
664 lockdep_hardirq_exit();
665}
666
8a6bc478
TG
667/**
668 * irq_exit - Exit an interrupt context, update RCU and lockdep
669 *
670 * Also processes softirqs if needed and possible.
671 */
672void irq_exit(void)
673{
59bc300b 674 __irq_exit_rcu();
6f0e6c15 675 ct_irq_exit();
2502ec37
TG
676 /* must be last! */
677 lockdep_hardirq_exit();
1da177e4
LT
678}
679
680/*
681 * This function must run with irqs disabled!
682 */
7ad5b3a5 683inline void raise_softirq_irqoff(unsigned int nr)
1da177e4
LT
684{
685 __raise_softirq_irqoff(nr);
686
687 /*
688 * If we're in an interrupt or softirq, we're done
689 * (this also catches softirq-disabled code). We will
690 * actually run the softirq once we return from
691 * the irq or softirq.
692 *
693 * Otherwise we wake up ksoftirqd to make sure we
694 * schedule the softirq soon.
695 */
f02fc963 696 if (!in_interrupt() && should_wake_ksoftirqd())
1da177e4
LT
697 wakeup_softirqd();
698}
699
7ad5b3a5 700void raise_softirq(unsigned int nr)
1da177e4
LT
701{
702 unsigned long flags;
703
704 local_irq_save(flags);
705 raise_softirq_irqoff(nr);
706 local_irq_restore(flags);
707}
708
f069686e
SR
709void __raise_softirq_irqoff(unsigned int nr)
710{
cdabce2e 711 lockdep_assert_irqs_disabled();
f069686e
SR
712 trace_softirq_raise(nr);
713 or_softirq_pending(1UL << nr);
714}
715
962cf36c 716void open_softirq(int nr, void (*action)(struct softirq_action *))
1da177e4 717{
1da177e4
LT
718 softirq_vec[nr].action = action;
719}
720
9ba5f005
PZ
721/*
722 * Tasklets
723 */
ce85b4f2 724struct tasklet_head {
48f20a9a
OJ
725 struct tasklet_struct *head;
726 struct tasklet_struct **tail;
1da177e4
LT
727};
728
4620b49f
VN
729static DEFINE_PER_CPU(struct tasklet_head, tasklet_vec);
730static DEFINE_PER_CPU(struct tasklet_head, tasklet_hi_vec);
1da177e4 731
6498ddad
IM
732static void __tasklet_schedule_common(struct tasklet_struct *t,
733 struct tasklet_head __percpu *headp,
734 unsigned int softirq_nr)
1da177e4 735{
6498ddad 736 struct tasklet_head *head;
1da177e4
LT
737 unsigned long flags;
738
739 local_irq_save(flags);
6498ddad 740 head = this_cpu_ptr(headp);
48f20a9a 741 t->next = NULL;
6498ddad
IM
742 *head->tail = t;
743 head->tail = &(t->next);
744 raise_softirq_irqoff(softirq_nr);
1da177e4
LT
745 local_irq_restore(flags);
746}
6498ddad
IM
747
748void __tasklet_schedule(struct tasklet_struct *t)
749{
750 __tasklet_schedule_common(t, &tasklet_vec,
751 TASKLET_SOFTIRQ);
752}
1da177e4
LT
753EXPORT_SYMBOL(__tasklet_schedule);
754
7ad5b3a5 755void __tasklet_hi_schedule(struct tasklet_struct *t)
1da177e4 756{
6498ddad
IM
757 __tasklet_schedule_common(t, &tasklet_hi_vec,
758 HI_SOFTIRQ);
1da177e4 759}
1da177e4
LT
760EXPORT_SYMBOL(__tasklet_hi_schedule);
761
697d8c63 762static bool tasklet_clear_sched(struct tasklet_struct *t)
6b2c339d 763{
697d8c63
PZ
764 if (test_and_clear_bit(TASKLET_STATE_SCHED, &t->state)) {
765 wake_up_var(&t->state);
6b2c339d 766 return true;
697d8c63 767 }
6b2c339d
DB
768
769 WARN_ONCE(1, "tasklet SCHED state not set: %s %pS\n",
770 t->use_callback ? "callback" : "func",
771 t->use_callback ? (void *)t->callback : (void *)t->func);
772
773 return false;
774}
775
82b691be
IM
776static void tasklet_action_common(struct softirq_action *a,
777 struct tasklet_head *tl_head,
778 unsigned int softirq_nr)
1da177e4
LT
779{
780 struct tasklet_struct *list;
781
782 local_irq_disable();
82b691be
IM
783 list = tl_head->head;
784 tl_head->head = NULL;
785 tl_head->tail = &tl_head->head;
1da177e4
LT
786 local_irq_enable();
787
788 while (list) {
789 struct tasklet_struct *t = list;
790
791 list = list->next;
792
793 if (tasklet_trylock(t)) {
794 if (!atomic_read(&t->count)) {
697d8c63 795 if (tasklet_clear_sched(t)) {
f4bf3ca2
LC
796 if (t->use_callback) {
797 trace_tasklet_entry(t, t->callback);
6b2c339d 798 t->callback(t);
f4bf3ca2
LC
799 trace_tasklet_exit(t, t->callback);
800 } else {
801 trace_tasklet_entry(t, t->func);
6b2c339d 802 t->func(t->data);
f4bf3ca2
LC
803 trace_tasklet_exit(t, t->func);
804 }
6b2c339d 805 }
1da177e4
LT
806 tasklet_unlock(t);
807 continue;
808 }
809 tasklet_unlock(t);
810 }
811
812 local_irq_disable();
48f20a9a 813 t->next = NULL;
82b691be
IM
814 *tl_head->tail = t;
815 tl_head->tail = &t->next;
816 __raise_softirq_irqoff(softirq_nr);
1da177e4
LT
817 local_irq_enable();
818 }
819}
820
82b691be 821static __latent_entropy void tasklet_action(struct softirq_action *a)
1da177e4 822{
82b691be
IM
823 tasklet_action_common(a, this_cpu_ptr(&tasklet_vec), TASKLET_SOFTIRQ);
824}
1da177e4 825
82b691be
IM
826static __latent_entropy void tasklet_hi_action(struct softirq_action *a)
827{
828 tasklet_action_common(a, this_cpu_ptr(&tasklet_hi_vec), HI_SOFTIRQ);
1da177e4
LT
829}
830
12cc923f
RP
831void tasklet_setup(struct tasklet_struct *t,
832 void (*callback)(struct tasklet_struct *))
833{
834 t->next = NULL;
835 t->state = 0;
836 atomic_set(&t->count, 0);
837 t->callback = callback;
838 t->use_callback = true;
839 t->data = 0;
840}
841EXPORT_SYMBOL(tasklet_setup);
842
1da177e4
LT
843void tasklet_init(struct tasklet_struct *t,
844 void (*func)(unsigned long), unsigned long data)
845{
846 t->next = NULL;
847 t->state = 0;
848 atomic_set(&t->count, 0);
849 t->func = func;
12cc923f 850 t->use_callback = false;
1da177e4
LT
851 t->data = data;
852}
1da177e4
LT
853EXPORT_SYMBOL(tasklet_init);
854
eb2dafbb
TG
855#if defined(CONFIG_SMP) || defined(CONFIG_PREEMPT_RT)
856/*
857 * Do not use in new code. Waiting for tasklets from atomic contexts is
858 * error prone and should be avoided.
859 */
860void tasklet_unlock_spin_wait(struct tasklet_struct *t)
861{
862 while (test_bit(TASKLET_STATE_RUN, &(t)->state)) {
863 if (IS_ENABLED(CONFIG_PREEMPT_RT)) {
864 /*
865 * Prevent a live lock when current preempted soft
866 * interrupt processing or prevents ksoftirqd from
867 * running. If the tasklet runs on a different CPU
868 * then this has no effect other than doing the BH
869 * disable/enable dance for nothing.
870 */
871 local_bh_disable();
872 local_bh_enable();
873 } else {
874 cpu_relax();
875 }
876 }
877}
878EXPORT_SYMBOL(tasklet_unlock_spin_wait);
879#endif
880
1da177e4
LT
881void tasklet_kill(struct tasklet_struct *t)
882{
883 if (in_interrupt())
40322764 884 pr_notice("Attempt to kill tasklet from interrupt\n");
1da177e4 885
697d8c63
PZ
886 while (test_and_set_bit(TASKLET_STATE_SCHED, &t->state))
887 wait_var_event(&t->state, !test_bit(TASKLET_STATE_SCHED, &t->state));
888
1da177e4 889 tasklet_unlock_wait(t);
697d8c63 890 tasklet_clear_sched(t);
1da177e4 891}
1da177e4
LT
892EXPORT_SYMBOL(tasklet_kill);
893
eb2dafbb 894#if defined(CONFIG_SMP) || defined(CONFIG_PREEMPT_RT)
da044747
PZ
895void tasklet_unlock(struct tasklet_struct *t)
896{
897 smp_mb__before_atomic();
898 clear_bit(TASKLET_STATE_RUN, &t->state);
899 smp_mb__after_atomic();
900 wake_up_var(&t->state);
901}
902EXPORT_SYMBOL_GPL(tasklet_unlock);
903
904void tasklet_unlock_wait(struct tasklet_struct *t)
905{
906 wait_var_event(&t->state, !test_bit(TASKLET_STATE_RUN, &t->state));
907}
908EXPORT_SYMBOL_GPL(tasklet_unlock_wait);
909#endif
910
1da177e4
LT
911void __init softirq_init(void)
912{
48f20a9a
OJ
913 int cpu;
914
915 for_each_possible_cpu(cpu) {
916 per_cpu(tasklet_vec, cpu).tail =
917 &per_cpu(tasklet_vec, cpu).head;
918 per_cpu(tasklet_hi_vec, cpu).tail =
919 &per_cpu(tasklet_hi_vec, cpu).head;
920 }
921
962cf36c
CM
922 open_softirq(TASKLET_SOFTIRQ, tasklet_action);
923 open_softirq(HI_SOFTIRQ, tasklet_hi_action);
1da177e4
LT
924}
925
3e339b5d 926static int ksoftirqd_should_run(unsigned int cpu)
1da177e4 927{
3e339b5d
TG
928 return local_softirq_pending();
929}
1da177e4 930
3e339b5d
TG
931static void run_ksoftirqd(unsigned int cpu)
932{
f02fc963 933 ksoftirqd_run_begin();
3e339b5d 934 if (local_softirq_pending()) {
0bed698a
FW
935 /*
936 * We can safely run softirq on inline stack, as we are not deep
937 * in the task stack here.
938 */
3e339b5d 939 __do_softirq();
f02fc963 940 ksoftirqd_run_end();
edf22f4c 941 cond_resched();
3e339b5d 942 return;
1da177e4 943 }
f02fc963 944 ksoftirqd_run_end();
1da177e4
LT
945}
946
947#ifdef CONFIG_HOTPLUG_CPU
c4544dbc 948static int takeover_tasklets(unsigned int cpu)
1da177e4 949{
1da177e4
LT
950 /* CPU is dead, so no lock needed. */
951 local_irq_disable();
952
953 /* Find end, append list for that CPU. */
e5e41723 954 if (&per_cpu(tasklet_vec, cpu).head != per_cpu(tasklet_vec, cpu).tail) {
909ea964 955 *__this_cpu_read(tasklet_vec.tail) = per_cpu(tasklet_vec, cpu).head;
8afecaa6 956 __this_cpu_write(tasklet_vec.tail, per_cpu(tasklet_vec, cpu).tail);
e5e41723
CB
957 per_cpu(tasklet_vec, cpu).head = NULL;
958 per_cpu(tasklet_vec, cpu).tail = &per_cpu(tasklet_vec, cpu).head;
959 }
1da177e4
LT
960 raise_softirq_irqoff(TASKLET_SOFTIRQ);
961
e5e41723 962 if (&per_cpu(tasklet_hi_vec, cpu).head != per_cpu(tasklet_hi_vec, cpu).tail) {
909ea964
CL
963 *__this_cpu_read(tasklet_hi_vec.tail) = per_cpu(tasklet_hi_vec, cpu).head;
964 __this_cpu_write(tasklet_hi_vec.tail, per_cpu(tasklet_hi_vec, cpu).tail);
e5e41723
CB
965 per_cpu(tasklet_hi_vec, cpu).head = NULL;
966 per_cpu(tasklet_hi_vec, cpu).tail = &per_cpu(tasklet_hi_vec, cpu).head;
967 }
1da177e4
LT
968 raise_softirq_irqoff(HI_SOFTIRQ);
969
970 local_irq_enable();
c4544dbc 971 return 0;
1da177e4 972}
c4544dbc
SAS
973#else
974#define takeover_tasklets NULL
1da177e4
LT
975#endif /* CONFIG_HOTPLUG_CPU */
976
3e339b5d
TG
977static struct smp_hotplug_thread softirq_threads = {
978 .store = &ksoftirqd,
979 .thread_should_run = ksoftirqd_should_run,
980 .thread_fn = run_ksoftirqd,
981 .thread_comm = "ksoftirqd/%u",
982};
983
7babe8db 984static __init int spawn_ksoftirqd(void)
1da177e4 985{
c4544dbc
SAS
986 cpuhp_setup_state_nocalls(CPUHP_SOFTIRQ_DEAD, "softirq:dead", NULL,
987 takeover_tasklets);
3e339b5d
TG
988 BUG_ON(smpboot_register_percpu_thread(&softirq_threads));
989
1da177e4
LT
990 return 0;
991}
7babe8db 992early_initcall(spawn_ksoftirqd);
78eef01b 993
43a25632
YL
994/*
995 * [ These __weak aliases are kept in a separate compilation unit, so that
996 * GCC does not inline them incorrectly. ]
997 */
998
999int __init __weak early_irq_init(void)
1000{
1001 return 0;
1002}
1003
4a046d17
YL
1004int __init __weak arch_probe_nr_irqs(void)
1005{
b683de2b 1006 return NR_IRQS_LEGACY;
4a046d17
YL
1007}
1008
43a25632
YL
1009int __init __weak arch_early_irq_init(void)
1010{
1011 return 0;
1012}
62a08ae2
TG
1013
1014unsigned int __weak arch_dynirq_lower_bound(unsigned int from)
1015{
1016 return from;
1017}