1. 16 2月, 2012 3 次提交
  2. 15 2月, 2012 1 次提交
    • G
      irq_domain/powerpc: Use common irq_domain structure instead of irq_host · bae1d8f1
      Grant Likely 提交于
      This patch drops the powerpc-specific irq_host structures and uses the common
      irq_domain strucutres defined in linux/irqdomain.h.  It also fixes all
      the users to use the new structure names.
      
      Renaming irq_host to irq_domain has been discussed for a long time, and this
      patch is a step in the process of generalizing the powerpc virq code to be
      usable by all architecture.
      
      An astute reader will notice that this patch actually removes the irq_host
      structure instead of renaming it.  This is because the irq_domain structure
      already exists in include/linux/irqdomain.h and has the needed data members.
      Signed-off-by: NGrant Likely <grant.likely@secretlab.ca>
      Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Milton Miller <miltonm@bga.com>
      Tested-by: NOlof Johansson <olof@lixom.net>
      bae1d8f1
  3. 16 12月, 2011 1 次提交
    • B
      powerpc/pmac: Simplify old pmac PIC interrupt handling · 8e609d5e
      Benjamin Herrenschmidt 提交于
      In the old days, we treated all interrupts from the legacy Apple home made
      interrupt controllers as level, with a trick reading the "level" register
      along with the "event" register to work arounds bugs where it would
      occasionally fail to latch some events.
      
      Doing so appeared to work fine for both level and edge interrupts.
      
      Later on, we discovered in Darwin source the magic masks that define which
      interrupts are actually level and which are edge, and implemented a
      different algorithm, more similar to what Apple does, that treats those
      differently.
      
      I recently discovered however that this caused problems (including loss
      of interrupts) with an old Wallstreet PowerBook when trying to use the
      internal modem (connected to a cascaded controller).
      
      It looks like some interrupts are treated as edge while they are really
      level and I'm starting to seriously doubt the correctness of the Darwin
      code (which has other obvious bugs when you read it, so ...)
      
      This patch reverts to our original behaviour of treating everything as
      a level interrupt. It appears to solve the problems with the modem on
      the Wallstreet and everything else seems to be working properly as well.
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      8e609d5e
  4. 07 12月, 2011 3 次提交
  5. 08 11月, 2011 1 次提交
  6. 01 11月, 2011 1 次提交
  7. 31 5月, 2011 1 次提交
  8. 19 5月, 2011 2 次提交
    • M
      powerpc/psurge: Create a irq_host for secondary cpus · 23f73a5f
      Milton Miller 提交于
      Create a dummy irq_host using the generic dummy irq chip for the secondary
      cpus to use.  Create a direct irq mapping for the ipi and register the
      ipi action handler against it.  If for some unlikely reason part of this
      fails then don't detect the secondary cpus.
      
      This removes another instance of NO_IRQ_IGNORE, records the ipi stats
      for the secondary cpus, and runs the ipi on the interrupt stack.
      Signed-off-by: NMilton Miller <miltonm@bga.com>
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      23f73a5f
    • M
      powerpc: Add kconfig for muxed smp ipi support · 1ece355b
      Milton Miller 提交于
      Compile the new smp ipi mux and demux code only if a platform
      will make use of it.  The new config is selected as required.
      
      The new cause_ipi smp op is only available conditionally to point out
      configs where the select is required; this makes setting the op an
      immediate fail instead of a deferred unresolved symbol at link.
      
      This also creates a new config for power surge powermac upgrade support
      that can be disabled in expert mode but is default on.
      
      I also removed the depends / default y on CONFIG_XICS since it is selected
      by PSERIES.
      Signed-off-by: NMilton Miller <miltonm@bga.com>
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      1ece355b
  9. 12 5月, 2011 1 次提交
  10. 04 5月, 2011 1 次提交
  11. 29 3月, 2011 3 次提交
  12. 10 3月, 2011 1 次提交
  13. 06 7月, 2010 1 次提交
  14. 19 2月, 2010 1 次提交
  15. 17 2月, 2010 1 次提交
  16. 09 12月, 2009 1 次提交
  17. 24 11月, 2009 1 次提交
  18. 30 10月, 2009 1 次提交
  19. 08 7月, 2009 1 次提交
  20. 21 5月, 2009 1 次提交
  21. 30 3月, 2009 1 次提交
  22. 14 5月, 2008 1 次提交
  23. 13 3月, 2008 1 次提交
  24. 25 1月, 2008 1 次提交
  25. 17 1月, 2008 1 次提交
  26. 13 9月, 2007 1 次提交
  27. 07 5月, 2007 1 次提交
  28. 24 4月, 2007 1 次提交
  29. 13 4月, 2007 1 次提交
  30. 17 2月, 2007 1 次提交
  31. 07 10月, 2006 1 次提交
  32. 06 10月, 2006 1 次提交
  33. 05 10月, 2006 1 次提交
    • D
      IRQ: Maintain regs pointer globally rather than passing to IRQ handlers · 7d12e780
      David Howells 提交于
      Maintain a per-CPU global "struct pt_regs *" variable which can be used instead
      of passing regs around manually through all ~1800 interrupt handlers in the
      Linux kernel.
      
      The regs pointer is used in few places, but it potentially costs both stack
      space and code to pass it around.  On the FRV arch, removing the regs parameter
      from all the genirq function results in a 20% speed up of the IRQ exit path
      (ie: from leaving timer_interrupt() to leaving do_IRQ()).
      
      Where appropriate, an arch may override the generic storage facility and do
      something different with the variable.  On FRV, for instance, the address is
      maintained in GR28 at all times inside the kernel as part of general exception
      handling.
      
      Having looked over the code, it appears that the parameter may be handed down
      through up to twenty or so layers of functions.  Consider a USB character
      device attached to a USB hub, attached to a USB controller that posts its
      interrupts through a cascaded auxiliary interrupt controller.  A character
      device driver may want to pass regs to the sysrq handler through the input
      layer which adds another few layers of parameter passing.
      
      I've build this code with allyesconfig for x86_64 and i386.  I've runtested the
      main part of the code on FRV and i386, though I can't test most of the drivers.
      I've also done partial conversion for powerpc and MIPS - these at least compile
      with minimal configurations.
      
      This will affect all archs.  Mostly the changes should be relatively easy.
      Take do_IRQ(), store the regs pointer at the beginning, saving the old one:
      
      	struct pt_regs *old_regs = set_irq_regs(regs);
      
      And put the old one back at the end:
      
      	set_irq_regs(old_regs);
      
      Don't pass regs through to generic_handle_irq() or __do_IRQ().
      
      In timer_interrupt(), this sort of change will be necessary:
      
      	-	update_process_times(user_mode(regs));
      	-	profile_tick(CPU_PROFILING, regs);
      	+	update_process_times(user_mode(get_irq_regs()));
      	+	profile_tick(CPU_PROFILING);
      
      I'd like to move update_process_times()'s use of get_irq_regs() into itself,
      except that i386, alone of the archs, uses something other than user_mode().
      
      Some notes on the interrupt handling in the drivers:
      
       (*) input_dev() is now gone entirely.  The regs pointer is no longer stored in
           the input_dev struct.
      
       (*) finish_unlinks() in drivers/usb/host/ohci-q.c needs checking.  It does
           something different depending on whether it's been supplied with a regs
           pointer or not.
      
       (*) Various IRQ handler function pointers have been moved to type
           irq_handler_t.
      Signed-Off-By: NDavid Howells <dhowells@redhat.com>
      (cherry picked from 1b16e7ac850969f38b375e511e3fa2f474a33867 commit)
      7d12e780