The wireshark experiment I ran earlier is worth considering again. Wireshark saw block 110413 sent, but the receive tasklet saw a stale block, 107223. In the data file, block 110413 appears where block 110412 should be in addition to appearing in its proper spot. The receive tasklet saw data for block 110412, so the data was good at that point. Next, a tasklet sees stale data.
Let's suppose the hardware failed to increment RXDP or saw the block as self linked due to some caching issue and so reset RXDP to itself. The hardware overwrites block 110412 with data for 110413. That still doesn't explain how a tasklet next sees stale data, since it checks RXDP to make sure it doesn't look at blocks the hardware may be using. So one possibility is that the value if RXDP as seen by the receive tasklet does not match what the hardware believes. Maybe the value is incremented non-atomically and the tasklet sees an intermediate state or the register value is wrong for an instant. I wonder what the tasklet does in this case. Maybe it loops over the entire queue until it gets to the self-linked end. I think I should run a similar experiment and have the receive tasklet dump information about the receive buffers and RXDP if it ever sees a block that's not within 500 blocks of what it expects to see. bob ==================== Jun 4 14:40:35 ugg kernel: [238080.728324] ATH 0 block 110410 110411 Jun 4 14:40:35 ugg kernel: [238080.728376] MACI 0 block 110410 110411 Jun 4 14:40:35 ugg kernel: [238080.728453] MACO 0 block 110410 110411 Jun 4 14:40:35 ugg kernel: [238080.728817] ATH 0 block 110412 0 Jun 4 14:40:35 ugg kernel: [238080.728875] MACI 0 block 110412 0 Jun 4 14:40:35 ugg kernel: [238080.728978] MACO 0 block 110412 0 Jun 4 14:40:35 ugg kernel: [238080.730060] ATH 0 block 107223 0 Jun 4 14:40:35 ugg kernel: [238080.730120] MACI 0 block 107223 0 No MACO is printed, so the block 107223 skb was dropped. Jun 4 14:40:35 ugg kernel: [238080.730962] ATH 0 block 110415 0 Jun 4 14:40:35 ugg kernel: [238080.731022] MACI 0 block 110415 0 Jun 4 14:40:35 ugg kernel: [238080.731105] MACO 0 block 110415 0 Later, block 110413/110414 is retransmitted. Jun 4 14:40:35 ugg kernel: [238080.765530] ATH 0 block 110458 110459 Jun 4 14:40:35 ugg kernel: [238080.765591] MACI 0 block 110458 110459 Jun 4 14:40:35 ugg kernel: [238080.765694] MACO 0 block 110458 110459 Jun 4 14:40:35 ugg kernel: [238080.767955] ATH 0 block 110413 110414 Jun 4 14:40:35 ugg kernel: [238080.768045] MACI 0 block 110413 110414 Jun 4 14:40:35 ugg kernel: [238080.768129] MACO 0 block 110413 110414
_______________________________________________ ath5k-devel mailing list ath5k-devel@lists.ath5k.org https://lists.ath5k.org/mailman/listinfo/ath5k-devel