• Ingo Molnar's avatar
    [PATCH] "big IRQ lock" removal, IRQ cleanups · ae86a80a
    Ingo Molnar authored
    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 ...
    ae86a80a
vm86.c 16.8 KB