The timerpMask optimization updates a mask of Ps (potentially)
containing timers in pidleget / pidleput. For correctness, it depends on
the assumption that new timers can only be added to a P's own heap.
addtimer violates this assumption if it is preempted after computing pp.
That G may then run on a different P, but adding a timer to the original
Avoid this by disabling preemption while pp is in use.
Other uses of doaddtimer should be OK:
* moveTimers: always moves to the current P's heap
* modtimer, cleantimers, addAdjustedTimers, runtimer: does not add net
new timers to the heap while locked
Trust: Michael Pratt <firstname.lastname@example.org>
Run-TryBot: Michael Pratt <email@example.com>
Reviewed-by: Michael Knyszek <firstname.lastname@example.org>
Reviewed-by: Ian Lance Taylor <email@example.com>
TryBot-Result: Go Bot <firstname.lastname@example.org>
(cherry picked from commit aa26687)