b43: fix transmit failure when VT is switched
[linux-2.6-block.git] / drivers / net / wireless / broadcom / b43 / dma.c
index 6837064908bed38f05c4d98642c50c82d9cf984d..6b0e1ec346cb60aacd8076600033cf9ee554c462 100644 (file)
@@ -1484,7 +1484,7 @@ void b43_dma_handle_txstatus(struct b43_wldev *dev,
        int slot, firstused;
        bool frame_succeed;
        int skip;
-       static u8 err_out1, err_out2;
+       static u8 err_out1;
 
        ring = parse_cookie(dev, status->cookie, &slot);
        if (unlikely(!ring))
@@ -1518,13 +1518,13 @@ void b43_dma_handle_txstatus(struct b43_wldev *dev,
                        }
                } else {
                        /* More than a single header/data pair were missed.
-                        * Report this error once.
+                        * Report this error, and reset the controller to
+                        * revive operation.
                         */
-                       if (!err_out2)
-                               b43dbg(dev->wl,
-                                      "Out of order TX status report on DMA ring %d. Expected %d, but got %d\n",
-                                      ring->index, firstused, slot);
-                       err_out2 = 1;
+                       b43dbg(dev->wl,
+                              "Out of order TX status report on DMA ring %d. Expected %d, but got %d\n",
+                              ring->index, firstused, slot);
+                       b43_controller_restart(dev, "Out of order TX");
                        return;
                }
        }