From: Matt Carlson Date: Wed, 25 Feb 2009 14:23:56 +0000 (+0000) Subject: tg3: Refine tg3_vlan_rx_register() X-Git-Url: http://drtracing.org/?a=commitdiff_plain;h=844b3eed8a9efffa4225c811b989c8ff41691a78;p=deliverable%2Flinux.git tg3: Refine tg3_vlan_rx_register() tg3_vlan_rx_register() touches the hardware if netif_running() returns false. This patch fixes the problem. Signed-off-by: Matt Carlson Signed-off-by: Benjamin Li Signed-off-by: Michael Chan Signed-off-by: David S. Miller --- diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index 0ea61f7f6203..ce29097cc759 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c @@ -9896,8 +9896,12 @@ static void tg3_vlan_rx_register(struct net_device *dev, struct vlan_group *grp) { struct tg3 *tp = netdev_priv(dev); - if (netif_running(dev)) - tg3_netif_stop(tp); + if (!netif_running(dev)) { + tp->vlgrp = grp; + return; + } + + tg3_netif_stop(tp); tg3_full_lock(tp, 0); @@ -9906,8 +9910,7 @@ static void tg3_vlan_rx_register(struct net_device *dev, struct vlan_group *grp) /* Update RX_MODE_KEEP_VLAN_TAG bit in RX_MODE register. */ __tg3_set_rx_mode(dev); - if (netif_running(dev)) - tg3_netif_start(tp); + tg3_netif_start(tp); tg3_full_unlock(tp); }