> if (!err) { > + > +#ifdef CONFIG_HOTPLUG_CPU > + arch_send_call_function_single_ipi(cpu); > +#endif
Please just provide a stub version of arch_send_call_function_single_ipi for the !CONFIG_HOTPLUG_CPU case instead of the ifdef here. > +#ifdef CONFIG_HOTPLUG_CPU > +int can_hotplug_cpu(void) This should be a bool. > +{ > + if (cpu_ops.cpu_die) > + return 1; > + else > + return 0; > +} return cpu_ops.cpu_die != NULL; > +void default_cpu_die(unsigned int cpu) > +{ > + int sipval, sieval, scauseval; > + > + /* clear all pending flags */ > + csr_write(sip, 0); > + /* clear any previous scause data */ > + csr_write(scause, 0); > + > + do { > + wait_for_interrupt(); > + sipval = csr_read(sip); > + sieval = csr_read(sie); > + scauseval = csr_read(scause); > + /* only break if wfi returns for an enabled interrupt */ > + } while ((sipval & sieval) == 0 && > + scauseval != INTERRUPT_CAUSE_SOFTWARE); > + > + boot_sec_cpu(); > +} I suspect all of this except for the boot_sec_cpu() should go into a helper in irq.c. Also as-is this probably doesn't work as scauseval will have INTERRUPT_CAUSE_FLAG set, making the comparism never true.