kernel/timeout: Cleanup/speedup parallel announce logic
Commit b1182bf8 ("kernel/timeout: Serialize handler callbacks on SMP") introduced an important fix to timeout handling on multiprocessor systems, but it did it in a clumsy way by holding a spinlock across the entire timeout process on all cores (everything would have to spin until one core finished the list). The lock also delays any nested interrupts that might otherwise be delivered, which breaks our nested_irq_offload case on xtensa+SMP (where contra x86, the "synchronous" interrupt is sensitive to mask state). Doing this right turns out not to be so hard: take the timeout lock, check to see if someone is already iterating (i.e. "announce_remaining" is non-zero), and if so just increment the ticks to announce and exit. The original cpu will then complete the full timeout list without blocking any others longer than needed to check the timeout state. Fixes #44758 Signed-off-by:Andy Ross <andrew.j.ross@intel.com> (cherry picked from commit 0b2ed381)
Loading
Please sign in to comment