]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
net: stmmac: Do not keep rearming the coalesce timer in stmmac_xmit
authorJose Abreu <Jose.Abreu@synopsys.com>
Fri, 18 May 2018 13:55:59 +0000 (14:55 +0100)
committerDavid S. Miller <davem@davemloft.net>
Fri, 18 May 2018 15:00:14 +0000 (11:00 -0400)
This is cutting down performance. Once the timer is armed it should run
after the time expires for the first packet sent and not the last one.

After this change, running iperf, the performance gain is +/- 24%.

Signed-off-by: Jose Abreu <joabreu@synopsys.com>
Cc: David S. Miller <davem@davemloft.net>
Cc: Joao Pinto <jpinto@synopsys.com>
Cc: Vitor Soares <soares@synopsys.com>
Cc: Giuseppe Cavallaro <peppe.cavallaro@st.com>
Cc: Alexandre Torgue <alexandre.torgue@st.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/stmicro/stmmac/stmmac.h
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c

index 42fc76e76bf9d7919dce664a5f8907aada8500b1..4d425b1a0c5934dcb1cbba1dd30273beb49fff98 100644 (file)
@@ -105,6 +105,7 @@ struct stmmac_priv {
        u32 tx_count_frames;
        u32 tx_coal_frames;
        u32 tx_coal_timer;
+       bool tx_timer_armed;
 
        int tx_coalesce;
        int hwts_tx_en;
index d9dbe13558961b864ec5276a0ffe4fade0d65b47..789bc226ba69cd7c97f58d5ea5f384a99859bf07 100644 (file)
@@ -3158,13 +3158,16 @@ static netdev_tx_t stmmac_xmit(struct sk_buff *skb, struct net_device *dev)
         * element in case of no SG.
         */
        priv->tx_count_frames += nfrags + 1;
-       if (likely(priv->tx_coal_frames > priv->tx_count_frames)) {
+       if (likely(priv->tx_coal_frames > priv->tx_count_frames) &&
+           !priv->tx_timer_armed) {
                mod_timer(&priv->txtimer,
                          STMMAC_COAL_TIMER(priv->tx_coal_timer));
+               priv->tx_timer_armed = true;
        } else {
                priv->tx_count_frames = 0;
                stmmac_set_tx_ic(priv, desc);
                priv->xstats.tx_set_ic_bit++;
+               priv->tx_timer_armed = false;
        }
 
        skb_tx_timestamp(skb);