Messages in this thread | | | Date | Fri, 4 Nov 2022 17:43:42 +0100 | From | Frederic Weisbecker <> | Subject | Re: [PATCH v4 05/16] add_timer_on(): Make sure callers have TIMER_PINNED flag |
| |
On Fri, Nov 04, 2022 at 03:57:26PM +0100, Anna-Maria Behnsen wrote: > The implementation of the hierachical timer pull model will change the > timer bases per CPU. Timers, that have to expire on a specific CPU, require > the TIMER_PINNED flag. Otherwise they will be queued on the dedicated CPU > but in global timer base and those timers could also expire on other > CPUs. Timers with TIMER_DEFERRABLE flag end up in a separate base anyway > and are executed on the local CPU only. > > Therefore add the missing TIMER_PINNED flag for those callers who use > add_timer_on() without the flag. No functional change.
You're fixing the current callers but what about the future ones?
add_timer_on() should always guarantee that a timer runs on the right destination, which is not the case after your patchset if the timer hasn't been set to TIMER_PINNED.
Therefore I think we should either have:
* add_timer_on() enforce TIMER_PINNED (doesn't work because if the timer is later called with mod_timer(), we should expect it to run anywhere)
or
* add_timer_on() warns if !TIMER_PINNED
or
* have an internal flag TIMER_LOCAL, that is turned on when add_timer_on() is called or add_timer()/mod_timer() is called on a TIMER_PINNED. Otherwise it is turned off.
The last solution should work with existing API and you don't need to chase the current and future users of add_timer_on().
Thanks.
| |