i40e/i40evf: Update driver to support napi_complete_done changes
Subsystems (2)
PATCH v3 1/1 i40e/i40evf: 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.
---
v2: Updated code to place the IRQ enabling inside the if statment
This made it so that we are consistent with the recent return value changes
v3: Added i40evf changes as well
drivers/net/ethernet/intel/i40e/i40e_txrx.c | 32 +++++++++++++------------ drivers/net/ethernet/intel/i40evf/i40e_txrx.c | 28 ++++++++++++---------- 2 files changed, 32 insertions(+), 28 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 ); }
drivers/net/ethernet/intel/i40evf/i40e_txrx.c +15 -13
@@ -1494,20 +1494,22 @@ int i40evf_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 i40evf_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) -i40evf_force_wb (vsi, q_vector); -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 i40evf_force_wb which triggers a SW interrupt. +*/ +if (!clean_complete) +i40evf_force_wb (vsi, q_vector); +else +i40e_update_enable_itr (vsi, q_vector); + }return min (work_done, budget -1 ); }
Samudrala
PATCH v3 1/1 i40e/i40evf: Update driver to support napi_complete_done changes
Quoted 6 lines · Alexander Duyck
From: Alexander Duyck <[email protected]>
Recently
napi_complete_donewas 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.
This patch is causing a regression with memcached when using epoll with busy polling.
I think we need to do more investigation before pushing or re-working this patch.
Thanks
Sridhar
Quoted 97 lines
Signed-off-by Alexander Duyck <[email protected]>---
v2: Updated code to place the IRQ enabling inside the if statment
This made it so that we are consistent with the recent return value changesv3: Added i40evf changes as well
drivers/net/ethernet/intel/i40e/i40e_txrx.c | 32 +++++++++++++------------ drivers/net/ethernet/intel/i40evf/i40e_txrx.c | 28 ++++++++++++---------- 2 files changed, 32 insertions(+), 28 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 ); }drivers/net/ethernet/intel/i40evf/i40e_txrx.c +15
-13@@ -1494,20 +1494,22 @@ int i40evf_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 i40evf_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) -i40evf_force_wb (vsi, q_vector); -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 i40evf_force_wb which triggers a SW interrupt. +*/ +if (!clean_complete) +i40evf_force_wb (vsi, q_vector); +else +i40e_update_enable_itr (vsi, q_vector); + }return min (work_done, budget -1 ); }
PATCH v3 1/1 i40e/i40evf: Update driver to support napi_complete_done changes
In reply to Alexander DuyckQuoted 10 lines · Alexander Duyck
From: Alexander Duyck <[email protected]>
Recently
napi_complete_donewas 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]>---
Quoted 9 lines
v2: Updated code to place the IRQ enabling inside the if statment
This made it so that we are consistent with the recent return value changesv3: Added i40evf changes as well
drivers/net/ethernet/intel/i40e/i40e_txrx.c | 32 +++++++++++++------------ drivers/net/ethernet/intel/i40evf/i40e_txrx.c | 28 ++++++++++++---------- 2 files changed, 32 insertions(+), 28 deletions(-)
Jeff,
This patch causes a performance regression due to the way it interacts with the i40e WB on ITR behavior. Can you please drop it from the dev-queue.
Thanks.
- Alex
PATCH v3 1/1 i40e/i40evf: Update driver to support napi_complete_done changes
Quoted 24 lines · Alexander Duyck
Quoted 10 lines · Alexander Duyck
From: Alexander Duyck <[email protected]>
Recently
napi_complete_donewas 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]>---
Quoted 9 lines
v2: Updated code to place the IRQ enabling inside the if statment
This made it so that we are consistent with the recent return value changesv3: Added i40evf changes as well
drivers/net/ethernet/intel/i40e/i40e_txrx.c | 32 +++++++++++++------------ drivers/net/ethernet/intel/i40evf/i40e_txrx.c | 28 ++++++++++++---------- 2 files changed, 32 insertions(+), 28 deletions(-)Jeff,
Quoted 7 lines
This patch causes a performance regression due to the way it interacts with the i40e WB on ITR behavior. Can you please drop it from the dev-queue.
Thanks.
- Alex
Re-sending this time and making sure it is sent to Jeff.
Thanks.
- Alex
PATCH v3 1/1 i40e/i40evf: Update driver to support napi_complete_done changes
In reply to Alexander DuyckQuoted 27 lines · Alexander Duyck
Quoted 16 lines · Alexander Duyck
From: Alexander Duyck <[email protected]>
Recently
napi_complete_donewas 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]>---
v2: Updated code to place the IRQ enabling inside the if statment ???? This made it so that we are consistent with the recent return value changes
Quoted 8 lines
v3: Added i40evf changes as well
?
drivers/net/ethernet/intel/i40e/i40e_txrx.c?? |?? 32 +++++++++++++---
---------
?drivers/net/ethernet/intel/i40evf/i40e_txrx.c|?? 28 ++++++++++++--
--------
? 2 files changed, 32 insertions(+), 28 deletions(-)
Quoted 5 lines
Jeff,
This patch causes a performance regression due to the way it interacts with the i40e WB on ITR behavior.? Can you please drop it from the dev-queue.
I have dropped the patch from my queue/tree.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part
URL: <http://lists.osuosl.org/pipermail/intel-wired-lan/attachments/20170105/d9e4cb64/attachment.asc>