[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] x86: Some cleanups for apic_write, apic_read, apic_wrmsr, apic_rdmsr
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1252327897 -3600 # Node ID 26bdf05cb7ae23ab0bfa3f66f8406ec5d784c85f # Parent 3cfa9a6a3168cd21681f29eb124d574f8e507cc2 x86: Some cleanups for apic_write, apic_read, apic_wrmsr, apic_rdmsr Signed-off-by: Dexuan Cui <dexuan.cui@xxxxxxxxx> --- xen/arch/x86/apic.c | 9 ++++----- xen/include/asm-x86/apic.h | 9 +++++++++ 2 files changed, 13 insertions(+), 5 deletions(-) diff -r 3cfa9a6a3168 -r 26bdf05cb7ae xen/arch/x86/apic.c --- a/xen/arch/x86/apic.c Mon Sep 07 13:51:19 2009 +0100 +++ b/xen/arch/x86/apic.c Mon Sep 07 13:51:37 2009 +0100 @@ -627,8 +627,7 @@ int lapic_suspend(void) apic_pm_state.apic_id = apic_read(APIC_ID); apic_pm_state.apic_taskpri = apic_read(APIC_TASKPRI); apic_pm_state.apic_ldr = apic_read(APIC_LDR); - if ( !x2apic_enabled ) - apic_pm_state.apic_dfr = apic_read(APIC_DFR); + apic_pm_state.apic_dfr = apic_read(APIC_DFR); apic_pm_state.apic_spiv = apic_read(APIC_SPIV); apic_pm_state.apic_lvtt = apic_read(APIC_LVTT); apic_pm_state.apic_lvtpc = apic_read(APIC_LVTPC); @@ -654,7 +653,7 @@ int lapic_resume(void) { unsigned int l, h; unsigned long flags; - int maxlvt = get_maxlvt(); + int maxlvt; if (!apic_pm_state.active) return 0; @@ -679,8 +678,7 @@ int lapic_resume(void) apic_write(APIC_LVTERR, ERROR_APIC_VECTOR | APIC_LVT_MASKED); apic_write(APIC_ID, apic_pm_state.apic_id); - if ( !x2apic_enabled ) - apic_write(APIC_DFR, apic_pm_state.apic_dfr); + apic_write(APIC_DFR, apic_pm_state.apic_dfr); apic_write(APIC_LDR, apic_pm_state.apic_ldr); apic_write(APIC_TASKPRI, apic_pm_state.apic_taskpri); apic_write(APIC_SPIV, apic_pm_state.apic_spiv); @@ -688,6 +686,7 @@ int lapic_resume(void) apic_write(APIC_LVT1, apic_pm_state.apic_lvt1); apic_write(APIC_LVTTHMR, apic_pm_state.apic_thmr); + maxlvt = get_maxlvt(); if (maxlvt >= 6) { apic_write(APIC_CMCI, apic_pm_state.apic_lvtcmci); } diff -r 3cfa9a6a3168 -r 26bdf05cb7ae xen/include/asm-x86/apic.h --- a/xen/include/asm-x86/apic.h Mon Sep 07 13:51:19 2009 +0100 +++ b/xen/include/asm-x86/apic.h Mon Sep 07 13:51:37 2009 +0100 @@ -77,6 +77,10 @@ static __inline u32 apic_mem_read(unsign static __inline void apic_wrmsr(unsigned long reg, u32 low, u32 high) { + if (reg == APIC_DFR || reg == APIC_ID || reg == APIC_LDR || + reg == APIC_LVR) + return; + __asm__ __volatile__("wrmsr" : /* no outputs */ : "c" (APIC_MSR_BASE + (reg >> 4)), "a" (low), "d" (high)); @@ -84,6 +88,11 @@ static __inline void apic_wrmsr(unsigned static __inline void apic_rdmsr(unsigned long reg, u32 *low, u32 *high) { + if (reg == APIC_DFR) + { + *low = *high = -1u; + return; + } __asm__ __volatile__("rdmsr" : "=a" (*low), "=d" (*high) : "c" (APIC_MSR_BASE + (reg >> 4))); _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |