[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