| From b87cf80af3ba4b4c008b4face3c68d604e1715c6 Mon Sep 17 00:00:00 2001 |
| From: Boris Ostrovsky <boris.ostrovsky@amd.com> |
| Date: Tue, 15 Mar 2011 12:13:44 -0400 |
| Subject: x86, AMD: Set ARAT feature on AMD processors |
| |
| From: Boris Ostrovsky <boris.ostrovsky@amd.com> |
| |
| commit b87cf80af3ba4b4c008b4face3c68d604e1715c6 upstream. |
| |
| Support for Always Running APIC timer (ARAT) was introduced in |
| commit db954b5898dd3ef3ef93f4144158ea8f97deb058. This feature |
| allows us to avoid switching timers from LAPIC to something else |
| (e.g. HPET) and go into timer broadcasts when entering deep |
| C-states. |
| |
| AMD processors don't provide a CPUID bit for that feature but |
| they also keep APIC timers running in deep C-states (except for |
| cases when the processor is affected by erratum 400). Therefore |
| we should set ARAT feature bit on AMD CPUs. |
| |
| Tested-by: Borislav Petkov <borislav.petkov@amd.com> |
| Acked-by: Andreas Herrmann <andreas.herrmann3@amd.com> |
| Acked-by: Mark Langsdorf <mark.langsdorf@amd.com> |
| Acked-by: Thomas Gleixner <tglx@linutronix.de> |
| Signed-off-by: Boris Ostrovsky <boris.ostrovsky@amd.com> |
| LKML-Reference: <1300205624-4813-1-git-send-email-ostr@amd64.org> |
| Signed-off-by: Ingo Molnar <mingo@elte.hu> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| arch/x86/kernel/cpu/amd.c | 4 ++++ |
| 1 file changed, 4 insertions(+) |
| |
| --- a/arch/x86/kernel/cpu/amd.c |
| +++ b/arch/x86/kernel/cpu/amd.c |
| @@ -564,6 +564,10 @@ static void __cpuinit init_amd(struct cp |
| } |
| } |
| #endif |
| + |
| + /* As a rule processors have APIC timer running in deep C states */ |
| + if (c->x86 >= 0xf && !cpu_has_amd_erratum(amd_erratum_400)) |
| + set_cpu_cap(c, X86_FEATURE_ARAT); |
| } |
| |
| #ifdef CONFIG_X86_32 |