net: sched: make type an argument for ndo_setup_tc
authorJiri Pirko <jiri@mellanox.com>
Mon, 7 Aug 2017 08:15:17 +0000 (10:15 +0200)
committerDavid S. Miller <davem@davemloft.net>
Mon, 7 Aug 2017 16:42:35 +0000 (09:42 -0700)
Since the type is always present, push it to be a separate argument to
ndo_setup_tc. On the way, name the type enum and use it for arg type.

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>
32 files changed:
drivers/net/ethernet/amd/xgbe/xgbe-drv.c
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h
drivers/net/ethernet/broadcom/bnxt/bnxt.c
drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
drivers/net/ethernet/freescale/dpaa/dpaa_eth.c
drivers/net/ethernet/hisilicon/hns3/hns3pf/hns3_enet.c
drivers/net/ethernet/intel/fm10k/fm10k_netdev.c
drivers/net/ethernet/intel/i40e/i40e_main.c
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
drivers/net/ethernet/mellanox/mlx4/en_netdev.c
drivers/net/ethernet/mellanox/mlx5/core/en_main.c
drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
drivers/net/ethernet/mellanox/mlxsw/spectrum.c
drivers/net/ethernet/netronome/nfp/bpf/main.c
drivers/net/ethernet/netronome/nfp/flower/main.h
drivers/net/ethernet/netronome/nfp/flower/offload.c
drivers/net/ethernet/netronome/nfp/nfp_app.h
drivers/net/ethernet/netronome/nfp/nfp_port.c
drivers/net/ethernet/netronome/nfp/nfp_port.h
drivers/net/ethernet/sfc/efx.h
drivers/net/ethernet/sfc/falcon/efx.h
drivers/net/ethernet/sfc/falcon/tx.c
drivers/net/ethernet/sfc/tx.c
drivers/net/ethernet/ti/netcp_core.c
include/linux/netdevice.h
net/dsa/slave.c
net/sched/cls_bpf.c
net/sched/cls_flower.c
net/sched/cls_matchall.c
net/sched/cls_u32.c
net/sched/sch_mqprio.c

index ecef3ee87b175e8e90b23672d8d8005ab048cad0..6a6ea3bdd056e5a8adaf6bcd840ab82355334802 100644 (file)
@@ -1918,14 +1918,14 @@ static void xgbe_poll_controller(struct net_device *netdev)
 }
 #endif /* End CONFIG_NET_POLL_CONTROLLER */
 
-static int xgbe_setup_tc(struct net_device *netdev, u32 handle, u32 chain_index,
-                        __be16 proto,
+static int xgbe_setup_tc(struct net_device *netdev, enum tc_setup_type type,
+                        u32 handle, u32 chain_index, __be16 proto,
                         struct tc_to_netdev *tc_to_netdev)
 {
        struct xgbe_prv_data *pdata = netdev_priv(netdev);
        u8 tc;
 
-       if (tc_to_netdev->type != TC_SETUP_MQPRIO)
+       if (type != TC_SETUP_MQPRIO)
                return -EINVAL;
 
        tc_to_netdev->mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS;
index 67fe3d826566244c6a664be4528bc442bdb0903d..4395d1cac86fafbe5cd797dcf0a5477b0d0d1e07 100644 (file)
@@ -4284,10 +4284,11 @@ int bnx2x_setup_tc(struct net_device *dev, u8 num_tc)
        return 0;
 }
 
-int __bnx2x_setup_tc(struct net_device *dev, u32 handle, u32 chain_index,
-                    __be16 proto, struct tc_to_netdev *tc)
+int __bnx2x_setup_tc(struct net_device *dev, enum tc_setup_type type,
+                    u32 handle, u32 chain_index, __be16 proto,
+                    struct tc_to_netdev *tc)
 {
-       if (tc->type != TC_SETUP_MQPRIO)
+       if (type != TC_SETUP_MQPRIO)
                return -EINVAL;
 
        tc->mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS;
index c26688d2f32663f348b5c21dff1931f07b7487c8..1ac4eb0d341307aa278d8b168ab624e45b711a86 100644 (file)
@@ -486,8 +486,9 @@ netdev_tx_t bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev);
 
 /* setup_tc callback */
 int bnx2x_setup_tc(struct net_device *dev, u8 num_tc);
-int __bnx2x_setup_tc(struct net_device *dev, u32 handle, u32 chain_index,
-                    __be16 proto, struct tc_to_netdev *tc);
+int __bnx2x_setup_tc(struct net_device *dev, enum tc_setup_type type,
+                    u32 handle, u32 chain_index, __be16 proto,
+                    struct tc_to_netdev *tc);
 
 int bnx2x_get_vf_config(struct net_device *dev, int vf,
                        struct ifla_vf_info *ivi);
index 156fb374522baea2aebab5fc525c86a40cc7586e..b98d9f33d9af5ead84a90a5eba16f7f3039ec34b 100644 (file)
@@ -7237,10 +7237,11 @@ int bnxt_setup_mq_tc(struct net_device *dev, u8 tc)
        return 0;
 }
 
