diff options
Diffstat (limited to 'kernel/watchdog.c')
| -rw-r--r-- | kernel/watchdog.c | 19 | 
1 files changed, 18 insertions, 1 deletions
| diff --git a/kernel/watchdog.c b/kernel/watchdog.c index e5e1d85b8c7c..4b1dfba70f7c 100644 --- a/kernel/watchdog.c +++ b/kernel/watchdog.c @@ -372,6 +372,13 @@ static int watchdog(void *unused)  #ifdef CONFIG_HARDLOCKUP_DETECTOR +/* + * People like the simple clean cpu node info on boot. + * Reduce the watchdog noise by only printing messages + * that are different from what cpu0 displayed. + */ +static unsigned long cpu0_err; +  static int watchdog_nmi_enable(int cpu)  {  	struct perf_event_attr *wd_attr; @@ -390,11 +397,21 @@ static int watchdog_nmi_enable(int cpu)  	/* Try to register using hardware perf events */  	event = perf_event_create_kernel_counter(wd_attr, cpu, NULL, watchdog_overflow_callback, NULL); + +	/* save cpu0 error for future comparision */ +	if (cpu == 0 && IS_ERR(event)) +		cpu0_err = PTR_ERR(event); +  	if (!IS_ERR(event)) { -		pr_info("enabled, takes one hw-pmu counter.\n"); +		/* only print for cpu0 or different than cpu0 */ +		if (cpu == 0 || cpu0_err) +			pr_info("enabled on all CPUs, permanently consumes one hw-PMU counter.\n");  		goto out_save;  	} +	/* skip displaying the same error again */ +	if (cpu > 0 && (PTR_ERR(event) == cpu0_err)) +		return PTR_ERR(event);  	/* vary the KERN level based on the returned errno */  	if (PTR_ERR(event) == -EOPNOTSUPP) | 
