mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	watchdog: Add watchdog enable/disable all functions
This patch adds two new functions to enable/disable the watchdog across all CPUs. This will be used by the HT PMU bug workaround code to disable/enable the NMI watchdog across quirk enablement. Signed-off-by: Stephane Eranian <eranian@google.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Cc: bp@alien8.de Cc: jolsa@redhat.com Cc: kan.liang@intel.com Cc: maria.n.dimakopoulou@gmail.com Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Don Zickus <dzickus@redhat.com> Cc: Andrew Morton <akpm@linux-foundation.org> Link: http://lkml.kernel.org/r/1416251225-17721-12-git-send-email-eranian@google.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
		
							parent
							
								
									c02cdbf60b
								
							
						
					
					
						commit
						b3738d2932
					
				
					 2 changed files with 36 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -137,4 +137,12 @@ extern int watchdog_init_timeout(struct watchdog_device *wdd,
 | 
			
		|||
extern int watchdog_register_device(struct watchdog_device *);
 | 
			
		||||
extern void watchdog_unregister_device(struct watchdog_device *);
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_HARDLOCKUP_DETECTOR
 | 
			
		||||
void watchdog_nmi_disable_all(void);
 | 
			
		||||
void watchdog_nmi_enable_all(void);
 | 
			
		||||
#else
 | 
			
		||||
static inline void watchdog_nmi_disable_all(void) {}
 | 
			
		||||
static inline void watchdog_nmi_enable_all(void) {}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif  /* ifndef _LINUX_WATCHDOG_H */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -567,9 +567,37 @@ static void watchdog_nmi_disable(unsigned int cpu)
 | 
			
		|||
		cpu0_err = 0;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void watchdog_nmi_enable_all(void)
 | 
			
		||||
{
 | 
			
		||||
	int cpu;
 | 
			
		||||
 | 
			
		||||
	if (!watchdog_user_enabled)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	get_online_cpus();
 | 
			
		||||
	for_each_online_cpu(cpu)
 | 
			
		||||
		watchdog_nmi_enable(cpu);
 | 
			
		||||
	put_online_cpus();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void watchdog_nmi_disable_all(void)
 | 
			
		||||
{
 | 
			
		||||
	int cpu;
 | 
			
		||||
 | 
			
		||||
	if (!watchdog_running)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	get_online_cpus();
 | 
			
		||||
	for_each_online_cpu(cpu)
 | 
			
		||||
		watchdog_nmi_disable(cpu);
 | 
			
		||||
	put_online_cpus();
 | 
			
		||||
}
 | 
			
		||||
#else
 | 
			
		||||
static int watchdog_nmi_enable(unsigned int cpu) { return 0; }
 | 
			
		||||
static void watchdog_nmi_disable(unsigned int cpu) { return; }
 | 
			
		||||
void watchdog_nmi_enable_all(void) {}
 | 
			
		||||
void watchdog_nmi_disable_all(void) {}
 | 
			
		||||
#endif /* CONFIG_HARDLOCKUP_DETECTOR */
 | 
			
		||||
 | 
			
		||||
static struct smp_hotplug_thread watchdog_threads = {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue