If the timer queue is run at all, the entire queue is run -- there's no
provision for only calling some of the tasks. So analyzing your
problem reduces to finding reasons why the timer queue might miss a
turn.
If we rule out disabling because of page faults, my next hypothesis
would be that PPP processing itself may be taking sufficiently long that
the timer starts missing ticks. This might make sense considering that
existing flow control mechanisms are triggered by the n_tty receive
buffer filling, not by processing time causing missed clock ticks.
I'll take a look at the PPP code; it may be that we need a way to invoke
flow control based on time rather than buffer space considerations.
Regards,
-Bill