On 5 May 2023 19:33:15 +0800 Liu Jian <liujian56@xxxxxxxxxx>fixed first? Let's ignore this problem here. The modification is only used to ensure that the loop exits when the loop execution time in __run_timers() exceeds MAX_SOFTIRQ_TIME.
In the while loop of __run_timers(), because there are too many timers or
improper timer handler functions, if the processing time of the expired
timers is always greater than the time wheel's next_expiry, the function
will loop infinitely.
To prevent this, use the timeout/break logic provided by SoftIRQs. If the
running time exceeds the limit, break the loop and an additional
TIMER_SOFTIRQ is triggered.
This can not be a correct fix without getting every timer hog that runs
longer than MAX_SOFTIRQ_TIME identified first and fixed.
Do you mean that the timer that takes too long to execute needs to be
The same applies to any softirq in general.