diff options
Diffstat (limited to 'kernel/softirq.c')
| -rw-r--r-- | kernel/softirq.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/kernel/softirq.c b/kernel/softirq.c index b525dd348511..3a94905fa5d2 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c | |||
| @@ -24,7 +24,9 @@ | |||
| 24 | #include <linux/ftrace.h> | 24 | #include <linux/ftrace.h> |
| 25 | #include <linux/smp.h> | 25 | #include <linux/smp.h> |
| 26 | #include <linux/tick.h> | 26 | #include <linux/tick.h> |
| 27 | #include <trace/irq.h> | 27 | |
| 28 | #define CREATE_TRACE_POINTS | ||
| 29 | #include <trace/events/irq.h> | ||
| 28 | 30 | ||
| 29 | #include <asm/irq.h> | 31 | #include <asm/irq.h> |
| 30 | /* | 32 | /* |
| @@ -186,9 +188,6 @@ EXPORT_SYMBOL(local_bh_enable_ip); | |||
| 186 | */ | 188 | */ |
| 187 | #define MAX_SOFTIRQ_RESTART 10 | 189 | #define MAX_SOFTIRQ_RESTART 10 |
| 188 | 190 | ||
| 189 | DEFINE_TRACE(softirq_entry); | ||
| 190 | DEFINE_TRACE(softirq_exit); | ||
| 191 | |||
| 192 | asmlinkage void __do_softirq(void) | 191 | asmlinkage void __do_softirq(void) |
| 193 | { | 192 | { |
| 194 | struct softirq_action *h; | 193 | struct softirq_action *h; |
| @@ -214,6 +213,7 @@ restart: | |||
| 214 | do { | 213 | do { |
| 215 | if (pending & 1) { | 214 | if (pending & 1) { |
| 216 | int prev_count = preempt_count(); | 215 | int prev_count = preempt_count(); |
| 216 | kstat_incr_softirqs_this_cpu(h - softirq_vec); | ||
| 217 | 217 | ||
| 218 | trace_softirq_entry(h, softirq_vec); | 218 | trace_softirq_entry(h, softirq_vec); |
| 219 | h->action(h); | 219 | h->action(h); |
| @@ -383,6 +383,17 @@ void __tasklet_hi_schedule(struct tasklet_struct *t) | |||
| 383 | 383 | ||
| 384 | EXPORT_SYMBOL(__tasklet_hi_schedule); | 384 | EXPORT_SYMBOL(__tasklet_hi_schedule); |
| 385 | 385 | ||
| 386 | void __tasklet_hi_schedule_first(struct tasklet_struct *t) | ||
| 387 | { | ||
| 388 | BUG_ON(!irqs_disabled()); | ||
| 389 | |||
| 390 | t->next = __get_cpu_var(tasklet_hi_vec).head; | ||
| 391 | __get_cpu_var(tasklet_hi_vec).head = t; | ||
| 392 | __raise_softirq_irqoff(HI_SOFTIRQ); | ||
| 393 | } | ||
| 394 | |||
| 395 | EXPORT_SYMBOL(__tasklet_hi_schedule_first); | ||
| 396 | |||
| 386 | static void tasklet_action(struct softirq_action *a) | 397 | static void tasklet_action(struct softirq_action *a) |
| 387 | { | 398 | { |
| 388 | struct tasklet_struct *list; | 399 | struct tasklet_struct *list; |
| @@ -828,7 +839,7 @@ int __init __weak arch_early_irq_init(void) | |||
| 828 | return 0; | 839 | return 0; |
| 829 | } | 840 | } |
| 830 | 841 | ||
| 831 | int __weak arch_init_chip_data(struct irq_desc *desc, int cpu) | 842 | int __weak arch_init_chip_data(struct irq_desc *desc, int node) |
| 832 | { | 843 | { |
| 833 | return 0; | 844 | return 0; |
| 834 | } | 845 | } |
