1. 16 Feb, 2007 1 commit
  2. 18 Jan, 2007 6 commits
  3. 07 Dec, 2006 1 commit
  4. 03 Nov, 2006 1 commit
  5. 05 Oct, 2006 1 commit
    • David Howells's avatar
      IRQ: Maintain regs pointer globally rather than passing to IRQ handlers · 7d12e780
      David Howells authored
      
      
      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: default avatarDavid Howells <dhowells@redhat.com>
      (cherry picked from 1b16e7ac850969f38b375e511e3fa2f474a33867 commit)
      7d12e780
  6. 02 Jul, 2006 1 commit
  7. 25 Jun, 2006 1 commit
  8. 26 May, 2006 1 commit
  9. 26 Apr, 2006 2 commits
  10. 12 Apr, 2006 6 commits
  11. 26 Mar, 2006 1 commit
  12. 25 Mar, 2006 1 commit
    • Andrew Morton's avatar
      [PATCH] ads7846 build fix · 4cae59d2
      Andrew Morton authored
      
      
      sparc32:
      
      drivers/input/touchscreen/ads7846.c: In function `ads7846_read12_ser':
      drivers/input/touchscreen/ads7846.c:206: warning: implicit declaration of function `disable_irq'
      drivers/input/touchscreen/ads7846.c:208: warning: implicit declaration of function `enable_irq'
      
      Cc: Dmitry Torokhov <dtor_core@ameritech.net>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      4cae59d2
  13. 15 Feb, 2006 2 commits
  14. 19 Jan, 2006 1 commit
  15. 14 Jan, 2006 3 commits
    • Vitaly Wool's avatar
      [PATCH] spi: use linked lists rather than an array · 8275c642
      Vitaly Wool authored
      
      
      This makes the SPI core and its users access transfers in the SPI message
      structure as linked list not as an array, as discussed on LKML.
      
      From: David Brownell <dbrownell@users.sourceforge.net>
      
        Updates including doc, bugfixes to the list code, add
        spi_message_add_tail().  Plus, initialize things _before_ grabbing the
        locks in some cases (in case it grows more expensive).  This also merges
        some bitbang updates of mine that didn't yet make it into the mm tree.
      Signed-off-by: default avatarVitaly Wool <vwool@ru.mvista.com>
      Signed-off-by: default avatarDmitry Pervushin <dpervushin@gmail.com>
      Signed-off-by: default avatarDavid Brownell <dbrownell@users.sourceforge.net>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      8275c642
    • David Brownell's avatar
      [PATCH] spi: ads7836 uses spi_driver · 2e5a7bd9
      David Brownell authored
      
      
      This updates the ads7864 driver to use the new "spi_driver" struct, and
      includes some minor unrelated cleanup.
      Signed-off-by: default avatarDavid Brownell <dbrownell@users.sourceforge.net>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      2e5a7bd9
    • David Brownell's avatar
      [PATCH] spi: ads7846 driver · ffa458c1
      David Brownell authored
      
      
      This is a driver for the ADS7846 touchscreen sensor, derived from
      the corgi_ts and omap_ts drivers.  Key differences from those two:
      
        - Uses the new SPI framework (minimalist version)
        - <linux/spi/ads7846.h> abstracts board-specific touchscreen info
        - Sysfs attributes for the temperature and voltage sensors
        - Uses fewer ARM-specific IRQ primitives
      
      The temperature and voltage sensors show up in sysfs like this:
      
        $ pwd
        /sys/devices/platform/omap-uwire/spi2.0
        $ ls
        bus@          input:event0@ power/        temp1         vbatt
        driver@       modalias      temp0         vaux
        $ cat modalias
        ads7846
        $ cat temp0
        991
        $ cat temp1
        1177
        $
      
      So far only basic testing has been done.  There's a fair amount of hardware
      that uses this sensor, and which also runs Linux, which should eventually
      be able to use this driver.
      
      One portability note may be of special interest.  It turns out that not all
      SPI controllers are happy issuing requests that do things like "write 8 bit
      command, read 12 bit response".  Most of them seem happy to handle various
      word sizes, so the issue isn't "12 bit response" but rather "different rx
      and tx write sizes", despite that being a common MicroWire convention.  So
      this version of the driver no longer reads 12 bit native-endian words; it
      reads 16-bit big-endian responses, then byteswaps them and shifts the
      results to discard the noise.
      Signed-off-by: default avatarDavid Brownell <david-b@pacbell.net>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      ffa458c1