diff options
Diffstat (limited to 'kernel/softirq.c')
| -rw-r--r-- | kernel/softirq.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/kernel/softirq.c b/kernel/softirq.c index 13960170cad4..fca82c32042b 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c | |||
| @@ -58,7 +58,7 @@ DEFINE_PER_CPU(struct task_struct *, ksoftirqd); | |||
| 58 | 58 | ||
| 59 | char *softirq_to_name[NR_SOFTIRQS] = { | 59 | char *softirq_to_name[NR_SOFTIRQS] = { |
| 60 | "HI", "TIMER", "NET_TX", "NET_RX", "BLOCK", "BLOCK_IOPOLL", | 60 | "HI", "TIMER", "NET_TX", "NET_RX", "BLOCK", "BLOCK_IOPOLL", |
| 61 | "TASKLET", "SCHED", "HRTIMER" | 61 | "TASKLET", "SCHED", "HRTIMER", "RCU" |
| 62 | }; | 62 | }; |
| 63 | 63 | ||
| 64 | /* | 64 | /* |
| @@ -315,16 +315,24 @@ static inline void invoke_softirq(void) | |||
| 315 | { | 315 | { |
| 316 | if (!force_irqthreads) | 316 | if (!force_irqthreads) |
| 317 | __do_softirq(); | 317 | __do_softirq(); |
| 318 | else | 318 | else { |
| 319 | __local_bh_disable((unsigned long)__builtin_return_address(0), | ||
| 320 | SOFTIRQ_OFFSET); | ||
| 319 | wakeup_softirqd(); | 321 | wakeup_softirqd(); |
| 322 | __local_bh_enable(SOFTIRQ_OFFSET); | ||
| 323 | } | ||
| 320 | } | 324 | } |
| 321 | #else | 325 | #else |
| 322 | static inline void invoke_softirq(void) | 326 | static inline void invoke_softirq(void) |
| 323 | { | 327 | { |
| 324 | if (!force_irqthreads) | 328 | if (!force_irqthreads) |
| 325 | do_softirq(); | 329 | do_softirq(); |
| 326 | else | 330 | else { |
| 331 | __local_bh_disable((unsigned long)__builtin_return_address(0), | ||
| 332 | SOFTIRQ_OFFSET); | ||
| 327 | wakeup_softirqd(); | 333 | wakeup_softirqd(); |
| 334 | __local_bh_enable(SOFTIRQ_OFFSET); | ||
| 335 | } | ||
| 328 | } | 336 | } |
| 329 | #endif | 337 | #endif |
| 330 | 338 | ||
