diff options
Diffstat (limited to 'arch/x86/kernel/apic/apic.c')
-rw-r--r-- | arch/x86/kernel/apic/apic.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c index dba2828b779a..08fb79f37793 100644 --- a/arch/x86/kernel/apic/apic.c +++ b/arch/x86/kernel/apic/apic.c | |||
@@ -834,6 +834,10 @@ bool __init apic_needs_pit(void) | |||
834 | if (!boot_cpu_has(X86_FEATURE_APIC)) | 834 | if (!boot_cpu_has(X86_FEATURE_APIC)) |
835 | return true; | 835 | return true; |
836 | 836 | ||
837 | /* Virt guests may lack ARAT, but still have DEADLINE */ | ||
838 | if (!boot_cpu_has(X86_FEATURE_ARAT)) | ||
839 | return true; | ||
840 | |||
837 | /* Deadline timer is based on TSC so no further PIT action required */ | 841 | /* Deadline timer is based on TSC so no further PIT action required */ |
838 | if (boot_cpu_has(X86_FEATURE_TSC_DEADLINE_TIMER)) | 842 | if (boot_cpu_has(X86_FEATURE_TSC_DEADLINE_TIMER)) |
839 | return false; | 843 | return false; |
@@ -1179,10 +1183,6 @@ void clear_local_APIC(void) | |||
1179 | apic_write(APIC_LVT0, v | APIC_LVT_MASKED); | 1183 | apic_write(APIC_LVT0, v | APIC_LVT_MASKED); |
1180 | v = apic_read(APIC_LVT1); | 1184 | v = apic_read(APIC_LVT1); |
1181 | apic_write(APIC_LVT1, v | APIC_LVT_MASKED); | 1185 | apic_write(APIC_LVT1, v | APIC_LVT_MASKED); |
1182 | if (!x2apic_enabled()) { | ||
1183 | v = apic_read(APIC_LDR) & ~APIC_LDR_MASK; | ||
1184 | apic_write(APIC_LDR, v); | ||
1185 | } | ||
1186 | if (maxlvt >= 4) { | 1186 | if (maxlvt >= 4) { |
1187 | v = apic_read(APIC_LVTPC); | 1187 | v = apic_read(APIC_LVTPC); |
1188 | apic_write(APIC_LVTPC, v | APIC_LVT_MASKED); | 1188 | apic_write(APIC_LVTPC, v | APIC_LVT_MASKED); |