From: Adrien Mazarguil <adrien.mazarguil@6wind.com>
To: Olivier Matz <olivier.matz@6wind.com>
Cc: dev@dpdk.org, Thomas Monjalon <thomas@monjalon.net>,
Ferruh Yigit <ferruh.yigit@intel.com>
Subject: Re: [PATCH] ethdev: return diagnostic when setting MAC address
Date: Mon, 5 Mar 2018 11:29:00 +0100 [thread overview]
Message-ID: <20180305102900.GI4256@6wind.com> (raw)
In-Reply-To: <20180227151129.30387-1-olivier.matz@6wind.com>
On Tue, Feb 27, 2018 at 04:11:29PM +0100, Olivier Matz wrote:
> Change the prototype and the behavior of dev_ops->eth_mac_addr_set(): a
> return code is added to notify the caller (librte_ether) if an error
> occurred in the PMD.
>
> The new default MAC address is now copied in dev->data->mac_addrs[0]
> only if the operation is successful.
>
> The patch also updates all the PMDs accordingly.
>
> Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
> ---
>
> Hi,
>
> This patch is the following of the discussion we had in this thread:
> https://dpdk.org/dev/patchwork/patch/32284/
>
> I did my best to keep the consistency inside the PMDs. The behavior
> of eth_mac_addr_set() is inspired from other fonctions in the same
> PMD, usually eth_mac_addr_add(). For instance:
> - dpaa and dpaa2 return 0 on error.
> - some PMDs (bnxt, mlx5, ...?) do not return a -errno code (-1 or
> positive values).
> - some PMDs (avf, tap) check if the address is the same and return 0
> in that case. This could go in generic code?
>
> I tried to use the following errors when relevant:
> - -EPERM when a VF is not allowed to do a change
> - -ENOTSUP if the function is not supported
> - -EIO if this is an unknown error from lower layer (hw or sdk)
Keep in mind EIO is currently documented in ethdev as somewhat
hot-plug-related, as in "device is unresponsive and likely unplugged". The
reaction of a hot-plug-aware application to such an error code might be to
close the device, possibly for the wrong reason.
I just wanted to point it out, I don't think it's a problem for this patch
but can't speak for all PMDs.
> - -EINVAL for other unknown errors
>
> Please, PMD maintainers, feel free to comment if you ahve specific
> needs for your driver.
OK with the API change and it's fine for mlx4 and mlx5, with a few comments
regarding the latter, please see below.
<snip>
> diff --git a/drivers/net/mlx4/mlx4.h b/drivers/net/mlx4/mlx4.h
> index 19c8a223d..c107794ce 100644
> --- a/drivers/net/mlx4/mlx4.h
> +++ b/drivers/net/mlx4/mlx4.h
> @@ -131,7 +131,7 @@ void mlx4_allmulticast_disable(struct rte_eth_dev *dev);
> void mlx4_mac_addr_remove(struct rte_eth_dev *dev, uint32_t index);
> int mlx4_mac_addr_add(struct rte_eth_dev *dev, struct ether_addr *mac_addr,
> uint32_t index, uint32_t vmdq);
> -void mlx4_mac_addr_set(struct rte_eth_dev *dev, struct ether_addr *mac_addr);
> +int mlx4_mac_addr_set(struct rte_eth_dev *dev, struct ether_addr *mac_addr);
> int mlx4_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on);
> int mlx4_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats);
> void mlx4_stats_reset(struct rte_eth_dev *dev);
> diff --git a/drivers/net/mlx4/mlx4_ethdev.c b/drivers/net/mlx4/mlx4_ethdev.c
> index 3bc692731..2442e16a6 100644
> --- a/drivers/net/mlx4/mlx4_ethdev.c
> +++ b/drivers/net/mlx4/mlx4_ethdev.c
> @@ -701,11 +701,14 @@ mlx4_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on)
> * Pointer to Ethernet device structure.
> * @param mac_addr
> * MAC address to register.
> + *
> + * @return
> + * 0 on success, negative errno value otherwise and rte_errno is set.
> */
> -void
> +int
> mlx4_mac_addr_set(struct rte_eth_dev *dev, struct ether_addr *mac_addr)
> {
> - mlx4_mac_addr_add(dev, mac_addr, 0, 0);
> + return mlx4_mac_addr_add(dev, mac_addr, 0, 0);
> }
>
> /**
> diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h
> index 965c19f21..42e58d7f7 100644
> --- a/drivers/net/mlx5/mlx5.h
> +++ b/drivers/net/mlx5/mlx5.h
> @@ -241,7 +241,7 @@ int priv_get_mac(struct priv *, uint8_t (*)[ETHER_ADDR_LEN]);
> void mlx5_mac_addr_remove(struct rte_eth_dev *, uint32_t);
> int mlx5_mac_addr_add(struct rte_eth_dev *, struct ether_addr *, uint32_t,
> uint32_t);
> -void mlx5_mac_addr_set(struct rte_eth_dev *, struct ether_addr *);
> +int mlx5_mac_addr_set(struct rte_eth_dev *, struct ether_addr *);
>
> /* mlx5_rss.c */
>
> diff --git a/drivers/net/mlx5/mlx5_mac.c b/drivers/net/mlx5/mlx5_mac.c
> index e8a8d4594..0dc4bec46 100644
> --- a/drivers/net/mlx5/mlx5_mac.c
> +++ b/drivers/net/mlx5/mlx5_mac.c
> @@ -118,10 +118,13 @@ mlx5_mac_addr_add(struct rte_eth_dev *dev, struct ether_addr *mac,
> * Pointer to Ethernet device structure.
> * @param mac_addr
> * MAC address to register.
> + *
> + * @return
> + * 0 on success.
> */
> -void
> +int
> mlx5_mac_addr_set(struct rte_eth_dev *dev, struct ether_addr *mac_addr)
> {
> DEBUG("%p: setting primary MAC address", (void *)dev);
> - mlx5_mac_addr_add(dev, mac_addr, 0, 0);
> + return mlx5_mac_addr_add(dev, mac_addr, 0, 0);
> }
With Nelio's errno rework for mlx5 [1][2], this change should end up being
similar to mlx4.
[1] http://dpdk.org/ml/archives/dev/2018-February/091668.html
[2] http://dpdk.org/ml/archives/dev/2018-February/091678.html
--
Adrien Mazarguil
6WIND
next prev parent reply other threads:[~2018-03-05 10:29 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-27 15:11 [PATCH] ethdev: return diagnostic when setting MAC address Olivier Matz
2018-03-05 10:29 ` Adrien Mazarguil [this message]
2018-03-06 9:37 ` Tomasz Duszynski
2018-03-16 15:41 ` Andrew Rybchenko
2018-03-26 18:39 ` Ferruh Yigit
2018-03-28 8:24 ` Olivier Matz
2018-04-03 12:41 ` [PATCH v2] " Olivier Matz
2018-04-03 13:02 ` Andrew Rybchenko
2018-04-03 14:57 ` Adrien Mazarguil
2018-04-03 16:26 ` Olivier Matz
2018-04-03 16:19 ` Ferruh Yigit
2018-04-03 16:25 ` Olivier Matz
2018-04-04 8:19 ` Shreyansh Jain
2018-04-06 15:21 ` [PATCH] " Olivier Matz
2018-04-06 15:34 ` Olivier Matz
2018-04-09 8:57 ` Nélio Laranjeiro
2018-04-06 15:34 ` [PATCH v3] " Olivier Matz
2018-04-06 16:03 ` Ferruh Yigit
2018-04-10 13:19 ` Thomas Monjalon
2018-04-11 16:32 ` [PATCH v4] " Olivier Matz
2018-04-11 19:30 ` Ferruh Yigit
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180305102900.GI4256@6wind.com \
--to=adrien.mazarguil@6wind.com \
--cc=dev@dpdk.org \
--cc=ferruh.yigit@intel.com \
--cc=olivier.matz@6wind.com \
--cc=thomas@monjalon.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.