From: Mohammad Heib Toggling flow-director-atr via ethtool private flags does not trigger a ring reset. If ATR was disabled while fd_ena was cleared in the TX queue HW context (e.g. after a ring reset with both ATR and ntuple off), re-enabling ATR causes i40e_atr() to inject FDIR descriptors into a queue where fd_ena is still 0. Trigger a PF reset when ATR is re-enabled so that fd_ena is re-evaluated based on the current flag state. Signed-off-by: Mohammad Heib --- drivers/net/ethernet/intel/i40e/i40e_ethtool.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c index 6d2b076049f7..bb37f8cc4643 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c +++ b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c @@ -5301,6 +5301,13 @@ static int i40e_set_priv_flags(struct net_device *dev, u32 flags) test_bit(I40E_FLAG_SOURCE_PRUNING_DIS, changed_flags)) reset_needed = BIT(__I40E_PF_RESET_REQUESTED); + /* Re-enabling ATR requires a reset to update fd_ena in the + * TX queue HW context. + */ + if (test_bit(I40E_FLAG_FD_ATR_ENA, changed_flags) && + test_bit(I40E_FLAG_FD_ATR_ENA, new_flags)) + reset_needed = BIT(__I40E_PF_RESET_REQUESTED); + /* Before we finalize any flag changes, we need to perform some * checks to ensure that the changes are supported and safe. */ -- 2.53.0