mlx5e: push cls_flower and mqprio setup_tc processing into separate functions
authorJiri Pirko <jiri@mellanox.com>
Mon, 7 Aug 2017 08:15:22 +0000 (10:15 +0200)
committerDavid S. Miller <davem@davemloft.net>
Mon, 7 Aug 2017 16:42:36 +0000 (09:42 -0700)
Let mlx5e_setup_tc (former mlx5e_ndo_setup_tc) be a splitter for specific
setup_tc types and push out cls_flower and mqprio specific codes into
separate functions. Also change the return values so they are the same
as in the rest of the drivers.

Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlx5/core/en_main.c

index 4052e225f1dcb853bf5b47d4eb69f15a69f71b9f..adf35da74a85af893a626ad47bcd7fe203055242 100644 (file)
@@ -2998,12 +2998,16 @@ static int mlx5e_modify_channels_vsd(struct mlx5e_channels *chs, bool vsd)
        return 0;
 }
 
-static int mlx5e_setup_tc(struct net_device *netdev, u8 tc)
+static int mlx5e_setup_tc_mqprio(struct net_device *netdev,
+                                struct tc_mqprio_qopt *mqprio)
 {
        struct mlx5e_priv *priv = netdev_priv(netdev);
        struct mlx5e_channels new_channels = {};
+       u8 tc = mqprio->num_tc;
        int err = 0;
 
+       mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS;
+
        if (tc && tc != MLX5E_MAX_NUM_TC)
                return -EINVAL;
 
@@ -3027,39 +3031,41 @@ out:
        return err;
 }
 
-static int mlx5e_ndo_setup_tc(struct net_device *dev, enum tc_setup_type type,
-                             u32 handle, u32 chain_index, __be16 proto,
-                             struct tc_to_netdev *tc)
+static int mlx5e_setup_tc_cls_flower(struct net_device *dev,
+                                    u32 handle, u32 chain_index, __be16 proto,
+                                    struct tc_cls_flower_offload *cls_flower)
 {
        struct mlx5e_priv *priv = netdev_priv(dev);
 
-       if (TC_H_MAJ(handle) != TC_H_MAJ(TC_H_INGRESS))
-               goto mqprio;
+       if (TC_H_MAJ(handle) != TC_H_MAJ(TC_H_INGRESS) ||
+           chain_index)
+               return -EOPNOTSUPP;
 
-       if (chain_index)
+       switch (cls_flower->command) {
+       case TC_CLSFLOWER_REPLACE:
+               return mlx5e_configure_flower(priv, proto, cls_flower);
+       case TC_CLSFLOWER_DESTROY:
+               return mlx5e_delete_flower(priv, cls_flower);
+       case TC_CLSFLOWER_STATS:
+               return mlx5e_stats_flower(priv, cls_flower);
+       default:
                return -EOPNOTSUPP;
+       }
+}
 
+static int mlx5e_setup_tc(struct net_device *dev, enum tc_setup_type type,
+                         u32 handle, u32 chain_index, __be16 proto,
+                         struct tc_to_netdev *tc)
+{
        switch (type) {
        case TC_SETUP_CLSFLOWER:
-               switch (tc->cls_flower->command) {
-               case TC_CLSFLOWER_REPLACE:
-                       return mlx5e_configure_flower(priv, proto, tc->cls_flower);
-               case TC_CLSFLOWER_DESTROY:
-                       return mlx5e_delete_flower(priv, tc->cls_flower);
-               case TC_CLSFLOWER_STATS:
-                       return mlx5e_stats_flower(priv, tc->cls_flower);
-               }
+               return mlx5e_setup_tc_cls_flower(dev, handle, chain_index,
+                                                proto, tc->cls_flower);
+       case TC_SETUP_MQPRIO:
+               return mlx5e_setup_tc_mqprio(dev, tc->mqprio);
        default:
                return -EOPNOTSUPP;
        }
-
-mqprio:
-       if (type != TC_SETUP_MQPRIO)
-               return -EINVAL;
-
-       tc->mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS;
-
-       return mlx5e_setup_tc(dev, tc->mqprio->num_tc);
 }
 
 static void
@@ -3695,7 +3701,7 @@ static const struct net_device_ops mlx5e_netdev_ops_basic = {
        .ndo_open                = mlx5e_open,
        .ndo_stop                = mlx5e_close,
        .ndo_start_xmit          = mlx5e_xmit,
-       .ndo_setup_tc            = mlx5e_ndo_setup_tc,
+       .ndo_setup_tc            = mlx5e_setup_tc,
        .ndo_select_queue        = mlx5e_select_queue,
        .ndo_get_stats64         = mlx5e_get_stats,
        .ndo_set_rx_mode         = mlx5e_set_rx_mode,
@@ -3720,7 +3726,7 @@ static const struct net_device_ops mlx5e_netdev_ops_sriov = {
        .ndo_open                = mlx5e_open,
        .ndo_stop                = mlx5e_close,
        .ndo_start_xmit          = mlx5e_xmit,
-       .ndo_setup_tc            = mlx5e_ndo_setup_tc,
+       .ndo_setup_tc            = mlx5e_setup_tc,
        .ndo_select_queue        = mlx5e_select_queue,
        .ndo_get_stats64         = mlx5e_get_stats,
        .ndo_set_rx_mode         = mlx5e_set_rx_mode,