On 2010-06-28 2:01 AM, Björn Smedman wrote: > 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? There's an easy solution which would take into account the 4ms frame limit properly, and which could work without any memcpy() hacks: I could just grab a pointer to the last buffer in the tid queue in the ath_tx_sched_aggr() function, then pass it to ath_lookup_rate() via ath_tx_form_aggr(), and also to ath_buf_set_rate(). Then I make those functions use this last buffer as reference for the rate lookup. - Felix -- 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