[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[altq 995] Re: rl0 Watchdog timeout




Santa Wiryaman wrote:
> In reply to altq 681 and 679, I have seen a similar behavior on the
> dc driver.  The problem is that typical *_start() routine expects
> to always get an mbuf from the dequeue operation.  With altq,
> the dequeue operation might not return an mbuf.
> 
> So to fix the watchdog timeout problem, you need to put a condition
> (mbuf != NULL) around the setting of if_timer.  If_timer is used
> by net/if.c:if_slowtimo() to call the watchdog routine.  So if the
> *_start() routine does not get an mbuf to send, if_timer should not
> be set.
> 
> Hope this helps,
> -santa

Doesn't the following code in dc_start() already take care of this
case?

-----------------------------------------------------
@@ -2791,6 +2807,8 @@
 			break;
 		}
 	}
+	if (idx == sc->dc_cdata.dc_tx_prod)
+		return;
 
 	/* Transmit */
 	sc->dc_cdata.dc_tx_prod = idx;
-----------------------------------------------------

-Kenjiro