X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fmlx5%2Fmlx5_mac.c;h=19981d26d846db52961f1259c401ca206efd5ffd;hb=447d4d797d21b35185d511b7c280d7fe171b29bd;hp=2a88086bfe584e0df30bec0e2f44ba426dff504e;hpb=ab27cdd93a1cc605171e162b3f5bca6699ea42cc;p=dpdk.git diff --git a/drivers/net/mlx5/mlx5_mac.c b/drivers/net/mlx5/mlx5_mac.c index 2a88086bfe..19981d26d8 100644 --- a/drivers/net/mlx5/mlx5_mac.c +++ b/drivers/net/mlx5/mlx5_mac.c @@ -8,22 +8,9 @@ #include #include #include -#include -#include -#include - -/* Verbs header. */ -/* ISO C doesn't support unnamed structs/unions, disabling -pedantic. */ -#ifdef PEDANTIC -#pragma GCC diagnostic ignored "-Wpedantic" -#endif -#include -#ifdef PEDANTIC -#pragma GCC diagnostic error "-Wpedantic" -#endif #include -#include +#include #include #include "mlx5_defs.h" @@ -166,20 +153,30 @@ mlx5_mac_addr_set(struct rte_eth_dev *dev, struct rte_ether_addr *mac_addr) { uint16_t port_id; struct mlx5_priv *priv = dev->data->dev_private; + struct mlx5_priv *pf_priv; - /* Configuring the VF instead of its representor. */ - if (priv->representor) { + /* + * Configuring the VF instead of its representor, + * need to skip the special case of HPF on Bluefield. + */ + if (priv->representor && !mlx5_is_hpf(dev)) { DRV_LOG(DEBUG, "VF represented by port %u setting primary MAC address", dev->data->port_id); + if (priv->pf_bond >= 0) { + /* Bonding, get owner PF ifindex from shared data. */ + return mlx5_os_vf_mac_addr_modify + (priv, + priv->sh->bond.ports[priv->pf_bond].ifindex, + mac_addr, + MLX5_REPRESENTOR_REPR(priv->representor_id)); + } RTE_ETH_FOREACH_DEV_SIBLING(port_id, dev->data->port_id) { - priv = rte_eth_devices[port_id].data->dev_private; - if (priv->master == 1) { - priv = dev->data->dev_private; + pf_priv = rte_eth_devices[port_id].data->dev_private; + if (pf_priv->master == 1) return mlx5_os_vf_mac_addr_modify - (priv, - mlx5_ifindex(&rte_eth_devices[port_id]), - mac_addr, priv->representor_id); - } + (priv, pf_priv->if_index, mac_addr, + MLX5_REPRESENTOR_REPR + (priv->representor_id)); } rte_errno = -ENOTSUP; return rte_errno;