• Anna-Maria Behnsen's avatar
    timers/migration: Do not rely always on group->parent · facd40aa
    Anna-Maria Behnsen authored
    When reading group->parent without holding the group lock it is racy
    against CPUs coming online the first time and thereby creating another
    level of the hierarchy. This is not a problem when this value is read once
    to decide whether to abort a propagation or not. The worst outcome is an
    unnecessary/early CPU wake up. But it is racy when reading it several times
    during a single 'action' (like activation, deactivation, checking for
    remote timer expiry,...) and relying on the consitency of this value
    without holding the lock. This happens at the moment e.g. in
    tmigr_inactive_up() which is also calling tmigr_udpate_events(). Code relys
    on group->parent not to change during this 'action'.
    
    Update parent struct member description to explain the above only
    once. Remove parent pointer checks when they are not mandatory (like update
    of data->childmask). Remove a warning, which would be nice but the trigger
    of this warning is not reliable and add expand the data structure member
    description instead. Expand a comment, why it is safe to rely on parent
    pointer here (inside hierarchy update).
    
    Fixes: 7ee98877 ("timers: Implement the hierarchical pull model")
    Reported-by: default avatarBorislav Petkov <bp@alien8.de>
    Signed-off-by: default avatarAnna-Maria Behnsen <anna-maria@linutronix.de>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Reviewed-by: default avatarFrederic Weisbecker <frederic@kernel.org>
    Link: https://lore.kernel.org/r/20240716-tmigr-fixes-v4-1-757baa7803fe@linutronix.de
    facd40aa
timer_migration.h 5.56 KB