kernel - Revamp ifsq_watchdog*() a bit
* Add a flags argument to ifsq_watchdog_init() and implement two
flags:
IF_WDOG_ALLTICKS Watchdog callback occurs each second
prior to terminal count, and on terminal
count.
IF_WDOG_LASTTICK Watchdog callback occurs one second prior
to terminal count, and on terminal count.
0 Watchdog callback only occurs on terminal
count.
Note that the ifnet lock is fully serialized when a watchdog
callback is made, so generally speaking to avoid hicups you
only want to use IF_WDOG_LASTTICK.
* This feature allows the watchdog code to flush any tx buffers
(call *_txeof()) that have completed transmission. Many NICs
and virtual NICs don't bother to generate interrupts to clean-up
such buffers when the rings are only lightly loaded.
* Fix spurious vtnet watchdog events on lightly loaded vtnet
interfaces, loosly using the same code that FreeBSD uses
(just txeof from the second-prior watchdog callback and then
check on terminal count).