The spec explicitly permits xITR register interval field to have a value of zero to disable throttling. The e1000e model already allows for this in the throttling logic.
Signed-off-by: Nicholas Piggin <npig...@gmail.com> --- hw/net/e1000e_core.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/hw/net/e1000e_core.c b/hw/net/e1000e_core.c index 24138587905..e32955d244b 100644 --- a/hw/net/e1000e_core.c +++ b/hw/net/e1000e_core.c @@ -2783,7 +2783,11 @@ e1000e_set_itr(E1000ECore *core, int index, uint32_t val) trace_e1000e_irq_itr_set(val); core->itr_guest_value = interval; - core->mac[index] = MAX(interval, E1000E_MIN_XITR); + if (interval == 0) { + core->mac[index] = 0; + } else { + core->mac[index] = MAX(interval, E1000E_MIN_XITR); + } } static void @@ -2795,7 +2799,11 @@ e1000e_set_eitr(E1000ECore *core, int index, uint32_t val) trace_e1000e_irq_eitr_set(eitr_num, val); core->eitr_guest_value[eitr_num] = interval; - core->mac[index] = MAX(interval, E1000E_MIN_XITR); + if (interval == 0) { + core->mac[index] = 0; + } else { + core->mac[index] = MAX(interval, E1000E_MIN_XITR); + } } static void -- 2.45.2