[dpdk-dev] [PATCH 02/13] net/failsafe: check code of promiscuous mode switch
Gaëtan Rivet
gaetan.rivet at 6wind.com
Thu Sep 5 18:25:05 CEST 2019
Hi,
On Thu, Sep 05, 2019 at 05:10:40PM +0100, Andrew Rybchenko wrote:
> From: Ivan Ilchenko <Ivan.Ilchenko at oktetlabs.ru>
>
> rte_eth_promiscuous_enable()/rte_eth_promiscuous_disable() return
> value was changed from void to int, so this patch modify usage
> of these functions across net/failsafe according to new return type.
>
> Try to keep promiscuous mode consistent across all active
> devices in the case of failure.
>
> Signed-off-by: Ivan Ilchenko <Ivan.Ilchenko at oktetlabs.ru>
> Signed-off-by: Andrew Rybchenko <arybchenko at solarflare.com>
> ---
> drivers/net/failsafe/failsafe_ether.c | 8 +++--
> drivers/net/failsafe/failsafe_ops.c | 44 ++++++++++++++++++++++++---
> 2 files changed, 46 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/net/failsafe/failsafe_ether.c b/drivers/net/failsafe/failsafe_ether.c
> index 504c76edb0..bd38f1c1e4 100644
> --- a/drivers/net/failsafe/failsafe_ether.c
> +++ b/drivers/net/failsafe/failsafe_ether.c
> @@ -126,9 +126,13 @@ fs_eth_dev_conf_apply(struct rte_eth_dev *dev,
> if (dev->data->promiscuous != edev->data->promiscuous) {
> DEBUG("Configuring promiscuous");
> if (dev->data->promiscuous)
> - rte_eth_promiscuous_enable(PORT_ID(sdev));
> + ret = rte_eth_promiscuous_enable(PORT_ID(sdev));
> else
> - rte_eth_promiscuous_disable(PORT_ID(sdev));
> + ret = rte_eth_promiscuous_disable(PORT_ID(sdev));
> + if (ret != 0) {
> + ERROR("Failed to apply promiscuous mode");
> + return ret;
> + }
> } else {
> DEBUG("promiscuous already set");
> }
> diff --git a/drivers/net/failsafe/failsafe_ops.c b/drivers/net/failsafe/failsafe_ops.c
> index cc14bc2bcc..cbf143fb3c 100644
> --- a/drivers/net/failsafe/failsafe_ops.c
> +++ b/drivers/net/failsafe/failsafe_ops.c
> @@ -659,11 +659,29 @@ fs_promiscuous_enable(struct rte_eth_dev *dev)
> {
> struct sub_device *sdev;
> uint8_t i;
> + int ret = 0;
>
> fs_lock(dev, 0);
> - FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE)
> - rte_eth_promiscuous_enable(PORT_ID(sdev));
> + FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
> + ret = rte_eth_promiscuous_enable(PORT_ID(sdev));
> + if (ret != 0) {
> + ERROR("Promiscuous mode enable failed for subdevice %d",
> + PORT_ID(sdev));
> + break;
> + }
> + }
> + if (ret != 0) {
> + /* Rollback in the case of failure */
> + FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
> + ret = rte_eth_promiscuous_disable(PORT_ID(sdev));
> + if (ret != 0)
> + ERROR("Promiscuous mode disable failed for subdevice %d",
> + PORT_ID(sdev));
> + }
> + }
> fs_unlock(dev, 0);
> +
> + return;
This patch should be applied after the ethdev change to avoid breaking
the build, I think?
You should be able to change the ethdev API, leaving the fail-safe
internals ignore the return value, then apply this patch and fix it.
This way the patchset should not break the build mid-series.
Otherwise good implementation with the rollback.
--
Gaëtan Rivet
6WIND
More information about the dev
mailing list