1. 28 10月, 2010 1 次提交
    • P
      synclink_gt: fix per device locking · ffd7d6ba
      Paul Fulghum 提交于
      Fix a long standing bug with per device locking.
      
      Each device has an associated spinlock for synchronizing access to
      hardware and state information with the ISR.  A single hardware card has
      one or more devices.
      
      Bug: Non ISR code correctly acquires and releases the per device lock.
      ISR incorrectly always acquires and releases the lock of the first device
      on the card.
      
      The decoupled and list based nature of the ISR and deferred processing
      interaction allowed this to work in normal operation.  Exceptional events
      like an application forcing hardware shutdown, reset, or reconfiguration
      while active can trigger the bug.
      
      Fixed ISR to acquire and release the per device lock.
      
      One exception is manipulation of the GPIO card resource which is global
      and effectively owned by the first device of the card.  Non-ISR access to
      GPIO resource is changed to use lock of first device on card.
      Signed-off-by: NPaul Fulghum <paulkf@microgate.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      ffd7d6ba
  2. 23 10月, 2010 1 次提交
  3. 24 8月, 2010 1 次提交
  4. 11 8月, 2010 3 次提交
  5. 20 7月, 2010 1 次提交
  6. 03 3月, 2010 1 次提交
    • P
      serial: synclink_gt: dropped transmit data bugfix · de538eb3
      Paul Fulghum 提交于
      Fix transmit bug that could drop send data if write() called close to
      serial transmitter going idle after sending previous data.  Bug is caused
      by incorrect use of device information member tx_count.
      
      Driver originally processed one data block (write call) at a time, waiting
      for transmit idle before sending more.  tx_count recorded how much data
      was loaded in DMA buffers on write(), and was cleared on send completion. 
      tx_count use was overloaded to record accumulated data from put_char()
      callback when transmitter was idle.
      
      A bug was introduced when transmit code was reworked to allow multiple
      blocks of data in the tx DMA buffers which keeps transmitter from going
      idle between blocks.  tx_count was set to size of last block loaded,
      cleared when tx went idle, and monitored to know when to restart
      transmitter without proper synchronization.  tx_count could be cleared
      when unsent data remained in DMA buffers and transmitter required
      restarting, effectively dropping unsent data.
      
      Solution:
      1. tx_count now used only to track accumulated data from put_char
      2. DMA buffer state tracked by direct inspection of descriptors
         with spinlock synchronization
      3. consolidate these tasks in tx_load() :
         a. check for available buffer space
         b. load buffers
         c. restart DMA and or serial transmitter as needed
         These steps were previously duplicated in multiple places,
         sometimes incompletely.
      4. fix use of tx_count as active transmit indicator,
         instead using tx_active which is meant for that purpose
      Signed-off-by: NPaul Fulghum <paulkf@microgate.com>
      Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
      Cc: Greg KH <greg@kroah.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      de538eb3
  7. 01 9月, 2009 1 次提交
  8. 13 7月, 2009 1 次提交
  9. 25 6月, 2009 1 次提交
  10. 11 6月, 2009 2 次提交
  11. 03 4月, 2009 1 次提交
  12. 01 4月, 2009 1 次提交
  13. 22 1月, 2009 1 次提交
  14. 16 1月, 2009 1 次提交
  15. 03 1月, 2009 3 次提交
  16. 17 8月, 2008 1 次提交
  17. 24 7月, 2008 1 次提交
  18. 23 7月, 2008 7 次提交
  19. 21 7月, 2008 3 次提交
  20. 04 7月, 2008 1 次提交
  21. 13 5月, 2008 1 次提交
  22. 30 4月, 2008 4 次提交
  23. 28 4月, 2008 1 次提交
  24. 21 4月, 2008 1 次提交