On 10.05.22 18:13, Alexander Wetzel wrote:
On 10.05.22 18:10, Felix Fietkau wrote:
On 10.05.22 17:58, Alexander Wetzel wrote:
Let iTXQ drivers also register four queues in netdev and move queue
assignment to ndo_select_queue(), like it's done for other drivers.
This gets rid of a special case in mac80211 and also increases the
chance that when we call skb_get_hash() the skb is still hot in the CPU
buffers.
Signed-off-by: Alexander Wetzel <alexander@xxxxxxxxxxxxxx>
This has the disadvantage of requiring a redundant sta lookup in the tx
path for iTXQ drivers. I think the CPU cost of that one is probably
higher than any potential gain from calling skb_get_hash a bit earlier.
Found that one, yes. But why do we then not drop ndo_select_queue() for
all drivers?
Or maybe just call skb_get_hash() in ndo_select_queue()... But I guess
then it would make more sense to move the ndo_select_queue() into
netdev, so all drivers get the optimization.
When not using iTXQ, packets are buffered in netdev qdisc. In order for
that to work, ndo_select_queue needs to be called *before* packets are
put into qdisc (so long before the actual mac80211 xmit handler).
To fix this properly, we'd need to move to iTXQ for all drivers (by
having mac80211 push packets via drv_tx calls after pulling from iTXQ).
This can probably be done without having to modify the drivers.
- Felix