ba5dde9750
53a199d7-x86-EFI-allow-FPU-XMM-use-in-runtime-service-functions.patch - Upstream patches from Jan 538c338f-x86-amd_ucode-flip-revision-numbers-in-printk.patch 538ee637-ACPI-Prevent-acpi_table_entries-from-falling-into-a-infinite-loop.patch 5390917a-VT-d-honor-APEI-firmware-first-mode-in-XSA-59-workaround-code.patch 53909259-x86-domctl-two-functional-fixes-to-XEN_DOMCTL_-gs-etvcpuextstate.patch 5390927f-x86-fix-reboot-shutdown-with-running-HVM-guests.patch 5396d818-avoid-crash-on-HVM-domain-destroy-with-PCI-passthrough.patch 5396e805-x86-HVM-refine-SMEP-test-in-HVM_CR4_GUEST_RESERVED_BITS.patch 539ebe62-x86-EFI-improve-boot-time-diagnostics.patch 539ec004-x86-mce-don-t-spam-the-console-with-CPUx-Temperature-z.patch 53a040c6-page-alloc-scrub-pages-used-by-hypervisor-upon-freeing.patch (replaces xsa100.patch) 53a1990a-IOMMU-prevent-VT-d-device-IOTLB-operations-on-wrong-IOMMU.patch - Replace 'domUloader' with 'pygrub' when converting or importing Xen domains into libvirt with xen2libvirt. domUloader is no longer provided in xen-tools. Modified: xen2libvirt.py Thu Jun 13 15:50:19 MDT 2014 - cyliu@suse.com - fate#310956: Support Direct Kernel Boot for FV guests patches would go to upstream: qemu side: qemu-support-xen-hvm-direct-kernel-boot.patch xen side: xen-pass-kernel-initrd-to-qemu.patch - bnc#880751 - VUL-0: xen: Hypervisor heap contents leaked to guests xsa100.patch OBS-URL: https://build.opensuse.org/package/show/Virtualization/xen?expand=0&rev=320
88 lines
3.0 KiB
Diff
88 lines
3.0 KiB
Diff
# Commit 323338f86fb6cd6f6dba4f59a84eed71b3552d21
|
|
# Date 2014-06-16 11:59:32 +0200
|
|
# Author Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
|
# Committer Jan Beulich <jbeulich@suse.com>
|
|
x86/mce: don't spam the console with "CPUx: Temperature z"
|
|
|
|
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 (and the
|
|
hardware doesn't properly suppress redundant notifications).
|
|
|
|
This was observed on Intel DQ67SW,
|
|
BIOS SWQ6710H.86A.0066.2012.1105.1504 11/05/2012
|
|
|
|
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
|
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|
Acked-by: Christoph Egger <chegger@amazon.de>
|
|
|
|
--- 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_ms
|
|
#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(stru
|
|
|
|
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 in
|
|
|
|
per_cpu(no_cmci_banks, cpu) = cmci;
|
|
per_cpu(mce_banks_owned, cpu) = owned;
|
|
+ per_cpu(last_state, cpu) = -1;
|
|
|
|
return 0;
|
|
out:
|