From 5ef7b67fd0d26056ebccaff4b0c6fb0f2486b09c Mon Sep 17 00:00:00 2001 From: Konrad Rzeszutek Wilk Date: Tue, 16 Apr 2013 14:37:04 -0400 Subject: [PATCH] --- yaml --- r: 362759 b: refs/heads/master c: 27d8b207f0dbc19b35e504f5e631f00461dba7f9 h: refs/heads/master i: 362757: c1885105d4edf120653a0c39dedaf6ba0ab8c9a9 362755: d5c5757d53cfc68b90baa51bf318f92ef1f7ca2f 362751: 9fc882b22e43edbf3a3109eb66bb7cae7d7aa466 v: v3 --- [refs] | 2 +- trunk/arch/x86/xen/smp.c | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 44cb88c2f8e7..af88247dd2cf 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 70dd4998cb85f0ecd6ac892cc7232abefa432efb +refs/heads/master: 27d8b207f0dbc19b35e504f5e631f00461dba7f9 diff --git a/trunk/arch/x86/xen/smp.c b/trunk/arch/x86/xen/smp.c index 22c800af180b..415694cc8584 100644 --- a/trunk/arch/x86/xen/smp.c +++ b/trunk/arch/x86/xen/smp.c @@ -144,6 +144,13 @@ static int xen_smp_intr_init(unsigned int cpu) goto fail; per_cpu(xen_callfuncsingle_irq, cpu) = rc; + /* + * The IRQ worker on PVHVM goes through the native path and uses the + * IPI mechanism. + */ + if (xen_hvm_domain()) + return 0; + callfunc_name = kasprintf(GFP_KERNEL, "irqwork%d", cpu); rc = bind_ipi_to_irqhandler(XEN_IRQ_WORK_VECTOR, cpu, @@ -167,6 +174,9 @@ static int xen_smp_intr_init(unsigned int cpu) if (per_cpu(xen_callfuncsingle_irq, cpu) >= 0) unbind_from_irqhandler(per_cpu(xen_callfuncsingle_irq, cpu), NULL); + if (xen_hvm_domain()) + return rc; + if (per_cpu(xen_irq_work, cpu) >= 0) unbind_from_irqhandler(per_cpu(xen_irq_work, cpu), NULL); @@ -661,7 +671,8 @@ static void xen_hvm_cpu_die(unsigned int cpu) unbind_from_irqhandler(per_cpu(xen_callfunc_irq, cpu), NULL); unbind_from_irqhandler(per_cpu(xen_debug_irq, cpu), NULL); unbind_from_irqhandler(per_cpu(xen_callfuncsingle_irq, cpu), NULL); - unbind_from_irqhandler(per_cpu(xen_irq_work, cpu), NULL); + if (!xen_hvm_domain()) + unbind_from_irqhandler(per_cpu(xen_irq_work, cpu), NULL); xen_uninit_lock_cpu(cpu); xen_teardown_timer(cpu); native_cpu_die(cpu);