@@ -753,7 +753,7 @@ static void tg3_napi_enable(struct tg3 *tp)
static inline void tg3_netif_stop(struct tg3 *tp)
{
- tp->dev->trans_start = jiffies; /* prevent tx timeout */
+ netif_carrier_off(tp->dev); /* prevent tx timeout */
tg3_napi_disable(tp);
netif_tx_disable(tp->dev);
}
@@ -10964,12 +10964,14 @@ static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
static void tg3_vlan_rx_register(struct net_device *dev, struct vlan_group *grp)
{
struct tg3 *tp = netdev_priv(dev);
+ int link_up;
if (!netif_running(dev)) {
tp->vlgrp = grp;
return;
}
+ link_up = netif_carrier_ok(dev);
tg3_netif_stop(tp);
tg3_full_lock(tp, 0);
@@ -10979,6 +10981,8 @@ 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 (link_up)
+ netif_carrier_on(dev);
tg3_netif_start(tp);
tg3_full_unlock(tp);
Touching ->trans_start make netdev watchdog timeouts only less probable. Use netif_carrier_off to prevent timeout, lately we take care of turning carrier on. Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com> --- Patch was not tested! drivers/net/tg3.c | 6 +++++- 1 files changed, 5 insertions(+), 1 deletions(-)