Michael Buesch wrote:
> 
> Just to explain my idea:
> I think there are two ways for this warning to trigger.
> The first being mac80211 being broken and not stopping the queue on request.
> That's probably not very likely.
> The second could possibly be the firmware reporting status for one frame
> multiple times. I did not check the whole code, but this could possibly
> lead to an integer under/overflow in the free_slots() calculation. A signed 
> integer
> is used, so I think it can go negative, which would trigger the warning.
> 
> I don't see another way to trigger the message.
> And as it only seems to happen with open firmware, it seems likely be caused
> by TX status reporting in the firmware.

The message also triggers with proprietary firmware. My debugging hunk is

@@ -1340,7 +1350,8 @@ int b43_dma_tx(struct b43_wldev *dev, st
        B43_WARN_ON(ring->stopped);

        if (unlikely(free_slots(ring) < TX_SLOTS_PER_FRAME)) {
-               b43warn(dev->wl, "DMA queue overflow\n");
+               b43warn(dev->wl, "DMA queue overflow with free_slots =
%d\n",
+                       free_slots(ring));
                err = -ENOSPC;
                goto out_unlock;
        }

The revised printk shows

b43-phy0 warning: DMA queue overflow with free_slots = 0

Larry
_______________________________________________
Bcm43xx-dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev

Reply via email to