|SUCCESS| net/iavf: fix vectorization high ping latency
dpdklab at iol.unh.edu
dpdklab at iol.unh.edu
Fri May 29 02:13:42 CEST 2026
Test-Label: ai-code-review
Test-Status: SUCCESS
https://dpdk.org/patch/164543
_AI Code Review_
=== Patch Review: series.patch (via Claude) ===
Review date: 2026-05-29
85e3a1b9f2c0 (assumed git sha based on patch metadata)
Author: Anurag Mandal <anurag.mandal at intel.com>
net/iavf: fix vectorization high ping latency
This patch addresses high latency in the iavf driver by ensuring proper
initialization of interrupt throttle rate (ITR) registers. The fix
explicitly sets IAVF_VFINT_ITRN1 to 2us during queue IRQ configuration
and modifies interrupt disable behavior to include interval settings.
> diff --git a/drivers/net/intel/iavf/iavf_ethdev.c b/drivers/net/intel/iavf/iavf_ethdev.c
> index bdf650b822..971c10cefe 100644
> --- a/drivers/net/intel/iavf/iavf_ethdev.c
> +++ b/drivers/net/intel/iavf/iavf_ethdev.c
> @@ -862,6 +862,16 @@ static int iavf_config_rx_queues_irqs(struct rte_eth_dev *dev,
> (0 << IAVF_VFINT_DYN_CTLN1_ITR_INDX_SHIFT) |
> IAVF_VFINT_DYN_CTLN1_WB_ON_ITR_MASK |
> (2UL << IAVF_VFINT_DYN_CTLN1_INTERVAL_SHIFT));
> + /* The interval value lives in the separate IAVF_VFINT_ITRN1
> + * index register, which is only cleared on a VF reset
> + * It is not implicitly re-initialized by the DYN_CTLN1 write
> + * above, so if it was left dirty by a previous configuration,
> + * program it explicitly here to the same 2us interval for
> + * ITR index 0.
> + */
This multi-line comment violates the coding style. The opening /* should
be on its own line for multi-line comments, as specified in the coding
style guide.
> + IAVF_WRITE_REG(hw,
> + IAVF_VFINT_ITRN1(0, vf->msix_base - 1),
> + 2UL);
Does this write to IAVF_VFINT_ITRN1 need a flush operation to ensure it
takes effect before any subsequent operations in iavf_config_rx_queues_irqs()?
The existing code at line 862 has a WRITE_FLUSH at line 866, but would this
new register write also need to be flushed to guarantee ordering?
[ ... ]
> @@ -2078,9 +2088,16 @@ iavf_dev_rx_queue_intr_disable(struct rte_eth_dev *dev, uint16_t queue_id)
> return -EIO;
> }
>
> + /* Set the ITR for index zero, to 2us to make sure that
> + * sufficient time for aggregation to occur, but not to
> + * increase the latency drastically.
> + */
This multi-line comment also violates the coding style - the opening /*
should be on its own line.
> +
> IAVF_WRITE_REG(hw,
> IAVF_VFINT_DYN_CTLN1(msix_intr - IAVF_RX_VEC_START),
> - IAVF_VFINT_DYN_CTLN1_WB_ON_ITR_MASK);
> + (0 << IAVF_VFINT_DYN_CTLN1_ITR_INDX_SHIFT) |
> + IAVF_VFINT_DYN_CTLN1_WB_ON_ITR_MASK |
> + (2UL << IAVF_VFINT_DYN_CTLN1_INTERVAL_SHIFT));
Does iavf_dev_rx_queue_intr_disable() also need to set IAVF_VFINT_ITRN1
similar to the change in iavf_config_rx_queues_irqs()? The commit message
states that IAVF_VFINT_ITRN1 is only cleared on VF reset and could contain
stale values, but this function only modifies IAVF_VFINT_DYN_CTLN1 while
omitting the IAVF_VFINT_ITRN1 write that was added to
iavf_config_rx_queues_irqs().
More information about the test-report
mailing list