netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net v2] idpf: synchronize pending IRQs after disable
@ 2025-02-27 21:16 Tony Nguyen
  2025-02-28 22:40 ` Jakub Kicinski
  0 siblings, 1 reply; 4+ messages in thread
From: Tony Nguyen @ 2025-02-27 21:16 UTC (permalink / raw)
  To: davem, kuba, pabeni, edumazet, andrew+netdev, netdev
  Cc: Ahmed Zaki, anthony.l.nguyen, willemb, Madhu Chittim,
	Simon Horman, Samuel Salin

From: Ahmed Zaki <ahmed.zaki@intel.com>

IDPF deinits all interrupts in idpf_vport_intr_deinit() by first disabling
the interrupt registers in idpf_vport_intr_dis_irq_all(), then later on frees
the irqs in idpf_vport_intr_rel_irq().

Prevent any races by waiting for pending IRQ handler after it is disabled.
This will ensure the IRQ is cleanly freed afterwards.

Fixes: d4d558718266 ("idpf: initialize interrupts and enable vport")
Reviewed-by: Madhu Chittim <madhu.chittim@intel.com>
Suggested-by: Sudheer Mogilappagari <sudheer.mogilappagari@intel.com>
Signed-off-by: Ahmed Zaki <ahmed.zaki@intel.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Tested-by: Samuel Salin <Samuel.salin@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
---
v1 (originally from): https://lore.kernel.org/netdev/20250224190647.3601930-4-anthony.l.nguyen@intel.com/
- Rewrote commit message

 drivers/net/ethernet/intel/idpf/idpf_txrx.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/intel/idpf/idpf_txrx.c b/drivers/net/ethernet/intel/idpf/idpf_txrx.c
index 977741c41498..70387e091e69 100644
--- a/drivers/net/ethernet/intel/idpf/idpf_txrx.c
+++ b/drivers/net/ethernet/intel/idpf/idpf_txrx.c
@@ -3593,10 +3593,15 @@ static void idpf_vport_intr_rel_irq(struct idpf_vport *vport)
 static void idpf_vport_intr_dis_irq_all(struct idpf_vport *vport)
 {
 	struct idpf_q_vector *q_vector = vport->q_vectors;
-	int q_idx;
+	int q_idx, vidx, irq_num;
+
+	for (q_idx = 0; q_idx < vport->num_q_vectors; q_idx++) {
+		vidx = vport->q_vector_idxs[q_idx];
+		irq_num = vport->adapter->msix_entries[vidx].vector;
 
-	for (q_idx = 0; q_idx < vport->num_q_vectors; q_idx++)
 		writel(0, q_vector[q_idx].intr_reg.dyn_ctl);
+		synchronize_irq(irq_num);
+	}
 }
 
 /**
-- 
2.47.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2025-03-01  0:47 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-02-27 21:16 [PATCH net v2] idpf: synchronize pending IRQs after disable Tony Nguyen
2025-02-28 22:40 ` Jakub Kicinski
2025-02-28 23:59   ` Ahmed Zaki
2025-03-01  0:47     ` Jakub Kicinski

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).