From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtpbgsg2.qq.com (smtpbgsg2.qq.com [54.254.200.128]) (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 6473C3C3BE5 for ; Wed, 29 Jul 2026 07:12:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=54.254.200.128 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785309168; cv=none; b=CgC1yZPRWpijsla3EqwY0t50xfGnTaT9Zr6UtnThv7CHBJRmK9kzij57q75gIv1GYrLTKl6A+TlbOClTj+RKmHJ+5UDxwBss8YZpkTEZNR6q1sl1rC+cZxaIWvGx4BNWN4B/9zESALZTBV0qsANY7Swm7NiIRXYLrq4ejkrmA+Q= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785309168; c=relaxed/simple; bh=AOBiTM10JHwNfkKAx0h0IIvMX6WxTXO2sDpbEzSHcAI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Szr9iIkoStfwt7qt0jsgTwDE3ybb45h1x8IFiG9DPBtgLOe/VIrDtDK0JeTZbTRt2dSO+2a7isUuKEUm9KoD3ZkUYaUEwC3kmFUZSYVoATRJmAQpE8X9hT19Sjy91WVPbf78lH2bHCiyiSJeV7MjFMRT0QspIAuYXTrTR5PRPe4= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=uniontech.com; spf=pass smtp.mailfrom=uniontech.com; dkim=pass (1024-bit key) header.d=uniontech.com header.i=@uniontech.com header.b=KIrCKAAO; arc=none smtp.client-ip=54.254.200.128 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=uniontech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=uniontech.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=uniontech.com header.i=@uniontech.com header.b="KIrCKAAO" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=uniontech.com; s=onoh2408; t=1785309114; bh=O1YTKr8Y/rFna83YYS7U0F7BOEJLK+gg/3NGb/or4kA=; h=From:To:Subject:Date:Message-Id:MIME-Version; b=KIrCKAAOkdRAiDaYpyHe9q7bMdl2aQyGZPyQxlcdGw1UlDZ+bVb+cRFnWJRdiC6NQ Y5MHjMQzh7h+UbYbyK6P2tvTrzLp9j3azMcG4FBNj9bobJlPs82PfKiPcK0q3ikMvo 5MSY5doB0TMvRdfh8q+egdiSIdJIc3awHxoBEknU= X-QQ-mid: zesmtpgz6t1785309099t2b687191 X-QQ-Originating-IP: WjPQ/f7R7tCBToYIB7rUAtsVlZiqBzG/yOe+5Kgv67c= Received: from localhost.localdomain ( [113.57.152.160]) by bizesmtp.qq.com (ESMTP) with id ; Wed, 29 Jul 2026 15:11:37 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 1 X-BIZMAIL-ID: 17671344946874709150 EX-QQ-RecipientCnt: 15 From: Haowen Tu To: laurent.pinchart@ideasonboard.com, rafael@kernel.org Cc: gregkh@linuxfoundation.org, hansg@kernel.org, kernel@uniontech.com, lenb@kernel.org, linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, linux-pm@vger.kernel.org, linux-usb@vger.kernel.org, mchehab@kernel.org, oneukum@suse.com, pavel@kernel.org, stern@rowland.harvard.edu, tuhaowen@uniontech.com Subject: [PATCH v4 2/4] PM: hibernate: add pm_hibernation_snapshot_done() helper Date: Wed, 29 Jul 2026 15:11:21 +0800 Message-Id: X-Mailer: git-send-email 2.20.1 In-Reply-To: References: <20260723084633.GE648629@killaraus.ideasonboard.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-QQ-SENDSIZE: 520 Feedback-ID: zesmtpgz:uniontech.com:qybglogicsvrsz:qybglogicsvrsz3b-0 X-QQ-XMAILINFO: MbGAPuuY7aUIYEPR1u6vOWbZd07RelO26ExoAHYZ+ojwQAawUK0IA37M M/X/FafqbngVxgAudfa6sFLjXEYqYRfrUoc6lQpzwEbYwjF/l93xLH4/MNZncfI1ZEbSGxP riDVMAG4GNQ6HWVS0ttf+uWj+EwnPN/go7AyKz3qZjmkUsXaar4NWlGCm71BeNTfH5ZWIWU MuXugZ0/dpxfYR8RDa6t1RyONu5+0ciFTpC4hNGCfe9qoDKFAFN1wLIdp/5aCkk7FrUv13p 9wWIq+tUdroxBplY2tEdou2gasIQLlFTdfasr5uHwNJcxPi837GBMVZjwyyaMp5NoHy2Bv8 DY7bzL643axxho5jxkKKykBgeCf/jlGBF+nHC/yNQreKDBYu2gqZyzycibiAV72FOZoc8Mg 31hLUPlGAqcQ4kgLXdli7AUOI/mL3vLXBI5kzDPwEImvVELAPR4TVq/TGB9BZgAqvBCaW1f aG+zzfv3CN/IF88GZnoi6IH93iTh/wD/5vpElOGtRtUA5VqpjFoISc5SO/BANSIcr0EVwwy V4s+1a2/0TRWQI0uY0QvAu65ZFzCmYvqEeTpQWrGIA6+WVDZXkA8ZxM/7LAeP+ggLpgU0eE /OsnfFAwENQnQDOj7mIUAitL2AH1DnaWHp3KFLTM+wQtzY9M+lDakXIupU46n35zLbqY6Z5 ZCHtCPP1roNY+dtqyb0+0rcNBM7GFaAkCYtrcKQ1OImYtV2JfgaFZsiDy7O38gh+0rU+Wo6 cWuZSBOJ5NIyZ8ehGg6VY3NcMQyxKB7n+O/0H/qi+y53JmWlQASb8afpvNiW+00i02iOBwc wcpNvMkXg08/dr+4ijd6gSMh2/FWH8kUuVdPr3ZB8WiZN+Ju/HXRfxu34G9vbT3InGAUXIY Hh5Go8NzLoNbJe94cvPRvDzSkaRN92/RDw+eA5b3+6lE8Oel7WvLN5iG+hScLGqLV/uFRVZ QZMuskRWk6DUNl+DW1Z7sftlInkDcwPYMjOapmZ4seqACJAdGYQvXw1a+12VAchi8RC4mbs afmYOueT76nW5VtjY34d8rQYV+7aOsfkh0WRxp97M6op4Yyc4zu0YeSYA4X+OocTS9TGHzm QJsc8aUkGjNXwECnrswutQ= X-QQ-XMRINFO: Mp0Kj//9VHAxzExpfF+O8yhSrljjwrznVg== X-QQ-RECHKSPAM: 0 Some subsystem resume callbacks do not receive the PM event and therefore cannot distinguish the PMSG_THAW phase after snapshot creation from the PMSG_RESTORE phase. Export pm_hibernation_snapshot_done() so a driver can query whether the hibernation snapshot has been created and is still available. The helper only exposes the PM state; callers remain responsible for ensuring that any device-specific behavior is safe, including subsequent poweroff or shutdown handling. The helper returns !!in_suspend. This variable is set before swsusp_arch_suspend(), cleared before the snapshot memory is released, and marked __nosavedata, so it remains clear on the restore path. Acked-by: Rafael J. Wysocki (Intel) Signed-off-by: Haowen Tu --- include/linux/suspend.h | 2 ++ kernel/power/hibernate.c | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/include/linux/suspend.h b/include/linux/suspend.h index b02876f1ae38..2cebbec3e2f7 100644 --- a/include/linux/suspend.h +++ b/include/linux/suspend.h @@ -393,6 +393,7 @@ extern void hibernation_set_ops(const struct platform_hibernation_ops *ops); extern int hibernate(void); extern bool system_entering_hibernation(void); extern bool hibernation_available(void); +bool pm_hibernation_snapshot_done(void); asmlinkage int swsusp_save(void); extern struct pbe *restore_pblist; int pfn_is_nosave(unsigned long pfn); @@ -412,6 +413,7 @@ static inline void hibernation_set_ops(const struct platform_hibernation_ops *op static inline int hibernate(void) { return -ENOSYS; } static inline bool system_entering_hibernation(void) { return false; } static inline bool hibernation_available(void) { return false; } +static inline bool pm_hibernation_snapshot_done(void) { return false; } static inline int hibernate_quiet_exec(int (*func)(void *data), void *data) { return -ENOTSUPP; diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c index 6d3e637c5a02..045d29f55011 100644 --- a/kernel/power/hibernate.c +++ b/kernel/power/hibernate.c @@ -113,6 +113,18 @@ bool hibernation_available(void) !secretmem_active() && !cxl_mem_active(); } +/** + * pm_hibernation_snapshot_done - check if a hibernation snapshot is available + * + * Return: %true if a hibernation snapshot has been taken and has not been + * released yet. + */ +bool pm_hibernation_snapshot_done(void) +{ + return !!in_suspend; +} +EXPORT_SYMBOL_GPL(pm_hibernation_snapshot_done); + /** * hibernation_set_ops - Set the global hibernate operations. * @ops: Hibernation operations to use in subsequent hibernation transitions. -- 2.20.1