Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > 27922b4260f65d317aabda37e42bbbff > files > 3104

kernel-2.6.18-238.el5.src.rpm

From: Andy Gospodarek <gospo@redhat.com>
Date: Fri, 29 Aug 2008 14:34:36 -0400
Subject: [net] skge: don't clear MC state on link down
Message-id: 20080829183435.GM31090@gospo.rdu.redhat.com
O-Subject: [RHEL5.3 PATCH] skge: don't clear MC state on link down
Bugzilla: 406051
RH-Acked-by: Neil Horman <nhorman@redhat.com>
RH-Acked-by: David Miller <davem@redhat.com>
RH-Acked-by: John W. Linville <linville@redhat.com>

This is a backport of the following upstream fix that I originally
pushed to Stephen (but he re-wrote):

commit 758140900a82e3ed3bb2be1d4705dd352fe44825
Author: Stephen Hemminger <shemminger@osdl.org>
Date:   Fri Dec 1 11:41:08 2006 -0800

    [PATCH] skge: don't clear MC state on link down

    I would rather fix Andy's problem by not clearing
    multicast information on link down.

    Also, add code to restore multicast state after ethtool phy reset.

This is for BZ 406051 that was created from a cloned RHEL4 bug.
Customers are annoyed when we fix one RHEL and no the other, so we are
adding it to RHEL5.

diff --git a/drivers/net/skge.c b/drivers/net/skge.c
index ad878df..e070002 100644
--- a/drivers/net/skge.c
+++ b/drivers/net/skge.c
@@ -1928,8 +1928,6 @@ static void yukon_link_down(struct skge_port *skge)
 	int port = skge->port;
 	u16 ctrl;
 
-	gm_phy_write(hw, port, PHY_MARV_INT_MASK, 0);
-
 	ctrl = gma_read16(hw, port, GM_GP_CTRL);
 	ctrl &= ~(GM_GPCR_RX_ENA | GM_GPCR_TX_ENA);
 	gma_write16(hw, port, GM_GP_CTRL, ctrl);
@@ -1943,7 +1941,6 @@ static void yukon_link_down(struct skge_port *skge)
 
 	}
 
-	yukon_reset(hw, port);
 	skge_link_down(skge);
 
 	yukon_init(hw, port);
@@ -2031,6 +2028,7 @@ static void skge_phy_reset(struct skge_port *skge)
 {
 	struct skge_hw *hw = skge->hw;
 	int port = skge->port;
+	struct net_device *dev = hw->dev[port];
 
 	netif_stop_queue(skge->netdev);
 	netif_carrier_off(skge->netdev);
@@ -2044,6 +2042,8 @@ static void skge_phy_reset(struct skge_port *skge)
 		yukon_init(hw, port);
 	}
 	mutex_unlock(&hw->phy_mutex);
+
+	dev->set_multicast_list(dev);
 }
 
 /* Basic MII support */