ramips: raeth: serialize ramips_link_adjust calls
authorjuhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Wed, 15 Feb 2012 13:47:50 +0000 (13:47 +0000)
committerjuhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Wed, 15 Feb 2012 13:47:50 +0000 (13:47 +0000)
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@30549 3c298f89-4303-0410-b956-a3cf2f4a3e73

target/linux/ramips/files/drivers/net/ramips.c

index 4a3f4c3..9f76779 100644 (file)
@@ -407,22 +407,30 @@ ramips_phy_disconnect(struct raeth_priv *re)
 static void
 ramips_phy_start(struct raeth_priv *re)
 {
+       unsigned long flags;
+
        if (re->phy_dev) {
                phy_start(re->phy_dev);
        } else {
+               spin_lock_irqsave(&re->phy_lock, flags);
                re->link = 1;
                ramips_link_adjust(re);
+               spin_unlock_irqrestore(&re->phy_lock, flags);
        }
 }
 
 static void
 ramips_phy_stop(struct raeth_priv *re)
 {
+       unsigned long flags;
+
        if (re->phy_dev) {
                phy_stop(re->phy_dev);
        } else {
+               spin_lock_irqsave(&re->phy_lock, flags);
                re->link = 0;
                ramips_link_adjust(re);
+               spin_unlock_irqrestore(&re->phy_lock, flags);
        }
 }
 #else