* [PATCH] xen/mce: Don't spam the console with "CPUx: Temperature z" (v2)
@ 2014-06-13 18:09 Konrad Rzeszutek Wilk
2014-06-13 18:34 ` Andrew Cooper
2014-06-16 8:31 ` Egger, Christoph
0 siblings, 2 replies; 3+ messages in thread
From: Konrad Rzeszutek Wilk @ 2014-06-13 18:09 UTC (permalink / raw)
To: xen-devel, chegger, jinsong.liu, keir, jbeulich; +Cc: Konrad Rzeszutek Wilk
If the machine has been quite busy it ends up with these
messages printed on the hypervisor console:
(XEN) CPU3: Temperature/speed normal
(XEN) CPU1: Temperature/speed normal
(XEN) CPU0: Temperature/speed normal
(XEN) CPU1: Temperature/speed normal
(XEN) CPU0: Temperature/speed normal
(XEN) CPU2: Temperature/speed normal
(XEN) CPU3: Temperature/speed normal
(XEN) CPU0: Temperature/speed normal
(XEN) CPU2: Temperature/speed normal
(XEN) CPU3: Temperature/speed normal
(XEN) CPU1: Temperature/speed normal
(XEN) CPU0: Temperature above threshold
(XEN) CPU0: Running in modulated clock mode
(XEN) CPU1: Temperature/speed normal
(XEN) CPU2: Temperature/speed normal
(XEN) CPU3: Temperature/speed normal
While the state changes are important, the non-altered
state information is not needed. As such add a latch
mechanism to only print the information if it has
changed since the last update.
This was observed on Intel DQ67SW,
BIOS SWQ6710H.86A.0066.2012.1105.1504 11/05/2012
CC: Jan Beulich <jbeulich@suse.com>
CC: Keir Fraser <keir@xen.org>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
---
[v2: Redo per Daniel and Boris's review]
[v3: Use per_cpu instead of __get_cpu_var per Andrew's review]
---
xen/arch/x86/cpu/mcheck/mce_intel.c | 19 ++++++++++++++-----
1 files changed, 14 insertions(+), 5 deletions(-)
diff --git a/xen/arch/x86/cpu/mcheck/mce_intel.c b/xen/arch/x86/cpu/mcheck/mce_intel.c
index ad06efc..bb4ce47 100644
--- a/xen/arch/x86/cpu/mcheck/mce_intel.c
+++ b/xen/arch/x86/cpu/mcheck/mce_intel.c
@@ -49,11 +49,15 @@ static int __read_mostly nr_intel_ext_msrs;
#define INTEL_SRAR_INSTR_FETCH 0x150
#ifdef CONFIG_X86_MCE_THERMAL
+#define MCE_RING 0x1
+static DEFINE_PER_CPU(int, last_state);
+
static void intel_thermal_interrupt(struct cpu_user_regs *regs)
{
uint64_t msr_content;
unsigned int cpu = smp_processor_id();
static DEFINE_PER_CPU(s_time_t, next);
+ int *this_last_state;
ack_APIC_irq();
@@ -62,13 +66,17 @@ static void intel_thermal_interrupt(struct cpu_user_regs *regs)
per_cpu(next, cpu) = NOW() + MILLISECS(5000);
rdmsrl(MSR_IA32_THERM_STATUS, msr_content);
- if (msr_content & 0x1) {
- printk(KERN_EMERG "CPU%d: Temperature above threshold\n", cpu);
- printk(KERN_EMERG "CPU%d: Running in modulated clock mode\n",
- cpu);
+ this_last_state = &per_cpu(last_state, cpu);
+ if ( *this_last_state == (msr_content & MCE_RING) )
+ return;
+ *this_last_state = msr_content & MCE_RING;
+ if ( msr_content & MCE_RING )
+ {
+ printk(KERN_EMERG "CPU%u: Temperature above threshold\n", cpu);
+ printk(KERN_EMERG "CPU%u: Running in modulated clock mode\n", cpu);
add_taint(TAINT_MACHINE_CHECK);
} else {
- printk(KERN_INFO "CPU%d: Temperature/speed normal\n", cpu);
+ printk(KERN_INFO "CPU%u: Temperature/speed normal\n", cpu);
}
}
@@ -802,6 +810,7 @@ static int cpu_mcabank_alloc(unsigned int cpu)
per_cpu(no_cmci_banks, cpu) = cmci;
per_cpu(mce_banks_owned, cpu) = owned;
+ per_cpu(last_state, cpu) = -1;
return 0;
out:
--
1.7.7.6
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] xen/mce: Don't spam the console with "CPUx: Temperature z" (v2)
2014-06-13 18:09 [PATCH] xen/mce: Don't spam the console with "CPUx: Temperature z" (v2) Konrad Rzeszutek Wilk
@ 2014-06-13 18:34 ` Andrew Cooper
2014-06-16 8:31 ` Egger, Christoph
1 sibling, 0 replies; 3+ messages in thread
From: Andrew Cooper @ 2014-06-13 18:34 UTC (permalink / raw)
To: Konrad Rzeszutek Wilk; +Cc: xen-devel, chegger, keir, jbeulich, jinsong.liu
On 13/06/14 19:09, Konrad Rzeszutek Wilk wrote:
> If the machine has been quite busy it ends up with these
> messages printed on the hypervisor console:
>
> (XEN) CPU3: Temperature/speed normal
> (XEN) CPU1: Temperature/speed normal
> (XEN) CPU0: Temperature/speed normal
> (XEN) CPU1: Temperature/speed normal
> (XEN) CPU0: Temperature/speed normal
> (XEN) CPU2: Temperature/speed normal
> (XEN) CPU3: Temperature/speed normal
> (XEN) CPU0: Temperature/speed normal
> (XEN) CPU2: Temperature/speed normal
> (XEN) CPU3: Temperature/speed normal
> (XEN) CPU1: Temperature/speed normal
> (XEN) CPU0: Temperature above threshold
> (XEN) CPU0: Running in modulated clock mode
> (XEN) CPU1: Temperature/speed normal
> (XEN) CPU2: Temperature/speed normal
> (XEN) CPU3: Temperature/speed normal
>
> While the state changes are important, the non-altered
> state information is not needed. As such add a latch
> mechanism to only print the information if it has
> changed since the last update.
>
> This was observed on Intel DQ67SW,
> BIOS SWQ6710H.86A.0066.2012.1105.1504 11/05/2012
>
> CC: Jan Beulich <jbeulich@suse.com>
> CC: Keir Fraser <keir@xen.org>
> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
>
> ---
> [v2: Redo per Daniel and Boris's review]
> [v3: Use per_cpu instead of __get_cpu_var per Andrew's review]
> ---
> xen/arch/x86/cpu/mcheck/mce_intel.c | 19 ++++++++++++++-----
> 1 files changed, 14 insertions(+), 5 deletions(-)
>
> diff --git a/xen/arch/x86/cpu/mcheck/mce_intel.c b/xen/arch/x86/cpu/mcheck/mce_intel.c
> index ad06efc..bb4ce47 100644
> --- a/xen/arch/x86/cpu/mcheck/mce_intel.c
> +++ b/xen/arch/x86/cpu/mcheck/mce_intel.c
> @@ -49,11 +49,15 @@ static int __read_mostly nr_intel_ext_msrs;
> #define INTEL_SRAR_INSTR_FETCH 0x150
>
> #ifdef CONFIG_X86_MCE_THERMAL
> +#define MCE_RING 0x1
> +static DEFINE_PER_CPU(int, last_state);
> +
> static void intel_thermal_interrupt(struct cpu_user_regs *regs)
> {
> uint64_t msr_content;
> unsigned int cpu = smp_processor_id();
> static DEFINE_PER_CPU(s_time_t, next);
> + int *this_last_state;
>
> ack_APIC_irq();
>
> @@ -62,13 +66,17 @@ static void intel_thermal_interrupt(struct cpu_user_regs *regs)
>
> per_cpu(next, cpu) = NOW() + MILLISECS(5000);
> rdmsrl(MSR_IA32_THERM_STATUS, msr_content);
> - if (msr_content & 0x1) {
> - printk(KERN_EMERG "CPU%d: Temperature above threshold\n", cpu);
> - printk(KERN_EMERG "CPU%d: Running in modulated clock mode\n",
> - cpu);
> + this_last_state = &per_cpu(last_state, cpu);
> + if ( *this_last_state == (msr_content & MCE_RING) )
> + return;
> + *this_last_state = msr_content & MCE_RING;
> + if ( msr_content & MCE_RING )
> + {
> + printk(KERN_EMERG "CPU%u: Temperature above threshold\n", cpu);
> + printk(KERN_EMERG "CPU%u: Running in modulated clock mode\n", cpu);
> add_taint(TAINT_MACHINE_CHECK);
> } else {
> - printk(KERN_INFO "CPU%d: Temperature/speed normal\n", cpu);
> + printk(KERN_INFO "CPU%u: Temperature/speed normal\n", cpu);
> }
> }
>
> @@ -802,6 +810,7 @@ static int cpu_mcabank_alloc(unsigned int cpu)
>
> per_cpu(no_cmci_banks, cpu) = cmci;
> per_cpu(mce_banks_owned, cpu) = owned;
> + per_cpu(last_state, cpu) = -1;
>
> return 0;
> out:
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] xen/mce: Don't spam the console with "CPUx: Temperature z" (v2)
2014-06-13 18:09 [PATCH] xen/mce: Don't spam the console with "CPUx: Temperature z" (v2) Konrad Rzeszutek Wilk
2014-06-13 18:34 ` Andrew Cooper
@ 2014-06-16 8:31 ` Egger, Christoph
1 sibling, 0 replies; 3+ messages in thread
From: Egger, Christoph @ 2014-06-16 8:31 UTC (permalink / raw)
To: Konrad Rzeszutek Wilk, xen-devel, jinsong.liu, keir, jbeulich
On 13.06.14 20:09, Konrad Rzeszutek Wilk wrote:
> If the machine has been quite busy it ends up with these
> messages printed on the hypervisor console:
>
> (XEN) CPU3: Temperature/speed normal
> (XEN) CPU1: Temperature/speed normal
> (XEN) CPU0: Temperature/speed normal
> (XEN) CPU1: Temperature/speed normal
> (XEN) CPU0: Temperature/speed normal
> (XEN) CPU2: Temperature/speed normal
> (XEN) CPU3: Temperature/speed normal
> (XEN) CPU0: Temperature/speed normal
> (XEN) CPU2: Temperature/speed normal
> (XEN) CPU3: Temperature/speed normal
> (XEN) CPU1: Temperature/speed normal
> (XEN) CPU0: Temperature above threshold
> (XEN) CPU0: Running in modulated clock mode
> (XEN) CPU1: Temperature/speed normal
> (XEN) CPU2: Temperature/speed normal
> (XEN) CPU3: Temperature/speed normal
>
> While the state changes are important, the non-altered
> state information is not needed. As such add a latch
> mechanism to only print the information if it has
> changed since the last update.
>
> This was observed on Intel DQ67SW,
> BIOS SWQ6710H.86A.0066.2012.1105.1504 11/05/2012
>
> CC: Jan Beulich <jbeulich@suse.com>
> CC: Keir Fraser <keir@xen.org>
> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Acked-by: Christoph Egger <chegger@amazon.de>
>
> ---
> [v2: Redo per Daniel and Boris's review]
> [v3: Use per_cpu instead of __get_cpu_var per Andrew's review]
> ---
> xen/arch/x86/cpu/mcheck/mce_intel.c | 19 ++++++++++++++-----
> 1 files changed, 14 insertions(+), 5 deletions(-)
>
> diff --git a/xen/arch/x86/cpu/mcheck/mce_intel.c b/xen/arch/x86/cpu/mcheck/mce_intel.c
> index ad06efc..bb4ce47 100644
> --- a/xen/arch/x86/cpu/mcheck/mce_intel.c
> +++ b/xen/arch/x86/cpu/mcheck/mce_intel.c
> @@ -49,11 +49,15 @@ static int __read_mostly nr_intel_ext_msrs;
> #define INTEL_SRAR_INSTR_FETCH 0x150
>
> #ifdef CONFIG_X86_MCE_THERMAL
> +#define MCE_RING 0x1
> +static DEFINE_PER_CPU(int, last_state);
> +
> static void intel_thermal_interrupt(struct cpu_user_regs *regs)
> {
> uint64_t msr_content;
> unsigned int cpu = smp_processor_id();
> static DEFINE_PER_CPU(s_time_t, next);
> + int *this_last_state;
>
> ack_APIC_irq();
>
> @@ -62,13 +66,17 @@ static void intel_thermal_interrupt(struct cpu_user_regs *regs)
>
> per_cpu(next, cpu) = NOW() + MILLISECS(5000);
> rdmsrl(MSR_IA32_THERM_STATUS, msr_content);
> - if (msr_content & 0x1) {
> - printk(KERN_EMERG "CPU%d: Temperature above threshold\n", cpu);
> - printk(KERN_EMERG "CPU%d: Running in modulated clock mode\n",
> - cpu);
> + this_last_state = &per_cpu(last_state, cpu);
> + if ( *this_last_state == (msr_content & MCE_RING) )
> + return;
> + *this_last_state = msr_content & MCE_RING;
> + if ( msr_content & MCE_RING )
> + {
> + printk(KERN_EMERG "CPU%u: Temperature above threshold\n", cpu);
> + printk(KERN_EMERG "CPU%u: Running in modulated clock mode\n", cpu);
> add_taint(TAINT_MACHINE_CHECK);
> } else {
> - printk(KERN_INFO "CPU%d: Temperature/speed normal\n", cpu);
> + printk(KERN_INFO "CPU%u: Temperature/speed normal\n", cpu);
> }
> }
>
> @@ -802,6 +810,7 @@ static int cpu_mcabank_alloc(unsigned int cpu)
>
> per_cpu(no_cmci_banks, cpu) = cmci;
> per_cpu(mce_banks_owned, cpu) = owned;
> + per_cpu(last_state, cpu) = -1;
>
> return 0;
> out:
>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2014-06-16 8:38 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-06-13 18:09 [PATCH] xen/mce: Don't spam the console with "CPUx: Temperature z" (v2) Konrad Rzeszutek Wilk
2014-06-13 18:34 ` Andrew Cooper
2014-06-16 8:31 ` Egger, Christoph
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.