On Sat, 2023-03-11 at 11:19 +0200, Thomas Gleixner wrote: > On Wed, Mar 08 2023 at 17:13, Usama Arif wrote: > > > > +int native_cpu_up(unsigned int cpu, struct task_struct *tidle) > > +{ > > + int ret; > > + > > + ret = do_cpu_up(cpu, tidle); > > + if (ret) > > + return ret; > > In case of error this leaves the warm reset vector dangling. > > > + ret = do_wait_cpu_initialized(cpu); > > + if (ret) > > + return ret; > > + > > + ret = do_wait_cpu_callin(cpu); > > + if (ret) > > + return ret; > > Same for these two error returns. > > Thanks, > > tglx On top of the idle_thread_get() one. Pushed to https://git.infradead.org/users/dwmw2/linux.git/shortlog/refs/heads/parallel-6.2-v15 diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c index 980cc2c4a84f..895395787afc 100644 --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c @@ -1347,25 +1347,23 @@ int native_cpu_up(unsigned int cpu, struct task_struct *tidle) if (!do_parallel_bringup) { ret = do_cpu_up(cpu, tidle); if (ret) - return ret; + goto out; } ret = do_wait_cpu_initialized(cpu); if (ret) - return ret; + goto out; ret = do_wait_cpu_callin(cpu); if (ret) - return ret; + goto out; ret = do_wait_cpu_online(cpu); - if (x86_platform.legacy.warm_reset) { - /* - * Cleanup possible dangling ends... - */ + out: + /* Cleanup possible dangling ends... */ + if (x86_platform.legacy.warm_reset) smpboot_restore_warm_reset_vector(); - } return ret; } @@ -1373,7 +1371,7 @@ int native_cpu_up(unsigned int cpu, struct task_struct *tidle) /* Bringup step one: Send INIT/SIPI to the target AP */ static int native_cpu_kick(unsigned int cpu) { - return do_cpu_up(cpu, idle_thread_get(cpu)); + return do_cpu_up(cpu, idle_thread_get(cpu, true)); } /**
Attachment:
smime.p7s
Description: S/MIME cryptographic signature