From nobody Sun Dec 14 12:16:12 2025 Received: from mailgw.kylinos.cn (mailgw.kylinos.cn [124.126.103.232]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 368F629CE6; Thu, 22 May 2025 02:35:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=124.126.103.232 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747881332; cv=none; b=qcij7MzBPamj+mwxRV/yuqDK5owF+ab7RutwFM/vcHzcmiwZqrj6a8eVW6k2741MdceiEEmue8QEi4EYWqxfFGT+/COOxap3uiwMU9ECsE8v5q801no9M2BScSdnjSde0K8PVX/5IsswiYuARKMLx789vhnnhKhxxEKVKVIvMOQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747881332; c=relaxed/simple; bh=O5WlLJx2+c4wwI4hD4aEpExVS165ZV3Rb0A7jWj6nqc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=h1w41cFwvOfx7lhvVDal44mHEvpEsYf1nqZI7mN2XgzmTUcq81KSGub68Ui6SqJWL5AacC7oNLMxETSxS8OYXwArcgOubrbDSiT4eLcAHWkDgPDzqkYYgew/waSn4cmgzV3GokiV2oYWVYhDRNTPDv4lW0yWgw9HIpVil2vPu0g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=kylinos.cn; spf=pass smtp.mailfrom=kylinos.cn; arc=none smtp.client-ip=124.126.103.232 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=kylinos.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=kylinos.cn X-UUID: 687d074e36b511f0b29709d653e92f7d-20250522 X-CID-P-RULE: Release_Ham X-CID-O-INFO: VERSION:1.1.45,REQID:7d0dadb9-b786-4c96-a233-e70fc7d489b2,IP:0,U RL:0,TC:0,Content:0,EDM:0,RT:0,SF:0,FILE:0,BULK:0,RULE:Release_Ham,ACTION: release,TS:0 X-CID-META: VersionHash:6493067,CLOUDID:162eb6d8f44e73553c797785cbcf1e9c,BulkI D:nil,BulkQuantity:0,Recheck:0,SF:81|82|102,TC:nil,Content:0|50,EDM:-3,IP: nil,URL:0,File:nil,RT:nil,Bulk:nil,QS:nil,BEC:nil,COL:0,OSI:0,OSA:0,AV:0,L ES:1,SPR:NO,DKR:0,DKP:0,BRR:0,BRE:0,ARC:0 X-CID-BVR: 0 X-CID-BAS: 0,_,0,_ X-CID-FACTOR: TF_CID_SPAM_SNR X-UUID: 687d074e36b511f0b29709d653e92f7d-20250522 Received: from mail.kylinos.cn [(10.44.16.175)] by mailgw.kylinos.cn (envelope-from ) (Generic MTA) with ESMTP id 261166824; Thu, 22 May 2025 10:35:21 +0800 Received: from mail.kylinos.cn (localhost [127.0.0.1]) by mail.kylinos.cn (NSMail) with SMTP id 2A346E00351B; Thu, 22 May 2025 10:17:05 +0800 (CST) X-ns-mid: postfix-682E8920-922448443 Received: from localhost.localdomain (unknown [172.25.120.24]) by mail.kylinos.cn (NSMail) with ESMTPA id D27B7E003519; Thu, 22 May 2025 10:17:01 +0800 (CST) From: Zihuan Zhang To: rafael@kernel.org, len.brown@intel.com, pavel@kernel.org Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, akpm@linux-foundation.org, tzungbi@kernel.org, a.fatoum@pengutronix.de, jani.nikula@intel.com, joel.granados@kernel.org, paulmck@kernel.org, zhangguopeng@kylinos.cn, linux@weissschuh.net, Zihuan Zhang Subject: [PATCH v2 1/3] PM / Sleep: Replace mutex_[un]lock(&system_transition_mutex) with [un]lock_system_sleep() Date: Thu, 22 May 2025 10:16:47 +0800 Message-Id: <20250522021649.55228-2-zhangzihuan@kylinos.cn> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20250522021649.55228-1-zhangzihuan@kylinos.cn> References: <20250522021649.55228-1-zhangzihuan@kylinos.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" These function currently calls mutex_lock(&system_transition_mutex) and mutex_unlock() directly to protect the resume-from-disk operation from concurrent suspend/resume transitions. However, this is inconsistent with the rest of the power management code, where lock_system_sleep() and unlock_system_sleep() are used to wrap suspend/hibernate transitions. These wrapper functions not only acquire system_transition_mutex, but also set PF_NOFREEZE for the calling thread, ensuring that it is not subject to freezing during suspend. This change replaces the raw mutex_lock()/unlock() with the standard lock_system_sleep()/unlock_system_sleep() wrapper pair, bringing it in line with the locking pattern used by hibernate(), pm_suspend(), and other similar entry points. Benefits of this change: - Ensures the thread performing software resume is marked PF_NOFREEZE, which is important during early resume paths where freezing is active. - Improves code clarity by making the locking intent more explicit. - Unifies suspend/hibernate locking style across the kernel power subsystem. - Reduces the risk of future maintenance issues due to inconsistent locking. No functional change is expected at runtime, since the lock order and coverage remain the same. This is a straightforward cleanup and consistency fix. Signed-off-by: Zihuan Zhang --- kernel/power/hibernate.c | 5 +++-- kernel/reboot.c | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c index 23c0f4e6cb2f..cfaa92f24857 100644 --- a/kernel/power/hibernate.c +++ b/kernel/power/hibernate.c @@ -988,6 +988,7 @@ static int __init find_resume_device(void) =20 static int software_resume(void) { + unsigned int sleep_flags; int error; =20 pm_pr_dbg("Hibernation image partition %d:%d present\n", @@ -995,7 +996,7 @@ static int software_resume(void) =20 pm_pr_dbg("Looking for hibernation image.\n"); =20 - mutex_lock(&system_transition_mutex); + sleep_flags =3D lock_system_sleep(); error =3D swsusp_check(true); if (error) goto Unlock; @@ -1050,7 +1051,7 @@ static int software_resume(void) hibernate_release(); /* For success case, the suspend path will release the lock */ Unlock: - mutex_unlock(&system_transition_mutex); + unlock_system_sleep(sleep_flags); pm_pr_dbg("Hibernation image not present or could not be loaded.\n"); return error; Close_Finish: diff --git a/kernel/reboot.c b/kernel/reboot.c index ec087827c85c..68ac7e377efb 100644 --- a/kernel/reboot.c +++ b/kernel/reboot.c @@ -729,6 +729,7 @@ SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsig= ned int, cmd, void __user *, arg) { struct pid_namespace *pid_ns =3D task_active_pid_ns(current); + unsigned int sleep_flags; char buffer[256]; int ret =3D 0; =20 @@ -761,7 +762,7 @@ SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsig= ned int, cmd, cmd =3D LINUX_REBOOT_CMD_HALT; } =20 - mutex_lock(&system_transition_mutex); + sleep_flags =3D lock_system_sleep(); switch (cmd) { case LINUX_REBOOT_CMD_RESTART: kernel_restart(NULL); @@ -811,7 +812,7 @@ SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsig= ned int, cmd, ret =3D -EINVAL; break; } - mutex_unlock(&system_transition_mutex); + unlock_system_sleep(sleep_flags); return ret; } =20 --=20 2.25.1 From nobody Sun Dec 14 12:16:12 2025 Received: from mailgw.kylinos.cn (mailgw.kylinos.cn [124.126.103.232]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 879FC1172A; Thu, 22 May 2025 02:35:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=124.126.103.232 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747881330; cv=none; b=uO7bS83gk4dihWMkk1MRYMut9aUd4vZpHU//8EZSktYML9IXrtUGjQIwn3azSEyZy854nRX8uOdxsnutVeAhvu5i8Wzvb4pbPNQPyX359OYGIEFIMOdr2MzG1pIS2D+rrel+b1YgNDvnBcP/wGliDQHiyEovrW1tbdVJ6uS7a0c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747881330; c=relaxed/simple; bh=ttUHZ2SO5aE6GFFXpMt/n/cJfl6ftCJJVoxXZ5mH3ng=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=iJWoF02Kz2wejHLiCzEJ90OlZFf8sQ377OWmJitRzXUYysueas2ZDcT+7hn5q2hLjg3i1WImaRxK1LLnYl1iA3Zi+Mg1tJtMypoA9UWi8rlkBR9BOLN0/dVbCBPxvn0PDj56KLEPmDgy2S2zFzgJqSrkvPEtQgpCI6rsZHbQKdM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=kylinos.cn; spf=pass smtp.mailfrom=kylinos.cn; arc=none smtp.client-ip=124.126.103.232 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=kylinos.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=kylinos.cn X-UUID: 68ae149236b511f0b29709d653e92f7d-20250522 X-CID-P-RULE: Release_Ham X-CID-O-INFO: VERSION:1.1.45,REQID:615e2428-35b8-4b14-9f8b-321c3f46725e,IP:0,U RL:0,TC:0,Content:-25,EDM:0,RT:0,SF:0,FILE:0,BULK:0,RULE:Release_Ham,ACTIO N:release,TS:-25 X-CID-META: VersionHash:6493067,CLOUDID:6ce6c8b6e70f0946646e63f75385181d,BulkI D:nil,BulkQuantity:0,Recheck:0,SF:81|82|102,TC:nil,Content:0|50,EDM:-3,IP: nil,URL:0,File:nil,RT:nil,Bulk:nil,QS:nil,BEC:nil,COL:0,OSI:0,OSA:0,AV:0,L ES:1,SPR:NO,DKR:0,DKP:0,BRR:0,BRE:0,ARC:0 X-CID-BVR: 0 X-CID-BAS: 0,_,0,_ X-CID-FACTOR: TF_CID_SPAM_SNR X-UUID: 68ae149236b511f0b29709d653e92f7d-20250522 Received: from mail.kylinos.cn [(10.44.16.175)] by mailgw.kylinos.cn (envelope-from ) (Generic MTA) with ESMTP id 2001903690; Thu, 22 May 2025 10:35:22 +0800 Received: from mail.kylinos.cn (localhost [127.0.0.1]) by mail.kylinos.cn (NSMail) with SMTP id 3AC23E003519; Thu, 22 May 2025 10:17:07 +0800 (CST) X-ns-mid: postfix-682E8923-87613444 Received: from localhost.localdomain (unknown [172.25.120.24]) by mail.kylinos.cn (NSMail) with ESMTPA id EAE2BE003519; Thu, 22 May 2025 10:17:05 +0800 (CST) From: Zihuan Zhang To: rafael@kernel.org, len.brown@intel.com, pavel@kernel.org Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, akpm@linux-foundation.org, tzungbi@kernel.org, a.fatoum@pengutronix.de, jani.nikula@intel.com, joel.granados@kernel.org, paulmck@kernel.org, zhangguopeng@kylinos.cn, linux@weissschuh.net, Zihuan Zhang Subject: [PATCH v2 2/3] PM / Sleep: Introduce try_lock_system_sleep() Date: Thu, 22 May 2025 10:16:48 +0800 Message-Id: <20250522021649.55228-3-zhangzihuan@kylinos.cn> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20250522021649.55228-1-zhangzihuan@kylinos.cn> References: <20250522021649.55228-1-zhangzihuan@kylinos.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The suspend subsystem uses system_transition_mutex to serialize suspend and hibernate transitions. The existing lock_system_sleep() wrapper both acquires the mutex and sets PF_NOFREEZE on the current task to avoid it being frozen during the suspend process. However, in some places such as enter_state(), mutex_trylock() is used instead. This path currently lacks PF_NOFREEZE protection. This patch introduces a new wrapper: try_lock_system_sleep() It sets PF_NOFREEZE and then performs mutex_trylock(), mirroring the existing lock_system_sleep() implementation. This improves consistency and enables future cleanup of raw trylock calls. Signed-off-by: Zihuan Zhang --- include/linux/suspend.h | 2 ++ kernel/power/main.c | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/include/linux/suspend.h b/include/linux/suspend.h index da6ebca3ff77..6c9e8fe0c446 100644 --- a/include/linux/suspend.h +++ b/include/linux/suspend.h @@ -468,6 +468,7 @@ extern void pm_wakep_autosleep_enabled(bool set); extern void pm_print_active_wakeup_sources(void); =20 extern unsigned int lock_system_sleep(void); +extern unsigned int try_lock_system_sleep(void); extern void unlock_system_sleep(unsigned int); =20 #else /* !CONFIG_PM_SLEEP */ @@ -496,6 +497,7 @@ static inline void pm_wakeup_clear(bool reset) {} static inline void pm_system_irq_wakeup(unsigned int irq_number) {} =20 static inline unsigned int lock_system_sleep(void) { return 0; } +static inline unsigned int try_lock_system_sleep(void) { return 0; } static inline void unlock_system_sleep(unsigned int flags) {} =20 #endif /* !CONFIG_PM_SLEEP */ diff --git a/kernel/power/main.c b/kernel/power/main.c index 6254814d4817..0d3f94f62664 100644 --- a/kernel/power/main.c +++ b/kernel/power/main.c @@ -58,6 +58,20 @@ unsigned int lock_system_sleep(void) } EXPORT_SYMBOL_GPL(lock_system_sleep); =20 +unsigned int try_lock_system_sleep(void) +{ + unsigned int flags =3D current->flags; + current->flags |=3D PF_NOFREEZE; + + if (!mutex_trylock(&system_transition_mutex)) { + current->flags =3D flags; + return 0; + } + + return flags; +} +EXPORT_SYMBOL_GPL(try_lock_system_sleep); + void unlock_system_sleep(unsigned int flags) { if (!(flags & PF_NOFREEZE)) --=20 2.25.1 From nobody Sun Dec 14 12:16:12 2025 Received: from mailgw.kylinos.cn (mailgw.kylinos.cn [124.126.103.232]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 643572CCA5; Thu, 22 May 2025 02:35:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=124.126.103.232 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747881331; cv=none; b=ATq3xno2NM8ElC9Vgi5szqEtxPOMl1sMGRupk0ARnlL+sIEFPOhCVMyH7EvpvcNnFK84gITJTFNPHtrE/T4BWj0a5RJNocE5QcTNbpcx2ixbpUm8ytB1vEPnWeQjKMjCuudFZ9fbznuhsH1r0pSd/gtBoTzrnUt/dX7/ptHPJHw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747881331; c=relaxed/simple; bh=X8/nxAlnKfmIilukc3uLUJEJN3++P9YxcsunTFAgtag=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=BC00shq5IZZPMLjvEm1yzJi/We6LoOe9GjSL6sOKnNrPNTM/F9FNvXNAW9579mG43QoL1kli5yeraOhvAOytg7dZYkCDE/On7YZUtRbHW+zQVj57aVjb84Z2VWXbh4NJ+IUao154WO9iOvBLyDEQ7hipPyTNHWABdbH1ujvQsyM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=kylinos.cn; spf=pass smtp.mailfrom=kylinos.cn; arc=none smtp.client-ip=124.126.103.232 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=kylinos.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=kylinos.cn X-UUID: 6893bc6e36b511f0b29709d653e92f7d-20250522 X-CID-P-RULE: Release_Ham X-CID-O-INFO: VERSION:1.1.45,REQID:4803fc01-066d-448a-8340-36b1d7bdff29,IP:0,U RL:0,TC:0,Content:-25,EDM:-25,RT:0,SF:0,FILE:0,BULK:0,RULE:Release_Ham,ACT ION:release,TS:-50 X-CID-META: VersionHash:6493067,CLOUDID:20bd7ec11e7dd67939d0da93bdc0c57b,BulkI D:nil,BulkQuantity:0,Recheck:0,SF:81|82|102,TC:nil,Content:0|50,EDM:1,IP:n il,URL:0,File:nil,RT:nil,Bulk:nil,QS:nil,BEC:nil,COL:0,OSI:0,OSA:0,AV:0,LE S:1,SPR:NO,DKR:0,DKP:0,BRR:0,BRE:0,ARC:0 X-CID-BVR: 0 X-CID-BAS: 0,_,0,_ X-CID-FACTOR: TF_CID_SPAM_SNR X-UUID: 6893bc6e36b511f0b29709d653e92f7d-20250522 Received: from mail.kylinos.cn [(10.44.16.175)] by mailgw.kylinos.cn (envelope-from ) (Generic MTA) with ESMTP id 1973197324; Thu, 22 May 2025 10:35:21 +0800 Received: from mail.kylinos.cn (localhost [127.0.0.1]) by mail.kylinos.cn (NSMail) with SMTP id 3B0C6E00351D; Thu, 22 May 2025 10:17:09 +0800 (CST) X-ns-mid: postfix-682E8925-85700445 Received: from localhost.localdomain (unknown [172.25.120.24]) by mail.kylinos.cn (NSMail) with ESMTPA id 17B3CE00351C; Thu, 22 May 2025 10:17:08 +0800 (CST) From: Zihuan Zhang To: rafael@kernel.org, len.brown@intel.com, pavel@kernel.org Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, akpm@linux-foundation.org, tzungbi@kernel.org, a.fatoum@pengutronix.de, jani.nikula@intel.com, joel.granados@kernel.org, paulmck@kernel.org, zhangguopeng@kylinos.cn, linux@weissschuh.net, Zihuan Zhang Subject: [PATCH v2 3/3] PM / Sleep: Replace mutex_trylock(&system_transition_mutex) with try_lock_system_sleep() Date: Thu, 22 May 2025 10:16:49 +0800 Message-Id: <20250522021649.55228-4-zhangzihuan@kylinos.cn> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20250522021649.55228-1-zhangzihuan@kylinos.cn> References: <20250522021649.55228-1-zhangzihuan@kylinos.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This patch replaces the remaining instances of mutex_trylock(&system_transi= tion_mutex) that semantically intend to *try* acquiring the lock with the newly introdu= ced try_lock_system_sleep(), which provides a clearer abstraction and avoids di= rect mutex operations in higher-level PM logic. This improves code readability, keeps synchronization logic consistent acro= ss all system sleep paths, and helps prepare for future enhancements or lock substitutions (e.g., lockdep annotations or switching to a different lock primitive). Signed-off-by: Zihuan Zhang --- kernel/power/hibernate.c | 6 ++++-- kernel/power/suspend.c | 7 +++++-- kernel/power/user.c | 6 ++++-- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c index cfaa92f24857..c06af4008183 100644 --- a/kernel/power/hibernate.c +++ b/kernel/power/hibernate.c @@ -1448,9 +1448,11 @@ static const char * const comp_alg_enabled[] =3D { static int hibernate_compressor_param_set(const char *compressor, const struct kernel_param *kp) { + unsigned int sleep_flags; int index, ret; =20 - if (!mutex_trylock(&system_transition_mutex)) + sleep_flags =3D try_lock_system_sleep(); + if (!sleep_flags) return -EBUSY; =20 index =3D sysfs_match_string(comp_alg_enabled, compressor); @@ -1463,7 +1465,7 @@ static int hibernate_compressor_param_set(const char = *compressor, ret =3D index; } =20 - mutex_unlock(&system_transition_mutex); + unlock_system_sleep(sleep_flags); =20 if (ret) pr_debug("Cannot set specified compressor %s\n", diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c index 8eaec4ab121d..7d39f1ae9711 100644 --- a/kernel/power/suspend.c +++ b/kernel/power/suspend.c @@ -564,6 +564,7 @@ static void suspend_finish(void) */ static int enter_state(suspend_state_t state) { + unsigned int sleep_flags; int error; =20 trace_suspend_resume(TPS("suspend_enter"), state, true); @@ -577,7 +578,9 @@ static int enter_state(suspend_state_t state) } else if (!valid_state(state)) { return -EINVAL; } - if (!mutex_trylock(&system_transition_mutex)) + + sleep_flags =3D try_lock_system_sleep(); + if (!sleep_flags) return -EBUSY; =20 if (state =3D=3D PM_SUSPEND_TO_IDLE) @@ -609,7 +612,7 @@ static int enter_state(suspend_state_t state) pm_pr_dbg("Finishing wakeup.\n"); suspend_finish(); Unlock: - mutex_unlock(&system_transition_mutex); + unlock_system_sleep(sleep_flags); return error; } =20 diff --git a/kernel/power/user.c b/kernel/power/user.c index 3f9e3efb9f6e..a41fb48b3f96 100644 --- a/kernel/power/user.c +++ b/kernel/power/user.c @@ -249,6 +249,7 @@ static int snapshot_set_swap_area(struct snapshot_data = *data, static long snapshot_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) { + unsigned int sleep_flags; int error =3D 0; struct snapshot_data *data; loff_t size; @@ -266,7 +267,8 @@ static long snapshot_ioctl(struct file *filp, unsigned = int cmd, if (!capable(CAP_SYS_ADMIN)) return -EPERM; =20 - if (!mutex_trylock(&system_transition_mutex)) + sleep_flags =3D try_lock_system_sleep(); + if (!sleep_flags) return -EBUSY; =20 lock_device_hotplug(); @@ -417,7 +419,7 @@ static long snapshot_ioctl(struct file *filp, unsigned = int cmd, } =20 unlock_device_hotplug(); - mutex_unlock(&system_transition_mutex); + unlock_system_sleep(sleep_flags); =20 return error; } --=20 2.25.1