diff -r e6f751ed8e38 xen/arch/x86/apic.c --- a/xen/arch/x86/apic.c Tue Mar 09 10:00:37 2010 +0000 +++ b/xen/arch/x86/apic.c Fri May 28 12:28:22 2010 +0200 @@ -209,6 +209,11 @@ void clear_local_APIC(void) */ v = apic_read(APIC_LVTT); apic_write_around(APIC_LVTT, v | APIC_LVT_MASKED); + + /* Workaround AMD Erratum 411. Please refer to AMD + revision guide for more details. */ + apic_write_around(APIC_TMICT, 0x0); + v = apic_read(APIC_LVT0); apic_write_around(APIC_LVT0, v | APIC_LVT_MASKED); v = apic_read(APIC_LVT1); @@ -1187,6 +1192,10 @@ void disable_APIC_timer(void) v = apic_read(APIC_LVTT); apic_write_around(APIC_LVTT, v | APIC_LVT_MASKED); + + /* Workaround AMD Erratum 411. Please refer to AMD + revision guide for more details. */ + apic_write_around(APIC_TMICT, 0x0); } }