diff options
author | Chuck Ebbert <cebbert@redhat.com> | 2011-05-20 22:38:50 -0400 |
---|---|---|
committer | Chuck Ebbert <cebbert@redhat.com> | 2011-05-20 22:38:50 -0400 |
commit | ed7f8ddc67aa800aa331a5e37177e05d876019bb (patch) | |
tree | fca1c06b9e6382cc12049580f563cdfee42796e9 | |
parent | 22c40c590c624184d7570f64af1c46237d5f494d (diff) | |
download | kernel-ed7f8ddc67aa800aa331a5e37177e05d876019bb.tar.gz kernel-ed7f8ddc67aa800aa331a5e37177e05d876019bb.tar.xz kernel-ed7f8ddc67aa800aa331a5e37177e05d876019bb.zip |
Drop broken fix for stalls on AMD processors.
-rw-r--r-- | kernel.spec | 7 | ||||
-rw-r--r-- | x86-amd-fix-another-erratum-400-bug.patch | 70 |
2 files changed, 3 insertions, 74 deletions
diff --git a/kernel.spec b/kernel.spec index 0dc1ea7fd..a4b912b40 100644 --- a/kernel.spec +++ b/kernel.spec @@ -716,8 +716,6 @@ Patch12401: mm-slub-do-not-wake-kswapd-for-slubs-speculative-high-order-allocati Patch12402: mm-slub-do-not-take-expensive-steps-for-slubs-speculative-high-order-allocations.patch Patch12403: mm-vmscan-if-kswapd-has-been-running-too-long-allow-it-to-sleep.patch -Patch12500: x86-amd-fix-another-erratum-400-bug.patch - %endif BuildRoot: %{_tmppath}/kernel-%{KVERREL}-root @@ -1328,8 +1326,6 @@ ApplyPatch mm-slub-do-not-wake-kswapd-for-slubs-speculative-high-order-allocatio ApplyPatch mm-slub-do-not-take-expensive-steps-for-slubs-speculative-high-order-allocations.patch ApplyPatch mm-vmscan-if-kswapd-has-been-running-too-long-allow-it-to-sleep.patch -ApplyPatch x86-amd-fix-another-erratum-400-bug.patch - # END OF PATCH APPLICATIONS %endif @@ -1938,6 +1934,9 @@ fi # and build. %changelog +* Fri May 20 2011 Chuck Ebbert <cebbert@redhat.com> +- Drop broken fix for stalls on AMD processors. + * Fri May 20 2011 Dave Jones <davej@redhat.com> - Rebuild to fix versioning. diff --git a/x86-amd-fix-another-erratum-400-bug.patch b/x86-amd-fix-another-erratum-400-bug.patch deleted file mode 100644 index 4afc0af6d..000000000 --- a/x86-amd-fix-another-erratum-400-bug.patch +++ /dev/null @@ -1,70 +0,0 @@ -Fix a bug that causes CPU hangs due to missing timer interrupts, -introduced by these three patches: - -(1) commit d78d671db478eb8b14c78501c0cee1cc7baf6967 - "x86, cpu: AMD errata checking framework" - -(2) commit 9d8888c2a214aece2494a49e699a097c2ba9498b - "x86, cpu: Clean up AMD erratum 400 workaround" - -(3) commit b87cf80af3ba4b4c008b4face3c68d604e1715c6 - "x86, AMD: Set ARAT feature on AMD processors" - -Patch (1) introduced a new framework that allowed checking for errata -using AMD's OSVW (OS visible workaround) feature combined with -explicit lists of models. It checked OSVW first, and completely -relied on that if it was present and usable. - -Patch (2) switched the checking for erratum 400 to use the new -framework. But the original code checked for an explicit model range -first, then used OSVW if the CPU was not within that range. Patch (2) -also inexplicably added a second model range (for Family 10h) that -was never in the original code. - -Then patch (3) used the new erratum 400 checks to decide whether -to enable the ARAT feature (always running APIC timer.) However, -this causes notebooks using the Sempron processor (Family 10h -Model 6 Stepping 2) to enable ARAT when they shouldn't because the -explicit check for that model gets skipped. - -The fix is to check the model list first, then use OSVW if the CPU -is not in that list. - -Signed-off-by: Chuck Ebbert <cebbert@redhat.com> - ---- a/arch/x86/kernel/cpu/amd.c -+++ b/arch/x86/kernel/cpu/amd.c -@@ -723,6 +723,17 @@ bool cpu_has_amd_erratum(const int *erra - if (cpu->x86_vendor != X86_VENDOR_AMD) - return false; - -+ /* -+ * Must match family-model-stepping range first so that the -+ * range checks will override OSVW checking. -+ */ -+ ms = (cpu->x86_model << 4) | cpu->x86_mask; -+ while ((range = *erratum++)) -+ if ((cpu->x86 == AMD_MODEL_RANGE_FAMILY(range)) && -+ (ms >= AMD_MODEL_RANGE_START(range)) && -+ (ms <= AMD_MODEL_RANGE_END(range))) -+ return true; -+ - if (osvw_id >= 0 && osvw_id < 65536 && - cpu_has(cpu, X86_FEATURE_OSVW)) { - u64 osvw_len; -@@ -737,15 +748,6 @@ bool cpu_has_amd_erratum(const int *erra - } - } - -- /* OSVW unavailable or ID unknown, match family-model-stepping range */ -- ms = (cpu->x86_model << 4) | cpu->x86_mask; -- while ((range = *erratum++)) -- if ((cpu->x86 == AMD_MODEL_RANGE_FAMILY(range)) && -- (ms >= AMD_MODEL_RANGE_START(range)) && -- (ms <= AMD_MODEL_RANGE_END(range))) -- return true; -- - return false; - } -- - EXPORT_SYMBOL_GPL(cpu_has_amd_erratum); |