i40e: Fix ATR queue selection
Without this patch, ATR does not work. Receive/transmit uses queue selection based on SW DCB hashing method. If traffic classes are not configured for PF, then use netdev_pick_tx function for selecting queue for packet transmission. Instead of calling i40e_swdcb_skb_tx_hash, call netdev_pick_tx, which ensures that packet is transmitted/received from CPU that is running the application. Reproduction steps: 1. Load i40e driver 2. Map each MSI interrupt of i40e port for each CPU 3. Disable ntuple, enable ATR i.e.: ethtool -K $interface ntuple off ethtool --set-priv-flags $interface flow-director-atr 4. Run application that is generating traffic and is bound to a single CPU, i.e.: taskset -c 9 netperf -H 1.1.1.1 -t TCP_RR -l 10 5. Observe behavior: Application's traffic should be restricted to the CPU provided in taskset. Fixes: 89ec1f0886c1 ("i40e: Fix queue-to-TC mapping on Tx") Signed-off-by: Przemyslaw Patynowski <przemyslawx.patynowski@intel.com> Signed-off-by: Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com> Tested-by: Dave Switzer <david.switzer@intel.com> Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
316749009f
commit
a222be597e
@ -3663,8 +3663,7 @@ u16 i40e_lan_select_queue(struct net_device *netdev,
|
|||||||
|
|
||||||
/* is DCB enabled at all? */
|
/* is DCB enabled at all? */
|
||||||
if (vsi->tc_config.numtc == 1)
|
if (vsi->tc_config.numtc == 1)
|
||||||
return i40e_swdcb_skb_tx_hash(netdev, skb,
|
return netdev_pick_tx(netdev, skb, sb_dev);
|
||||||
netdev->real_num_tx_queues);
|
|
||||||
|
|
||||||
prio = skb->priority;
|
prio = skb->priority;
|
||||||
hw = &vsi->back->hw;
|
hw = &vsi->back->hw;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user