| From 07a7795ca2e6e66d00b184efb46bd0e23d90d3fe Mon Sep 17 00:00:00 2001 |
| From: Hans Rosenfeld <hans.rosenfeld@amd.com> |
| Date: Wed, 18 Aug 2010 16:19:50 +0200 |
| Subject: x86, cpu: Fix regression in AMD errata checking code |
| |
| From: Hans Rosenfeld <hans.rosenfeld@amd.com> |
| |
| commit 07a7795ca2e6e66d00b184efb46bd0e23d90d3fe upstream. |
| |
| A bug in the family-model-stepping matching code caused the presence of |
| errata to go undetected when OSVW was not used. This causes hangs on |
| some K8 systems because the E400 workaround is not enabled. |
| |
| Signed-off-by: Hans Rosenfeld <hans.rosenfeld@amd.com> |
| LKML-Reference: <1282141190-930137-1-git-send-email-hans.rosenfeld@amd.com> |
| Signed-off-by: H. Peter Anvin <hpa@zytor.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| arch/x86/kernel/cpu/amd.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/arch/x86/kernel/cpu/amd.c |
| +++ b/arch/x86/kernel/cpu/amd.c |
| @@ -689,7 +689,7 @@ bool cpu_has_amd_erratum(const int *erra |
| } |
| |
| /* OSVW unavailable or ID unknown, match family-model-stepping range */ |
| - ms = (cpu->x86_model << 8) | cpu->x86_mask; |
| + 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)) && |