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;
        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;
 }
 
                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);
 }