From 7207c6eaead4fbcf6dfec2a185550cd30aba5071 Mon Sep 17 00:00:00 2001 From: Camelia Groza Date: Thu, 7 Sep 2017 14:49:09 +0300 Subject: [PATCH] sdk_dpaa: update the xmit timestamp to avoid watchdog timeouts Update txq0's trans_start in order to prevent the netdev watchdog from triggering too quickly. Since we set the LLTX flag, the stack won't update the jiffies for other tx queues. Prevent the watchdog from checking the other tx queues by adding the NETIF_HW_ACCEL_MQ flag. Signed-off-by: Camelia Groza --- drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth.c | 3 +++ drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth_sg.c | 1 + include/linux/netdev_features.h | 2 ++ net/sched/sch_generic.c | 7 +++++++ 4 files changed, 13 insertions(+) --- a/drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth.c +++ b/drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth.c @@ -772,6 +772,9 @@ static int dpa_private_netdev_init(struc /* Advertise GRO support */ net_dev->features |= NETIF_F_GRO; + /* Advertise NETIF_F_HW_ACCEL_MQ to avoid Tx timeout warnings */ + net_dev->features |= NETIF_F_HW_ACCEL_MQ; + return dpa_netdev_init(net_dev, mac_addr, tx_timeout); } --- a/drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth_sg.c +++ b/drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth_sg.c @@ -1140,6 +1140,7 @@ int __hot dpa_tx_extended(struct sk_buff if (unlikely(dpa_xmit(priv, percpu_stats, &fd, egress_fq, conf_fq) < 0)) goto xmit_failed; + netif_trans_update(net_dev); return NETDEV_TX_OK; xmit_failed: --- a/include/linux/netdev_features.h +++ b/include/linux/netdev_features.h @@ -77,6 +77,7 @@ enum { NETIF_F_RX_UDP_TUNNEL_PORT_BIT, /* Offload of RX port for UDP tunnels */ NETIF_F_HW_TLS_TX_BIT, /* Hardware TLS TX offload */ NETIF_F_HW_TLS_RX_BIT, /* Hardware TLS RX offload */ + NETIF_F_HW_ACCEL_MQ_BIT, /* Hardware-accelerated multiqueue */ NETIF_F_GRO_HW_BIT, /* Hardware Generic receive offload */ NETIF_F_HW_TLS_RECORD_BIT, /* Offload TLS record */ @@ -150,6 +151,7 @@ enum { #define NETIF_F_GSO_UDP_L4 __NETIF_F(GSO_UDP_L4) #define NETIF_F_HW_TLS_TX __NETIF_F(HW_TLS_TX) #define NETIF_F_HW_TLS_RX __NETIF_F(HW_TLS_RX) +#define NETIF_F_HW_ACCEL_MQ __NETIF_F(HW_ACCEL_MQ) /* Finds the next feature with the highest number of the range of start till 0. */ --- a/net/sched/sch_generic.c +++ b/net/sched/sch_generic.c @@ -465,6 +465,13 @@ static void dev_watchdog(struct timer_li txq->trans_timeout++; break; } + + /* Devices with HW_ACCEL_MQ have multiple txqs + * but update only the first one's transmission + * timestamp so avoid checking the rest. + */ + if (dev->features & NETIF_F_HW_ACCEL_MQ) + break; } if (some_queue_timedout) {