xen/smp: Coalesce the free_irq calls in one function.
authorKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Tue, 4 Jun 2013 20:31:34 +0000 (16:31 -0400)
committerKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Mon, 10 Jun 2013 12:43:29 +0000 (08:43 -0400)
There are two functions that do a bunch of 'free_irq' on
the per_cpu IRQ. Instead of having duplicate code just move
it to one function.

This is just code movement.

Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
arch/x86/xen/smp.c

index fb44426fe931dcaee09a1b6918a2fe41785a1bc7..19fc9f39e9cc021d8b5a3157c392d33e3227ae4f 100644 (file)
@@ -98,6 +98,23 @@ static void __cpuinit cpu_bringup_and_idle(void)
        cpu_startup_entry(CPUHP_ONLINE);
 }
 
+static void xen_smp_intr_free(unsigned int cpu)
+{
+       if (per_cpu(xen_resched_irq, cpu) >= 0)
+               unbind_from_irqhandler(per_cpu(xen_resched_irq, cpu), NULL);
+       if (per_cpu(xen_callfunc_irq, cpu) >= 0)
+               unbind_from_irqhandler(per_cpu(xen_callfunc_irq, cpu), NULL);
+       if (per_cpu(xen_debug_irq, cpu) >= 0)
+               unbind_from_irqhandler(per_cpu(xen_debug_irq, cpu), NULL);
+       if (per_cpu(xen_callfuncsingle_irq, cpu) >= 0)
+               unbind_from_irqhandler(per_cpu(xen_callfuncsingle_irq, cpu),
+                                      NULL);
+       if (xen_hvm_domain())
+               return;
+
+       if (per_cpu(xen_irq_work, cpu) >= 0)
+               unbind_from_irqhandler(per_cpu(xen_irq_work, cpu), NULL);
+};
 static int xen_smp_intr_init(unsigned int cpu)
 {
        int rc;
@@ -165,21 +182,7 @@ static int xen_smp_intr_init(unsigned int cpu)
        return 0;
 
  fail:
-       if (per_cpu(xen_resched_irq, cpu) >= 0)
-               unbind_from_irqhandler(per_cpu(xen_resched_irq, cpu), NULL);
-       if (per_cpu(xen_callfunc_irq, cpu) >= 0)
-               unbind_from_irqhandler(per_cpu(xen_callfunc_irq, cpu), NULL);
-       if (per_cpu(xen_debug_irq, cpu) >= 0)
-               unbind_from_irqhandler(per_cpu(xen_debug_irq, cpu), NULL);
-       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);
-
+       xen_smp_intr_free(cpu);
        return rc;
 }
 
@@ -432,12 +435,7 @@ static void xen_cpu_die(unsigned int cpu)
                current->state = TASK_UNINTERRUPTIBLE;
                schedule_timeout(HZ/10);
        }
-       unbind_from_irqhandler(per_cpu(xen_resched_irq, cpu), NULL);
-       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);
-       if (!xen_hvm_domain())
-               unbind_from_irqhandler(per_cpu(xen_irq_work, cpu), NULL);
+       xen_smp_intr_free(cpu);
        xen_uninit_lock_cpu(cpu);
        xen_teardown_timer(cpu);
 }