From: Dexuan Cui Date: Fri, 24 Apr 2020 03:40:16 +0000 (-0700) Subject: PM: hibernate: Freeze kernel threads in software_resume() X-Git-Tag: v4.9.222~10 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9199193d8dc094127b36ce679bfef463fc2e81ba;p=platform%2Fkernel%2Flinux-amlogic.git PM: hibernate: Freeze kernel threads in software_resume() commit 2351f8d295ed63393190e39c2f7c1fee1a80578f upstream. Currently the kernel threads are not frozen in software_resume(), so between dpm_suspend_start(PMSG_QUIESCE) and resume_target_kernel(), system_freezable_power_efficient_wq can still try to submit SCSI commands and this can cause a panic since the low level SCSI driver (e.g. hv_storvsc) has quiesced the SCSI adapter and can not accept any SCSI commands: https://lkml.org/lkml/2020/4/10/47 At first I posted a fix (https://lkml.org/lkml/2020/4/21/1318) trying to resolve the issue from hv_storvsc, but with the help of Bart Van Assche, I realized it's better to fix software_resume(), since this looks like a generic issue, not only pertaining to SCSI. Cc: All applicable Signed-off-by: Dexuan Cui Signed-off-by: Rafael J. Wysocki Signed-off-by: Greg Kroah-Hartman --- diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c index 81695a492ebe..3c775d6b7317 100644 --- a/kernel/power/hibernate.c +++ b/kernel/power/hibernate.c @@ -892,6 +892,13 @@ static int software_resume(void) error = freeze_processes(); if (error) goto Close_Finish; + + error = freeze_kernel_threads(); + if (error) { + thaw_processes(); + goto Close_Finish; + } + error = load_image_and_restore(); thaw_processes(); Finish: