aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2015-09-28 06:26:31 -0400
committerThomas Gleixner <tglx@linutronix.de>2015-09-30 15:17:36 -0400
commite02ae3871355194a61b03a07d96fd71e81d7eff9 (patch)
tree3de05ae041cbac53edd06ff0a4f2ad880767ca0c
parent9ffecb10283508260936b96022d4ee43a7798b4c (diff)
x86/x2apic: Make stub functions available even if !CONFIG_X86_LOCAL_APIC
Some CONFIG_X86_X2APIC functions, especially x2apic_enabled(), are not declared if !CONFIG_X86_LOCAL_APIC. However, the same stubs that work for !CONFIG_X86_X2APIC are okay even if there is no local APIC support at all. Avoid the introduction of #ifdefs by moving the x2apic declarations completely outside the CONFIG_X86_LOCAL_APIC block. (Unfortunately, diff generation messes up the actual change that this patch makes). There is no semantic change because CONFIG_X86_X2APIC depends on CONFIG_X86_LOCAL_APIC. Reported-by: Fengguang Wu <fengguang.wu@intel.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Cc: Feng Wu <feng.wu@intel.com> Link: http://lkml.kernel.org/r/1443435991-35750-1-git-send-email-pbonzini@redhat.com Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-rw-r--r--arch/x86/include/asm/apic.h110
1 files changed, 55 insertions, 55 deletions
diff --git a/arch/x86/include/asm/apic.h b/arch/x86/include/asm/apic.h
index ebf6d5e5668c..a30316bf801a 100644
--- a/arch/x86/include/asm/apic.h
+++ b/arch/x86/include/asm/apic.h
@@ -115,6 +115,59 @@ static inline bool apic_is_x2apic_enabled(void)
115 return msr & X2APIC_ENABLE; 115 return msr & X2APIC_ENABLE;
116} 116}
117 117
118extern void enable_IR_x2apic(void);
119
120extern int get_physical_broadcast(void);
121
122extern int lapic_get_maxlvt(void);
123extern void clear_local_APIC(void);
124extern void disconnect_bsp_APIC(int virt_wire_setup);
125extern void disable_local_APIC(void);
126extern void lapic_shutdown(void);
127extern void sync_Arb_IDs(void);
128extern void init_bsp_APIC(void);
129extern void setup_local_APIC(void);
130extern void init_apic_mappings(void);
131void register_lapic_address(unsigned long address);
132extern void setup_boot_APIC_clock(void);
133extern void setup_secondary_APIC_clock(void);
134extern int APIC_init_uniprocessor(void);
135
136#ifdef CONFIG_X86_64
137static inline int apic_force_enable(unsigned long addr)
138{
139 return -1;
140}
141#else
142extern int apic_force_enable(unsigned long addr);
143#endif
144
145extern int apic_bsp_setup(bool upmode);
146extern void apic_ap_setup(void);
147
148/*
149 * On 32bit this is mach-xxx local
150 */
151#ifdef CONFIG_X86_64
152extern int apic_is_clustered_box(void);
153#else
154static inline int apic_is_clustered_box(void)
155{
156 return 0;
157}
158#endif
159
160extern int setup_APIC_eilvt(u8 lvt_off, u8 vector, u8 msg_type, u8 mask);
161
162#else /* !CONFIG_X86_LOCAL_APIC */
163static inline void lapic_shutdown(void) { }
164#define local_apic_timer_c2_ok 1
165static inline void init_apic_mappings(void) { }
166static inline void disable_local_APIC(void) { }
167# define setup_boot_APIC_clock x86_init_noop
168# define setup_secondary_APIC_clock x86_init_noop
169#endif /* !CONFIG_X86_LOCAL_APIC */
170
118#ifdef CONFIG_X86_X2APIC 171#ifdef CONFIG_X86_X2APIC
119/* 172/*
120 * Make previous memory operations globally visible before 173 * Make previous memory operations globally visible before
@@ -186,67 +239,14 @@ static inline int x2apic_enabled(void)
186} 239}
187 240
188#define x2apic_supported() (cpu_has_x2apic) 241#define x2apic_supported() (cpu_has_x2apic)
189#else 242#else /* !CONFIG_X86_X2APIC */
190static inline void check_x2apic(void) { } 243static inline void check_x2apic(void) { }
191static inline void x2apic_setup(void) { } 244static inline void x2apic_setup(void) { }
192static inline int x2apic_enabled(void) { return 0; } 245static inline int x2apic_enabled(void) { return 0; }
193 246
194#define x2apic_mode (0) 247#define x2apic_mode (0)
195#define x2apic_supported() (0) 248#define x2apic_supported() (0)
196#endif 249#endif /* !CONFIG_X86_X2APIC */
197
198extern void enable_IR_x2apic(void);
199
200extern int get_physical_broadcast(void);
201
202extern int lapic_get_maxlvt(void);
203extern void clear_local_APIC(void);
204extern void disconnect_bsp_APIC(int virt_wire_setup);
205extern void disable_local_APIC(void);
206extern void lapic_shutdown(void);
207extern void sync_Arb_IDs(void);
208extern void init_bsp_APIC(void);
209extern void setup_local_APIC(void);
210extern void init_apic_mappings(void);
211void register_lapic_address(unsigned long address);
212extern void setup_boot_APIC_clock(void);
213extern void setup_secondary_APIC_clock(void);
214extern int APIC_init_uniprocessor(void);
215
216#ifdef CONFIG_X86_64
217static inline int apic_force_enable(unsigned long addr)
218{
219 return -1;
220}
221#else
222extern int apic_force_enable(unsigned long addr);
223#endif
224
225extern int apic_bsp_setup(bool upmode);
226extern void apic_ap_setup(void);
227
228/*
229 * On 32bit this is mach-xxx local
230 */
231#ifdef CONFIG_X86_64
232extern int apic_is_clustered_box(void);
233#else
234static inline int apic_is_clustered_box(void)
235{
236 return 0;
237}
238#endif
239
240extern int setup_APIC_eilvt(u8 lvt_off, u8 vector, u8 msg_type, u8 mask);
241
242#else /* !CONFIG_X86_LOCAL_APIC */
243static inline void lapic_shutdown(void) { }
244#define local_apic_timer_c2_ok 1
245static inline void init_apic_mappings(void) { }
246static inline void disable_local_APIC(void) { }
247# define setup_boot_APIC_clock x86_init_noop
248# define setup_secondary_APIC_clock x86_init_noop
249#endif /* !CONFIG_X86_LOCAL_APIC */
250 250
251#ifdef CONFIG_X86_64 251#ifdef CONFIG_X86_64
252#define SET_APIC_ID(x) (apic->set_apic_id(x)) 252#define SET_APIC_ID(x) (apic->set_apic_id(x))