[dpdk-stable] [dpdk-dev] [PATCH] net/ixgbe: fixed port can not link up in FreeBSD

Ananyev, Konstantin konstantin.ananyev at intel.com
Thu Dec 12 12:15:59 CET 2019


Hi,

> 
> In FreeBSD environment, nic_uio drivers do not support interrupts,
> rte_intr_callback_register() will fail to register interrupts.
> We can not make link status to change from down to up by interrupt
> callback. So we need to wait for the controller to acquire link
> when ports start. Through multiple tests, 5s should be enough.
> 
> Fixes: b9bd0f09fa15 ("ethdev: fix link status query")
> Cc: stable at dpdk.org
> 
> Signed-off-by: Lunyuan Cui <lunyuanx.cui at intel.com>
> ---
>  drivers/net/ixgbe/ixgbe_ethdev.c | 22 ++++++++++++++++++++++
>  1 file changed, 22 insertions(+)
> 
> diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
> index 2c6fd0f13..e33b5483c 100644
> --- a/drivers/net/ixgbe/ixgbe_ethdev.c
> +++ b/drivers/net/ixgbe/ixgbe_ethdev.c
> @@ -2555,6 +2555,9 @@ ixgbe_dev_start(struct rte_eth_dev *dev)
>  		IXGBE_DEV_PRIVATE_TO_TM_CONF(dev->data->dev_private);
>  	struct ixgbe_macsec_setting *macsec_setting =
>  		IXGBE_DEV_PRIVATE_TO_MACSEC_SETTING(dev->data->dev_private);
> +#ifdef RTE_EXEC_ENV_FREEBSD
> +	int i;
> +#endif
> 
>  	PMD_INIT_FUNC_TRACE();
> 
> @@ -2801,6 +2804,25 @@ ixgbe_dev_start(struct rte_eth_dev *dev)
>  			    "please call hierarchy_commit() "
>  			    "before starting the port");
> 
> +#ifdef RTE_EXEC_ENV_FREEBSD
> +	/*
> +	 * In freebsd environment, nic_uio drivers do not support interrupts,
> +	 * rte_intr_callback_register() will fail to register interrupts.
> +	 * We can not make link status to change from down to up by interrupt
> +	 * callback. So we need to wait for the controller to acquire link
> +	 * when ports start.
> +	 */
> +	for (i = 0; i < 25; i++) {
> +		/* If link up, just jump out */
> +		err = ixgbe_check_link(hw, &speed, &link_up, 0);
> +		if (err)
> +			goto error;
> +		if (link_up)
> +			break;
> +		msec_delay(200);
> +	}
> +#endif

Might be better to put it into a separate function to keep start() code clean.
Konstantin

> +
>  	/*
>  	 * Update link status right before return, because it may
>  	 * start link configuration process in a separate thread.
> --
> 2.17.1



More information about the stable mailing list