iavf: in iavf_down, disable queues when removing the driver
authorMichal Schmidt <mschmidt@redhat.com>
Wed, 25 Oct 2023 18:32:13 +0000 (11:32 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 2 Nov 2023 08:35:28 +0000 (09:35 +0100)
[ Upstream commit 53798666648af3aa0dd512c2380576627237a800 ]

In iavf_down, we're skipping the scheduling of certain operations if
the driver is being removed. However, the IAVF_FLAG_AQ_DISABLE_QUEUES
request must not be skipped in this case, because iavf_close waits
for the transition to the __IAVF_DOWN state, which happens in
iavf_virtchnl_completion after the queues are released.

Without this fix, "rmmod iavf" takes half a second per interface that's
up and prints the "Device resources not yet released" warning.

Fixes: c8de44b577eb ("iavf: do not process adminq tasks when __IAVF_IN_REMOVE_TASK is set")
Signed-off-by: Michal Schmidt <mschmidt@redhat.com>
Reviewed-by: Wojciech Drewek <wojciech.drewek@intel.com>
Tested-by: Rafal Romanowski <rafal.romanowski@intel.com>
Tested-by: Jacob Keller <jacob.e.keller@intel.com>
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Link: https://lore.kernel.org/r/20231025183213.874283-1-jacob.e.keller@intel.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/ethernet/intel/iavf/iavf_main.c

index 1ae90f8..326bb5f 100644 (file)
@@ -1449,9 +1449,9 @@ void iavf_down(struct iavf_adapter *adapter)
                        adapter->aq_required |= IAVF_FLAG_AQ_DEL_FDIR_FILTER;
                if (!list_empty(&adapter->adv_rss_list_head))
                        adapter->aq_required |= IAVF_FLAG_AQ_DEL_ADV_RSS_CFG;
-               adapter->aq_required |= IAVF_FLAG_AQ_DISABLE_QUEUES;
        }
 
+       adapter->aq_required |= IAVF_FLAG_AQ_DISABLE_QUEUES;
        mod_delayed_work(adapter->wq, &adapter->watchdog_task, 0);
 }