[3.8.y.z extended stable] Patch "net: mv643xx_eth: update statistics timer from timer context only" has been added to staging queue

Kamal Mostafa kamal at canonical.com
Fri Nov 1 21:43:37 UTC 2013

This is a note to let you know that I have just added a patch titled

    net: mv643xx_eth: update statistics timer from timer context only

to the linux-3.8.y-queue branch of the 3.8.y.z extended stable tree 
which can be found at:


This patch is scheduled to be released in version

If you, or anyone else, feels it should not be added to this tree, please 
reply to this email.

For more information about the 3.8.y.z tree, see



>From 03b9cf62f19acae9f497fd584c9a8a19928b7e66 Mon Sep 17 00:00:00 2001
From: Sebastian Hesselbarth <sebastian.hesselbarth at gmail.com>
Date: Wed, 2 Oct 2013 12:57:20 +0200
Subject: net: mv643xx_eth: update statistics timer from timer context only

[ Upstream commit 041b4ddb84989f06ff1df0ca869b950f1ee3cb1c ]

Each port driver installs a periodic timer to update port statistics
by calling mib_counters_update. As mib_counters_update is also called
from non-timer context, we should not reschedule the timer there but
rather move it to timer-only context.

Signed-off-by: Sebastian Hesselbarth <sebastian.hesselbarth at gmail.com>
Acked-by: Jason Cooper <jason at lakedaemon.net>
Signed-off-by: David S. Miller <davem at davemloft.net>
Signed-off-by: Kamal Mostafa <kamal at canonical.com>
 drivers/net/ethernet/marvell/mv643xx_eth.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/marvell/mv643xx_eth.c b/drivers/net/ethernet/marvell/mv643xx_eth.c
index 84c1326..6d89717 100644
--- a/drivers/net/ethernet/marvell/mv643xx_eth.c
+++ b/drivers/net/ethernet/marvell/mv643xx_eth.c
@@ -1273,15 +1273,13 @@ static void mib_counters_update(struct mv643xx_eth_private *mp)
 	p->rx_discard += rdlp(mp, RX_DISCARD_FRAME_CNT);
 	p->rx_overrun += rdlp(mp, RX_OVERRUN_FRAME_CNT);
-	mod_timer(&mp->mib_counters_timer, jiffies + 30 * HZ);

 static void mib_counters_timer_wrapper(unsigned long _mp)
 	struct mv643xx_eth_private *mp = (void *)_mp;
+	mod_timer(&mp->mib_counters_timer, jiffies + 30 * HZ);


More information about the kernel-team mailing list