diff options
| author | Ingo Molnar <mingo@elte.hu> | 2002-07-21 02:11:12 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@home.transmeta.com> | 2002-07-21 02:11:12 -0700 |
| commit | ae86a80aed1e269d435c70f6e85deb80e8f8be98 (patch) | |
| tree | c0c5b816da7b3a3102f159c335745ae9b01883c1 /net/core | |
| parent | 3d37e1e6171f8cbd81e442524d4dd231b8cbf5d1 (diff) | |
[PATCH] "big IRQ lock" removal, IRQ cleanups
This is a massive cleanup of the IRQ subsystem. It's losely based on
Linus' original idea and DaveM's original implementation, to fold our
various irq, softirq and bh counters into the preemption counter.
with this approach it was possible:
- to remove the 'big IRQ lock' on SMP - on which sti() and cli() relied.
- to streamline/simplify arch/i386/kernel/irq.c significantly.
- to simplify the softirq code.
- to remove the preemption count increase/decrease code from the lowlevel
IRQ assembly code.
- to speed up schedule() a bit.
Global sti() and cli() is gone forever on SMP, there is no more globally
synchronizing irq-disabling capability. All code that relied on sti()
and cli() and restore_flags() must use other locking mechanisms from now
on (spinlocks and __cli()/__sti()).
obviously this patch breaks massive amounts of code, so only limited
.configs are working at the moment (UP is expected to be unaffected, but
SMP will require various driver updates).
The patch was developed and tested on SMP systems, and while the code is
still a bit rough in places, the base IRQ code appears to be pretty
robust and clean.
while it boots already so the worst is over, there is lots of work left:
eg. to fix the serial layer to not use cli()/sti() and bhs ...
Diffstat (limited to 'net/core')
| -rw-r--r-- | net/core/skbuff.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 74cbdeb53734..0f327d594231 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -318,7 +318,7 @@ void __kfree_skb(struct sk_buff *skb) dst_release(skb->dst); if(skb->destructor) { - if (in_irq()) + if (0 && in_irq()) printk(KERN_WARNING "Warning: kfree_skb on " "hard IRQ %p\n", NET_CALLER(skb)); skb->destructor(skb); |
