net: rework ndo tc op to consume additional qdisc handle parameter
The ndo_setup_tc() op was added to support drivers offloading tx qdiscs however only support for mqprio was ever added. So we only ever added support for passing the number of traffic classes to the driver. This patch generalizes the ndo_setup_tc op so that a handle can be provided to indicate if the offload is for ingress or egress or potentially even child qdiscs. CC: Murali Karicheri <m-karicheri2@ti.com> CC: Shradha Shah <sshah@solarflare.com> CC: Or Gerlitz <ogerlitz@mellanox.com> CC: Ariel Elior <ariel.elior@qlogic.com> CC: Jeff Kirsher <jeffrey.t.kirsher@intel.com> CC: Bruce Allan <bruce.w.allan@intel.com> CC: Jesse Brandeburg <jesse.brandeburg@intel.com> CC: Don Skidmore <donald.c.skidmore@intel.com> Signed-off-by: John Fastabend <john.r.fastabend@intel.com> Acked-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
547b9ca879
commit
e4c6734eaa
@@ -1204,6 +1204,14 @@ err_queueing_scheme:
|
||||
return err;
|
||||
}
|
||||
|
||||
static int __fm10k_setup_tc(struct net_device *dev, u32 handle, u8 tc)
|
||||
{
|
||||
if (handle != TC_H_ROOT)
|
||||
return -EINVAL;
|
||||
|
||||
return fm10k_setup_tc(dev, tc);
|
||||
}
|
||||
|
||||
static int fm10k_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
|
||||
{
|
||||
switch (cmd) {
|
||||
@@ -1386,7 +1394,7 @@ static const struct net_device_ops fm10k_netdev_ops = {
|
||||
.ndo_vlan_rx_kill_vid = fm10k_vlan_rx_kill_vid,
|
||||
.ndo_set_rx_mode = fm10k_set_rx_mode,
|
||||
.ndo_get_stats64 = fm10k_get_stats64,
|
||||
.ndo_setup_tc = fm10k_setup_tc,
|
||||
.ndo_setup_tc = __fm10k_setup_tc,
|
||||
.ndo_set_vf_mac = fm10k_ndo_set_vf_mac,
|
||||
.ndo_set_vf_vlan = fm10k_ndo_set_vf_vlan,
|
||||
.ndo_set_vf_rate = fm10k_ndo_set_vf_bw,
|
||||
|
@@ -788,7 +788,7 @@ struct i40e_mac_filter *i40e_find_mac(struct i40e_vsi *vsi, u8 *macaddr,
|
||||
bool is_vf, bool is_netdev);
|
||||
#ifdef I40E_FCOE
|
||||
int i40e_close(struct net_device *netdev);
|
||||
int i40e_setup_tc(struct net_device *netdev, u8 tc);
|
||||
int __i40e_setup_tc(struct net_device *netdev, u32 handle, u8 tc);
|
||||
void i40e_netpoll(struct net_device *netdev);
|
||||
int i40e_fcoe_enable(struct net_device *netdev);
|
||||
int i40e_fcoe_disable(struct net_device *netdev);
|
||||
|
@@ -1457,7 +1457,7 @@ static const struct net_device_ops i40e_fcoe_netdev_ops = {
|
||||
.ndo_tx_timeout = i40e_tx_timeout,
|
||||
.ndo_vlan_rx_add_vid = i40e_vlan_rx_add_vid,
|
||||
.ndo_vlan_rx_kill_vid = i40e_vlan_rx_kill_vid,
|
||||
.ndo_setup_tc = i40e_setup_tc,
|
||||
.ndo_setup_tc = __i40e_setup_tc,
|
||||
|
||||
#ifdef CONFIG_NET_POLL_CONTROLLER
|
||||
.ndo_poll_controller = i40e_netpoll,
|
||||
|
@@ -5253,11 +5253,7 @@ void i40e_down(struct i40e_vsi *vsi)
|
||||
* @netdev: net device to configure
|
||||
* @tc: number of traffic classes to enable
|
||||
**/
|
||||
#ifdef I40E_FCOE
|
||||
int i40e_setup_tc(struct net_device *netdev, u8 tc)
|
||||
#else
|
||||
static int i40e_setup_tc(struct net_device *netdev, u8 tc)
|
||||
#endif
|
||||
{
|
||||
struct i40e_netdev_priv *np = netdev_priv(netdev);
|
||||
struct i40e_vsi *vsi = np->vsi;
|
||||
@@ -5310,6 +5306,17 @@ exit:
|
||||
return ret;
|
||||
}
|
||||
|
||||
#ifdef I40E_FCOE
|
||||
int __i40e_setup_tc(struct net_device *netdev, u32 handle, u8 tc)
|
||||
#else
|
||||
static int __i40e_setup_tc(struct net_device *netdev, u32 handle, u8 tc)
|
||||
#endif
|
||||
{
|
||||
if (handle != TC_H_ROOT)
|
||||
return -EINVAL;
|
||||
return i40e_setup_tc(netdev, tc);
|
||||
}
|
||||
|
||||
/**
|
||||
* i40e_open - Called when a network interface is made active
|
||||
* @netdev: network interface device structure
|
||||
@@ -8951,7 +8958,7 @@ static const struct net_device_ops i40e_netdev_ops = {
|
||||
#ifdef CONFIG_NET_POLL_CONTROLLER
|
||||
.ndo_poll_controller = i40e_netpoll,
|
||||
#endif
|
||||
.ndo_setup_tc = i40e_setup_tc,
|
||||
.ndo_setup_tc = __i40e_setup_tc,
|
||||
#ifdef I40E_FCOE
|
||||
.ndo_fcoe_enable = i40e_fcoe_enable,
|
||||
.ndo_fcoe_disable = i40e_fcoe_disable,
|
||||
|
@@ -8200,6 +8200,15 @@ int ixgbe_setup_tc(struct net_device *dev, u8 tc)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int __ixgbe_setup_tc(struct net_device *dev, u32 handle, u8 tc)
|
||||
{
|
||||
/* Only support egress tc setup for now */
|
||||
if (handle != TC_H_ROOT)
|
||||
return -EINVAL;
|
||||
|
||||
return ixgbe_setup_tc(dev, tc);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PCI_IOV
|
||||
void ixgbe_sriov_reinit(struct ixgbe_adapter *adapter)
|
||||
{
|
||||
@@ -8658,7 +8667,7 @@ static const struct net_device_ops ixgbe_netdev_ops = {
|
||||
.ndo_get_vf_config = ixgbe_ndo_get_vf_config,
|
||||
.ndo_get_stats64 = ixgbe_get_stats64,
|
||||
#ifdef CONFIG_IXGBE_DCB
|
||||
.ndo_setup_tc = ixgbe_setup_tc,
|
||||
.ndo_setup_tc = __ixgbe_setup_tc,
|
||||
#endif
|
||||
#ifdef CONFIG_NET_POLL_CONTROLLER
|
||||
.ndo_poll_controller = ixgbe_netpoll,
|
||||
|
Reference in New Issue
Block a user