linux_dsm_epyc7002/arch/x86/kernel/apic
Maciej W. Rozycki 023de4a09f x86/apic: Reinstate error IRQ Pentium erratum 3AP workaround
A change introduced with commit 60283df7ac
("x86/apic: Read Error Status Register correctly") removed a read from the
APIC ESR register made before writing to same required to retrieve the
correct error status on Pentium systems affected by the 3AP erratum[1]:

	"3AP. Writes to Error Register Clears Register

	PROBLEM: The APIC Error register is intended to only be read.
	If there is a write to this register the data in the APIC Error
	register will be cleared and lost.

	IMPLICATION: There is a possibility of clearing the Error
	register status since the write to the register is not
	specifically blocked.

	WORKAROUND: Writes should not occur to the Pentium processor
	APIC Error register.

	STATUS: For the steppings affected see the Summary Table of
	Changes at the beginning of this section."

The steppings affected are actually: B1, B3 and B5.

To avoid this information loss this change avoids the write to
ESR on all Pentium systems where it is actually never needed;
in Pentium processor documentation ESR was noted read-only and
the write only required for future architectural
compatibility[2].

The approach taken is the same as in lapic_setup_esr().

References:

	[1] "Pentium Processor Family Developer's Manual", Intel Corporation,
	    1997, order number 241428-005, Appendix A "Errata and S-Specs for the
	    Pentium Processor Family", p. A-92,

	[2] "Pentium Processor Family Developer's Manual, Volume 3: Architecture
	    and Programming Manual", Intel Corporation, 1995, order number
	    241430-004, Section 19.3.3. "Error Handling In APIC", p. 19-33.

Signed-off-by: Maciej W. Rozycki <macro@linux-mips.org>
Cc: Richard Weinberger <richard@nod.at>
Link: http://lkml.kernel.org/r/alpine.LFD.2.11.1404011300010.27402@eddie.linux-mips.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
2014-04-01 14:59:43 +02:00
..
apic_flat_64.c x86/apic: Switch wait_for_init_deassert() to a bool flag 2014-02-09 15:15:08 +01:00
apic_noop.c x86/apic: Switch wait_for_init_deassert() to a bool flag 2014-02-09 15:15:08 +01:00
apic_numachip.c x86/apic: Switch wait_for_init_deassert() to a bool flag 2014-02-09 15:15:08 +01:00
apic.c x86/apic: Reinstate error IRQ Pentium erratum 3AP workaround 2014-04-01 14:59:43 +02:00
bigsmp_32.c x86/apic: Switch wait_for_init_deassert() to a bool flag 2014-02-09 15:15:08 +01:00
es7000_32.c x86/apic: Switch wait_for_init_deassert() to a bool flag 2014-02-09 15:15:08 +01:00
hw_nmi.c x86: Fix trigger_all_cpu_backtrace() implementation 2013-06-20 14:00:21 +02:00
io_apic.c ACPI and power management updates for 3.14-rc1 2014-01-24 15:51:02 -08:00
ipi.c x86: Delete non-required instances of include <linux/init.h> 2014-01-06 21:25:18 -08:00
Makefile trace,x86: Move creation of irq tracepoints from apic.c to irq.c 2013-06-21 10:33:28 -04:00
numaq_32.c x86/apic: Switch wait_for_init_deassert() to a bool flag 2014-02-09 15:15:08 +01:00
probe_32.c x86/apic: Switch wait_for_init_deassert() to a bool flag 2014-02-09 15:15:08 +01:00
probe_64.c x86/platform: Introduce APIC post-initialization callback 2012-06-06 09:06:19 +02:00
summit_32.c x86/apic: Switch wait_for_init_deassert() to a bool flag 2014-02-09 15:15:08 +01:00
x2apic_cluster.c x86/apic: Switch wait_for_init_deassert() to a bool flag 2014-02-09 15:15:08 +01:00
x2apic_phys.c x86/apic: Switch wait_for_init_deassert() to a bool flag 2014-02-09 15:15:08 +01:00
x2apic_uv_x.c x86/apic: Switch wait_for_init_deassert() to a bool flag 2014-02-09 15:15:08 +01:00