aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/sparc/include/asm/setup.h5
-rw-r--r--arch/sparc/kernel/smp_64.c6
-rw-r--r--drivers/tty/serial/sunhv.c6
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;
59extern atomic_t dcpage_flushes_xcall; 59extern atomic_t dcpage_flushes_xcall;
60 60
61extern int sysctl_tsb_ratio; 61extern int sysctl_tsb_ratio;
62#endif
63 62
63#ifdef CONFIG_SERIAL_SUNHV
64void sunhv_migrate_hvcons_irq(int cpu);
65#endif
66#endif
64void sun_do_break(void); 67void sun_do_break(void);
65extern int stop_a_enabled; 68extern int stop_a_enabled;
66extern int scons_pwroff; 69extern 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
399static struct uart_port *sunhv_port; 399static struct uart_port *sunhv_port;
400 400
401void 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