diff options
| author | Linus Torvalds <torvalds@athlon.transmeta.com> | 2002-02-04 20:14:29 -0800 |
|---|---|---|
| committer | Linus Torvalds <torvalds@athlon.transmeta.com> | 2002-02-04 20:14:29 -0800 |
| commit | 70a8be476e663526c3cb17a157c17ccf4fca5bd4 (patch) | |
| tree | 9cb7529d5c1d7e7d90a21b1a6c9f6133fbbb0511 /kernel | |
| parent | 1c3cefa582a6b598d204bad02676df300e457efa (diff) | |
v2.4.9.5 -> v2.4.9.6
- Jens Axboe: remove trivially dead io_request_lock usage
- Andrea Arcangeli: softirq cleanup and ARM fixes. Slab cleanups
- Christoph Hellwig: gendisk handling helper functions/cleanups
- Nikita Danilov: reiserfs dead code pruning
- Anton Altaparmakov: NTFS update to 1.1.18
- firestream network driver: patch reverted on authors request
- NIIBE Yutaka: SH architecture update
- Paul Mackerras: PPC cleanups, PPC8xx update.
- me: reverse broken bootdata allocation patch that went into pre5
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/softirq.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/kernel/softirq.c b/kernel/softirq.c index 3737fa91fb4f..571aa0e12b9e 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c @@ -108,6 +108,9 @@ restart: local_irq_restore(flags); } +/* + * This function must run with irq disabled! + */ inline void cpu_raise_softirq(unsigned int cpu, unsigned int nr) { __cpu_raise_softirq(cpu, nr); @@ -127,7 +130,11 @@ inline void cpu_raise_softirq(unsigned int cpu, unsigned int nr) void raise_softirq(unsigned int nr) { + long flags; + + local_irq_save(flags); cpu_raise_softirq(smp_processor_id(), nr); + local_irq_restore(flags); } void open_softirq(int nr, void (*action)(struct softirq_action*), void *data) @@ -195,8 +202,8 @@ static void tasklet_action(struct softirq_action *a) local_irq_disable(); t->next = tasklet_vec[cpu].list; tasklet_vec[cpu].list = t; - local_irq_enable(); __cpu_raise_softirq(cpu, TASKLET_SOFTIRQ); + local_irq_enable(); } } @@ -229,8 +236,8 @@ static void tasklet_hi_action(struct softirq_action *a) local_irq_disable(); t->next = tasklet_hi_vec[cpu].list; tasklet_hi_vec[cpu].list = t; - local_irq_enable(); __cpu_raise_softirq(cpu, HI_SOFTIRQ); + local_irq_enable(); } } |
