net/mlx5e: Expose same physical switch_id for all representors
authorPaul Blakey <paulb@mellanox.com>
Thu, 16 May 2019 12:27:17 +0000 (15:27 +0300)
committerSaeed Mahameed <saeedm@mellanox.com>
Fri, 28 Jun 2019 23:04:00 +0000 (16:04 -0700)
Report system_image_guid as the E-Switch switch_id, this ensures
that when a NIC contains multiple PCI functions and which
has merged eswitch capability, all representors from
multiple PFs publish same switch_id.

Signed-off-by: Paul Blakey <paulb@mellanox.com>
Reviewed-by: Parav Pandit <parav@mellanox.com>
Reviewed-by: Roi Dayan <roid@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
drivers/net/ethernet/mellanox/mlx5/core/en_rep.c

index fce3814bdb2fdeda6c2dac72f06d7bc6063c97f8..330034fcdfc590179ae9c3a050ff4155ac643a74 100644 (file)
@@ -391,30 +391,19 @@ static const struct ethtool_ops mlx5e_uplink_rep_ethtool_ops = {
 static int mlx5e_rep_get_port_parent_id(struct net_device *dev,
                                        struct netdev_phys_item_id *ppid)
 {
-       struct mlx5e_priv *priv = netdev_priv(dev);
-       struct mlx5_eswitch *esw = priv->mdev->priv.eswitch;
-       struct net_device *uplink_upper = NULL;
-       struct mlx5e_priv *uplink_priv = NULL;
-       struct net_device *uplink_dev;
+       struct mlx5_eswitch *esw;
+       struct mlx5e_priv *priv;
+       u64 parent_id;
+
+       priv = netdev_priv(dev);
+       esw = priv->mdev->priv.eswitch;
 
        if (esw->mode == SRIOV_NONE)
                return -EOPNOTSUPP;
 
-       uplink_dev = mlx5_eswitch_uplink_get_proto_dev(esw, REP_ETH);
-       if (uplink_dev) {
-               uplink_upper = netdev_master_upper_dev_get(uplink_dev);
-               uplink_priv = netdev_priv(uplink_dev);
-       }
-
-       ppid->id_len = ETH_ALEN;
-       if (uplink_upper && mlx5_lag_is_sriov(uplink_priv->mdev)) {
-               ether_addr_copy(ppid->id, uplink_upper->dev_addr);
-       } else {
-               struct mlx5e_rep_priv *rpriv = priv->ppriv;
-               struct mlx5_eswitch_rep *rep = rpriv->rep;
-
-               ether_addr_copy(ppid->id, rep->hw_id);
-       }
+       parent_id = mlx5_query_nic_system_image_guid(priv->mdev);
+       ppid->id_len = sizeof(parent_id);
+       memcpy(ppid->id, &parent_id, sizeof(parent_id));
 
        return 0;
 }