diff options
Diffstat (limited to 'arch/x86/kernel/apic/apic.c')
-rw-r--r-- | arch/x86/kernel/apic/apic.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c index 7f26c9a70a9e..53e20531470e 100644 --- a/arch/x86/kernel/apic/apic.c +++ b/arch/x86/kernel/apic/apic.c | |||
@@ -133,6 +133,10 @@ static inline void imcr_apic_to_pic(void) | |||
133 | * +1=force-enable | 133 | * +1=force-enable |
134 | */ | 134 | */ |
135 | static int force_enable_local_apic __initdata; | 135 | static int force_enable_local_apic __initdata; |
136 | |||
137 | /* Control whether x2APIC mode is enabled or not */ | ||
138 | static bool nox2apic __initdata; | ||
139 | |||
136 | /* | 140 | /* |
137 | * APIC command line parameters | 141 | * APIC command line parameters |
138 | */ | 142 | */ |
@@ -162,8 +166,7 @@ int x2apic_mode; | |||
162 | /* x2apic enabled before OS handover */ | 166 | /* x2apic enabled before OS handover */ |
163 | int x2apic_preenabled; | 167 | int x2apic_preenabled; |
164 | static int x2apic_disabled; | 168 | static int x2apic_disabled; |
165 | static int nox2apic; | 169 | static int __init setup_nox2apic(char *str) |
166 | static __init int setup_nox2apic(char *str) | ||
167 | { | 170 | { |
168 | if (x2apic_enabled()) { | 171 | if (x2apic_enabled()) { |
169 | int apicid = native_apic_msr_read(APIC_ID); | 172 | int apicid = native_apic_msr_read(APIC_ID); |
@@ -178,7 +181,7 @@ static __init int setup_nox2apic(char *str) | |||
178 | } else | 181 | } else |
179 | setup_clear_cpu_cap(X86_FEATURE_X2APIC); | 182 | setup_clear_cpu_cap(X86_FEATURE_X2APIC); |
180 | 183 | ||
181 | nox2apic = 1; | 184 | nox2apic = true; |
182 | 185 | ||
183 | return 0; | 186 | return 0; |
184 | } | 187 | } |
@@ -283,8 +286,12 @@ u32 native_safe_apic_wait_icr_idle(void) | |||
283 | 286 | ||
284 | void native_apic_icr_write(u32 low, u32 id) | 287 | void native_apic_icr_write(u32 low, u32 id) |
285 | { | 288 | { |
289 | unsigned long flags; | ||
290 | |||
291 | local_irq_save(flags); | ||
286 | apic_write(APIC_ICR2, SET_APIC_DEST_FIELD(id)); | 292 | apic_write(APIC_ICR2, SET_APIC_DEST_FIELD(id)); |
287 | apic_write(APIC_ICR, low); | 293 | apic_write(APIC_ICR, low); |
294 | local_irq_restore(flags); | ||
288 | } | 295 | } |
289 | 296 | ||
290 | u64 native_apic_icr_read(void) | 297 | u64 native_apic_icr_read(void) |