>From 4f2ba5fca6c8858cfe640f3d466fd01904c451e3 Mon Sep 17 00:00:00 2001 Message-Id: <4f2ba5fca6c8858cfe640f3d466fd01904c451e3.1536596296.git.joabreu@synopsys.com> From: Jose Abreu Date: Mon, 10 Sep 2018 18:18:10 +0200 Subject: [PATCH] fixup_coalesce_3 Signed-off-by: Jose Abreu --- drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 25 ++++++----------------- 1 file changed, 6 insertions(+), 19 deletions(-) diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c index 76a6196b3263..f6587ee372ab 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c @@ -2245,11 +2245,7 @@ static void stmmac_tx_timer_arm(struct stmmac_priv *priv, u32 queue) { struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue]; - if (tx_q->tx_timer_active) - return; - mod_timer(&tx_q->txtimer, STMMAC_COAL_TIMER(priv->tx_coal_timer)); - tx_q->tx_timer_active = true; } /** @@ -2264,10 +2260,7 @@ static void stmmac_tx_timer(struct timer_list *t) struct stmmac_priv *priv = tx_q->priv_data; bool more; - tx_q->tx_timer_active = false; stmmac_tx_clean(priv, ~0, tx_q->queue_index, &more); - if (more) - stmmac_tx_timer_arm(priv, tx_q->queue_index); } /** @@ -2866,9 +2859,6 @@ static netdev_tx_t stmmac_tso_xmit(struct sk_buff *skb, struct net_device *dev) /* Compute header lengths */ proto_hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb); - /* Start coalesce timer earlier in case TX Queue is stopped */ - stmmac_tx_timer_arm(priv, queue); - /* Desc availability based on threshold should be enough safe */ if (unlikely(stmmac_tx_avail(priv, queue) < (((skb->len - proto_hdr_len) / TSO_MAX_BUFF_SIZE + 1)))) { @@ -2975,6 +2965,8 @@ static netdev_tx_t stmmac_tso_xmit(struct sk_buff *skb, struct net_device *dev) stmmac_set_tx_ic(priv, desc); priv->xstats.tx_set_ic_bit++; tx_q->tx_count_frames = 0; + } else { + stmmac_tx_timer_arm(priv, queue); } skb_tx_timestamp(skb); @@ -3065,9 +3057,6 @@ static netdev_tx_t stmmac_xmit(struct sk_buff *skb, struct net_device *dev) return stmmac_tso_xmit(skb, dev); } - /* Start coalesce timer earlier in case TX Queue is stopped */ - stmmac_tx_timer_arm(priv, queue); - if (unlikely(stmmac_tx_avail(priv, queue) < nfrags + 1)) { if (!netif_tx_queue_stopped(netdev_get_tx_queue(dev, queue))) { netif_tx_stop_queue(netdev_get_tx_queue(priv->dev, @@ -3186,6 +3175,8 @@ static netdev_tx_t stmmac_xmit(struct sk_buff *skb, struct net_device *dev) stmmac_set_tx_ic(priv, desc); priv->xstats.tx_set_ic_bit++; tx_q->tx_count_frames = 0; + } else { + stmmac_tx_timer_arm(priv, queue); } skb_tx_timestamp(skb); @@ -3572,16 +3563,12 @@ static int stmmac_tx_poll(struct napi_struct *napi, int budget) struct stmmac_priv *priv = tx_q->priv_data; u32 chan = tx_q->queue_index; int work_done = 0; - bool more; priv->xstats.napi_poll++; - work_done = stmmac_tx_clean(priv, budget, chan, &more); - if (work_done < budget) { + work_done = stmmac_tx_clean(priv, budget, chan, NULL); + if (work_done < budget) napi_complete_done(napi, work_done); - if (more) - napi_reschedule(napi); - } return min(work_done, budget); } -- 2.7.4