|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