• Thomas Gleixner's avatar
    tick/broadcast: Serialize access to tick_next_period · f73f64d5
    Thomas Gleixner authored
    tick_broadcast_setup_oneshot() accesses tick_next_period twice without any
    serialization. This is wrong in two aspects:
    
      - Reading it twice might make the broadcast data inconsistent if the
        variable is updated concurrently.
    
      - On 32bit systems the access might see an partial update
    
    Protect it with jiffies_lock. That's safe as none of the callchains leading
    up to this function can create a lock ordering violation:
    
    timer interrupt
      run_local_timers()
        hrtimer_run_queues()
          hrtimer_switch_to_hres()
            tick_init_highres()
    	  tick_switch_to_oneshot()
    	    tick_broadcast_switch_to_oneshot()
    or
         tick_check_oneshot_change()
           tick_nohz_switch_to_nohz()
             tick_switch_to_oneshot()
               tick_broadcast_switch_to_oneshot()
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Link: https://lore.kernel.org/r/20201117132006.061341507@linutronix.de
    f73f64d5
tick-broadcast.c 27.3 KB