diff options
-rw-r--r-- | arch/sparc/include/asm/setup.h | 5 | ||||
-rw-r--r-- | arch/sparc/kernel/smp_64.c | 6 | ||||
-rw-r--r-- | drivers/tty/serial/sunhv.c | 6 |
3 files changed, 15 insertions, 2 deletions
diff --git a/arch/sparc/include/asm/setup.h b/arch/sparc/include/asm/setup.h index 29d64b1758ed..478bf6bb4598 100644 --- a/arch/sparc/include/asm/setup.h +++ b/arch/sparc/include/asm/setup.h | |||
@@ -59,8 +59,11 @@ extern atomic_t dcpage_flushes; | |||
59 | extern atomic_t dcpage_flushes_xcall; | 59 | extern atomic_t dcpage_flushes_xcall; |
60 | 60 | ||
61 | extern int sysctl_tsb_ratio; | 61 | extern int sysctl_tsb_ratio; |
62 | #endif | ||
63 | 62 | ||
63 | #ifdef CONFIG_SERIAL_SUNHV | ||
64 | void sunhv_migrate_hvcons_irq(int cpu); | ||
65 | #endif | ||
66 | #endif | ||
64 | void sun_do_break(void); | 67 | void sun_do_break(void); |
65 | extern int stop_a_enabled; | 68 | extern int stop_a_enabled; |
66 | extern int scons_pwroff; | 69 | extern int scons_pwroff; |
diff --git a/arch/sparc/kernel/smp_64.c b/arch/sparc/kernel/smp_64.c index 712bf1b7f630..90a02cb64e20 100644 --- a/arch/sparc/kernel/smp_64.c +++ b/arch/sparc/kernel/smp_64.c | |||
@@ -1452,8 +1452,12 @@ void smp_send_stop(void) | |||
1452 | int cpu; | 1452 | int cpu; |
1453 | 1453 | ||
1454 | if (tlb_type == hypervisor) { | 1454 | if (tlb_type == hypervisor) { |
1455 | int this_cpu = smp_processor_id(); | ||
1456 | #ifdef CONFIG_SERIAL_SUNHV | ||
1457 | sunhv_migrate_hvcons_irq(this_cpu); | ||
1458 | #endif | ||
1455 | for_each_online_cpu(cpu) { | 1459 | for_each_online_cpu(cpu) { |
1456 | if (cpu == smp_processor_id()) | 1460 | if (cpu == this_cpu) |
1457 | continue; | 1461 | continue; |
1458 | 1462 | ||
1459 | set_cpu_online(cpu, false); | 1463 | set_cpu_online(cpu, false); |
diff --git a/drivers/tty/serial/sunhv.c b/drivers/tty/serial/sunhv.c index 73abd89c0108..c5ebdc8bed6a 100644 --- a/drivers/tty/serial/sunhv.c +++ b/drivers/tty/serial/sunhv.c | |||
@@ -398,6 +398,12 @@ static struct uart_driver sunhv_reg = { | |||
398 | 398 | ||
399 | static struct uart_port *sunhv_port; | 399 | static struct uart_port *sunhv_port; |
400 | 400 | ||
401 | void sunhv_migrate_hvcons_irq(int cpu) | ||
402 | { | ||
403 | /* Migrate hvcons irq to param cpu */ | ||
404 | irq_force_affinity(sunhv_port->irq, cpumask_of(cpu)); | ||
405 | } | ||
406 | |||
401 | /* Copy 's' into the con_write_page, decoding "\n" into | 407 | /* Copy 's' into the con_write_page, decoding "\n" into |
402 | * "\r\n" along the way. We have to return two lengths | 408 | * "\r\n" along the way. We have to return two lengths |
403 | * because the caller needs to know how much to advance | 409 | * because the caller needs to know how much to advance |