aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/softirq.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/softirq.c')
-rw-r--r--kernel/softirq.c21
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
189DEFINE_TRACE(softirq_entry);
190DEFINE_TRACE(softirq_exit);
191
192asmlinkage void __do_softirq(void) 191asmlinkage 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
384EXPORT_SYMBOL(__tasklet_hi_schedule); 384EXPORT_SYMBOL(__tasklet_hi_schedule);
385 385
386void __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
395EXPORT_SYMBOL(__tasklet_hi_schedule_first);
396
386static void tasklet_action(struct softirq_action *a) 397static 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
831int __weak arch_init_chip_data(struct irq_desc *desc, int cpu) 842int __weak arch_init_chip_data(struct irq_desc *desc, int node)
832{ 843{
833 return 0; 844 return 0;
834} 845}