X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=kernel%2Fsoftirq.c;h=3a94905fa5d27c4d0ef59ad56e83ad353e14f1fa;hb=402168cee1a0b791c54c54a68ae21bb26880f40b;hp=258885a543db60692a695aa682abb6c95f3ffcdf;hpb=300df7dc89cc276377fc020704e34875d5c473b6;p=~andy%2Flinux diff --git a/kernel/softirq.c b/kernel/softirq.c index 258885a543d..3a94905fa5d 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c @@ -213,6 +213,7 @@ restart: do { if (pending & 1) { int prev_count = preempt_count(); + kstat_incr_softirqs_this_cpu(h - softirq_vec); trace_softirq_entry(h, softirq_vec); h->action(h); @@ -382,6 +383,17 @@ void __tasklet_hi_schedule(struct tasklet_struct *t) EXPORT_SYMBOL(__tasklet_hi_schedule); +void __tasklet_hi_schedule_first(struct tasklet_struct *t) +{ + BUG_ON(!irqs_disabled()); + + t->next = __get_cpu_var(tasklet_hi_vec).head; + __get_cpu_var(tasklet_hi_vec).head = t; + __raise_softirq_irqoff(HI_SOFTIRQ); +} + +EXPORT_SYMBOL(__tasklet_hi_schedule_first); + static void tasklet_action(struct softirq_action *a) { struct tasklet_struct *list;