1. 22 11月, 2008 2 次提交
    • P
      i2c-omap: Close suspected race between omap_i2c_idle() and omap_i2c_isr() · 0cbbcffd
      Paul Walmsley 提交于
      omap_i2c_idle() sets an internal flag, "dev->idle", instructing its
      ISR to decline interrupts.  It sets this flag before it actually masks
      the interrupts on the I2C controller.  This is problematic, since an
      I2C interrupt could arrive after dev->idle is set, but before the
      interrupt source is masked.  When this happens, Linux disables the I2C
      controller's IRQ, causing all future transactions on the bus to fail.
      
      Symptoms, happening on about 7% of boots:
      
         irq 56: nobody cared (try booting with the "irqpoll" option)
         <warning traceback here>
         Disabling IRQ #56
         i2c_omap i2c_omap.1: controller timed out
      
      In omap_i2c_idle(), this patch sets dev->idle only after the interrupt
      mask write to the I2C controller has left the ARM write buffer.
      That's probably the major offender.  For additional prophylaxis, in
      omap_i2c_unidle(), the patch clears the dev->idle flag before
      interrupts are enabled, rather than afterwards.
      
      The patch has survived twenty-two reboots on the 3430SDP here without
      wedging I2C1.  Not absolutely dispositive, but promising!
      Signed-off-by: NPaul Walmsley <paul@pwsan.com>
      Signed-off-by: NTony Lindgren <tony@atomide.com>
      
      0cbbcffd
    • J
      i2c-omap: Do not use interruptible wait call in omap_i2c_xfer_msg · b7af349b
      Jarkko Nikula 提交于
      If there is a signal pending and wait_for_completion_interruptible_timeout
      terminates with -ERESTARTSYS, we return and disable the i2c clocks in
      omap_i2c_xfer.
      
      If we terminate before sending last i2c message with a stop condition, the
      bus remains busy and we are not able to send new messages into bus with
      successive omap_i2c_xfer calls. Therefore a pending signal is not caught
      here and we return only because of timeout or i2c error.
      Signed-off-by: NJarkko Nikula <jarkko.nikula@nokia.com>
      Signed-off-by: NJuha Yrjola <juha.yrjola@solidboot.com>
      Signed-off-by: NTony Lindgren <tony@atomide.com>
      
      b7af349b
  2. 21 11月, 2008 24 次提交
  3. 20 11月, 2008 14 次提交