select HAVE_KPROBES
        select HAVE_KRETPROBES
        select HAVE_GENERIC_VDSO
+       select HOTPLUG_CORE_SYNC_DEAD if HOTPLUG_CPU
        select IRQ_DOMAIN
        select IRQ_FORCED_THREADING
        select KASAN_VMALLOC if KASAN
 
 
 extern int __cpu_disable(void);
 
-extern void __cpu_die(unsigned int cpu);
+static inline void __cpu_die(unsigned int cpu) { }
 extern void __noreturn cpu_die(void);
 extern void __noreturn cpu_die_early(void);
 
 
 }
 
 /*
- * called on the thread which is asking for a CPU to be shutdown -
- * waits until shutdown has completed, or it is timed out.
+ * Called on the thread which is asking for a CPU to be shutdown after the
+ * shutdown completed.
  */
-void __cpu_die(unsigned int cpu)
+void arch_cpuhp_cleanup_dead_cpu(unsigned int cpu)
 {
        int err;
 
-       if (!cpu_wait_death(cpu, 5)) {
-               pr_crit("CPU%u: cpu didn't die\n", cpu);
-               return;
-       }
        pr_debug("CPU%u: shutdown\n", cpu);
 
        /*
 
        local_daif_mask();
 
-       /* Tell __cpu_die() that this CPU is now safe to dispose of */
-       (void)cpu_report_death();
+       /* Tell cpuhp_bp_sync_dead() that this CPU is now safe to dispose of */
+       cpuhp_ap_report_dead();
 
        /*
         * Actually shutdown the CPU. This must never fail. The specific hotplug