• Don Zickus's avatar
    watchdog/hardlockup/perf: Use atomics to track in-use cpu counter · 42f930da
    Don Zickus authored
    Guenter reported:
      There is still a problem. When running 
        echo 6 > /proc/sys/kernel/watchdog_thresh
        echo 5 > /proc/sys/kernel/watchdog_thresh
      repeatedly, the message
     
       NMI watchdog: Enabled. Permanently consumes one hw-PMU counter.
     
      stops after a while (after ~10-30 iterations, with fluctuations).
      Maybe watchdog_cpus needs to be atomic ?
    
    That's correct as this again is affected by the asynchronous nature of the
    smpboot thread unpark mechanism.
    
    CPU 0				CPU1			CPU2
    write(watchdog_thresh, 6)	
      stop()
        park()
      update()
      start()
        unpark()
    				thread->unpark()
    				  cnt++;
    write(watchdog_thresh, 5)				thread->unpark()
      stop()
        park()			thread->park()
    				   cnt--;		  cnt++;
      update()
      start()
        unpark()
    
    That's not a functional problem, it just affects the informational message.
    
    Convert watchdog_cpus to atomic_t to prevent the problem
    Reported-and-tested-by: default avatarGuenter Roeck <linux@roeck-us.net>
    Signed-off-by: default avatarDon Zickus <dzickus@redhat.com>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: https://lkml.kernel.org/r/20171101181126.j727fqjmdthjz4xk@redhat.com
    
    42f930da
watchdog_hld.c 7.63 KB