2010/6/23 Felix Fietkau <nbd@xxxxxxxxxxx>: > On 2010-06-23 6:36 PM, Björn Smedman wrote: >> [snip] As >> far as I can tell, whenever the first subframe of an aggregate fails >> and is software retried, the rate control feedback for that aggregate >> is lost (ath_tx_rc_status() is never called with update_rc = true in >> xmit.c). > I think you misread that part. The loop iterates over all subframes in > the aggregate, and the first successful or swretry-expired frame will > trigger an AMPDU status report, which will update the RC. The first > subframe of the A-MPDU is not getting any special treatment here. You're (still) right I misread that part. But I think there is another problem when the first subframe of an A-MPDU is not acked: if it has not expired yet it is (as I understand it) prepended to the tid queue for software retry and will therefore be the first subframe of the next aggregate as well, which will then be transmitted with the same "old" rates and counts as the previous aggregate. So the feedback from xmit to rc works, but the control information flow from rc to xmit is delayed. I guess the real solution is your rewrite... But in the mean time perhaps we can memcpy the tx_info control from the last subframe to the first before calling ath_buf_set_rate() in ath_tx_sched_aggr()? Could that have any side effects? It could make the aggregate size go over the 4 ms limit I guess... How bad is that? > - Felix /Björn -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html