• Peilin He's avatar
    sched/core: Add WARN_ON_ONCE() to check overflow for migrate_disable() · 0ec8d5ae
    Peilin He authored
    Background
    ==========
    When repeated migrate_disable() calls are made with missing the
    corresponding migrate_enable() calls, there is a risk of
    'migration_disabled' going upper overflow because
    'migration_disabled' is a type of unsigned short whose max value is
    65535.
    
    In PREEMPT_RT kernel, if 'migration_disabled' goes upper overflow, it may
    make the migrate_disable() ineffective within local_lock_irqsave(). This
    is because, during the scheduling procedure, the value of
    'migration_disabled' will be checked, which can trigger CPU migration.
    Consequently, the count of 'rcu_read_lock_nesting' may leak due to
    local_lock_irqsave() and local_unlock_irqrestore() occurring on different
    CPUs.
    
    Usecase
    ========
    For example, When I developed a driver, I encountered a warning like
    "WARNING: CPU: 4 PID: 260 at kernel/rcu/tree_plugin.h:315
    rcu_note_context_switch+0xa8/0x4e8" warning. It took me half a month
    to locate this issue. Ultimately, I discovered that the lack of upper
    overflow detection mechanism in migrate_disable() was the root cause,
    leading to a significant amount of time spent on problem localization.
    
    If the upper overflow detection mechanism was added to migrate_disable(),
    the root cause could be very quickly and easily identified.
    
    Effect
    ======
    Using WARN_ON_ONCE() to check if 'migration_disabled' is upper overflow
    can help developers identify the issue quickly.
    Suggested-by: default avatarPeter Zijlstra <peterz@infradead.org>
    Signed-off-by: Peilin He<he.peilin@zte.com.cn>
    Signed-off-by: default avatarxu xin <xu.xin16@zte.com.cn>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: default avatarYunkai Zhang <zhang.yunkai@zte.com.cn>
    Reviewed-by: default avatarQiang Tu <tu.qiang35@zte.com.cn>
    Reviewed-by: default avatarKun Jiang <jiang.kun2@zte.com.cn>
    Reviewed-by: default avatarFan Yu <fan.yu9@zte.com.cn>
    Link: https://lkml.kernel.org/r/20240716104244764N2jD8gnBpnsLjCDnQGQ8c@zte.com.cn
    0ec8d5ae
core.c 266 KB