diff options
Diffstat (limited to 'arch/x86')
-rw-r--r-- | arch/x86/xen/enlighten.c | 19 | ||||
-rw-r--r-- | arch/x86/xen/smp.c | 34 | ||||
-rw-r--r-- | arch/x86/xen/xen-ops.h | 13 |
3 files changed, 32 insertions, 34 deletions
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c index ada2e1a141df..a85f447b8d00 100644 --- a/arch/x86/xen/enlighten.c +++ b/arch/x86/xen/enlighten.c | |||
@@ -1237,21 +1237,6 @@ static const struct pv_mmu_ops xen_mmu_ops __initdata = { | |||
1237 | .set_fixmap = xen_set_fixmap, | 1237 | .set_fixmap = xen_set_fixmap, |
1238 | }; | 1238 | }; |
1239 | 1239 | ||
1240 | #ifdef CONFIG_SMP | ||
1241 | static const struct smp_ops xen_smp_ops __initdata = { | ||
1242 | .smp_prepare_boot_cpu = xen_smp_prepare_boot_cpu, | ||
1243 | .smp_prepare_cpus = xen_smp_prepare_cpus, | ||
1244 | .cpu_up = xen_cpu_up, | ||
1245 | .smp_cpus_done = xen_smp_cpus_done, | ||
1246 | |||
1247 | .smp_send_stop = xen_smp_send_stop, | ||
1248 | .smp_send_reschedule = xen_smp_send_reschedule, | ||
1249 | |||
1250 | .send_call_func_ipi = xen_smp_send_call_function_ipi, | ||
1251 | .send_call_func_single_ipi = xen_smp_send_call_function_single_ipi, | ||
1252 | }; | ||
1253 | #endif /* CONFIG_SMP */ | ||
1254 | |||
1255 | static void xen_reboot(int reason) | 1240 | static void xen_reboot(int reason) |
1256 | { | 1241 | { |
1257 | struct sched_shutdown r = { .reason = reason }; | 1242 | struct sched_shutdown r = { .reason = reason }; |
@@ -1340,9 +1325,7 @@ asmlinkage void __init xen_start_kernel(void) | |||
1340 | have_vcpu_info_placement = 0; | 1325 | have_vcpu_info_placement = 0; |
1341 | #endif | 1326 | #endif |
1342 | 1327 | ||
1343 | #ifdef CONFIG_SMP | 1328 | xen_smp_init(); |
1344 | smp_ops = xen_smp_ops; | ||
1345 | #endif | ||
1346 | 1329 | ||
1347 | /* Get mfn list */ | 1330 | /* Get mfn list */ |
1348 | if (!xen_feature(XENFEAT_auto_translated_physmap)) | 1331 | if (!xen_feature(XENFEAT_auto_translated_physmap)) |
diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c index 233156f39b7f..91fae8ff756e 100644 --- a/arch/x86/xen/smp.c +++ b/arch/x86/xen/smp.c | |||
@@ -152,7 +152,7 @@ void __init xen_fill_possible_map(void) | |||
152 | } | 152 | } |
153 | } | 153 | } |
154 | 154 | ||
155 | void __init xen_smp_prepare_boot_cpu(void) | 155 | static void __init xen_smp_prepare_boot_cpu(void) |
156 | { | 156 | { |
157 | int cpu; | 157 | int cpu; |
158 | 158 | ||
@@ -176,7 +176,7 @@ void __init xen_smp_prepare_boot_cpu(void) | |||
176 | xen_setup_vcpu_info_placement(); | 176 | xen_setup_vcpu_info_placement(); |
177 | } | 177 | } |
178 | 178 | ||
179 | void __init xen_smp_prepare_cpus(unsigned int max_cpus) | 179 | static void __init xen_smp_prepare_cpus(unsigned int max_cpus) |
180 | { | 180 | { |
181 | unsigned cpu; | 181 | unsigned cpu; |
182 | 182 | ||
@@ -276,7 +276,7 @@ cpu_initialize_context(unsigned int cpu, struct task_struct *idle) | |||
276 | return 0; | 276 | return 0; |
277 | } | 277 | } |
278 | 278 | ||
279 | int __cpuinit xen_cpu_up(unsigned int cpu) | 279 | static int __cpuinit xen_cpu_up(unsigned int cpu) |
280 | { | 280 | { |
281 | struct task_struct *idle = idle_task(cpu); | 281 | struct task_struct *idle = idle_task(cpu); |
282 | int rc; | 282 | int rc; |
@@ -319,7 +319,7 @@ int __cpuinit xen_cpu_up(unsigned int cpu) | |||
319 | return 0; | 319 | return 0; |
320 | } | 320 | } |
321 | 321 | ||
322 | void xen_smp_cpus_done(unsigned int max_cpus) | 322 | static void xen_smp_cpus_done(unsigned int max_cpus) |
323 | { | 323 | { |
324 | } | 324 | } |
325 | 325 | ||
@@ -335,12 +335,12 @@ static void stop_self(void *v) | |||
335 | BUG(); | 335 | BUG(); |
336 | } | 336 | } |
337 | 337 | ||
338 | void xen_smp_send_stop(void) | 338 | static void xen_smp_send_stop(void) |
339 | { | 339 | { |
340 | smp_call_function(stop_self, NULL, 0); | 340 | smp_call_function(stop_self, NULL, 0); |
341 | } | 341 | } |
342 | 342 | ||
343 | void xen_smp_send_reschedule(int cpu) | 343 | static void xen_smp_send_reschedule(int cpu) |
344 | { | 344 | { |
345 | xen_send_IPI_one(cpu, XEN_RESCHEDULE_VECTOR); | 345 | xen_send_IPI_one(cpu, XEN_RESCHEDULE_VECTOR); |
346 | } | 346 | } |
@@ -355,7 +355,7 @@ static void xen_send_IPI_mask(cpumask_t mask, enum ipi_vector vector) | |||
355 | xen_send_IPI_one(cpu, vector); | 355 | xen_send_IPI_one(cpu, vector); |
356 | } | 356 | } |
357 | 357 | ||
358 | void xen_smp_send_call_function_ipi(cpumask_t mask) | 358 | static void xen_smp_send_call_function_ipi(cpumask_t mask) |
359 | { | 359 | { |
360 | int cpu; | 360 | int cpu; |
361 | 361 | ||
@@ -370,7 +370,7 @@ void xen_smp_send_call_function_ipi(cpumask_t mask) | |||
370 | } | 370 | } |
371 | } | 371 | } |
372 | 372 | ||
373 | void xen_smp_send_call_function_single_ipi(int cpu) | 373 | static void xen_smp_send_call_function_single_ipi(int cpu) |
374 | { | 374 | { |
375 | xen_send_IPI_mask(cpumask_of_cpu(cpu), XEN_CALL_FUNCTION_SINGLE_VECTOR); | 375 | xen_send_IPI_mask(cpumask_of_cpu(cpu), XEN_CALL_FUNCTION_SINGLE_VECTOR); |
376 | } | 376 | } |
@@ -394,3 +394,21 @@ static irqreturn_t xen_call_function_single_interrupt(int irq, void *dev_id) | |||
394 | 394 | ||
395 | return IRQ_HANDLED; | 395 | return IRQ_HANDLED; |
396 | } | 396 | } |
397 | |||
398 | static const struct smp_ops xen_smp_ops __initdata = { | ||
399 | .smp_prepare_boot_cpu = xen_smp_prepare_boot_cpu, | ||
400 | .smp_prepare_cpus = xen_smp_prepare_cpus, | ||
401 | .cpu_up = xen_cpu_up, | ||
402 | .smp_cpus_done = xen_smp_cpus_done, | ||
403 | |||
404 | .smp_send_stop = xen_smp_send_stop, | ||
405 | .smp_send_reschedule = xen_smp_send_reschedule, | ||
406 | |||
407 | .send_call_func_ipi = xen_smp_send_call_function_ipi, | ||
408 | .send_call_func_single_ipi = xen_smp_send_call_function_single_ipi, | ||
409 | }; | ||
410 | |||
411 | void __init xen_smp_init(void) | ||
412 | { | ||
413 | smp_ops = xen_smp_ops; | ||
414 | } | ||
diff --git a/arch/x86/xen/xen-ops.h b/arch/x86/xen/xen-ops.h index 77354d204257..81a779fc9b26 100644 --- a/arch/x86/xen/xen-ops.h +++ b/arch/x86/xen/xen-ops.h | |||
@@ -47,17 +47,14 @@ void xen_mark_init_mm_pinned(void); | |||
47 | void __init xen_fill_possible_map(void); | 47 | void __init xen_fill_possible_map(void); |
48 | 48 | ||
49 | void __init xen_setup_vcpu_info_placement(void); | 49 | void __init xen_setup_vcpu_info_placement(void); |
50 | void xen_smp_prepare_boot_cpu(void); | ||
51 | void xen_smp_prepare_cpus(unsigned int max_cpus); | ||
52 | int xen_cpu_up(unsigned int cpu); | ||
53 | void xen_smp_cpus_done(unsigned int max_cpus); | ||
54 | 50 | ||
55 | void xen_smp_send_stop(void); | 51 | #ifdef CONFIG_SMP |
56 | void xen_smp_send_reschedule(int cpu); | 52 | void xen_smp_init(void); |
57 | void xen_smp_send_call_function_ipi(cpumask_t mask); | ||
58 | void xen_smp_send_call_function_single_ipi(int cpu); | ||
59 | 53 | ||
60 | extern cpumask_t xen_cpu_initialized_map; | 54 | extern cpumask_t xen_cpu_initialized_map; |
55 | #else | ||
56 | static inline void xen_smp_init(void) {} | ||
57 | #endif | ||
61 | 58 | ||
62 | 59 | ||
63 | /* Declare an asm function, along with symbols needed to make it | 60 | /* Declare an asm function, along with symbols needed to make it |