On Mon May 5, 2025 at 3:51 PM AEST, Akihiko Odaki wrote: > On 2025/05/02 12:17, Nicholas Piggin wrote: >> The msix interrupt throttling timer expiry sends an interrupt even if >> there is no unmasked interrupt causes. This can be observed by seeing >> two interrupts in response to a single event when throttling is active. >> >> The e1000e non-msix paths seem to get this right by masking and testing >> ICR and IMS. Add similar checks for the msix cases in e1000e and igb. >> >> Signed-off-by: Nicholas Piggin <npig...@gmail.com> >> --- >> hw/net/e1000e_core.c | 10 ++++++---- >> hw/net/igb_core.c | 11 ++++++++--- >> 2 files changed, 14 insertions(+), 7 deletions(-) >> >> diff --git a/hw/net/e1000e_core.c b/hw/net/e1000e_core.c >> index 022884a2ea0..d53f70065ef 100644 >> --- a/hw/net/e1000e_core.c >> +++ b/hw/net/e1000e_core.c >> @@ -230,10 +230,12 @@ e1000e_intrmgr_on_msix_throttling_timer(void *opaque) >> >> timer->running = false; >> >> - causes = find_msix_causes(core, idx); >> - trace_e1000e_irq_msix_notify_postponed_vec(idx); >> - msix_notify(core->owner, idx); >> - e1000e_msix_auto_clear_mask(core, causes); >> + causes = find_msix_causes(core, idx) & core->mac[IMS] & core->mac[ICR]; >> + if (causes) { >> + trace_e1000e_irq_msix_notify_postponed_vec(idx); >> + msix_notify(core->owner, causes); > > I think this should be: msix_notify(core->owner, idx);
Yes good catch, it was fixed in the next patch but it's a but from splitting. Thank you. Thanks, Nick