diff options
author | Ralf Baechle <ralf@linux-mips.org> | 2001-01-10 17:17:53 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2001-01-10 17:17:53 +0000 |
commit | b2ad5f821b1381492d792ca10b1eb7a107b48f14 (patch) | |
tree | 954a648692e7da983db1d2470953705f6a729264 /kernel/softirq.c | |
parent | c9c06167e7933d93a6e396174c68abf242294abb (diff) |
Merge with Linux 2.4.0-prerelease. Big Makefile rewrite, test your
Makefiles.
Diffstat (limited to 'kernel/softirq.c')
-rw-r--r-- | kernel/softirq.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/kernel/softirq.c b/kernel/softirq.c index f7be8abd3..fe066399d 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c @@ -15,6 +15,7 @@ #include <linux/interrupt.h> #include <linux/smp_lock.h> #include <linux/init.h> +#include <linux/tqueue.h> /* - No shared variables, all the data are CPU local. @@ -288,4 +289,29 @@ void __init softirq_init() open_softirq(HI_SOFTIRQ, tasklet_hi_action, NULL); } +void __run_task_queue(task_queue *list) +{ + struct list_head head, *next; + unsigned long flags; + spin_lock_irqsave(&tqueue_lock, flags); + list_add(&head, list); + list_del_init(list); + spin_unlock_irqrestore(&tqueue_lock, flags); + + next = head.next; + while (next != &head) { + void (*f) (void *); + struct tq_struct *p; + void *data; + + p = list_entry(next, struct tq_struct, list); + next = next->next; + f = p->routine; + data = p->data; + wmb(); + p->sync = 0; + if (f) + f(data); + } +} |