www.usr.com/support/gpl/USR9107_release.1.4.tar.gz
[bcm963xx.git] / kernel / linux / net / core / dev.c
index 90655b9..86be9bc 100755 (executable)
@@ -3055,6 +3055,25 @@ static void netdev_wait_allrefs(struct net_device *dev)
                               "waiting for %s to become free. Usage "
                               "count = %d\n",
                               dev->name, atomic_read(&dev->refcnt));
+#if defined(SUPPORT_TC)
+            /* decrement on ppp net work device reference count (refcnt)
+             * in sch_generic.c could result -1 and it should be reset to 0 
+             */
+                       if (atomic_read(&dev->refcnt) == -1 && strstr(dev->name, "ppp_")) {
+                               printk("dev->name = %s, dev->refcnt=%d\n", dev->name, atomic_read(&dev->refcnt));
+                               atomic_set(&dev->refcnt, 0);            
+                               printk("after reset to 0, dev->refcnt=%d\n", atomic_read(&dev->refcnt));
+                       }
+#endif         
+
+#if defined(CONFIG_MIPS_BRCM)
+                     /* if eth? device reference counter goes to negative, reset to 0 and get out the while loop */
+                       if (atomic_read(&dev->refcnt) < 0 && strstr(dev->name, "eth")) {
+                               atomic_set(&dev->refcnt, 0);            
+                               printk("Reset to 0, dev->refcnt=%d.\n", atomic_read(&dev->refcnt));
+                       }
+#endif
+
                        warning_time = jiffies;
                }
        }