diff options
author | Lendacky, Thomas <Thomas.Lendacky@amd.com> | 2016-02-17 11:49:08 -0600 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-02-17 15:22:20 -0500 |
commit | b3b715974bfe69f626d6a633b8c96590de1b7338 (patch) | |
tree | 01db8d3493cb4158bb81e7a2eb9e162d73580e9a /drivers/net/ethernet/amd/xgbe/xgbe-drv.c | |
parent | 6a49ee4e1b9eb8747ff79c5438a42c0726aaa03b (diff) |
amd-xgbe: Do traffic class setup when called through dcbnl
Currently the netdev traffic class setup is only performed when invoked
through the ndo_setup_tc interface. However, the same setup should be
performed when the dcbnl interface (ieee_setets) is invoked. Rework the
netdev traffic class setup to be invokable through either interface and
also provide the priority to traffic class mapping if available.
Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/amd/xgbe/xgbe-drv.c')
-rw-r--r-- | drivers/net/ethernet/amd/xgbe/xgbe-drv.c | 22 |
1 files changed, 4 insertions, 18 deletions
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c index 80ef4041e7a3..33606840ae15 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c @@ -1630,32 +1630,18 @@ static int xgbe_setup_tc(struct net_device *netdev, u32 handle, __be16 proto, struct tc_to_netdev *tc_to_netdev) { struct xgbe_prv_data *pdata = netdev_priv(netdev); - unsigned int offset, queue; - u8 i, tc; + u8 tc; if (handle != TC_H_ROOT || tc_to_netdev->type != TC_SETUP_MQPRIO) return -EINVAL; tc = tc_to_netdev->tc; - if (tc && (tc != pdata->hw_feat.tc_cnt)) + if (tc > pdata->hw_feat.tc_cnt) return -EINVAL; - if (tc) { - netdev_set_num_tc(netdev, tc); - for (i = 0, queue = 0, offset = 0; i < tc; i++) { - while ((queue < pdata->tx_q_count) && - (pdata->q2tc_map[queue] == i)) - queue++; - - netif_dbg(pdata, drv, netdev, "TC%u using TXq%u-%u\n", - i, offset, queue - 1); - netdev_set_tc_queue(netdev, i, queue - offset, offset); - offset = queue; - } - } else { - netdev_reset_tc(netdev); - } + pdata->num_tcs = tc; + pdata->hw_if.config_tc(pdata); return 0; } |