1. 18 11月, 2005 6 次提交
    • G
      [PARISC] irq_affinityp[] only available for SMP builds · 03afe22f
      Grant Grundler 提交于
      irq_affinityp[] only available for SMP builds, make code that uses
      it conditional on CONFIG_SMP.
      Signed-off-by: NGrant Grundler <grundler@parisc-linux.org>
      Signed-off-by: NKyle McMartin <kyle@parisc-linux.org>
      03afe22f
    • J
      [PARISC] Add IRQ affinities · c2ab64d0
      James Bottomley 提交于
      This really only adds them for the machines I can check SMP on, which
      is CPU interrupts and IOSAPIC (so not any of the GSC based machines).
      
      With this patch, irqbalanced can be used to maintain irq balancing.
      Unfortunately, irqbalanced is a bit x86 centric, so it doesn't do an
      incredibly good job, but it does work.
      Signed-off-by: NJames Bottomley <jejb@parisc-linux.org>
      Signed-off-by: NKyle McMartin <kyle@parisc-linux.org>
      c2ab64d0
    • K
      [PARISC] Fix uniprocessor build by dummying smp_send_all_nop() · 1d4c452a
      Kyle McMartin 提交于
      Since irq.c uses smp_send_all_nop, we must define it for UP builds
      as well. Make it a static inline so it gets optimized away. This forces
      irq.c to include <asm/smp.h> though.
      Signed-off-by: NKyle McMartin <kyle@parisc-linux.org>
      1d4c452a
    • J
      [PARISC] Fix our interrupts not to use smp_call_function · d911aed8
      James Bottomley 提交于
      Fix our interrupts not to use smp_call_function
      
      On K and D class smp, the generic code calls this under an irq
      spinlock, which causes the WARN_ON() message in smp_call_function()
      (and is also illegal because it could deadlock).
      
      The fix is to use a new scheme based on the IPI_NOP.
      Signed-off-by: NJames Bottomley <jejb@parisc-linux.org>
      Signed-off-by: NKyle McMartin <kyle@parisc-linux.org>
      d911aed8
    • G
      [PARISC] Disable nesting of interrupts · 3f902886
      Grant Grundler 提交于
      Disable nesting of interrupts - still has holes
      
      The offending sequence starts out like this:
      1) take external interrupt
      2) set_eiem() to only allow TIMER_IRQ; local interrupts still disabled
      3) read the EIRR to get a "list" of pending interrupts
      4) clear EIRR of pending interrupts we intend to handle
      5) call __do_IRQ() to handle IRQ.
      6) handle_IRQ_event() enables local interrupts (I-Bit)
      7) take a timer interrupt
      8) read EIRR to get a new list of pending interrupts
      9) clear EIRR of pending interrupts we just read
      10) handle pending interrupts found in (8)
      11) set_eiem(cpu_eiem) and return
              [ TROUBLE! all enabled CPU IRQs are unmasked. }
      12) handle remaining interrupts pending from (3)
              e.g. call __do_IRQ() -> handle_IRQ_event()..etc
              [ TROUBLE! call to handle_IRQ_event() can now enable *any* IRQ. }
      13) set_eiem(cpu_eiem) and return
      
      The problem is we now get into ugly race conditions with Timer and IPI
      interrupts at this point.  I'm not exactly sure what happens when
      things go wrong (perhaps nest calls to IPI or timer interrupt?).
      But I'm certain it's not good.
      
      This sequence will break sooner if (10) would accidentally leave
      interrupts enabled.
      
      I'm pretty sure the right answer is now to make cpu_eiem
      a per CPU variable since all external interrupts on parisc
      are per CPU. This means we will NOT need to send an IPI to
      every CPU in the system when enabling or disabling an IRQ
      since only one CPU needs to change it's EIEM.
      
      Thanks to James Bottomley for (once again) pointing out the problem.
      Signed-off-by: NGrant Grundler <grundler@parisc-linux.org>
      Signed-off-by: NKyle McMartin <kyle@parisc-linux.org>
      3f902886
    • J
      [PARISC] Make sure timer and IPI execute with interrupts disabled · 9a8b4584
      James Bottomley 提交于
      Fix a longstanding smp bug
      
      The problem is that both the timer and ipi interrupts are being called
      with interrupts enabled, which isn't what anyone is expecting.
      
      The IPI issue has just started to show up by causing a BUG_ON in the
      slab debugging code.  The timer issue never shows up because there's an
      eiem work around in our irq.c
      
      The fix is to label both these as SA_INTERRUPT which causes the generic
      irq code not to enable interrupts.
      
      I also suspect the smp_call_function timeouts we're seeing might be
      connected with the fact that we disable IPIs when handling any other
      type of interrupt.  I've put a WARN_ON in the code for executing
      smp_call_function() with IPIs disabled.
      Signed-off-by: NJames Bottomley <jejb@parisc-linux.org>
      Signed-off-by: NKyle McMartin <kyle@parisc-linux.org>
      9a8b4584
  2. 17 4月, 2005 1 次提交
    • L
      Linux-2.6.12-rc2 · 1da177e4
      Linus Torvalds 提交于
      Initial git repository build. I'm not bothering with the full history,
      even though we have it. We can create a separate "historical" git
      archive of that later if we want to, and in the meantime it's about
      3.2GB when imported into git - space that would just make the early
      git days unnecessarily complicated, when we don't have a lot of good
      infrastructure for it.
      
      Let it rip!
      1da177e4