From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
If dpm_suspend_start() fails, dpm_resume_end() must be called to
recover devices whose suspend callbacks have been called, but this
does not happen in the KEXEC_JUMP flow's error path due to a confused
goto target label.
Address this by using the correct target label in the goto statement in
question.
Fixes: 2965faa5e03d ("kexec: split kexec_load syscall from kexec core code")
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
---
kernel/kexec_core.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/kernel/kexec_core.c
+++ b/kernel/kexec_core.c
@@ -1080,7 +1080,7 @@
console_suspend_all();
error = dpm_suspend_start(PMSG_FREEZE);
if (error)
- goto Resume_console;
+ goto Resume_devices;
/*
* dpm_suspend_end() must be called after dpm_suspend_start()
* to complete the transition, like in the hibernation flows
On 07/10/25 at 03:10pm, Rafael J. Wysocki wrote: > From: Rafael J. Wysocki <rafael.j.wysocki@intel.com> > > If dpm_suspend_start() fails, dpm_resume_end() must be called to > recover devices whose suspend callbacks have been called, but this > does not happen in the KEXEC_JUMP flow's error path due to a confused > goto target label. > > Address this by using the correct target label in the goto statement in > question. Sounds very reasonable, thanks for the fix. Acked-by: Baoquan He <bhe@redhat.com> > > Fixes: 2965faa5e03d ("kexec: split kexec_load syscall from kexec core code") > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> > --- > kernel/kexec_core.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > --- a/kernel/kexec_core.c > +++ b/kernel/kexec_core.c > @@ -1080,7 +1080,7 @@ > console_suspend_all(); > error = dpm_suspend_start(PMSG_FREEZE); > if (error) > - goto Resume_console; > + goto Resume_devices; > /* > * dpm_suspend_end() must be called after dpm_suspend_start() > * to complete the transition, like in the hibernation flows > > >
On Fri, Jul 11, 2025 at 8:16 AM Baoquan He <bhe@redhat.com> wrote: > > On 07/10/25 at 03:10pm, Rafael J. Wysocki wrote: > > From: Rafael J. Wysocki <rafael.j.wysocki@intel.com> > > > > If dpm_suspend_start() fails, dpm_resume_end() must be called to > > recover devices whose suspend callbacks have been called, but this > > does not happen in the KEXEC_JUMP flow's error path due to a confused > > goto target label. > > > > Address this by using the correct target label in the goto statement in > > question. > > Sounds very reasonable, thanks for the fix. > > Acked-by: Baoquan He <bhe@redhat.com> Thanks! I've queued it up for 6.17 along with the [2/2]. > > > > Fixes: 2965faa5e03d ("kexec: split kexec_load syscall from kexec core code") > > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> > > --- > > kernel/kexec_core.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > --- a/kernel/kexec_core.c > > +++ b/kernel/kexec_core.c > > @@ -1080,7 +1080,7 @@ > > console_suspend_all(); > > error = dpm_suspend_start(PMSG_FREEZE); > > if (error) > > - goto Resume_console; > > + goto Resume_devices; > > /* > > * dpm_suspend_end() must be called after dpm_suspend_start() > > * to complete the transition, like in the hibernation flows > > > > > > >
© 2016 - 2025 Red Hat, Inc.