case SIOCGIFMAP:
case SIOCGIFINDEX:
case SIOCGIFTXQLEN:
+#if defined(CONFIG_MIPS_BRCM)
+ case SIOCGIFTRANSSTART:
+#endif
dev_load(ifr.ifr_name);
read_lock(&dev_base_lock);
ret = dev_ifsioc(&ifr, cmd);
"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;
}
}