[1/2] net/iavf: fix missing check for interrupt errors

Message ID 20250310131116.557117-1-bruce.richardson@intel.com (mailing list archive)
State Accepted, archived
Delegated to: Bruce Richardson
Headers
Series [1/2] net/iavf: fix missing check for interrupt errors |

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

Bruce Richardson March 10, 2025, 1:11 p.m. UTC
When registering interrupts, there was no check if the registration of
the interrupt succeeded. Add in such a check, and go to fallback path
if the check fails. This prevents errors on FreeBSD due to missed
admin queue messages.

Fixes: cd3b124955d4 ("net/iavf: enable interrupt polling")
Cc: stable@dpdk.org

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
 drivers/net/intel/iavf/iavf_ethdev.c | 12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)
  

Comments

Medvedkin, Vladimir March 18, 2025, 12:35 p.m. UTC | #1
Acked-by: Vladimir Medvedkin <vladimir.medvedkin@intel.com>

On 10/03/2025 13:11, Bruce Richardson wrote:
> When registering interrupts, there was no check if the registration of
> the interrupt succeeded. Add in such a check, and go to fallback path
> if the check fails. This prevents errors on FreeBSD due to missed
> admin queue messages.
>
> Fixes: cd3b124955d4 ("net/iavf: enable interrupt polling")
> Cc: stable@dpdk.org
>
> Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
> ---
>   drivers/net/intel/iavf/iavf_ethdev.c | 12 +++++-------
>   1 file changed, 5 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/net/intel/iavf/iavf_ethdev.c b/drivers/net/intel/iavf/iavf_ethdev.c
> index 9cd2b0c867..1ab84b0bfc 100644
> --- a/drivers/net/intel/iavf/iavf_ethdev.c
> +++ b/drivers/net/intel/iavf/iavf_ethdev.c
> @@ -2825,18 +2825,16 @@ iavf_dev_init(struct rte_eth_dev *eth_dev)
>   			&eth_dev->data->mac_addrs[0]);
>   
>   
> -	if (vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_WB_ON_ITR) {
> -		/* register callback func to eal lib */
> -		rte_intr_callback_register(pci_dev->intr_handle,
> -					   iavf_dev_interrupt_handler,
> -					   (void *)eth_dev);
> +	if (vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_WB_ON_ITR &&
> +			/* register callback func to eal lib */
> +			rte_intr_callback_register(pci_dev->intr_handle,
> +				   iavf_dev_interrupt_handler, (void *)eth_dev) == 0)
>   
>   		/* enable uio intr after callback register */
>   		rte_intr_enable(pci_dev->intr_handle);
> -	} else {
> +	else
>   		rte_eal_alarm_set(IAVF_ALARM_INTERVAL,
>   				  iavf_dev_alarm_handler, eth_dev);
> -	}
>   
>   	/* configure and enable device interrupt */
>   	iavf_enable_irq0(hw);
  
Bruce Richardson March 18, 2025, 12:48 p.m. UTC | #2
On Tue, Mar 18, 2025 at 12:35:01PM +0000, Medvedkin, Vladimir wrote:
> Acked-by: Vladimir Medvedkin <vladimir.medvedkin@intel.com>
> 
> On 10/03/2025 13:11, Bruce Richardson wrote:
> > When registering interrupts, there was no check if the registration of
> > the interrupt succeeded. Add in such a check, and go to fallback path
> > if the check fails. This prevents errors on FreeBSD due to missed
> > admin queue messages.
> > 
> > Fixes: cd3b124955d4 ("net/iavf: enable interrupt polling")
> > Cc: stable@dpdk.org
> > 
> > Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
> > ---
> >   drivers/net/intel/iavf/iavf_ethdev.c | 12 +++++-------
> >   1 file changed, 5 insertions(+), 7 deletions(-)
> > 
Series applied to dpdk-next-net-intel.

/Bruce
  

Patch

diff --git a/drivers/net/intel/iavf/iavf_ethdev.c b/drivers/net/intel/iavf/iavf_ethdev.c
index 9cd2b0c867..1ab84b0bfc 100644
--- a/drivers/net/intel/iavf/iavf_ethdev.c
+++ b/drivers/net/intel/iavf/iavf_ethdev.c
@@ -2825,18 +2825,16 @@  iavf_dev_init(struct rte_eth_dev *eth_dev)
 			&eth_dev->data->mac_addrs[0]);
 
 
-	if (vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_WB_ON_ITR) {
-		/* register callback func to eal lib */
-		rte_intr_callback_register(pci_dev->intr_handle,
-					   iavf_dev_interrupt_handler,
-					   (void *)eth_dev);
+	if (vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_WB_ON_ITR &&
+			/* register callback func to eal lib */
+			rte_intr_callback_register(pci_dev->intr_handle,
+				   iavf_dev_interrupt_handler, (void *)eth_dev) == 0)
 
 		/* enable uio intr after callback register */
 		rte_intr_enable(pci_dev->intr_handle);
-	} else {
+	else
 		rte_eal_alarm_set(IAVF_ALARM_INTERVAL,
 				  iavf_dev_alarm_handler, eth_dev);
-	}
 
 	/* configure and enable device interrupt */
 	iavf_enable_irq0(hw);