-static int bnxt_setup_tc(struct net_device *dev, u32 handle, u32 chain_index,
-                        __be16 proto, struct tc_to_netdev *ntc)
+static int bnxt_setup_tc(struct net_device *dev, enum tc_setup_type type,
+                        u32 handle, u32 chain_index, __be16 proto,
+                        struct tc_to_netdev *ntc)
 {
-       if (ntc->type != TC_SETUP_MQPRIO)
+       if (type != TC_SETUP_MQPRIO)
                return -EINVAL;
 
        ntc->mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS;
index fdf220aa08d6013f28a34494dcd373e0547fa3f3..89d2b0cd98691d1322e4aca61c1a10e6a399d080 100644 (file)
@@ -2889,8 +2889,9 @@ static int cxgb_set_tx_maxrate(struct net_device *dev, int index, u32 rate)
        return err;
 }
 
-static int cxgb_setup_tc(struct net_device *dev, u32 handle, u32 chain_index,
-                        __be16 proto, struct tc_to_netdev *tc)
+static int cxgb_setup_tc(struct net_device *dev, enum tc_setup_type type,
+                        u32 handle, u32 chain_index, __be16 proto,
+                        struct tc_to_netdev *tc)
 {
        struct port_info *pi = netdev2pinfo(dev);
        struct adapter *adap = netdev2adap(dev);
@@ -2906,7 +2907,7 @@ static int cxgb_setup_tc(struct net_device *dev, u32 handle, u32 chain_index,
        }
 
        if (TC_H_MAJ(handle) == TC_H_MAJ(TC_H_INGRESS) &&
-           tc->type == TC_SETUP_CLSU32) {
+           type == TC_SETUP_CLSU32) {
                switch (tc->cls_u32->command) {
                case TC_CLSU32_NEW_KNODE:
                case TC_CLSU32_REPLACE_KNODE:
index 550ea1ec7b6c95e2fdbed57301c9935b4e33422b..d86d766777c873548dc57914df0eae5bb22ed832 100644 (file)
@@ -342,14 +342,15 @@ static void dpaa_get_stats64(struct net_device *net_dev,
        }
 }
 
-static int dpaa_setup_tc(struct net_device *net_dev, u32 handle,
-                        u32 chain_index, __be16 proto, struct tc_to_netdev *tc)
+static int dpaa_setup_tc(struct net_device *net_dev, enum tc_setup_type type,
+                        u32 handle, u32 chain_index, __be16 proto,
+                        struct tc_to_netdev *tc)
 {
        struct dpaa_priv *priv = netdev_priv(net_dev);
        u8 num_tc;
        int i;
 
-       if (tc->type != TC_SETUP_MQPRIO)
+       if (type != TC_SETUP_MQPRIO)
                return -EINVAL;
 
        tc->mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS;
index ad9481c7ceae9f68b4f37105cd910da12783112d..6bb1e35336cc8ae027ddf76f9f23dcbc73bca90c 100644 (file)
@@ -1219,11 +1219,11 @@ static int hns3_setup_tc(struct net_device *netdev, u8 tc)
        return 0;
 }
 
-static int hns3_nic_setup_tc(struct net_device *dev, u32 handle,
-                            u32 chain_index, __be16 protocol,
+static int hns3_nic_setup_tc(struct net_device *dev, enum tc_setup_type type,
+                            u32 handle, u32 chain_index, __be16 protocol,
                             struct tc_to_netdev *tc)
 {
-       if (handle != TC_H_ROOT || tc->type != TC_SETUP_MQPRIO)
+       if (handle != TC_H_ROOT || type != TC_SETUP_MQPRIO)
                return -EINVAL;
 
        return hns3_setup_tc(dev, tc->mqprio->num_tc);
index 5e37387c70825db8c1edc425c21478787e213a5e..b30190639e78c3635f40a6fdac9ae7fa3888ea18 100644 (file)
@@ -1265,10 +1265,11 @@ err_queueing_scheme:
        return err;
 }
 
-static int __fm10k_setup_tc(struct net_device *dev, u32 handle, u32 chain_index,
-                           __be16 proto, struct tc_to_netdev *tc)
+static int __fm10k_setup_tc(struct net_device *dev, enum tc_setup_type type,
+                           u32 handle, u32 chain_index, __be16 proto,
+                           struct tc_to_netdev *tc)
 {
-       if (tc->type != TC_SETUP_MQPRIO)
+       if (type != TC_SETUP_MQPRIO)
                return -EINVAL;
 
        tc->mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS;
index 4104944ea36709120709a6e347f2af1abcdd20ff..7d47a718f92226fdec6c669a4904c12d48c461bd 100644 (file)
@@ -5656,11 +5656,11 @@ exit:
        return ret;
 }
 
-static int __i40e_setup_tc(struct net_device *netdev, u32 handle,
-                          u32 chain_index, __be16 proto,
+static int __i40e_setup_tc(struct net_device *netdev, enum tc_setup_type type,
+                          u32 handle, u32 chain_index, __be16 proto,
                           struct tc_to_netdev *tc)
 {
-       if (tc->type != TC_SETUP_MQPRIO)
+       if (type != TC_SETUP_MQPRIO)
                return -EINVAL;
 
        tc->mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS;
index 091fcc7e6e43621449643746574f4ca707ba7b08..d39db9711df6b3bca7b8f2b0b395c612c5bcc851 100644 (file)
@@ -9226,8 +9226,9 @@ free_jump:
        return err;
 }
 
-static int __ixgbe_setup_tc(struct net_device *dev, u32 handle, u32 chain_index,
-                           __be16 proto, struct tc_to_netdev *tc)
+static int __ixgbe_setup_tc(struct net_device *dev, enum tc_setup_type type,
+                           u32 handle, u32 chain_index, __be16 proto,
+                           struct tc_to_netdev *tc)
 {
        struct ixgbe_adapter *adapter = netdev_priv(dev);
 
@@ -9235,7 +9236,7 @@ static int __ixgbe_setup_tc(struct net_device *dev, u32 handle, u32 chain_index,
                return -EOPNOTSUPP;
 
        if (TC_H_MAJ(handle) == TC_H_MAJ(TC_H_INGRESS) &&
-           tc->type == TC_SETUP_CLSU32) {
+           type == TC_SETUP_CLSU32) {
                switch (tc->cls_u32->command) {
                case TC_CLSU32_NEW_KNODE:
                case TC_CLSU32_REPLACE_KNODE:
@@ -9255,7 +9256,7 @@ static int __ixgbe_setup_tc(struct net_device *dev, u32 handle, u32 chain_index,
                }
        }
 
-       if (tc->type != TC_SETUP_MQPRIO)
+       if (type != TC_SETUP_MQPRIO)
                return -EINVAL;
 
        tc->mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS;
index 3a291fc1780ab9193d7202be106f36ca8854b258..5c33550765edbb2da540b5255fc7145884cbd2f8 100644 (file)
@@ -130,11 +130,11 @@ out:
        return err;
 }
 
-static int __mlx4_en_setup_tc(struct net_device *dev, u32 handle,
-                             u32 chain_index, __be16 proto,
+static int __mlx4_en_setup_tc(struct net_device *dev, enum tc_setup_type type,
+                             u32 handle, u32 chain_index, __be16 proto,
                              struct tc_to_netdev *tc)
 {
-       if (tc->type != TC_SETUP_MQPRIO)
+       if (type != TC_SETUP_MQPRIO)
                return -EINVAL;
 
        if (tc->mqprio->num_tc && tc->mqprio->num_tc != MLX4_EN_NUM_UP_HIGH)
index 57f31fa478ceee5b83a3b4041cfef12457acbd03..4052e225f1dcb853bf5b47d4eb69f15a69f71b9f 100644 (file)
@@ -3027,8 +3027,8 @@ out:
        return err;
 }
 
-static int mlx5e_ndo_setup_tc(struct net_device *dev, u32 handle,
-                             u32 chain_index, __be16 proto,
+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)
 {
        struct mlx5e_priv *priv = netdev_priv(dev);
@@ -3039,7 +3039,7 @@ static int mlx5e_ndo_setup_tc(struct net_device *dev, u32 handle,
        if (chain_index)
                return -EOPNOTSUPP;
 
-       switch (tc->type) {
+       switch (type) {
        case TC_SETUP_CLSFLOWER:
                switch (tc->cls_flower->command) {
                case TC_CLSFLOWER_REPLACE:
@@ -3054,7 +3054,7 @@ static int mlx5e_ndo_setup_tc(struct net_device *dev, u32 handle,
        }
 
 mqprio:
-       if (tc->type != TC_SETUP_MQPRIO)
+       if (type != TC_SETUP_MQPRIO)
                return -EINVAL;
 
        tc->mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS;
index 45e60be9c277660ab87acc39dda4036403c595e3..d44049ed5371e40a083493a1f5139a0a2a393edb 100644 (file)
@@ -651,7 +651,8 @@ static int mlx5e_rep_get_phys_port_name(struct net_device *dev,
        return 0;
 }
 
-static int mlx5e_rep_ndo_setup_tc(struct net_device *dev, u32 handle,
+static int mlx5e_rep_ndo_setup_tc(struct net_device *dev,
+                                 enum tc_setup_type type, u32 handle,
                                  u32 chain_index, __be16 proto,
                                  struct tc_to_netdev *tc)
 {
@@ -664,15 +665,15 @@ static int mlx5e_rep_ndo_setup_tc(struct net_device *dev, u32 handle,
                struct mlx5_eswitch *esw = priv->mdev->priv.eswitch;
                struct net_device *uplink_dev = mlx5_eswitch_get_uplink_netdev(esw);
 
-               return uplink_dev->netdev_ops->ndo_setup_tc(uplink_dev, handle,
-                                                           chain_index,
+               return uplink_dev->netdev_ops->ndo_setup_tc(uplink_dev, type,
+                                                           handle, chain_index,
                                                            proto, tc);
        }
 
        if (chain_index)
                return -EOPNOTSUPP;
 
-       switch (tc->type) {
+       switch (type) {
        case TC_SETUP_CLSFLOWER:
                switch (tc->cls_flower->command) {
                case TC_CLSFLOWER_REPLACE:
index 66d511d45c253eee4e31131cacc11ae09797e2ec..155424266cbf90f227c9b15019764a3313a0cf65 100644 (file)
@@ -1693,8 +1693,8 @@ static void mlxsw_sp_port_del_cls_matchall(struct mlxsw_sp_port *mlxsw_sp_port,
        kfree(mall_tc_entry);
 }
 
-static int mlxsw_sp_setup_tc(struct net_device *dev, u32 handle,
-                            u32 chain_index, __be16 proto,
+static int mlxsw_sp_setup_tc(struct net_device *dev, enum tc_setup_type type,
+                            u32 handle, u32 chain_index, __be16 proto,
                             struct tc_to_netdev *tc)
 {
        struct mlxsw_sp_port *mlxsw_sp_port = netdev_priv(dev);
@@ -1703,7 +1703,7 @@ static int mlxsw_sp_setup_tc(struct net_device *dev, u32 handle,
        if (chain_index)
                return -EOPNOTSUPP;
 
-       switch (tc->type) {
+       switch (type) {
        case TC_SETUP_MATCHALL:
                switch (tc->cls_mall->command) {
                case TC_CLSMATCHALL_REPLACE:
@@ -1733,9 +1733,9 @@ static int mlxsw_sp_setup_tc(struct net_device *dev, u32 handle,
                default:
                        return -EOPNOTSUPP;
                }
+       default:
+               return -EOPNOTSUPP;
        }
-
-       return -EOPNOTSUPP;
 }
 
 static const struct net_device_ops mlxsw_sp_port_netdev_ops = {
index afbdf5fd4e4feed91852e150f8c6ef53894900ff..788880808a6e1be06758cc6beb06533b5edb4bb0 100644 (file)
@@ -121,7 +121,8 @@ static void nfp_bpf_vnic_clean(struct nfp_app *app, struct nfp_net *nn)
 }
 
 static int nfp_bpf_setup_tc(struct nfp_app *app, struct net_device *netdev,
-                           u32 handle, __be16 proto, struct tc_to_netdev *tc)
+                           enum tc_setup_type type, u32 handle, __be16 proto,
+                           struct tc_to_netdev *tc)
 {
        struct nfp_net *nn = netdev_priv(netdev);
 
@@ -130,7 +131,7 @@ static int nfp_bpf_setup_tc(struct nfp_app *app, struct net_device *netdev,
        if (proto != htons(ETH_P_ALL))
                return -EOPNOTSUPP;
 
-       if (tc->type == TC_SETUP_CLSBPF && nfp_net_ebpf_capable(nn)) {
+       if (type == TC_SETUP_CLSBPF && nfp_net_ebpf_capable(nn)) {
                if (!nn->dp.bpf_offload_xdp)
                        return nfp_net_bpf_offload(nn, tc->cls_bpf);
                else
index 9e64c048e83f69b862cc3fa29980b6ac9556f07d..314e6e8ba6498cbb0dbeaebfb47549cc86b6b408 100644 (file)
@@ -135,7 +135,8 @@ int nfp_flower_metadata_init(struct nfp_app *app);
 void nfp_flower_metadata_cleanup(struct nfp_app *app);
 
 int nfp_flower_setup_tc(struct nfp_app *app, struct net_device *netdev,
-                       u32 handle, __be16 proto, struct tc_to_netdev *tc);
+                       enum tc_setup_type type, u32 handle, __be16 proto,
+                       struct tc_to_netdev *tc);
 int nfp_flower_compile_flow_match(struct tc_cls_flower_offload *flow,
                                  struct nfp_fl_key_ls *key_ls,
                                  struct net_device *netdev,
index 4ad10bd5e139402dc452d90be81f1384bb5a6785..d045cf8c140a7950c77ea8d4ddd814778ac1520a 100644 (file)
@@ -385,7 +385,8 @@ nfp_flower_repr_offload(struct nfp_app *app, struct net_device *netdev,
 }
 
 int nfp_flower_setup_tc(struct nfp_app *app, struct net_device *netdev,
-                       u32 handle, __be16 proto, struct tc_to_netdev *tc)
+                       enum tc_setup_type type, u32 handle, __be16 proto,
+                       struct tc_to_netdev *tc)
 {
        if (TC_H_MAJ(handle) != TC_H_MAJ(TC_H_INGRESS))
                return -EOPNOTSUPP;
@@ -393,7 +394,7 @@ int nfp_flower_setup_tc(struct nfp_app *app, struct net_device *netdev,
        if (!eth_proto_is_802_3(proto))
                return -EOPNOTSUPP;
 
-       if (tc->type != TC_SETUP_CLSFLOWER)
+       if (type != TC_SETUP_CLSFLOWER)
                return -EINVAL;
 
        return nfp_flower_repr_offload(app, netdev, tc->cls_flower);
index 5d714e10d9a947fcabded2642547aab22c3a08c4..b3b03bb9d90782cd5a8cbe3c4f5d25d78288e471 100644 (file)
@@ -109,7 +109,8 @@ struct nfp_app_type {
        void (*ctrl_msg_rx)(struct nfp_app *app, struct sk_buff *skb);
 
        int (*setup_tc)(struct nfp_app *app, struct net_device *netdev,
-                       u32 handle, __be16 proto, struct tc_to_netdev *tc);
+                       enum tc_setup_type type, u32 handle, __be16 proto,
+                       struct tc_to_netdev *tc);
        bool (*tc_busy)(struct nfp_app *app, struct nfp_net *nn);
        int (*xdp_offload)(struct nfp_app *app, struct nfp_net *nn,
                           struct bpf_prog *prog);
@@ -238,12 +239,13 @@ static inline bool nfp_app_tc_busy(struct nfp_app *app, struct nfp_net *nn)
 
 static inline int nfp_app_setup_tc(struct nfp_app *app,
                                   struct net_device *netdev,
+                                  enum tc_setup_type type,
                                   u32 handle, __be16 proto,
                                   struct tc_to_netdev *tc)
 {
        if (!app || !app->type->setup_tc)
                return -EOPNOTSUPP;
-       return app->type->setup_tc(app, netdev, handle, proto, tc);
+       return app->type->setup_tc(app, netdev, type, handle, proto, tc);
 }
 
 static inline int nfp_app_xdp_offload(struct nfp_app *app, struct nfp_net *nn,
index d16a7b78ba9b877653ee88ccee2dcdf3025bd33d..9d776f9823521d713267a4e99eae5ecb52dd6576 100644 (file)
@@ -88,8 +88,9 @@ const struct switchdev_ops nfp_port_switchdev_ops = {
        .switchdev_port_attr_get        = nfp_port_attr_get,
 };
 
-int nfp_port_setup_tc(struct net_device *netdev, u32 handle, u32 chain_index,
-                     __be16 proto, struct tc_to_netdev *tc)
+int nfp_port_setup_tc(struct net_device *netdev, enum tc_setup_type type,
+                     u32 handle, u32 chain_index, __be16 proto,
+                     struct tc_to_netdev *tc)
 {
        struct nfp_port *port;
 
@@ -100,7 +101,7 @@ int nfp_port_setup_tc(struct net_device *netdev, u32 handle, u32 chain_index,
        if (!port)
                return -EOPNOTSUPP;
 
-       return nfp_app_setup_tc(port->app, netdev, handle, proto, tc);
+       return nfp_app_setup_tc(port->app, netdev, type, handle, proto, tc);
 }
 
 struct nfp_port *
index 56c76926c82a8c8e7b8d6f93c1034d800fb21b96..239c5401000c431ee95e2c95ed31fbc1d01b0f5a 100644 (file)
@@ -109,8 +109,9 @@ struct nfp_port {
 
 extern const struct switchdev_ops nfp_port_switchdev_ops;
 
-int nfp_port_setup_tc(struct net_device *netdev, u32 handle, u32 chain_index,
-                     __be16 proto, struct tc_to_netdev *tc);
+int nfp_port_setup_tc(struct net_device *netdev, enum tc_setup_type type,
+                     u32 handle, u32 chain_index, __be16 proto,
+                     struct tc_to_netdev *tc);
 
 struct nfp_port *nfp_port_from_netdev(struct net_device *netdev);
 struct nfp_port *
index fcea9371ab7f636b885babfdc3ded58a6a941eec..e41a7179bc054aaf484b9fc9f8d8fb61c042222c 100644 (file)
@@ -32,8 +32,9 @@ netdev_tx_t efx_hard_start_xmit(struct sk_buff *skb,
                                struct net_device *net_dev);
 netdev_tx_t efx_enqueue_skb(struct efx_tx_queue *tx_queue, struct sk_buff *skb);
 void efx_xmit_done(struct efx_tx_queue *tx_queue, unsigned int index);
-int efx_setup_tc(struct net_device *net_dev, u32 handle, u32 chain_index,
-                __be16 proto, struct tc_to_netdev *tc);
+int efx_setup_tc(struct net_device *net_dev, enum tc_setup_type type,
+                u32 handle, u32 chain_index, __be16 proto,
+                struct tc_to_netdev *tc);
 unsigned int efx_tx_max_skb_descs(struct efx_nic *efx);
 extern unsigned int efx_piobuf_size;
 extern bool efx_separate_tx_channels;
index e5a7a40cc8b68ee092dddc2068760cb1d716383a..f3bc67ec1f301b07c364501b966deffbce825d0c 100644 (file)
@@ -32,8 +32,9 @@ netdev_tx_t ef4_hard_start_xmit(struct sk_buff *skb,
                                struct net_device *net_dev);
 netdev_tx_t ef4_enqueue_skb(struct ef4_tx_queue *tx_queue, struct sk_buff *skb);
 void ef4_xmit_done(struct ef4_tx_queue *tx_queue, unsigned int index);
-int ef4_setup_tc(struct net_device *net_dev, u32 handle, u32 chain_index,
-                __be16 proto, struct tc_to_netdev *tc);
+int ef4_setup_tc(struct net_device *net_dev, enum tc_setup_type type,
+                u32 handle, u32 chain_index, __be16 proto,
+                struct tc_to_netdev *tc);
 unsigned int ef4_tx_max_skb_descs(struct ef4_nic *efx);
 extern bool ef4_separate_tx_channels;
 
index f1520a404ac619851d1f6ed5622828b6c7fbe44c..6c4752694c1fd95e5bc6d42328ee8e05e8fea0c2 100644 (file)
@@ -425,8 +425,9 @@ void ef4_init_tx_queue_core_txq(struct ef4_tx_queue *tx_queue)
                                     efx->n_tx_channels : 0));
 }
 
-int ef4_setup_tc(struct net_device *net_dev, u32 handle, u32 chain_index,
-                __be16 proto, struct tc_to_netdev *ntc)
+int ef4_setup_tc(struct net_device *net_dev, enum tc_setup_type type,
+                u32 handle, u32 chain_index, __be16 proto,
+                struct tc_to_netdev *ntc)
 {
        struct ef4_nic *efx = netdev_priv(net_dev);
        struct ef4_channel *channel;
@@ -434,7 +435,7 @@ int ef4_setup_tc(struct net_device *net_dev, u32 handle, u32 chain_index,
        unsigned tc, num_tc;
        int rc;
 
-       if (ntc->type != TC_SETUP_MQPRIO)
+       if (type != TC_SETUP_MQPRIO)
                return -EINVAL;
 
        num_tc = ntc->mqprio->num_tc;
index 02d41eb4a8e9ae2cdabae7f1400d8506ce0abc85..0c08c10d751cc84451afb90a78ad089a5ed5a5b2 100644 (file)
@@ -653,8 +653,9 @@ void efx_init_tx_queue_core_txq(struct efx_tx_queue *tx_queue)
                                     efx->n_tx_channels : 0));
 }
 
-int efx_setup_tc(struct net_device *net_dev, u32 handle, u32 chain_index,
-                __be16 proto, struct tc_to_netdev *ntc)
+int efx_setup_tc(struct net_device *net_dev, enum tc_setup_type type,
+                u32 handle, u32 chain_index, __be16 proto,
+                struct tc_to_netdev *ntc)
 {
        struct efx_nic *efx = netdev_priv(net_dev);
        struct efx_channel *channel;
@@ -662,7 +663,7 @@ int efx_setup_tc(struct net_device *net_dev, u32 handle, u32 chain_index,
        unsigned tc, num_tc;
        int rc;
 
-       if (ntc->type != TC_SETUP_MQPRIO)
+       if (type != TC_SETUP_MQPRIO)
                return -EINVAL;
 
        num_tc = ntc->mqprio->num_tc;
index 9d52c3a78621b27b355c07bff905a6df3ad5c86b..cb21742f617730f0db8a1b6c1ea6dc7d9ef85733 100644 (file)
@@ -1877,8 +1877,9 @@ static u16 netcp_select_queue(struct net_device *dev, struct sk_buff *skb,
        return 0;
 }
 
-static int netcp_setup_tc(struct net_device *dev, u32 handle, u32 chain_index,
-                         __be16 proto, struct tc_to_netdev *tc)
+static int netcp_setup_tc(struct net_device *dev, enum tc_setup_type type,
+                         u32 handle, u32 chain_index, __be16 proto,
+                         struct tc_to_netdev *tc)
 {
        u8 num_tc;
        int i;
@@ -1886,7 +1887,7 @@ static int netcp_setup_tc(struct net_device *dev, u32 handle, u32 chain_index,
        /* setup tc must be called under rtnl lock */
        ASSERT_RTNL();
 
-       if (tc->type != TC_SETUP_MQPRIO)
+       if (type != TC_SETUP_MQPRIO)
                return -EINVAL;
 
        tc->mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS;
index 3a3cdc1b1f319421dde87d8c246d16e6ced5fd46..e4238e540544ecaa17c8276fa6ee2f45ce40384b 100644 (file)
@@ -774,7 +774,7 @@ typedef u16 (*select_queue_fallback_t)(struct net_device *dev,
 /* These structures hold the attributes of qdisc and classifiers
  * that are being passed to the netdevice through the setup_tc op.
  */
-enum {
+enum tc_setup_type {
        TC_SETUP_MQPRIO,
        TC_SETUP_CLSU32,
        TC_SETUP_CLSFLOWER,
@@ -785,7 +785,6 @@ enum {
 struct tc_cls_u32_offload;
 
 struct tc_to_netdev {
-       unsigned int type;
        union {
                struct tc_cls_u32_offload *cls_u32;
                struct tc_cls_flower_offload *cls_flower;
@@ -978,8 +977,9 @@ struct xfrmdev_ops {
  *      with PF and querying it may introduce a theoretical security risk.
  * int (*ndo_set_vf_rss_query_en)(struct net_device *dev, int vf, bool setting);
  * int (*ndo_get_vf_port)(struct net_device *dev, int vf, struct sk_buff *skb);
- * int (*ndo_setup_tc)(struct net_device *dev, u32 handle, u32 chain_index,
- *                    __be16 protocol, struct tc_to_netdev *tc);
+ * int (*ndo_setup_tc)(struct net_device *dev, enum tc_setup_type type,
+ *                    u32 handle, u32 chain_index, __be16 protocol,
+ *                    struct tc_to_netdev *tc);
  *     Called to setup any 'tc' scheduler, classifier or action on @dev.
  *     This is always called from the stack with the rtnl lock held and netif
  *     tx queues stopped. This allows the netdevice to perform queue
@@ -1227,6 +1227,7 @@ struct net_device_ops {
                                                   struct net_device *dev,
                                                   int vf, bool setting);
        int                     (*ndo_setup_tc)(struct net_device *dev,
+                                               enum tc_setup_type type,
                                                u32 handle, u32 chain_index,
                                                __be16 protocol,
                                                struct tc_to_netdev *tc);
index 75c5c5808220cb41e8c8036e6416f70455a15acb..b4b63c20ec80a66f79c95af9c0a10c1dc3062963 100644 (file)
@@ -863,8 +863,8 @@ static void dsa_slave_del_cls_matchall(struct net_device *dev,
        kfree(mall_tc_entry);
 }
 
-static int dsa_slave_setup_tc(struct net_device *dev, u32 handle,
-                             u32 chain_index, __be16 protocol,
+static int dsa_slave_setup_tc(struct net_device *dev, enum tc_setup_type type,
+                             u32 handle, u32 chain_index, __be16 protocol,
                              struct tc_to_netdev *tc)
 {
        bool ingress = TC_H_MAJ(handle) == TC_H_MAJ(TC_H_INGRESS);
@@ -872,7 +872,7 @@ static int dsa_slave_setup_tc(struct net_device *dev, u32 handle,
        if (chain_index)
                return -EOPNOTSUPP;
 
-       switch (tc->type) {
+       switch (type) {
        case TC_SETUP_MATCHALL:
                switch (tc->cls_mall->command) {
                case TC_CLSMATCHALL_REPLACE:
index cf248c3137adad4d1babc6da2e9fdaaef5719d73..e2bf2753173d1721ecfafc58d6ceb8c530c7bdd8 100644 (file)
@@ -151,7 +151,6 @@ static int cls_bpf_offload_cmd(struct tcf_proto *tp, struct cls_bpf_prog *prog,
        struct tc_to_netdev offload;
        int err;
 
-       offload.type = TC_SETUP_CLSBPF;
        offload.cls_bpf = &bpf_offload;
 
        bpf_offload.command = cmd;
@@ -161,7 +160,8 @@ static int cls_bpf_offload_cmd(struct tcf_proto *tp, struct cls_bpf_prog *prog,
        bpf_offload.exts_integrated = prog->exts_integrated;
        bpf_offload.gen_flags = prog->gen_flags;
 
-       err = dev->netdev_ops->ndo_setup_tc(dev, tp->q->handle,
+       err = dev->netdev_ops->ndo_setup_tc(dev, TC_SETUP_CLSBPF,
+                                           tp->q->handle,
                                            tp->chain->index,
                                            tp->protocol, &offload);
 
index 7ab524fc43f95d9302592dc3c8bc9699140616f4..ddeed17d20247b2456cdbc03ef94835b6109de7c 100644 (file)
@@ -236,11 +236,10 @@ static void fl_hw_destroy_filter(struct tcf_proto *tp, struct cls_fl_filter *f)
        offload.prio = tp->prio;
        offload.cookie = (unsigned long)f;
 
-       tc->type = TC_SETUP_CLSFLOWER;
        tc->cls_flower = &offload;
 
-       dev->netdev_ops->ndo_setup_tc(dev, tp->q->handle, tp->chain->index,
-                                     tp->protocol, tc);
+       dev->netdev_ops->ndo_setup_tc(dev, TC_SETUP_CLSFLOWER, tp->q->handle,
+                                     tp->chain->index, tp->protocol, tc);
 }
 
 static int fl_hw_replace_filter(struct tcf_proto *tp,
@@ -273,11 +272,11 @@ static int fl_hw_replace_filter(struct tcf_proto *tp,
        offload.key = &f->mkey;
        offload.exts = &f->exts;
 
-       tc->type = TC_SETUP_CLSFLOWER;
        tc->cls_flower = &offload;
 
-       err = dev->netdev_ops->ndo_setup_tc(dev, tp->q->handle,
-                                           tp->chain->index, tp->protocol, tc);
+       err = dev->netdev_ops->ndo_setup_tc(dev, TC_SETUP_CLSFLOWER,
+                                           tp->q->handle, tp->chain->index,
+                                           tp->protocol, tc);
        if (!err)
                f->flags |= TCA_CLS_FLAGS_IN_HW;
 
@@ -300,10 +299,9 @@ static void fl_hw_update_stats(struct tcf_proto *tp, struct cls_fl_filter *f)
        offload.cookie = (unsigned long)f;
        offload.exts = &f->exts;
 
-       tc->type = TC_SETUP_CLSFLOWER;
        tc->cls_flower = &offload;
 
-       dev->netdev_ops->ndo_setup_tc(dev, tp->q->handle,
+       dev->netdev_ops->ndo_setup_tc(dev, TC_CLSFLOWER_STATS, tp->q->handle,
                                      tp->chain->index, tp->protocol, tc);
 }
 
index f35177b48373b512b9cca9a45847c1e30f27f546..6ffe0b82ab83fb63d9c3cab04de378594ef0395c 100644 (file)
@@ -58,14 +58,13 @@ static int mall_replace_hw_filter(struct tcf_proto *tp,
        struct tc_cls_matchall_offload mall_offload = {0};
        int err;
 
-       offload.type = TC_SETUP_MATCHALL;
        offload.cls_mall = &mall_offload;
        offload.cls_mall->command = TC_CLSMATCHALL_REPLACE;
        offload.cls_mall->exts = &head->exts;
        offload.cls_mall->cookie = cookie;
 
-       err = dev->netdev_ops->ndo_setup_tc(dev, tp->q->handle,
-                                           tp->chain->index,
+       err = dev->netdev_ops->ndo_setup_tc(dev, TC_SETUP_MATCHALL,
+                                           tp->q->handle, tp->chain->index,
                                            tp->protocol, &offload);
        if (!err)
                head->flags |= TCA_CLS_FLAGS_IN_HW;
@@ -81,14 +80,13 @@ static void mall_destroy_hw_filter(struct tcf_proto *tp,
        struct tc_to_netdev offload;
        struct tc_cls_matchall_offload mall_offload = {0};
 
-       offload.type = TC_SETUP_MATCHALL;
        offload.cls_mall = &mall_offload;
        offload.cls_mall->command = TC_CLSMATCHALL_DESTROY;
        offload.cls_mall->exts = NULL;
        offload.cls_mall->cookie = cookie;
 
-       dev->netdev_ops->ndo_setup_tc(dev, tp->q->handle, tp->chain->index,
-                                     tp->protocol, &offload);
+       dev->netdev_ops->ndo_setup_tc(dev, TC_SETUP_MATCHALL, tp->q->handle,
+                                     tp->chain->index, tp->protocol, &offload);
 }
 
 static void mall_destroy(struct tcf_proto *tp)
index 9fd243799fe7b1922e42a2f1de8d99451cf6192d..d1bae4cc749f6c3ffd1f43fd737bdc668245ea13 100644 (file)
@@ -434,15 +434,14 @@ static void u32_remove_hw_knode(struct tcf_proto *tp, u32 handle)
        struct tc_cls_u32_offload u32_offload = {0};
        struct tc_to_netdev offload;
 
-       offload.type = TC_SETUP_CLSU32;
        offload.cls_u32 = &u32_offload;
 
        if (tc_should_offload(dev, tp, 0)) {
                offload.cls_u32->command = TC_CLSU32_DELETE_KNODE;
                offload.cls_u32->knode.handle = handle;
-               dev->netdev_ops->ndo_setup_tc(dev, tp->q->handle,
-                                             tp->chain->index, tp->protocol,
-                                             &offload);
+               dev->netdev_ops->ndo_setup_tc(dev, TC_SETUP_CLSU32,
+                                             tp->q->handle, tp->chain->index,
+                                             tp->protocol, &offload);
        }
 }
 
@@ -457,7 +456,6 @@ static int u32_replace_hw_hnode(struct tcf_proto *tp, struct tc_u_hnode *h,
        if (!tc_should_offload(dev, tp, flags))
                return tc_skip_sw(flags) ? -EINVAL : 0;
 
-       offload.type = TC_SETUP_CLSU32;
        offload.cls_u32 = &u32_offload;
 
        offload.cls_u32->command = TC_CLSU32_NEW_HNODE;
@@ -465,7 +463,7 @@ static int u32_replace_hw_hnode(struct tcf_proto *tp, struct tc_u_hnode *h,
        offload.cls_u32->hnode.handle = h->handle;
        offload.cls_u32->hnode.prio = h->prio;
 
-       err = dev->netdev_ops->ndo_setup_tc(dev, tp->q->handle,
+       err = dev->netdev_ops->ndo_setup_tc(dev, TC_SETUP_CLSU32, tp->q->handle,
                                            tp->chain->index, tp->protocol,
                                            &offload);
        if (tc_skip_sw(flags))
@@ -480,7 +478,6 @@ static void u32_clear_hw_hnode(struct tcf_proto *tp, struct tc_u_hnode *h)
        struct tc_cls_u32_offload u32_offload = {0};
        struct tc_to_netdev offload;
 
-       offload.type = TC_SETUP_CLSU32;
        offload.cls_u32 = &u32_offload;
 
        if (tc_should_offload(dev, tp, 0)) {
@@ -489,9 +486,9 @@ static void u32_clear_hw_hnode(struct tcf_proto *tp, struct tc_u_hnode *h)
                offload.cls_u32->hnode.handle = h->handle;
                offload.cls_u32->hnode.prio = h->prio;
 
-               dev->netdev_ops->ndo_setup_tc(dev, tp->q->handle,
-                                             tp->chain->index, tp->protocol,
-                                             &offload);
+               dev->netdev_ops->ndo_setup_tc(dev, TC_SETUP_CLSU32,
+                                             tp->q->handle, tp->chain->index,
+                                             tp->protocol, &offload);
        }
 }
 
@@ -503,7 +500,6 @@ static int u32_replace_hw_knode(struct tcf_proto *tp, struct tc_u_knode *n,
        struct tc_to_netdev offload;
        int err;
 
-       offload.type = TC_SETUP_CLSU32;
        offload.cls_u32 = &u32_offload;
 
        if (!tc_should_offload(dev, tp, flags))
@@ -524,7 +520,7 @@ static int u32_replace_hw_knode(struct tcf_proto *tp, struct tc_u_knode *n,
        if (n->ht_down)
                offload.cls_u32->knode.link_handle = n->ht_down->handle;
 
-       err = dev->netdev_ops->ndo_setup_tc(dev, tp->q->handle,
+       err = dev->netdev_ops->ndo_setup_tc(dev, TC_SETUP_CLSU32, tp->q->handle,
                                            tp->chain->index, tp->protocol,
                                            &offload);
 
index e0c02725cd487c2a2c5f063066f29faab8ae479d..329610ce4dfebea8e8a0236822ae405f90f713ef 100644 (file)
@@ -40,10 +40,10 @@ static void mqprio_destroy(struct Qdisc *sch)
 
        if (priv->hw_offload && dev->netdev_ops->ndo_setup_tc) {
                struct tc_mqprio_qopt offload = { 0 };
-               struct tc_to_netdev tc = { .type = TC_SETUP_MQPRIO,
-                                          { .mqprio = &offload } };
+               struct tc_to_netdev tc = { { .mqprio = &offload } };
 
-               dev->netdev_ops->ndo_setup_tc(dev, sch->handle, 0, 0, &tc);
+               dev->netdev_ops->ndo_setup_tc(dev, TC_SETUP_MQPRIO,
+                                             sch->handle, 0, 0, &tc);
        } else {
                netdev_set_num_tc(dev, 0);
        }
@@ -149,11 +149,10 @@ static int mqprio_init(struct Qdisc *sch, struct nlattr *opt)
         */
        if (qopt->hw) {
                struct tc_mqprio_qopt offload = *qopt;
-               struct tc_to_netdev tc = { .type = TC_SETUP_MQPRIO,
-                                          { .mqprio = &offload } };
+               struct tc_to_netdev tc = { { .mqprio = &offload } };
 
-               err = dev->netdev_ops->ndo_setup_tc(dev, sch->handle,
-                                                   0, 0, &tc);
+               err = dev->netdev_ops->ndo_setup_tc(dev, TC_SETUP_MQPRIO,
+                                                   sch->handle, 0, 0, &tc);
                if (err)
                        return err;