net: sched: get rid of struct tc_to_netdev
Get rid of struct tc_to_netdev which is now just unnecessary container and rather pass per-type structures down to drivers directly. Along with that, consolidate the naming of per-type structure variables in cls_*. 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>
This commit is contained in:

committed by
David S. Miller

parent
38cf0426e5
commit
de4784ca03
@@ -1919,16 +1919,17 @@ static void xgbe_poll_controller(struct net_device *netdev)
|
||||
#endif /* End CONFIG_NET_POLL_CONTROLLER */
|
||||
|
||||
static int xgbe_setup_tc(struct net_device *netdev, enum tc_setup_type type,
|
||||
struct tc_to_netdev *tc_to_netdev)
|
||||
void *type_data)
|
||||
{
|
||||
struct xgbe_prv_data *pdata = netdev_priv(netdev);
|
||||
struct tc_mqprio_qopt *mqprio = type_data;
|
||||
u8 tc;
|
||||
|
||||
if (type != TC_SETUP_MQPRIO)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
tc_to_netdev->mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS;
|
||||
tc = tc_to_netdev->mqprio->num_tc;
|
||||
mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS;
|
||||
tc = mqprio->num_tc;
|
||||
|
||||
if (tc > pdata->hw_feat.tc_cnt)
|
||||
return -EINVAL;
|
||||
|
@@ -4285,14 +4285,16 @@ int bnx2x_setup_tc(struct net_device *dev, u8 num_tc)
|
||||
}
|
||||
|
||||
int __bnx2x_setup_tc(struct net_device *dev, enum tc_setup_type type,
|
||||
struct tc_to_netdev *tc)
|
||||
void *type_data)
|
||||
{
|
||||
struct tc_mqprio_qopt *mqprio = type_data;
|
||||
|
||||
if (type != TC_SETUP_MQPRIO)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
tc->mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS;
|
||||
mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS;
|
||||
|
||||
return bnx2x_setup_tc(dev, tc->mqprio->num_tc);
|
||||
return bnx2x_setup_tc(dev, mqprio->num_tc);
|
||||
}
|
||||
|
||||
/* called with rtnl_lock */
|
||||
|
@@ -487,7 +487,7 @@ 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, enum tc_setup_type type,
|
||||
struct tc_to_netdev *tc);
|
||||
void *type_data);
|
||||
|
||||
int bnx2x_get_vf_config(struct net_device *dev, int vf,
|
||||
struct ifla_vf_info *ivi);
|
||||
|
@@ -7238,14 +7238,16 @@ int bnxt_setup_mq_tc(struct net_device *dev, u8 tc)
|
||||
}
|
||||
|
||||
static int bnxt_setup_tc(struct net_device *dev, enum tc_setup_type type,
|
||||
struct tc_to_netdev *ntc)
|
||||
void *type_data)
|
||||
{
|
||||
struct tc_mqprio_qopt *mqprio = type_data;
|
||||
|
||||
if (type != TC_SETUP_MQPRIO)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
ntc->mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS;
|
||||
mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS;
|
||||
|
||||
return bnxt_setup_mq_tc(dev, ntc->mqprio->num_tc);
|
||||
return bnxt_setup_mq_tc(dev, mqprio->num_tc);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_RFS_ACCEL
|
||||
|
@@ -2908,7 +2908,7 @@ static int cxgb_setup_tc_cls_u32(struct net_device *dev,
|
||||
}
|
||||
|
||||
static int cxgb_setup_tc(struct net_device *dev, enum tc_setup_type type,
|
||||
struct tc_to_netdev *tc)
|
||||
void *type_data)
|
||||
{
|
||||
struct port_info *pi = netdev2pinfo(dev);
|
||||
struct adapter *adap = netdev2adap(dev);
|
||||
@@ -2922,7 +2922,7 @@ static int cxgb_setup_tc(struct net_device *dev, enum tc_setup_type type,
|
||||
|
||||
switch (type) {
|
||||
case TC_SETUP_CLSU32:
|
||||
return cxgb_setup_tc_cls_u32(dev, tc->cls_u32);
|
||||
return cxgb_setup_tc_cls_u32(dev, type_data);
|
||||
default:
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
@@ -343,17 +343,18 @@ static void dpaa_get_stats64(struct net_device *net_dev,
|
||||
}
|
||||
|
||||
static int dpaa_setup_tc(struct net_device *net_dev, enum tc_setup_type type,
|
||||
struct tc_to_netdev *tc)
|
||||
void *type_data)
|
||||
{
|
||||
struct dpaa_priv *priv = netdev_priv(net_dev);
|
||||
struct tc_mqprio_qopt *mqprio = type_data;
|
||||
u8 num_tc;
|
||||
int i;
|
||||
|
||||
if (type != TC_SETUP_MQPRIO)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
tc->mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS;
|
||||
num_tc = tc->mqprio->num_tc;
|
||||
mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS;
|
||||
num_tc = mqprio->num_tc;
|
||||
|
||||
if (num_tc == priv->num_tc)
|
||||
return 0;
|
||||
|
@@ -1220,12 +1220,14 @@ static int hns3_setup_tc(struct net_device *netdev, u8 tc)
|
||||
}
|
||||
|
||||
static int hns3_nic_setup_tc(struct net_device *dev, enum tc_setup_type type,
|
||||
struct tc_to_netdev *tc)
|
||||
void *type_data)
|
||||
{
|
||||
struct tc_mqprio_qopt *mqprio = type_data;
|
||||
|
||||
if (type != TC_SETUP_MQPRIO)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
return hns3_setup_tc(dev, tc->mqprio->num_tc);
|
||||
return hns3_setup_tc(dev, mqprio->num_tc);
|
||||
}
|
||||
|
||||
static int hns3_vlan_rx_add_vid(struct net_device *netdev,
|
||||
|
@@ -1266,14 +1266,16 @@ err_queueing_scheme:
|
||||
}
|
||||
|
||||
static int __fm10k_setup_tc(struct net_device *dev, enum tc_setup_type type,
|
||||
struct tc_to_netdev *tc)
|
||||
void *type_data)
|
||||
{
|
||||
struct tc_mqprio_qopt *mqprio = type_data;
|
||||
|
||||
if (type != TC_SETUP_MQPRIO)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
tc->mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS;
|
||||
mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS;
|
||||
|
||||
return fm10k_setup_tc(dev, tc->mqprio->num_tc);
|
||||
return fm10k_setup_tc(dev, mqprio->num_tc);
|
||||
}
|
||||
|
||||
static void fm10k_assign_l2_accel(struct fm10k_intfc *interface,
|
||||
|
@@ -5657,14 +5657,16 @@ exit:
|
||||
}
|
||||
|
||||
static int __i40e_setup_tc(struct net_device *netdev, enum tc_setup_type type,
|
||||
struct tc_to_netdev *tc)
|
||||
void *type_data)
|
||||
{
|
||||
struct tc_mqprio_qopt *mqprio = type_data;
|
||||
|
||||
if (type != TC_SETUP_MQPRIO)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
tc->mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS;
|
||||
mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS;
|
||||
|
||||
return i40e_setup_tc(netdev, tc->mqprio->num_tc);
|
||||
return i40e_setup_tc(netdev, mqprio->num_tc);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -9258,13 +9258,13 @@ static int ixgbe_setup_tc_mqprio(struct net_device *dev,
|
||||
}
|
||||
|
||||
static int __ixgbe_setup_tc(struct net_device *dev, enum tc_setup_type type,
|
||||
struct tc_to_netdev *tc)
|
||||
void *type_data)
|
||||
{
|
||||
switch (type) {
|
||||
case TC_SETUP_CLSU32:
|
||||
return ixgbe_setup_tc_cls_u32(dev, tc->cls_u32);
|
||||
return ixgbe_setup_tc_cls_u32(dev, type_data);
|
||||
case TC_SETUP_MQPRIO:
|
||||
return ixgbe_setup_tc_mqprio(dev, tc->mqprio);
|
||||
return ixgbe_setup_tc_mqprio(dev, type_data);
|
||||
default:
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
@@ -131,17 +131,19 @@ out:
|
||||
}
|
||||
|
||||
static int __mlx4_en_setup_tc(struct net_device *dev, enum tc_setup_type type,
|
||||
struct tc_to_netdev *tc)
|
||||
void *type_data)
|
||||
{
|
||||
struct tc_mqprio_qopt *mqprio = type_data;
|
||||
|
||||
if (type != TC_SETUP_MQPRIO)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (tc->mqprio->num_tc && tc->mqprio->num_tc != MLX4_EN_NUM_UP_HIGH)
|
||||
if (mqprio->num_tc && mqprio->num_tc != MLX4_EN_NUM_UP_HIGH)
|
||||
return -EINVAL;
|
||||
|
||||
tc->mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS;
|
||||
mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS;
|
||||
|
||||
return mlx4_en_alloc_tx_queue_per_tc(dev, tc->mqprio->num_tc);
|
||||
return mlx4_en_alloc_tx_queue_per_tc(dev, mqprio->num_tc);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_RFS_ACCEL
|
||||
|
@@ -3053,13 +3053,13 @@ static int mlx5e_setup_tc_cls_flower(struct net_device *dev,
|
||||
}
|
||||
|
||||
static int mlx5e_setup_tc(struct net_device *dev, enum tc_setup_type type,
|
||||
struct tc_to_netdev *tc)
|
||||
void *type_data)
|
||||
{
|
||||
switch (type) {
|
||||
case TC_SETUP_CLSFLOWER:
|
||||
return mlx5e_setup_tc_cls_flower(dev, tc->cls_flower);
|
||||
return mlx5e_setup_tc_cls_flower(dev, type_data);
|
||||
case TC_SETUP_MQPRIO:
|
||||
return mlx5e_setup_tc_mqprio(dev, tc->mqprio);
|
||||
return mlx5e_setup_tc_mqprio(dev, type_data);
|
||||
default:
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
@@ -651,10 +651,10 @@ static int mlx5e_rep_get_phys_port_name(struct net_device *dev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mlx5e_rep_setup_tc_cls_flower(struct net_device *dev,
|
||||
struct tc_to_netdev *tc)
|
||||
static int
|
||||
mlx5e_rep_setup_tc_cls_flower(struct net_device *dev,
|
||||
struct tc_cls_flower_offload *cls_flower)
|
||||
{
|
||||
struct tc_cls_flower_offload *cls_flower = tc->cls_flower;
|
||||
struct mlx5e_priv *priv = netdev_priv(dev);
|
||||
|
||||
if (TC_H_MAJ(cls_flower->common.handle) != TC_H_MAJ(TC_H_INGRESS) ||
|
||||
@@ -666,7 +666,7 @@ static int mlx5e_rep_setup_tc_cls_flower(struct net_device *dev,
|
||||
|
||||
dev = mlx5_eswitch_get_uplink_netdev(esw);
|
||||
return dev->netdev_ops->ndo_setup_tc(dev, TC_SETUP_CLSFLOWER,
|
||||
tc);
|
||||
cls_flower);
|
||||
}
|
||||
|
||||
switch (cls_flower->command) {
|
||||
@@ -682,11 +682,11 @@ static int mlx5e_rep_setup_tc_cls_flower(struct net_device *dev,
|
||||
}
|
||||
|
||||
static int mlx5e_rep_setup_tc(struct net_device *dev, enum tc_setup_type type,
|
||||
struct tc_to_netdev *tc)
|
||||
void *type_data)
|
||||
{
|
||||
switch (type) {
|
||||
case TC_SETUP_CLSFLOWER:
|
||||
return mlx5e_rep_setup_tc_cls_flower(dev, tc);
|
||||
return mlx5e_rep_setup_tc_cls_flower(dev, type_data);
|
||||
default:
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
@@ -33,6 +33,8 @@
|
||||
#ifndef __MLX5_EN_TC_H__
|
||||
#define __MLX5_EN_TC_H__
|
||||
|
||||
#include <net/pkt_cls.h>
|
||||
|
||||
#define MLX5E_TC_FLOW_ID_MASK 0x0000ffff
|
||||
|
||||
int mlx5e_tc_init(struct mlx5e_priv *priv);
|
||||
|
@@ -1736,17 +1736,15 @@ mlxsw_sp_setup_tc_cls_flower(struct mlxsw_sp_port *mlxsw_sp_port,
|
||||
}
|
||||
|
||||
static int mlxsw_sp_setup_tc(struct net_device *dev, enum tc_setup_type type,
|
||||
struct tc_to_netdev *tc)
|
||||
void *type_data)
|
||||
{
|
||||
struct mlxsw_sp_port *mlxsw_sp_port = netdev_priv(dev);
|
||||
|
||||
switch (type) {
|
||||
case TC_SETUP_CLSMATCHALL:
|
||||
return mlxsw_sp_setup_tc_cls_matchall(mlxsw_sp_port,
|
||||
tc->cls_mall);
|
||||
return mlxsw_sp_setup_tc_cls_matchall(mlxsw_sp_port, type_data);
|
||||
case TC_SETUP_CLSFLOWER:
|
||||
return mlxsw_sp_setup_tc_cls_flower(mlxsw_sp_port,
|
||||
tc->cls_flower);
|
||||
return mlxsw_sp_setup_tc_cls_flower(mlxsw_sp_port, type_data);
|
||||
default:
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
@@ -121,10 +121,9 @@ 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,
|
||||
enum tc_setup_type type,
|
||||
struct tc_to_netdev *tc)
|
||||
enum tc_setup_type type, void *type_data)
|
||||
{
|
||||
struct tc_cls_bpf_offload *cls_bpf = tc->cls_bpf;
|
||||
struct tc_cls_bpf_offload *cls_bpf = type_data;
|
||||
struct nfp_net *nn = netdev_priv(netdev);
|
||||
|
||||
if (type != TC_SETUP_CLSBPF || !nfp_net_ebpf_capable(nn) ||
|
||||
|
@@ -38,8 +38,8 @@
|
||||
#include <linux/hashtable.h>
|
||||
#include <linux/time64.h>
|
||||
#include <linux/types.h>
|
||||
#include <net/pkt_cls.h>
|
||||
|
||||
struct tc_to_netdev;
|
||||
struct net_device;
|
||||
struct nfp_app;
|
||||
|
||||
@@ -135,7 +135,7 @@ 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,
|
||||
enum tc_setup_type type, struct tc_to_netdev *tc);
|
||||
enum tc_setup_type type, void *type_data);
|
||||
int nfp_flower_compile_flow_match(struct tc_cls_flower_offload *flow,
|
||||
struct nfp_fl_key_ls *key_ls,
|
||||
struct net_device *netdev,
|
||||
|
@@ -385,9 +385,9 @@ 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,
|
||||
enum tc_setup_type type, struct tc_to_netdev *tc)
|
||||
enum tc_setup_type type, void *type_data)
|
||||
{
|
||||
struct tc_cls_flower_offload *cls_flower = tc->cls_flower;
|
||||
struct tc_cls_flower_offload *cls_flower = type_data;
|
||||
|
||||
if (type != TC_SETUP_CLSFLOWER ||
|
||||
TC_H_MAJ(cls_flower->common.handle) != TC_H_MAJ(TC_H_INGRESS) ||
|
||||
|
@@ -42,7 +42,6 @@ struct bpf_prog;
|
||||
struct net_device;
|
||||
struct pci_dev;
|
||||
struct sk_buff;
|
||||
struct tc_to_netdev;
|
||||
struct sk_buff;
|
||||
struct nfp_app;
|
||||
struct nfp_cpp;
|
||||
@@ -109,7 +108,7 @@ 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,
|
||||
enum tc_setup_type type, struct tc_to_netdev *tc);
|
||||
enum tc_setup_type type, void *type_data);
|
||||
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 +237,11 @@ 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,
|
||||
struct tc_to_netdev *tc)
|
||||
enum tc_setup_type type, void *type_data)
|
||||
{
|
||||
if (!app || !app->type->setup_tc)
|
||||
return -EOPNOTSUPP;
|
||||
return app->type->setup_tc(app, netdev, type, tc);
|
||||
return app->type->setup_tc(app, netdev, type, type_data);
|
||||
}
|
||||
|
||||
static inline int nfp_app_xdp_offload(struct nfp_app *app, struct nfp_net *nn,
|
||||
|
@@ -89,7 +89,7 @@ const struct switchdev_ops nfp_port_switchdev_ops = {
|
||||
};
|
||||
|
||||
int nfp_port_setup_tc(struct net_device *netdev, enum tc_setup_type type,
|
||||
struct tc_to_netdev *tc)
|
||||
void *type_data)
|
||||
{
|
||||
struct nfp_port *port;
|
||||
|
||||
@@ -97,7 +97,7 @@ int nfp_port_setup_tc(struct net_device *netdev, enum tc_setup_type type,
|
||||
if (!port)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
return nfp_app_setup_tc(port->app, netdev, type, tc);
|
||||
return nfp_app_setup_tc(port->app, netdev, type, type_data);
|
||||
}
|
||||
|
||||
struct nfp_port *
|
||||
|
@@ -36,7 +36,6 @@
|
||||
|
||||
#include <net/devlink.h>
|
||||
|
||||
struct tc_to_netdev;
|
||||
struct net_device;
|
||||
struct nfp_app;
|
||||
struct nfp_pf;
|
||||
@@ -110,7 +109,7 @@ struct nfp_port {
|
||||
extern const struct switchdev_ops nfp_port_switchdev_ops;
|
||||
|
||||
int nfp_port_setup_tc(struct net_device *netdev, enum tc_setup_type type,
|
||||
struct tc_to_netdev *tc);
|
||||
void *type_data);
|
||||
|
||||
struct nfp_port *nfp_port_from_netdev(struct net_device *netdev);
|
||||
struct nfp_port *
|
||||
|
@@ -33,7 +33,7 @@ netdev_tx_t efx_hard_start_xmit(struct sk_buff *skb,
|
||||
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, enum tc_setup_type type,
|
||||
struct tc_to_netdev *tc);
|
||||
void *type_data);
|
||||
unsigned int efx_tx_max_skb_descs(struct efx_nic *efx);
|
||||
extern unsigned int efx_piobuf_size;
|
||||
extern bool efx_separate_tx_channels;
|
||||
|
@@ -33,7 +33,7 @@ netdev_tx_t ef4_hard_start_xmit(struct sk_buff *skb,
|
||||
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, enum tc_setup_type type,
|
||||
struct tc_to_netdev *tc);
|
||||
void *type_data);
|
||||
unsigned int ef4_tx_max_skb_descs(struct ef4_nic *efx);
|
||||
extern bool ef4_separate_tx_channels;
|
||||
|
||||
|
@@ -426,9 +426,10 @@ void ef4_init_tx_queue_core_txq(struct ef4_tx_queue *tx_queue)
|
||||
}
|
||||
|
||||
int ef4_setup_tc(struct net_device *net_dev, enum tc_setup_type type,
|
||||
struct tc_to_netdev *ntc)
|
||||
void *type_data)
|
||||
{
|
||||
struct ef4_nic *efx = netdev_priv(net_dev);
|
||||
struct tc_mqprio_qopt *mqprio = type_data;
|
||||
struct ef4_channel *channel;
|
||||
struct ef4_tx_queue *tx_queue;
|
||||
unsigned tc, num_tc;
|
||||
@@ -437,12 +438,12 @@ int ef4_setup_tc(struct net_device *net_dev, enum tc_setup_type type,
|
||||
if (type != TC_SETUP_MQPRIO)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
num_tc = ntc->mqprio->num_tc;
|
||||
num_tc = mqprio->num_tc;
|
||||
|
||||
if (ef4_nic_rev(efx) < EF4_REV_FALCON_B0 || num_tc > EF4_MAX_TX_TC)
|
||||
return -EINVAL;
|
||||
|
||||
ntc->mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS;
|
||||
mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS;
|
||||
|
||||
if (num_tc == net_dev->num_tc)
|
||||
return 0;
|
||||
|
@@ -654,9 +654,10 @@ void efx_init_tx_queue_core_txq(struct efx_tx_queue *tx_queue)
|
||||
}
|
||||
|
||||
int efx_setup_tc(struct net_device *net_dev, enum tc_setup_type type,
|
||||
struct tc_to_netdev *ntc)
|
||||
void *type_data)
|
||||
{
|
||||
struct efx_nic *efx = netdev_priv(net_dev);
|
||||
struct tc_mqprio_qopt *mqprio = type_data;
|
||||
struct efx_channel *channel;
|
||||
struct efx_tx_queue *tx_queue;
|
||||
unsigned tc, num_tc;
|
||||
@@ -665,12 +666,12 @@ int efx_setup_tc(struct net_device *net_dev, enum tc_setup_type type,
|
||||
if (type != TC_SETUP_MQPRIO)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
num_tc = ntc->mqprio->num_tc;
|
||||
num_tc = mqprio->num_tc;
|
||||
|
||||
if (num_tc > EFX_MAX_TX_TC)
|
||||
return -EINVAL;
|
||||
|
||||
ntc->mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS;
|
||||
mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS;
|
||||
|
||||
if (num_tc == net_dev->num_tc)
|
||||
return 0;
|
||||
|
@@ -1878,8 +1878,9 @@ static u16 netcp_select_queue(struct net_device *dev, struct sk_buff *skb,
|
||||
}
|
||||
|
||||
static int netcp_setup_tc(struct net_device *dev, enum tc_setup_type type,
|
||||
struct tc_to_netdev *tc)
|
||||
void *type_data)
|
||||
{
|
||||
struct tc_mqprio_qopt *mqprio = type_data;
|
||||
u8 num_tc;
|
||||
int i;
|
||||
|
||||
@@ -1889,8 +1890,8 @@ static int netcp_setup_tc(struct net_device *dev, enum tc_setup_type type,
|
||||
if (type != TC_SETUP_MQPRIO)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
tc->mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS;
|
||||
num_tc = tc->mqprio->num_tc;
|
||||
mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS;
|
||||
num_tc = mqprio->num_tc;
|
||||
|
||||
/* Sanity-check the number of traffic classes requested */
|
||||
if ((dev->real_num_tx_queues <= 1) ||
|
||||
|
Reference in New Issue
Block a user