Commit d3cbd425 authored by Chris Mi's avatar Chris Mi Committed by Saeed Mahameed
Browse files

net/mlx5e: Add ndo_set_feature for uplink representor



After we have a dedicated uplink representor, the new netdev ops
doesn't support ndo_set_feature. Because of that, we can't change
some features, eg. rxvlan. Now add it back.

In this patch, I also do a cleanup for the features flag handling,
eg. remove duplicate NETIF_F_HW_TC flag setting.

Fixes: aec002f6 ("net/mlx5e: Uninstantiate esw manager vport netdev on switchdev mode")
Signed-off-by: default avatarChris Mi <chrism@mellanox.com>
Reviewed-by: default avatarRoi Dayan <roid@mellanox.com>
Reviewed-by: default avatarVlad Buslov <vladbu@mellanox.com>
Signed-off-by: default avatarSaeed Mahameed <saeedm@mellanox.com>
parent dd80857b
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -1112,6 +1112,7 @@ void mlx5e_del_vxlan_port(struct net_device *netdev, struct udp_tunnel_info *ti)
netdev_features_t mlx5e_features_check(struct sk_buff *skb,
netdev_features_t mlx5e_features_check(struct sk_buff *skb,
				       struct net_device *netdev,
				       struct net_device *netdev,
				       netdev_features_t features);
				       netdev_features_t features);
int mlx5e_set_features(struct net_device *netdev, netdev_features_t features);
#ifdef CONFIG_MLX5_ESWITCH
#ifdef CONFIG_MLX5_ESWITCH
int mlx5e_set_vf_mac(struct net_device *dev, int vf, u8 *mac);
int mlx5e_set_vf_mac(struct net_device *dev, int vf, u8 *mac);
int mlx5e_set_vf_rate(struct net_device *dev, int vf, int min_tx_rate, int max_tx_rate);
int mlx5e_set_vf_rate(struct net_device *dev, int vf, int min_tx_rate, int max_tx_rate);
+1 −2
Original line number Original line Diff line number Diff line
@@ -3635,8 +3635,7 @@ static int mlx5e_handle_feature(struct net_device *netdev,
	return 0;
	return 0;
}
}


static int mlx5e_set_features(struct net_device *netdev,
int mlx5e_set_features(struct net_device *netdev, netdev_features_t features)
			      netdev_features_t features)
{
{
	netdev_features_t oper_features = netdev->features;
	netdev_features_t oper_features = netdev->features;
	int err = 0;
	int err = 0;
+6 −4
Original line number Original line Diff line number Diff line
@@ -1351,6 +1351,7 @@ static const struct net_device_ops mlx5e_netdev_ops_uplink_rep = {
	.ndo_get_vf_stats        = mlx5e_get_vf_stats,
	.ndo_get_vf_stats        = mlx5e_get_vf_stats,
	.ndo_set_vf_vlan         = mlx5e_uplink_rep_set_vf_vlan,
	.ndo_set_vf_vlan         = mlx5e_uplink_rep_set_vf_vlan,
	.ndo_get_port_parent_id	 = mlx5e_rep_get_port_parent_id,
	.ndo_get_port_parent_id	 = mlx5e_rep_get_port_parent_id,
	.ndo_set_features        = mlx5e_set_features,
};
};


bool mlx5e_eswitch_rep(struct net_device *netdev)
bool mlx5e_eswitch_rep(struct net_device *netdev)
@@ -1425,10 +1426,9 @@ static void mlx5e_build_rep_netdev(struct net_device *netdev)


	netdev->watchdog_timeo    = 15 * HZ;
	netdev->watchdog_timeo    = 15 * HZ;


	netdev->features       |= NETIF_F_NETNS_LOCAL;


	netdev->features	 |= NETIF_F_HW_TC | NETIF_F_NETNS_LOCAL;
	netdev->hw_features    |= NETIF_F_HW_TC;
	netdev->hw_features    |= NETIF_F_HW_TC;

	netdev->hw_features    |= NETIF_F_SG;
	netdev->hw_features    |= NETIF_F_SG;
	netdev->hw_features    |= NETIF_F_IP_CSUM;
	netdev->hw_features    |= NETIF_F_IP_CSUM;
	netdev->hw_features    |= NETIF_F_IPV6_CSUM;
	netdev->hw_features    |= NETIF_F_IPV6_CSUM;
@@ -1437,7 +1437,9 @@ static void mlx5e_build_rep_netdev(struct net_device *netdev)
	netdev->hw_features    |= NETIF_F_TSO6;
	netdev->hw_features    |= NETIF_F_TSO6;
	netdev->hw_features    |= NETIF_F_RXCSUM;
	netdev->hw_features    |= NETIF_F_RXCSUM;


	if (rep->vport != MLX5_VPORT_UPLINK)
	if (rep->vport == MLX5_VPORT_UPLINK)
		netdev->hw_features |= NETIF_F_HW_VLAN_CTAG_RX;
	else
		netdev->features |= NETIF_F_VLAN_CHALLENGED;
		netdev->features |= NETIF_F_VLAN_CHALLENGED;


	netdev->features |= netdev->hw_features;
	netdev->features |= netdev->hw_features;