i40e: Update driver to support napi_complete_done changes
Subsystems (2)
PATCH v2 1/1 i40e: Update driver to support napi_complete_done changes
From: Alexander Duyck <[email protected]>
Recently napi_complete_done was updated so that it will return zero if we are using the queue vector for busy polling. When this is the case we don't need to re-enable interrupts as the busy polling will reschedule the NAPI instance when it is finally done polling.
Signed-off-by Alexander Duyck <[email protected]>
--- drivers/net/ethernet/intel/i40e/i40e_txrx.c | 32 ++++++++++++++------------- 1 file changed, 17 insertions(+), 15 deletions(-)
drivers/net/ethernet/intel/i40e/i40e_txrx.c +17 -15
@@ -2033,22 +2033,24 @@ int i40e_napi_poll(struct napi_struct *napi, int budget) } } -if (vsi->back->flags &I40E_TXR_FLAGS_WB_ON_ITR ) - q_vector->arm_wb_state = false; - -/* Work is done so exit the polling mode and re-enable the interrupt */ -napi_complete_done (napi, work_done); - -/* If we're prematurely stopping polling to fix the interrupt -* affinity we want to make sure polling starts back up so we -* issue a call to i40e_force_wb which triggers a SW interrupt. +/* Work is done so exit the polling mode, +* if not busy polling re-enable interrupts. */ -if (!clean_complete) -i40e_force_wb (vsi, q_vector); -else if (!(vsi->back->flags &I40E_FLAG_MSIX_ENABLED )) -i40e_irq_dynamic_enable_icr0 (vsi->back, false); -else -i40e_update_enable_itr (vsi, q_vector); +if (napi_complete_done (napi, work_done)) { +if (vsi->back->flags &I40E_TXR_FLAGS_WB_ON_ITR ) + q_vector->arm_wb_state = false; + +/* If we're prematurely stopping polling to fix the interrupt +* affinity we want to make sure polling starts back up so we +* issue a call to i40e_force_wb which triggers a SW interrupt. +*/ +if (!clean_complete) +i40e_force_wb (vsi, q_vector); +else if (!(vsi->back->flags &I40E_FLAG_MSIX_ENABLED )) +i40e_irq_dynamic_enable_icr0 (vsi->back, false); +else +i40e_update_enable_itr (vsi, q_vector); + }return min (work_done, budget -1 ); }