Skip to content
Snippets Groups Projects
  1. Jan 04, 2011
  2. Dec 13, 2010
  3. Nov 30, 2010
  4. Nov 17, 2010
  5. Nov 15, 2010
  6. Oct 11, 2010
  7. Oct 05, 2010
    • Helmut Schaa's avatar
      rt2x00: Fix race between dma mapping and clearing rx entries in rt2800pci · 95192339
      Helmut Schaa authored
      
      During rx, rt2x00lib calls rt2800pci_fill_rxdone to read the RX
      descriptor. At that time the skb is already dma unmapped but no new skb
      was dma mapped for this entry again. However, rt2800pci_fill_rxdone also
      moves the hw rx queue index, marking this entry to be available for
      reuse. Since no new skb was dma mapped and also the previous skb was
      unmapped this might lead to strange hw behavior.
      
      To fix this issue move the hw rx queue index increment to
      rt2800pci_clear_entry where a new skb was already dma mapped and can be
      safely used by the hw.
      
      Signed-off-by: default avatarHelmut Schaa <helmut.schaa@googlemail.com>
      Signed-off-by: default avatarIvo van Doorn <IvDoorn@gmail.com>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      95192339
    • Helmut Schaa's avatar
      rt2x00: rework tx status handling in rt2800pci · 96c3da7d
      Helmut Schaa authored
      
      This patch changes the way tx status reports are handled by rt2800pci.
      Previously rt2800pci would sometimes lose tx status reports as the
      TX_STA_FIFO register is a fifo of 16 entries that can overflow in case
      we don't read it often/fast enough. Since interrupts are disabled in the
      device during the execution of the interrupt thread it happend sometimes
      under high network and CPU load that processing took too long and a few
      tx status reports were dropped by the hw.
      
      To fix this issue the TX_STA_FIFO register is read directly in the
      interrupt handler and stored in a kfifo which is large enough to hold
      all status reports of all used tx queues.
      
      To process the status reports a new tasklet txstatus_tasklet is used.
      Using the already used interrupt thread is not possible since we don't
      want to disable the TX_FIFO_STATUS interrupt while processing them and
      it is not possible to schedule the interrupt thread multiple times for
      execution. A tasklet instead can be scheduled multiple times which
      allows to leave the TX_FIFO_STATUS interrupt enabled while a previously
      scheduled tasklet is still executing.
      
      In short: All other interrupts are handled in the interrupt thread as
      before. Only the TX_FIFO_STATUS interrupt is partly handled in the
      interrupt handler and finished in the according tasklet.
      
      One drawback of this patch is that it duplicates some code from
      rt2800lib. However, that can be cleaned up in the future once the
      rt2800usb and rt2800pci tx status handling converge more.
      
      Using this patch on a Ralink RT3052 embedded board gives me a reliable
      wireless connection even under high CPU and network load. I've
      transferred several gigabytes without any queue lockups.
      
      Signed-off-by: default avatarHelmut Schaa <helmut.schaa@googlemail.com>
      Signed-off-by: default avatarIvo van Doorn <IvDoorn@gmail.com>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      96c3da7d
  8. Sep 14, 2010
  9. Aug 31, 2010
  10. Aug 25, 2010
  11. Aug 16, 2010
  12. Jul 12, 2010
  13. Jun 30, 2010
Loading