diff options
author | Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> | 2013-04-16 14:37:04 -0400 |
---|---|---|
committer | Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> | 2013-04-16 16:05:17 -0400 |
commit | 27d8b207f0dbc19b35e504f5e631f00461dba7f9 (patch) | |
tree | b5578f95d6443c222046dd00f10598d4aa2b9909 /arch/x86/xen/smp.c | |
parent | 70dd4998cb85f0ecd6ac892cc7232abefa432efb (diff) |
xen/smp/pvhvm: Don't initialize IRQ_WORKER as we are using the native one.
There is no need to use the PV version of the IRQ_WORKER mechanism
as under PVHVM we are using the native version. The native
version is using the SMP API.
They just sit around unused:
69: 0 0 xen-percpu-ipi irqwork0
83: 0 0 xen-percpu-ipi irqwork1
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Diffstat (limited to 'arch/x86/xen/smp.c')
-rw-r--r-- | arch/x86/xen/smp.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c index 22c800af180b..415694cc8584 100644 --- a/arch/x86/xen/smp.c +++ b/arch/x86/xen/smp.c | |||
@@ -144,6 +144,13 @@ static int xen_smp_intr_init(unsigned int cpu) | |||
144 | goto fail; | 144 | goto fail; |
145 | per_cpu(xen_callfuncsingle_irq, cpu) = rc; | 145 | per_cpu(xen_callfuncsingle_irq, cpu) = rc; |
146 | 146 | ||
147 | /* | ||
148 | * The IRQ worker on PVHVM goes through the native path and uses the | ||
149 | * IPI mechanism. | ||
150 | */ | ||
151 | if (xen_hvm_domain()) | ||
152 | return 0; | ||
153 | |||
147 | callfunc_name = kasprintf(GFP_KERNEL, "irqwork%d", cpu); | 154 | callfunc_name = kasprintf(GFP_KERNEL, "irqwork%d", cpu); |
148 | rc = bind_ipi_to_irqhandler(XEN_IRQ_WORK_VECTOR, | 155 | rc = bind_ipi_to_irqhandler(XEN_IRQ_WORK_VECTOR, |
149 | cpu, | 156 | cpu, |
@@ -167,6 +174,9 @@ static int xen_smp_intr_init(unsigned int cpu) | |||
167 | if (per_cpu(xen_callfuncsingle_irq, cpu) >= 0) | 174 | if (per_cpu(xen_callfuncsingle_irq, cpu) >= 0) |
168 | unbind_from_irqhandler(per_cpu(xen_callfuncsingle_irq, cpu), | 175 | unbind_from_irqhandler(per_cpu(xen_callfuncsingle_irq, cpu), |
169 | NULL); | 176 | NULL); |
177 | if (xen_hvm_domain()) | ||
178 | return rc; | ||
179 | |||
170 | if (per_cpu(xen_irq_work, cpu) >= 0) | 180 | if (per_cpu(xen_irq_work, cpu) >= 0) |
171 | unbind_from_irqhandler(per_cpu(xen_irq_work, cpu), NULL); | 181 | unbind_from_irqhandler(per_cpu(xen_irq_work, cpu), NULL); |
172 | 182 | ||
@@ -661,7 +671,8 @@ static void xen_hvm_cpu_die(unsigned int cpu) | |||
661 | unbind_from_irqhandler(per_cpu(xen_callfunc_irq, cpu), NULL); | 671 | unbind_from_irqhandler(per_cpu(xen_callfunc_irq, cpu), NULL); |
662 | unbind_from_irqhandler(per_cpu(xen_debug_irq, cpu), NULL); | 672 | unbind_from_irqhandler(per_cpu(xen_debug_irq, cpu), NULL); |
663 | unbind_from_irqhandler(per_cpu(xen_callfuncsingle_irq, cpu), NULL); | 673 | unbind_from_irqhandler(per_cpu(xen_callfuncsingle_irq, cpu), NULL); |
664 | unbind_from_irqhandler(per_cpu(xen_irq_work, cpu), NULL); | 674 | if (!xen_hvm_domain()) |
675 | unbind_from_irqhandler(per_cpu(xen_irq_work, cpu), NULL); | ||
665 | xen_uninit_lock_cpu(cpu); | 676 | xen_uninit_lock_cpu(cpu); |
666 | xen_teardown_timer(cpu); | 677 | xen_teardown_timer(cpu); |
667 | native_cpu_die(cpu); | 678 | native_cpu_die(cpu); |