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