From patchwork Tue Feb 11 21:02:52 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Rafael J. Wysocki" X-Patchwork-Id: 864301 Received: from cloudserver094114.home.pl (cloudserver094114.home.pl [79.96.170.134]) (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 A9CD72627EF; Tue, 11 Feb 2025 21:25:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=79.96.170.134 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739309156; cv=none; b=lhvMHxMcwpFnAmFM6l0ttex/i3Q9K9p8UBeAIBduQ/xnuwINskR+9fiEcUavDtuB3provfO8mz3tVGsbrK2W69ZNxGOC+SoraIE1oM9CXFTmol/cHwkiBj/P9lN4ubkmN4fkccSnNZUzX5TmnBAuGd8ctxQpPVuGurR+vOSfQsU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739309156; c=relaxed/simple; bh=31LpJUNvPXRT8Z6CSlJtIwY15E5H7sluasiMFMoNjTc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=PvXRYzk4KZLXixzCzYH1y2xDtKF370bSmAMTIKs9IZaPb3JYyoTyu4Hu7onBnPM5+7/OeazLnSoPlCYklAsjpp9Uf+aibw03ZEdws5Kn4wWJsfslVNnDnE0y0BhDuu2h2sLhuWXVtkeSLHIb2m7+U7DnOZiEfRrSDE3fQOokoSs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rjwysocki.net; spf=pass smtp.mailfrom=rjwysocki.net; dkim=pass (2048-bit key) header.d=rjwysocki.net header.i=@rjwysocki.net header.b=oEQueXFV; arc=none smtp.client-ip=79.96.170.134 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rjwysocki.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rjwysocki.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rjwysocki.net header.i=@rjwysocki.net header.b="oEQueXFV" Received: from localhost (127.0.0.1) (HELO v370.home.net.pl) by /usr/run/smtp (/usr/run/postfix/private/idea_relay_lmtp) via UNIX with SMTP (IdeaSmtpServer 6.2.1) id d7342e8c6b5ededa; Tue, 11 Feb 2025 22:25:52 +0100 Received: from kreacher.localnet (unknown [195.136.19.94]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by cloudserver094114.home.pl (Postfix) with ESMTPSA id 13B83770175; Tue, 11 Feb 2025 22:25:52 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rjwysocki.net; s=dkim; t=1739309152; bh=31LpJUNvPXRT8Z6CSlJtIwY15E5H7sluasiMFMoNjTc=; h=From:Subject:Date; b=oEQueXFVNKfKq2izbXI620kezw+FaF8GYJHaUOBsbUxgUi1EGf0idEguf/Obi6DYZ ynAQzD+3QcCZvKJj8o8Oe5x8owdWk/RmpJnqV9OXOal6YSUCyMZQVsf1Gb4qale7go /IYR/SOPQEu/t4J6uiXpBVzsVAdVXzmW0c8/qvu4SrcyC5w+QWHMvb6Tm8Z+KsiY96 2owWs5gpefEXn6DPNy7JKJ/0WHzTW8yBxpRpxk/tLZ3xCtCJ/Zz8tvrqMNlACPAsqF YEvbHds10FVw4sSDOyE8OSKD2Vu+Rm7F2EKzTF7g+zhCIW9on17VSnnG+ZT2a7WPTT WsXBrFzoiLV3w== From: "Rafael J. Wysocki" To: Linux PM Cc: LKML , Alan Stern , Ulf Hansson , Johan Hovold , Manivannan Sadhasivam , Jon Hunter Subject: [PATCH v1 01/10] PM: runtime: Introduce pm_runtime_no_support() Date: Tue, 11 Feb 2025 22:02:52 +0100 Message-ID: <22608556.EfDdHjke4D@rjwysocki.net> In-Reply-To: <2314745.iZASKD2KPV@rjwysocki.net> References: <2314745.iZASKD2KPV@rjwysocki.net> Precedence: bulk X-Mailing-List: linux-pm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-CLIENT-IP: 195.136.19.94 X-CLIENT-HOSTNAME: 195.136.19.94 X-VADE-SPAMSTATE: clean X-VADE-SPAMCAUSE: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgdegvddtjecutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfjqffogffrnfdpggftiffpkfenuceurghilhhouhhtmecuudehtdenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujfgurhephffvvefufffkjghfggfgtgesthfuredttddtjeenucfhrhhomhepfdftrghfrggvlhculfdrucghhihsohgtkhhifdcuoehrjhifsehrjhifhihsohgtkhhirdhnvghtqeenucggtffrrghtthgvrhhnpedvffeuiedtgfdvtddugeeujedtffetteegfeekffdvfedttddtuefhgeefvdejhfenucfkphepudelhedrudefiedrudelrdelgeenucevlhhushhtvghrufhiiigvpedunecurfgrrhgrmhepihhnvghtpeduleehrddufeeirdduledrleegpdhhvghlohepkhhrvggrtghhvghrrdhlohgtrghlnhgvthdpmhgrihhlfhhrohhmpehrjhifsehrjhifhihsohgtkhhirdhnvghtpdhnsggprhgtphhtthhopeejpdhrtghpthhtoheplhhinhhugidqphhmsehvghgvrhdrkhgvrhhnvghlrdhorhhgpdhrtghpthhtoheplhhinhhugidqkhgvrhhnvghlsehvghgvrhdrkhgvrhhnvghlrdhorhhgpdhrtghpthhtohepshhtvghrnhesrhhofihlrghnugdrhhgrrhhvrghrugdrvgguuhdprhgtphhtthhopehulhhfrdhhrghnshhsohhnsehlihhnrghrohdrohhrghdprhgtphhtthhopehjohhhrghnsehkvghrnhgvlhdrohhrghdprhgtphh X-DCC--Metrics: v370.home.net.pl 1024; Body=7 Fuz1=7 Fuz2=7 From: Rafael J. Wysocki Introduce a new helper function called pm_runtime_no_support() for checking the power.last_status value indicating whether or not runtime PM has ever been enabled for the given device. Signed-off-by: Rafael J. Wysocki --- include/linux/pm_runtime.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) --- a/include/linux/pm_runtime.h +++ b/include/linux/pm_runtime.h @@ -182,6 +182,19 @@ } /** + * pm_runtime_no_support - Check runtime PM support. + * @dev: Target device. + * + * Return %true if runtime PM is currently disabled for @dev and its last + * runtime PM status value is %RPM_INVALID, which means that runtime PM has + * never been enabled for it, or %false otherwise. + */ +static inline bool pm_runtime_no_support(struct device *dev) +{ + return dev->power.disable_depth && dev->power.last_status == RPM_INVALID; +} + +/** * pm_runtime_enabled - Check if runtime PM is enabled. * @dev: Target device. * @@ -284,6 +297,7 @@ static inline bool pm_runtime_suspended(struct device *dev) { return false; } static inline bool pm_runtime_active(struct device *dev) { return true; } static inline bool pm_runtime_status_suspended(struct device *dev) { return false; } +static inline bool pm_runtime_no_support(struct device *dev) { return true; } static inline bool pm_runtime_enabled(struct device *dev) { return false; } static inline void pm_runtime_no_callbacks(struct device *dev) {} From patchwork Tue Feb 11 21:03:56 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Rafael J. Wysocki" X-Patchwork-Id: 865720 Received: from cloudserver094114.home.pl (cloudserver094114.home.pl [79.96.170.134]) (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 AC82E2627ED; Tue, 11 Feb 2025 21:25:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=79.96.170.134 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739309155; cv=none; b=NgDgPumUDT8zAir8JJxXB1rTHYcnjt2ueN6kpHjvAsm2mKkqc0RTGyyi1OFdeO3LMWkS3D3JRvDcXHhRbpFgCw1p9NR7fjbojN6lBZcjbiZin6Xss3/gbzpEBII34jKxtxcNjOZfP90KiRWQ1GUAYe9YxaZN0wyCyqlB1RWIjC0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739309155; c=relaxed/simple; bh=r47D1nHsFRyaXb3tGPZo++1XHzRRqEr4SbHWAOD9FZM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=VHZ6QtP5NLDdsIOcaCItBTDklPB9SsU65wEINXOtaSzSmtQf56mUAo1pIdMk5gwjxdJZVEhF8/6U7VJT9ygslD5rHaKY988f+IuRuk7ptx2T9rI64Log4Hm+2AtMK24xfPAV+srIBIP/sV9KN9qtmdsnE2kxa1uzTYnP2dUs4DY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rjwysocki.net; spf=pass smtp.mailfrom=rjwysocki.net; dkim=pass (2048-bit key) header.d=rjwysocki.net header.i=@rjwysocki.net header.b=je/cD9aK; arc=none smtp.client-ip=79.96.170.134 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rjwysocki.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rjwysocki.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rjwysocki.net header.i=@rjwysocki.net header.b="je/cD9aK" Received: from localhost (127.0.0.1) (HELO v370.home.net.pl) by /usr/run/smtp (/usr/run/postfix/private/idea_relay_lmtp) via UNIX with SMTP (IdeaSmtpServer 6.2.1) id 7fa35b1fd5a3c8fe; Tue, 11 Feb 2025 22:25:51 +0100 Received: from kreacher.localnet (unknown [195.136.19.94]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by cloudserver094114.home.pl (Postfix) with ESMTPSA id 1A7BE770175; Tue, 11 Feb 2025 22:25:51 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rjwysocki.net; s=dkim; t=1739309151; bh=r47D1nHsFRyaXb3tGPZo++1XHzRRqEr4SbHWAOD9FZM=; h=From:Subject:Date; b=je/cD9aKEfVAqAHV8ssEnV+YNzP3llrt5nl6HCqVbRKb8LECxcXdI4pknPxPHvNFI sj2UKOTgUge/kiPgnHdg9orE2UFsDKZ4xchH7KvdCN1WFpiW3ydvEs10SLIqQBp1Xl AL+Ed6d19xsY2dmWdqgeb6PSBMtUBz1AhauQNlZRoiygqDxxqqORPwZN/rZr5kpqw6 hP539J6dIiZWR9TCOpUWfSlFvOfwJZ0DeE75T+dmnBow/4XDCaGIKXk5z7RZ7rgWYl YW/3yyAIFgufnSY+8f+I8c13XpDYWi2Yy/kvA7axI+Yu7S7138k75wVu24ZPp9KKfx lcOAZc0XIOTQQ== From: "Rafael J. Wysocki" To: Linux PM Cc: LKML , Alan Stern , Ulf Hansson , Johan Hovold , Manivannan Sadhasivam , Jon Hunter Subject: [PATCH v1 02/10] PM: sleep: core: Use pm_runtime_no_support() during set_active updates Date: Tue, 11 Feb 2025 22:03:56 +0100 Message-ID: <3876702.kQq0lBPeGt@rjwysocki.net> In-Reply-To: <2314745.iZASKD2KPV@rjwysocki.net> References: <2314745.iZASKD2KPV@rjwysocki.net> Precedence: bulk X-Mailing-List: linux-pm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-CLIENT-IP: 195.136.19.94 X-CLIENT-HOSTNAME: 195.136.19.94 X-VADE-SPAMSTATE: clean X-VADE-SPAMCAUSE: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgdegvddtkecutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfjqffogffrnfdpggftiffpkfenuceurghilhhouhhtmecuudehtdenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujfgurhephffvvefufffkjghfggfgtgesthfuredttddtjeenucfhrhhomhepfdftrghfrggvlhculfdrucghhihsohgtkhhifdcuoehrjhifsehrjhifhihsohgtkhhirdhnvghtqeenucggtffrrghtthgvrhhnpedvffeuiedtgfdvtddugeeujedtffetteegfeekffdvfedttddtuefhgeefvdejhfenucfkphepudelhedrudefiedrudelrdelgeenucevlhhushhtvghrufhiiigvpedunecurfgrrhgrmhepihhnvghtpeduleehrddufeeirdduledrleegpdhhvghlohepkhhrvggrtghhvghrrdhlohgtrghlnhgvthdpmhgrihhlfhhrohhmpehrjhifsehrjhifhihsohgtkhhirdhnvghtpdhnsggprhgtphhtthhopeejpdhrtghpthhtoheplhhinhhugidqphhmsehvghgvrhdrkhgvrhhnvghlrdhorhhgpdhrtghpthhtoheplhhinhhugidqkhgvrhhnvghlsehvghgvrhdrkhgvrhhnvghlrdhorhhgpdhrtghpthhtohepshhtvghrnhesrhhofihlrghnugdrhhgrrhhvrghrugdrvgguuhdprhgtphhtthhopehulhhfrdhhrghnshhsohhnsehlihhnrghrohdrohhrghdprhgtphhtthhopehjohhhrghnsehkvghrnhgvlhdrohhrghdprhgtphh X-DCC--Metrics: v370.home.net.pl 1024; Body=7 Fuz1=7 Fuz2=7 From: Rafael J. Wysocki It is pointless to set power.set_active for devices that have never had runtime PM enabled, so don't do that. Fixes: 7585946243d6 ("PM: sleep: core: Restrict power.set_active propagation") Signed-off-by: Rafael J. Wysocki --- drivers/base/power/main.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) --- a/drivers/base/power/main.c +++ b/drivers/base/power/main.c @@ -1281,9 +1281,11 @@ dev->power.must_resume = true; if (dev->power.must_resume) { - if (dev_pm_test_driver_flags(dev, DPM_FLAG_SMART_SUSPEND)) { + if (dev_pm_test_driver_flags(dev, DPM_FLAG_SMART_SUSPEND) && + !pm_runtime_no_support(dev)) { dev->power.set_active = true; - if (dev->parent && !dev->parent->power.ignore_children) + if (dev->parent && !dev->parent->power.ignore_children && + !pm_runtime_no_support(dev->parent)) dev->parent->power.set_active = true; } dpm_superior_set_must_resume(dev); From patchwork Tue Feb 11 21:05:51 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Rafael J. Wysocki" X-Patchwork-Id: 865721 Received: from cloudserver094114.home.pl (cloudserver094114.home.pl [79.96.170.134]) (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 C08532627EA; Tue, 11 Feb 2025 21:25:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=79.96.170.134 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739309154; cv=none; b=R8ZFdr5LccDKwEz4dSQgODYnvBQUntGTHaubNVWUbO5tH794lRE/MB1D/lESg1FKPo2rSJcF8LtURthoFPtkVr7vacSZvPpRhIDHnf5x3GJWwn73K1G7Wht76Kvv21KKgRV3CfygKiSZAEOAPnWskKmlLcP9stwH4zSOi79ebZs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739309154; c=relaxed/simple; bh=WUgixIg1Hz0Tw6UK59IVDtHX0+D4hc/h0rTo1M2QpDQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=KLtMeR8Eef3adLAhE0QmZqQ5agJdKk4clwUcJZfGWUGMGs6rXN2pZk9Y7z9vD8dzNG3rvsVPPDzWOsw9rd711y/tDJeSLeuDA8iNjHU/+qLySF21oCDLOxN/KzBO2kF7H+XXEO1hvjKKT6X2fhQvtuWaRZFxKb8qffWriOhmb0Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rjwysocki.net; spf=pass smtp.mailfrom=rjwysocki.net; dkim=pass (2048-bit key) header.d=rjwysocki.net header.i=@rjwysocki.net header.b=bdKNXmgU; arc=none smtp.client-ip=79.96.170.134 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rjwysocki.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rjwysocki.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rjwysocki.net header.i=@rjwysocki.net header.b="bdKNXmgU" Received: from localhost (127.0.0.1) (HELO v370.home.net.pl) by /usr/run/smtp (/usr/run/postfix/private/idea_relay_lmtp) via UNIX with SMTP (IdeaSmtpServer 6.2.1) id 6556dbb6edc9b342; Tue, 11 Feb 2025 22:25:50 +0100 Received: from kreacher.localnet (unknown [195.136.19.94]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by cloudserver094114.home.pl (Postfix) with ESMTPSA id 396E9770175; Tue, 11 Feb 2025 22:25:50 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rjwysocki.net; s=dkim; t=1739309150; bh=WUgixIg1Hz0Tw6UK59IVDtHX0+D4hc/h0rTo1M2QpDQ=; h=From:Subject:Date; b=bdKNXmgUkySpZ7z0hio5ZirV7nfer+XGbF9ZJ3nrPigc2I79ZL1t6n2Lwky1V8Wyi bm90w2UKninmlYn5dLE4ir89eICXhw5grsXUFs0bv3qDbCF6aw3Fb+DJBPcRwzSLeJ 7i9fzb0GMFOoLURLkoD1fHx35KJc1TJ5P6dF6hWeMLJHBUKkBA7mdjo/Jdhr8dLE4U Pc/mFolpvts0Pg0qDFxp/qrcOUny2qPV5hWePIMAORv51W1/foJKGAwlXihIFPf6y1 Os2tows2e6XrbNua7/TpW75pu8h3O2oC32FlJxoyZ8jetQAYaxwIhaGt1mHdALSC2c GGixInuEtj08w== From: "Rafael J. Wysocki" To: Linux PM Cc: LKML , Alan Stern , Ulf Hansson , Johan Hovold , Manivannan Sadhasivam , Jon Hunter Subject: [PATCH v1 03/10] PM: runtime: Use pm_runtime_no_support() in pm_runtime_force_suspend() Date: Tue, 11 Feb 2025 22:05:51 +0100 Message-ID: <9421808.CDJkKcVGEf@rjwysocki.net> In-Reply-To: <2314745.iZASKD2KPV@rjwysocki.net> References: <2314745.iZASKD2KPV@rjwysocki.net> Precedence: bulk X-Mailing-List: linux-pm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-CLIENT-IP: 195.136.19.94 X-CLIENT-HOSTNAME: 195.136.19.94 X-VADE-SPAMSTATE: clean X-VADE-SPAMCAUSE: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgdegvddtkecutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfjqffogffrnfdpggftiffpkfenuceurghilhhouhhtmecuudehtdenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujfgurhephffvvefufffkjghfggfgtgesthfuredttddtjeenucfhrhhomhepfdftrghfrggvlhculfdrucghhihsohgtkhhifdcuoehrjhifsehrjhifhihsohgtkhhirdhnvghtqeenucggtffrrghtthgvrhhnpedvffeuiedtgfdvtddugeeujedtffetteegfeekffdvfedttddtuefhgeefvdejhfenucfkphepudelhedrudefiedrudelrdelgeenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepihhnvghtpeduleehrddufeeirdduledrleegpdhhvghlohepkhhrvggrtghhvghrrdhlohgtrghlnhgvthdpmhgrihhlfhhrohhmpehrjhifsehrjhifhihsohgtkhhirdhnvghtpdhnsggprhgtphhtthhopeejpdhrtghpthhtoheplhhinhhugidqphhmsehvghgvrhdrkhgvrhhnvghlrdhorhhgpdhrtghpthhtoheplhhinhhugidqkhgvrhhnvghlsehvghgvrhdrkhgvrhhnvghlrdhorhhgpdhrtghpthhtohepshhtvghrnhesrhhofihlrghnugdrhhgrrhhvrghrugdrvgguuhdprhgtphhtthhopehulhhfrdhhrghnshhsohhnsehlihhnrghrohdrohhrghdprhgtphhtthhopehjohhhrghnsehkvghrnhgvlhdrohhrghdprhgtphh X-DCC--Metrics: v370.home.net.pl 1024; Body=7 Fuz1=7 Fuz2=7 From: Rafael J. Wysocki Currently, pm_runtime_force_suspend() does not distinguish devices without runtime PM enabled and it may be called for such devices incidentally. In that case, it works inconsistently depending on the device runtime PM status value which generally is not expected to be meaningful for devices with runtime PM permanently disabled. Namely, if the runtime PM status of the device is RPM_SUSPENDED, it will be ignored as though it had been runtime-suspended, but if its runtime PM status is RPM_ACTIVE, pm_runtime_force_suspend() will attempt to suspend it which may not work. Make pm_runtime_force_suspend() more consistent by adding a pm_runtime_no_support() check to it that will cause it to skip devices with no runtime PM support. Signed-off-by: Rafael J. Wysocki --- drivers/base/power/runtime.c | 6 +++++- include/linux/pm_runtime.h | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) --- a/drivers/base/power/runtime.c +++ b/drivers/base/power/runtime.c @@ -1908,7 +1908,11 @@ int ret; pm_runtime_disable(dev); - if (pm_runtime_status_suspended(dev)) + /* + * Do not attempt to suspend devices that have been suspended already or + * that have never had runtime PM enabled. + */ + if (pm_runtime_status_suspended(dev) || pm_runtime_no_support(dev)) return 0; callback = RPM_GET_CALLBACK(dev, runtime_suspend); From patchwork Tue Feb 11 21:07:52 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Rafael J. Wysocki" X-Patchwork-Id: 865715 Received: from cloudserver094114.home.pl (cloudserver094114.home.pl [79.96.170.134]) (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 D2C52266589; Tue, 11 Feb 2025 21:25:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=79.96.170.134 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739309158; cv=none; b=Ok/lmXSOtAO0WkoG019PL9RRP93ME8/2k+zb/jJS6VeQMzCU2D2mwjK1F3bLr9UjJ6Shgu8MpRiHJDrRSX/ZurF0jUBMmGRKZmFTI+IyCKTAUNTXWwbUSOsAROzB2X/9bu3X33Za3DLbGejL3F7Ym0TJeyLZiRW8smiO44G5BaA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739309158; c=relaxed/simple; bh=zVHK9tKkrrsUglkhVCFQZZeMj/6ZCvBq1S2weRFFqdk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=F/snKhzUDj7AWNrxUZL2lxtkhPc+XdH1r2EVUKju+rddeOFQ8wws/tuWtzSdswgRWkBxHc69JdNhm6GTeel8utYixQf8lKpSBTvxg3Nzs6QROB6cD2pA6C1wdl3urk1p7CrFuRXf/YVTLXaNamrjYoW4FczHvoWmEUf4kBt/OQA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rjwysocki.net; spf=pass smtp.mailfrom=rjwysocki.net; dkim=pass (2048-bit key) header.d=rjwysocki.net header.i=@rjwysocki.net header.b=CHPt/RUh; arc=none smtp.client-ip=79.96.170.134 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rjwysocki.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rjwysocki.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rjwysocki.net header.i=@rjwysocki.net header.b="CHPt/RUh" Received: from localhost (127.0.0.1) (HELO v370.home.net.pl) by /usr/run/smtp (/usr/run/postfix/private/idea_relay_lmtp) via UNIX with SMTP (IdeaSmtpServer 6.2.1) id e027a457252b6505; Tue, 11 Feb 2025 22:25:49 +0100 Received: from kreacher.localnet (unknown [195.136.19.94]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by cloudserver094114.home.pl (Postfix) with ESMTPSA id 100E6770175; Tue, 11 Feb 2025 22:25:49 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rjwysocki.net; s=dkim; t=1739309149; bh=zVHK9tKkrrsUglkhVCFQZZeMj/6ZCvBq1S2weRFFqdk=; h=From:Subject:Date; b=CHPt/RUhm3cXLGMvxhiWdSgoVaBFqdO6LPDszthIOUdPfj8qeIHopckJZqaySZqpD xqdg57J/xp/fjdJqc7bCR5z8kfjPUyo8VV1bwFrqQCaCvtmwPWQPRErx4KDyl3RUCQ k6V1BTZ5Pxoy9mjSMMNFT4G8dTMs7/Mlv2bKKUF4l/yOXx5nsqD9fO6Cz30DHfmI1+ XcU8JpkGoBdtgy4K1vz2DzKxvDWs3udxxtxD655gZeturWF2v7gA4Xl0XlqiSlJTQf rVKbZr+oiv8dZzOjynYjGdW2z0+eBhr8TpXLVrL5Q2LqeBQdyKY9h/VOAnspbBwWdT JM4fkG0AZ/zOg== From: "Rafael J. Wysocki" To: Linux PM Cc: LKML , Alan Stern , Ulf Hansson , Johan Hovold , Manivannan Sadhasivam , Jon Hunter Subject: [PATCH v1 04/10] PM: runtime: Drop status check from pm_runtime_force_resume() Date: Tue, 11 Feb 2025 22:07:52 +0100 Message-ID: <6038511.MhkbZ0Pkbq@rjwysocki.net> In-Reply-To: <2314745.iZASKD2KPV@rjwysocki.net> References: <2314745.iZASKD2KPV@rjwysocki.net> Precedence: bulk X-Mailing-List: linux-pm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-CLIENT-IP: 195.136.19.94 X-CLIENT-HOSTNAME: 195.136.19.94 X-VADE-SPAMSTATE: clean X-VADE-SPAMCAUSE: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgdegvddtkecutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfjqffogffrnfdpggftiffpkfenuceurghilhhouhhtmecuudehtdenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujfgurhephffvvefufffkjghfggfgtgesthfuredttddtjeenucfhrhhomhepfdftrghfrggvlhculfdrucghhihsohgtkhhifdcuoehrjhifsehrjhifhihsohgtkhhirdhnvghtqeenucggtffrrghtthgvrhhnpedvffeuiedtgfdvtddugeeujedtffetteegfeekffdvfedttddtuefhgeefvdejhfenucfkphepudelhedrudefiedrudelrdelgeenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepihhnvghtpeduleehrddufeeirdduledrleegpdhhvghlohepkhhrvggrtghhvghrrdhlohgtrghlnhgvthdpmhgrihhlfhhrohhmpehrjhifsehrjhifhihsohgtkhhirdhnvghtpdhnsggprhgtphhtthhopeejpdhrtghpthhtoheplhhinhhugidqphhmsehvghgvrhdrkhgvrhhnvghlrdhorhhgpdhrtghpthhtoheplhhinhhugidqkhgvrhhnvghlsehvghgvrhdrkhgvrhhnvghlrdhorhhgpdhrtghpthhtohepshhtvghrnhesrhhofihlrghnugdrhhgrrhhvrghrugdrvgguuhdprhgtphhtthhopehulhhfrdhhrghnshhsohhnsehlihhnrghrohdrohhrghdprhgtphhtthhopehjohhhrghnsehkvghrnhgvlhdrohhrghdprhgtphh X-DCC--Metrics: v370.home.net.pl 1024; Body=7 Fuz1=7 Fuz2=7 From: Rafael J. Wysocki Since pm_runtime_force_resume() requires pm_runtime_force_suspend() to be called before it on the same device, the runtime PM status of that device is RPM_SUSPENDED when it is called unless the device's runtime PM status is changed somewhere else in the meantime. However, even if that happens, the power.needs_force_resume check is still required to pass and that flag is only set by pm_runtime_force_suspend() and it is cleared at the end of pm_runtime_force_resume(), so it cannot be taken into account twice in a row. Accordingly, the pm_runtime_status_suspended(dev) check in pm_runtime_force_resume() is redundant, so drop it. Signed-off-by: Rafael J. Wysocki --- drivers/base/power/runtime.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/drivers/base/power/runtime.c +++ b/drivers/base/power/runtime.c @@ -1963,7 +1963,7 @@ int (*callback)(struct device *); int ret = 0; - if (!pm_runtime_status_suspended(dev) || !dev->power.needs_force_resume) + if (!dev->power.needs_force_resume) goto out; /* From patchwork Tue Feb 11 21:09:11 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Rafael J. Wysocki" X-Patchwork-Id: 864299 Received: from cloudserver094114.home.pl (cloudserver094114.home.pl [79.96.170.134]) (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 D6EC726280D; Tue, 11 Feb 2025 21:25:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=79.96.170.134 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739309158; cv=none; b=Yr5XR9OM/XHQhFe8R6sLzbqQ5vmJ5Tx2mu/RqflV3R4x7fT1N8g83oW/mC3VAS7YvTl41fg+4JB1tKOvdP6vwm+iYf3YYoOIWAD7HE+ySitP4gqav+aztIv8Sy5EgvatBVksJYCnKxKJsKkL+kV7j7EKwvw3crXDSV4uyMhD5Jc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739309158; c=relaxed/simple; bh=zmNhGZJdY16x0lBsxEUPSi9daEXT4yca9scHTcNRzzU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=klVxPIRLK4P/POJSMgcINUJk/DRbHur+jSCXJEXaf9jpBcOnKBxlbt4WMhAAgS0sC/Htw/NJrtCkEH00tCxE3qKSWsnX1IK2X/o6k1vl0t93HsitjHEx5FI1YfwKj4bMTlRNGg/PXMOho7hX/205RHCu65BjysRu6Ke+yyRl0K4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rjwysocki.net; spf=pass smtp.mailfrom=rjwysocki.net; dkim=pass (2048-bit key) header.d=rjwysocki.net header.i=@rjwysocki.net header.b=UdE3VJlu; arc=none smtp.client-ip=79.96.170.134 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rjwysocki.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rjwysocki.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rjwysocki.net header.i=@rjwysocki.net header.b="UdE3VJlu" Received: from localhost (127.0.0.1) (HELO v370.home.net.pl) by /usr/run/smtp (/usr/run/postfix/private/idea_relay_lmtp) via UNIX with SMTP (IdeaSmtpServer 6.2.1) id 9daabc391473d490; Tue, 11 Feb 2025 22:25:48 +0100 Received: from kreacher.localnet (unknown [195.136.19.94]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by cloudserver094114.home.pl (Postfix) with ESMTPSA id 0B026770175; Tue, 11 Feb 2025 22:25:48 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rjwysocki.net; s=dkim; t=1739309148; bh=zmNhGZJdY16x0lBsxEUPSi9daEXT4yca9scHTcNRzzU=; h=From:Subject:Date; b=UdE3VJluhfkRx/T9oWQ97SBw5OQ80FdN/4yRVlBX5ep0aPRdpHYTj55d0Wt+ye4IK 5KcRI1zAz3TCSoZznKPcyL/LgqGmOJBC0nwwtzjCsAYRYT9oMhgd6ebeL06hYOX5An k7+hXmuPoGrp72XSfqHzpMipnluGlaWRNw2w9EjIe3/C8EZSwao12JIljnFAL7cTvB uXeJUqp40lGJ2i1srQgAfQBFP8aDDemicGhLVqL4mjiorhNDgICsTKenyKwMCTcCpP wvPyt2YG+senpQEP7z4Kqx8KxKmEFPreQ5oAUCDNZkJPrzdJT0f2/oAi9Do1EwCGmt KGXHAAOp+L5tg== From: "Rafael J. Wysocki" To: Linux PM Cc: LKML , Alan Stern , Ulf Hansson , Johan Hovold , Manivannan Sadhasivam , Jon Hunter Subject: [PATCH v1 05/10] PM: runtime: Do not enable wakeup IRQs during system resume Date: Tue, 11 Feb 2025 22:09:11 +0100 Message-ID: <8546164.NyiUUSuA9g@rjwysocki.net> In-Reply-To: <2314745.iZASKD2KPV@rjwysocki.net> References: <2314745.iZASKD2KPV@rjwysocki.net> Precedence: bulk X-Mailing-List: linux-pm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-CLIENT-IP: 195.136.19.94 X-CLIENT-HOSTNAME: 195.136.19.94 X-VADE-SPAMSTATE: clean X-VADE-SPAMCAUSE: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgdegvddtjecutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfjqffogffrnfdpggftiffpkfenuceurghilhhouhhtmecuudehtdenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujfgurhephffvvefufffkjghfggfgtgesthfuredttddtjeenucfhrhhomhepfdftrghfrggvlhculfdrucghhihsohgtkhhifdcuoehrjhifsehrjhifhihsohgtkhhirdhnvghtqeenucggtffrrghtthgvrhhnpedvffeuiedtgfdvtddugeeujedtffetteegfeekffdvfedttddtuefhgeefvdejhfenucfkphepudelhedrudefiedrudelrdelgeenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepihhnvghtpeduleehrddufeeirdduledrleegpdhhvghlohepkhhrvggrtghhvghrrdhlohgtrghlnhgvthdpmhgrihhlfhhrohhmpehrjhifsehrjhifhihsohgtkhhirdhnvghtpdhnsggprhgtphhtthhopeejpdhrtghpthhtoheplhhinhhugidqphhmsehvghgvrhdrkhgvrhhnvghlrdhorhhgpdhrtghpthhtoheplhhinhhugidqkhgvrhhnvghlsehvghgvrhdrkhgvrhhnvghlrdhorhhgpdhrtghpthhtohepshhtvghrnhesrhhofihlrghnugdrhhgrrhhvrghrugdrvgguuhdprhgtphhtthhopehulhhfrdhhrghnshhsohhnsehlihhnrghrohdrohhrghdprhgtphhtthhopehjohhhrghnsehkvghrnhgvlhdrohhrghdprhgtphh X-DCC--Metrics: v370.home.net.pl 1024; Body=7 Fuz1=7 Fuz2=7 From: Rafael J. Wysocki Enabling system wakeup IRQs during system resume transitions is not particularly useful, even on errors, so don't do it in the pm_runtime_force_resume() error path. Fixes: c46a0d5ae4f9 ("PM: runtime: Extend support for wakeirq for force_suspend|resume") Signed-off-by: Rafael J. Wysocki --- drivers/base/power/runtime.c | 1 - 1 file changed, 1 deletion(-) --- a/drivers/base/power/runtime.c +++ b/drivers/base/power/runtime.c @@ -1978,7 +1978,6 @@ ret = callback ? callback(dev) : 0; if (ret) { pm_runtime_set_suspended(dev); - dev_pm_enable_wake_irq_check(dev, false); goto out; } From patchwork Tue Feb 11 21:10:39 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Rafael J. Wysocki" X-Patchwork-Id: 865716 Received: from cloudserver094114.home.pl (cloudserver094114.home.pl [79.96.170.134]) (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 D6EFB26280E; Tue, 11 Feb 2025 21:25:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=79.96.170.134 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739309157; cv=none; b=NiKOTCSFutzEsMKH4JwcFgjhcTPX6sjea5jvP7q87ehAIeQYfRAA+Jpvo5NczPcgK7F6KmjLjoCOF7ZNgu2BOQzU4sYp1phbrxkwBme+RSeuj+s3a2kFk9XKZbFqRbuhb5UO4KfFL3J5h7GyQVlCVCWWmBx+UNmNHh0X6Z9XjBw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739309157; c=relaxed/simple; bh=CVXpmJor++qVMVrNa2Vtw7b1Gj23SWNCnYY/5A5S8YU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=iCb93y1RIjMN8/4CBTK5YUFc42LGvco43mwola5zLxeppzv6iOWd2eabS4cEqdc7JYf3w+wQAww0O401QwCNWy7mH49//aOI8//rQEi+1S1RiJXW7O2shtw64lMIdjlCrLH958OVjbf/CAtYG/XRyz64srZSMubvrxUULK1AkII= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rjwysocki.net; spf=pass smtp.mailfrom=rjwysocki.net; dkim=pass (2048-bit key) header.d=rjwysocki.net header.i=@rjwysocki.net header.b=lYHSmmnL; arc=none smtp.client-ip=79.96.170.134 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rjwysocki.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rjwysocki.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rjwysocki.net header.i=@rjwysocki.net header.b="lYHSmmnL" Received: from localhost (127.0.0.1) (HELO v370.home.net.pl) by /usr/run/smtp (/usr/run/postfix/private/idea_relay_lmtp) via UNIX with SMTP (IdeaSmtpServer 6.2.1) id 043443d38ece3eef; Tue, 11 Feb 2025 22:25:47 +0100 Received: from kreacher.localnet (unknown [195.136.19.94]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by cloudserver094114.home.pl (Postfix) with ESMTPSA id 2F9FE770175; Tue, 11 Feb 2025 22:25:47 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rjwysocki.net; s=dkim; t=1739309147; bh=CVXpmJor++qVMVrNa2Vtw7b1Gj23SWNCnYY/5A5S8YU=; h=From:Subject:Date; b=lYHSmmnLa/p1gEwWiGE/rEnPKxHM2jU+pPnMB2xwW/gnrDp3S7pXUF6zzkS2KTfaE CQvgkcy5kn0ubzhy9X5nGiEsryZXL84SoV+5SSMwqf1gHNnmM/migPdbvCcjVZr7N9 xSTt/uB5uRsdnR1g08vYNPzSvn01+mfxyjyCKp2liEIOaqDqQL3FkA4Jggx9mQimhe 76Ixfa7781xtHiZyHULzr4cLbLBBD1zzP62oXF+xqdRhgNu1zF7DMD+vib7KNWLbQF Otk1oYvV4HQNb/kFLmElIrUwhuwNh7x4yIHWbAd3zyqE5kkbqroCk7Q3sbdUI+vsB3 cF5eg2RSvQZYQ== From: "Rafael J. Wysocki" To: Linux PM Cc: LKML , Alan Stern , Ulf Hansson , Johan Hovold , Manivannan Sadhasivam , Jon Hunter Subject: [PATCH v1 06/10] PM: sleep: Adjust check before setting power.must_resume Date: Tue, 11 Feb 2025 22:10:39 +0100 Message-ID: <3548152.QJadu78ljV@rjwysocki.net> In-Reply-To: <2314745.iZASKD2KPV@rjwysocki.net> References: <2314745.iZASKD2KPV@rjwysocki.net> Precedence: bulk X-Mailing-List: linux-pm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-CLIENT-IP: 195.136.19.94 X-CLIENT-HOSTNAME: 195.136.19.94 X-VADE-SPAMSTATE: clean X-VADE-SPAMCAUSE: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgdegvddtkecutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfjqffogffrnfdpggftiffpkfenuceurghilhhouhhtmecuudehtdenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujfgurhephffvvefufffkjghfggfgtgesthfuredttddtjeenucfhrhhomhepfdftrghfrggvlhculfdrucghhihsohgtkhhifdcuoehrjhifsehrjhifhihsohgtkhhirdhnvghtqeenucggtffrrghtthgvrhhnpedvffeuiedtgfdvtddugeeujedtffetteegfeekffdvfedttddtuefhgeefvdejhfenucfkphepudelhedrudefiedrudelrdelgeenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepihhnvghtpeduleehrddufeeirdduledrleegpdhhvghlohepkhhrvggrtghhvghrrdhlohgtrghlnhgvthdpmhgrihhlfhhrohhmpehrjhifsehrjhifhihsohgtkhhirdhnvghtpdhnsggprhgtphhtthhopeejpdhrtghpthhtoheplhhinhhugidqphhmsehvghgvrhdrkhgvrhhnvghlrdhorhhgpdhrtghpthhtoheplhhinhhugidqkhgvrhhnvghlsehvghgvrhdrkhgvrhhnvghlrdhorhhgpdhrtghpthhtohepshhtvghrnhesrhhofihlrghnugdrhhgrrhhvrghrugdrvgguuhdprhgtphhtthhopehulhhfrdhhrghnshhsohhnsehlihhnrghrohdrohhrghdprhgtphhtthhopehjohhhrghnsehkvghrnhgvlhdrohhrghdprhgtphh X-DCC--Metrics: v370.home.net.pl 1024; Body=7 Fuz1=7 Fuz2=7 From: Rafael J. Wysocki Use pm_runtime_need_not_resume() in the check deciding whether or not the device's power.must_resume flag needs to be set, so it covers the device's active children counter in addition to its runtime PM usage counter, rearrange that check and adjust the comment next to it. Signed-off-by: Rafael J. Wysocki --- drivers/base/power/main.c | 12 +++++------- drivers/base/power/runtime.c | 2 +- include/linux/pm_runtime.h | 2 ++ 3 files changed, 8 insertions(+), 8 deletions(-) --- a/drivers/base/power/main.c +++ b/drivers/base/power/main.c @@ -1268,14 +1268,12 @@ dev->power.is_noirq_suspended = true; /* - * Skipping the resume of devices that were in use right before the - * system suspend (as indicated by their PM-runtime usage counters) - * would be suboptimal. Also resume them if doing that is not allowed - * to be skipped. + * If it is not allowed to skip the resume of the device or it was in + * use before the system suspend has started (in which case it needs to + * be resumed for consistency), set the "must resume" flag for it. */ - if (atomic_read(&dev->power.usage_count) > 1 || - !(dev_pm_test_driver_flags(dev, DPM_FLAG_MAY_SKIP_RESUME) && - dev->power.may_skip_resume)) + if (!(dev_pm_test_driver_flags(dev, DPM_FLAG_MAY_SKIP_RESUME) && + dev->power.may_skip_resume) || !pm_runtime_need_not_resume(dev)) dev->power.must_resume = true; if (dev->power.must_resume) { --- a/drivers/base/power/runtime.c +++ b/drivers/base/power/runtime.c @@ -1874,7 +1874,7 @@ pm_request_idle(link->supplier); } -static bool pm_runtime_need_not_resume(struct device *dev) +bool pm_runtime_need_not_resume(struct device *dev) { return atomic_read(&dev->power.usage_count) <= 1 && (atomic_read(&dev->power.child_count) == 0 || --- a/include/linux/pm_runtime.h +++ b/include/linux/pm_runtime.h @@ -66,6 +66,7 @@ extern int pm_generic_runtime_suspend(struct device *dev); extern int pm_generic_runtime_resume(struct device *dev); +extern bool pm_runtime_need_not_resume(struct device *dev); extern int pm_runtime_force_suspend(struct device *dev); extern int pm_runtime_force_resume(struct device *dev); @@ -254,6 +255,7 @@ static inline int pm_generic_runtime_suspend(struct device *dev) { return 0; } static inline int pm_generic_runtime_resume(struct device *dev) { return 0; } +static inline bool pm_runtime_need_not_resume(struct device *dev) {return true; } static inline int pm_runtime_force_suspend(struct device *dev) { return 0; } static inline int pm_runtime_force_resume(struct device *dev) { return 0; } From patchwork Tue Feb 11 21:11:42 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Rafael J. Wysocki" X-Patchwork-Id: 865717 Received: from cloudserver094114.home.pl (cloudserver094114.home.pl [79.96.170.134]) (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 A9C9D2627EE; Tue, 11 Feb 2025 21:25:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=79.96.170.134 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739309156; cv=none; b=JHoHTP2HVdzINxP6PatIVMwyanKHQe+mXxtr/3Ih7pnN2lTHiTetFnvKLeP6ncjaP5r91NwSwHG0QzHObZqvtZ4QsNV66FFvSXRA6LuQi+Z0vMvMbXE7uTI8MQ8pAy4IwmISYUB/hbjRWOBSj5lsVdpe40/LCkp+0Q8DleWVdmo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739309156; c=relaxed/simple; bh=RWDhH8aBvtwB31yfyrq93XAA2QMV2NPAWaWlvDad8Aw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=WiJijbkBzMN1/X701PBKHnpnU0vQCkaFWMZdsq1/ncia+T2NymDcuMndsGAd/POl/ZftDUA+vS7as7PJ3rF84pfNpHRFclv3H7S+nrrygxlbKhqIyqNIBcMWsJ2N5B8JZGTjCHUH+ttXVLlAkia6brmC51pnXFtaYqAyWE4FQ8s= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rjwysocki.net; spf=pass smtp.mailfrom=rjwysocki.net; dkim=pass (2048-bit key) header.d=rjwysocki.net header.i=@rjwysocki.net header.b=A1sBXudh; arc=none smtp.client-ip=79.96.170.134 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rjwysocki.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rjwysocki.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rjwysocki.net header.i=@rjwysocki.net header.b="A1sBXudh" Received: from localhost (127.0.0.1) (HELO v370.home.net.pl) by /usr/run/smtp (/usr/run/postfix/private/idea_relay_lmtp) via UNIX with SMTP (IdeaSmtpServer 6.2.1) id 90ab42b8ac642b3b; Tue, 11 Feb 2025 22:25:46 +0100 Received: from kreacher.localnet (unknown [195.136.19.94]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by cloudserver094114.home.pl (Postfix) with ESMTPSA id 3A65E770175; Tue, 11 Feb 2025 22:25:46 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rjwysocki.net; s=dkim; t=1739309146; bh=RWDhH8aBvtwB31yfyrq93XAA2QMV2NPAWaWlvDad8Aw=; h=From:Subject:Date; b=A1sBXudh+cnMY8vi+n5HqzMXOTfHp4+QmTeQiUprmfQG7OzrY0YPq8Ox01fcwHLgT 89/2QnVyQfHJybxRStV+ssH4Yqy5kc2ceMl3UhG+id0FUfeA3VMY7fMG9ms8XALyB6 P3DNheGK9zlxmHXlyK/IuDcAfYQ0j1DoOsA9eh2BM68WZzAVq/z6MBw4JUMNUZH5hd 5AaKV6kUPyZ85I+I2KvKjhslBpPhzfRZywP23xs744MmITUDfoJ3gZHUyxbcd9O4Cy JJt73UJQ8/n5QdKfVbFVDeMhgy7ZXm9Ow800M/9uCsDBUpT5f38+Q8KWMGZDI2uxTU 2upvCl6JwmG1g== From: "Rafael J. Wysocki" To: Linux PM Cc: LKML , Alan Stern , Ulf Hansson , Johan Hovold , Manivannan Sadhasivam , Jon Hunter Subject: [PATCH v1 07/10] PM: sleep: Clear the power.set_active upfront Date: Tue, 11 Feb 2025 22:11:42 +0100 Message-ID: <23846285.6Emhk5qWAg@rjwysocki.net> In-Reply-To: <2314745.iZASKD2KPV@rjwysocki.net> References: <2314745.iZASKD2KPV@rjwysocki.net> Precedence: bulk X-Mailing-List: linux-pm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-CLIENT-IP: 195.136.19.94 X-CLIENT-HOSTNAME: 195.136.19.94 X-VADE-SPAMSTATE: clean X-VADE-SPAMCAUSE: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgdegvddtkecutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfjqffogffrnfdpggftiffpkfenuceurghilhhouhhtmecuudehtdenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujfgurhephffvvefufffkjghfggfgtgesthfuredttddtjeenucfhrhhomhepfdftrghfrggvlhculfdrucghhihsohgtkhhifdcuoehrjhifsehrjhifhihsohgtkhhirdhnvghtqeenucggtffrrghtthgvrhhnpedvffeuiedtgfdvtddugeeujedtffetteegfeekffdvfedttddtuefhgeefvdejhfenucfkphepudelhedrudefiedrudelrdelgeenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepihhnvghtpeduleehrddufeeirdduledrleegpdhhvghlohepkhhrvggrtghhvghrrdhlohgtrghlnhgvthdpmhgrihhlfhhrohhmpehrjhifsehrjhifhihsohgtkhhirdhnvghtpdhnsggprhgtphhtthhopeejpdhrtghpthhtoheplhhinhhugidqphhmsehvghgvrhdrkhgvrhhnvghlrdhorhhgpdhrtghpthhtoheplhhinhhugidqkhgvrhhnvghlsehvghgvrhdrkhgvrhhnvghlrdhorhhgpdhrtghpthhtohepshhtvghrnhesrhhofihlrghnugdrhhgrrhhvrghrugdrvgguuhdprhgtphhtthhopehulhhfrdhhrghnshhsohhnsehlihhnrghrohdrohhrghdprhgtphhtthhopehjohhhrghnsehkvghrnhgvlhdrohhrghdprhgtphh X-DCC--Metrics: v370.home.net.pl 1024; Body=7 Fuz1=7 Fuz2=7 From: Rafael J. Wysocki Instead of clearing power.set_active right after it has been used, clear it when the other related flags (power.may_skip_resume and power.must_resume) are initialized, so it remains set throughout system-wide resume transitions and can be checked at any time while they are still in progress. This is done in preparation for subsequent changes and it should not alter the kernel behavior. Signed-off-by: Rafael J. Wysocki --- drivers/base/power/main.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) --- a/drivers/base/power/main.c +++ b/drivers/base/power/main.c @@ -659,12 +659,10 @@ * status to "active" unless its power.set_active flag is clear, in * which case it is not necessary to update its PM-runtime status. */ - if (skip_resume) { + if (skip_resume) pm_runtime_set_suspended(dev); - } else if (dev->power.set_active) { + else if (dev->power.set_active) pm_runtime_set_active(dev); - dev->power.set_active = false; - } if (dev->pm_domain) { info = "noirq power domain "; @@ -1662,6 +1660,7 @@ dev->power.may_skip_resume = true; dev->power.must_resume = !dev_pm_test_driver_flags(dev, DPM_FLAG_MAY_SKIP_RESUME); + dev->power.set_active = false; dpm_watchdog_set(&wd, dev); device_lock(dev); From patchwork Tue Feb 11 21:19:13 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Rafael J. Wysocki" X-Patchwork-Id: 864302 Received: from cloudserver094114.home.pl (cloudserver094114.home.pl [79.96.170.134]) (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 AC7F32627EC; Tue, 11 Feb 2025 21:25:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=79.96.170.134 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739309155; cv=none; b=e00qaohZjYwzPEvtbNmdeLhtzxhLaxHaAcDYP0dnRXko+gCBJJyl2Y5JLgafgoDCm2373m48qQG7v0V9UL+TlP5XsiyK009DbJG+p+aIdVKbyagIebcHcFbp27YEi9n8zk4ZbyT4AZn7m1emkeG9wcPhY2sUzNKILl2Jo8HO95Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739309155; c=relaxed/simple; bh=OrkfWzk4rOwXdbaA05EwAtgqA26NxnytAlDoPhIdPEY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=lQKewzB4C7EJp0tEmLWWCVx6tV68dGKmoIdL5NkoGtfKpr1emFeU6eFGmhNclUlpHOaFs20EXEctVy+cJjlvdyt7EPsfcLw8Bv6T9PTc0zSIpMHSGtVytJzp0GCRZXTyVSRghI46hfCU7gvPbQOi2qfuFwGJf78CN9B4ZdXNCUQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rjwysocki.net; spf=pass smtp.mailfrom=rjwysocki.net; dkim=pass (2048-bit key) header.d=rjwysocki.net header.i=@rjwysocki.net header.b=FSG2BFPQ; arc=none smtp.client-ip=79.96.170.134 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rjwysocki.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rjwysocki.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rjwysocki.net header.i=@rjwysocki.net header.b="FSG2BFPQ" Received: from localhost (127.0.0.1) (HELO v370.home.net.pl) by /usr/run/smtp (/usr/run/postfix/private/idea_relay_lmtp) via UNIX with SMTP (IdeaSmtpServer 6.2.1) id 78dce38ef4c9466c; Tue, 11 Feb 2025 22:25:45 +0100 Received: from kreacher.localnet (unknown [195.136.19.94]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by cloudserver094114.home.pl (Postfix) with ESMTPSA id 22772770175; Tue, 11 Feb 2025 22:25:45 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rjwysocki.net; s=dkim; t=1739309145; bh=OrkfWzk4rOwXdbaA05EwAtgqA26NxnytAlDoPhIdPEY=; h=From:Subject:Date; b=FSG2BFPQjhriNkTqRtnzq0OrBIgfgx2ep5iuEt2gejMEWnyM3l7hdoidJh4/mVduH tHgLmva6h7hJsvRaWPH7gfLygILxQPVnhCT6e2eaoc64tgXrbCiLrowIkW13BciI6v Bpvmon0Finl0+tAos4MAjLvkoM6kbf8IA4rSYGG9qqGZDP9NM4wcrGPUtKWZ/z0bGe 1TKWnHWTtRHK92ZzPWFCmysMQTAARoTVaus92G1QrNhTwfQZrrZHkxuwAE7Jp1TYH2 KS+4vbUhUzLArViUz2yDTQadJc7maDOA0huMny1rj7rwlxvyoH9+l2sQZgXZhjA+Jl 6GtkSLiexCrlQ== From: "Rafael J. Wysocki" To: Linux PM , Ulf Hansson Cc: LKML , Alan Stern , Johan Hovold , Manivannan Sadhasivam , Jon Hunter , Tony Lindgren Subject: [PATCH v1 08/10] PM: sleep: Make pm_runtime_force_resume() look at power.set_active Date: Tue, 11 Feb 2025 22:19:13 +0100 Message-ID: <3817761.MHq7AAxBmi@rjwysocki.net> In-Reply-To: <2314745.iZASKD2KPV@rjwysocki.net> References: <2314745.iZASKD2KPV@rjwysocki.net> Precedence: bulk X-Mailing-List: linux-pm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-CLIENT-IP: 195.136.19.94 X-CLIENT-HOSTNAME: 195.136.19.94 X-VADE-SPAMSTATE: clean X-VADE-SPAMCAUSE: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgdegvddtjecutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfjqffogffrnfdpggftiffpkfenuceurghilhhouhhtmecuudehtdenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujfgurhephffvvefufffkjghfggfgtgesthfuredttddtjeenucfhrhhomhepfdftrghfrggvlhculfdrucghhihsohgtkhhifdcuoehrjhifsehrjhifhihsohgtkhhirdhnvghtqeenucggtffrrghtthgvrhhnpedvffeuiedtgfdvtddugeeujedtffetteegfeekffdvfedttddtuefhgeefvdejhfenucfkphepudelhedrudefiedrudelrdelgeenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepihhnvghtpeduleehrddufeeirdduledrleegpdhhvghlohepkhhrvggrtghhvghrrdhlohgtrghlnhgvthdpmhgrihhlfhhrohhmpehrjhifsehrjhifhihsohgtkhhirdhnvghtpdhnsggprhgtphhtthhopeekpdhrtghpthhtoheplhhinhhugidqphhmsehvghgvrhdrkhgvrhhnvghlrdhorhhgpdhrtghpthhtohepuhhlfhdrhhgrnhhsshhonheslhhinhgrrhhordhorhhgpdhrtghpthhtoheplhhinhhugidqkhgvrhhnvghlsehvghgvrhdrkhgvrhhnvghlrdhorhhgpdhrtghpthhtohepshhtvghrnhesrhhofihlrghnugdrhhgrrhhvrghrugdrvgguuhdprhgtphhtthhopehjohhhrghnsehkvghrnhgvlhdrohhrghdprhgtphh X-DCC--Metrics: v370.home.net.pl 1024; Body=8 Fuz1=8 Fuz2=8 From: Rafael J. Wysocki In theory (and also in practice after a change to come), pm_runtime_force_resume() can be called on a device with power.set_active set, in which case the core has already called pm_runtime_set_active() on it, and power.needs_force_resume may be clear. This happens when the core decides to resume a device because new information on it has become available during the "noirq" phase of system-wide suspend. In order to handle that case properly, make pm_runtime_force_resume() look at power.set_active in addition to power.needs_force_resume, so it does not skip the device when the former is set. Namely, make it invoke the callback for the device then, but without disabling the wake IRQ if pm_runtime_force_resume() has not enabled it. Also clear power.set_active in pm_runtime_force_resume() to prevent it from being taken into account twice in a row. Additionally, adjust the pm_runtime_force_resume() kerneldoc comment and the code comments inside it. Moreover, remove a remark regarding DPM_FLAG_SMART_SUSPEND from the pm_runtime_force_suspend() kerneldoc comment because it is not valid any more after this change. This change is not expected to alter the behavior in the case when power.needs_force_resume is set. Signed-off-by: Rafael J. Wysocki --- Unfortunately, I have not found a way to do this without adding a new device PM flag and now there are 2 flags specifically for pm_runtime_force_suspend/resume() which is a bit sad. Questions for Ulf: (1) How is the enabling of wakeirqs handled for devices that are runtime- suspended before system suspend, so pm_runtime_force_suspend() skips them? (2) What is supposed to happen to wakeirqs during system resume after pm_runtime_force_suspend() has enabled them, but hasn't set power.needs_force_resume at the same time? --- drivers/base/power/runtime.c | 41 ++++++++++++++++++++++++++--------------- include/linux/pm.h | 1 + 2 files changed, 27 insertions(+), 15 deletions(-) --- a/drivers/base/power/runtime.c +++ b/drivers/base/power/runtime.c @@ -1897,10 +1897,6 @@ * sure the device is put into low power state and it should only be used during * system-wide PM transitions to sleep states. It assumes that the analogous * pm_runtime_force_resume() will be used to resume the device. - * - * Do not use with DPM_FLAG_SMART_SUSPEND as this can lead to an inconsistent - * state where this function has called the ->runtime_suspend callback but the - * PM core marks the driver as runtime active. */ int pm_runtime_force_suspend(struct device *dev) { @@ -1923,6 +1919,7 @@ goto err; dev_pm_enable_wake_irq_complete(dev); + dev->power.wake_irq_enabled = true; /* * If the device can stay in suspend after the system-wide transition @@ -1950,31 +1947,39 @@ * pm_runtime_force_resume - Force a device into resume state if needed. * @dev: Device to resume. * - * Prior invoking this function we expect the user to have brought the device - * into low power state by a call to pm_runtime_force_suspend(). Here we reverse - * those actions and bring the device into full power, if it is expected to be - * used on system resume. In the other case, we defer the resume to be managed - * via runtime PM. + * The primary role of this function is to reverse the actions carried out by + * pm_runtime_force_suspend() for @dev, so it must always be balanced with a + * matching invocation of the latter. Accordingly, it is only valid to call + * this function during system-wide resume transitions. + * + * Typically, it is used as a system resume callback of a device driver. * - * Typically this function may be invoked from a system resume callback. + * However, if @dev had been runtime-suspended before pm_runtime_force_suspend() + * was called for it and that function did nothing, but power.set_active has + * been set for it by the core, it still needs to be resumed. That special case + * is also handled by this function. */ int pm_runtime_force_resume(struct device *dev) { int (*callback)(struct device *); int ret = 0; - if (!dev->power.needs_force_resume) + if (!dev->power.needs_force_resume && !dev->power.set_active) goto out; /* - * The value of the parent's children counter is correct already, so - * just update the status of the device. + * The parent's active children counter an the suppliers' usage counters + * are correct already, so just update the status (even though it is + * already RPM_ACTIVE if power.set_active is set). */ __update_runtime_status(dev, RPM_ACTIVE); - callback = RPM_GET_CALLBACK(dev, runtime_resume); + if (dev->power.wake_irq_enabled) { + dev_pm_disable_wake_irq_check(dev, false); + dev->power.wake_irq_enabled = false; + } - dev_pm_disable_wake_irq_check(dev, false); + callback = RPM_GET_CALLBACK(dev, runtime_resume); ret = callback ? callback(dev) : 0; if (ret) { pm_runtime_set_suspended(dev); @@ -1982,6 +1987,12 @@ } pm_runtime_mark_last_busy(dev); + /* + * Clear power.set_active in case this function runs for the same + * device again. + */ + dev->power.set_active = false; + out: dev->power.needs_force_resume = 0; pm_runtime_enable(dev); --- a/include/linux/pm.h +++ b/include/linux/pm.h @@ -698,6 +698,7 @@ bool request_pending:1; bool deferred_resume:1; bool needs_force_resume:1; + bool wake_irq_enabled:1; bool runtime_auto:1; bool ignore_children:1; bool no_callbacks:1; From patchwork Tue Feb 11 21:21:23 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Rafael J. Wysocki" X-Patchwork-Id: 865719 Received: from cloudserver094114.home.pl (cloudserver094114.home.pl [79.96.170.134]) (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 C088D2627EB; Tue, 11 Feb 2025 21:25:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=79.96.170.134 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739309156; cv=none; b=YePxszIC38zJ7y0FJU/wY75mP9Ju4Np91P/1ZLd2hWdi+QuU1ExSOzMD8K6GQ8fQD7tnPPDcGRfsoCHRq1HFcQfI195yEbPw7wKZm0F6BbFCm883Qx/y6bHKA/nnIhY3pgQotiD0A+BEsn2etVOq7P1Iw+5Ju+/ZJqGUt34b9XY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739309156; c=relaxed/simple; bh=VuoTSEigWNJYu31OKoch+f2/NllpSnLp4IFoEBBOo+Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=KnM8R4sQ8pRicuW9XZNpH8WClMmhZn6hHsx31MBmKb2KCLfzbM0RT7IXWsGm1oyyT+UJGARdgRJ1x9K2+AhZ+TcNz8TbPUSyTrwEukZuQf5o+3o+VFUIiT3sgRGm1+pAyvXjcLqzvkZPMERD+MuQESv13aZMYWT9IPTqQgghbAI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rjwysocki.net; spf=pass smtp.mailfrom=rjwysocki.net; dkim=pass (2048-bit key) header.d=rjwysocki.net header.i=@rjwysocki.net header.b=Qj7hL1Yt; arc=none smtp.client-ip=79.96.170.134 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rjwysocki.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rjwysocki.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rjwysocki.net header.i=@rjwysocki.net header.b="Qj7hL1Yt" Received: from localhost (127.0.0.1) (HELO v370.home.net.pl) by /usr/run/smtp (/usr/run/postfix/private/idea_relay_lmtp) via UNIX with SMTP (IdeaSmtpServer 6.2.1) id cf83882a7dc398e9; Tue, 11 Feb 2025 22:25:44 +0100 Received: from kreacher.localnet (unknown [195.136.19.94]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by cloudserver094114.home.pl (Postfix) with ESMTPSA id 371AD770175; Tue, 11 Feb 2025 22:25:44 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rjwysocki.net; s=dkim; t=1739309144; bh=VuoTSEigWNJYu31OKoch+f2/NllpSnLp4IFoEBBOo+Y=; h=From:Subject:Date; b=Qj7hL1YtcpTwjSNbpGXCbnyb9gD7oW8SXlIH9yNV35gYEjLSZmUiG54x22N02VWoo cYaw3rBdIDmYY0TNMw8VW9DHS4ss7r3DILJLoQWFJe3cmucOoiDlBdcID3VG1AqhrV F6WPOdXXdBAHjQHkUWjWUCkd8YMRbpDoAvFSWncONqEtOorCFe5qF3M9bX1Tjc/irp +beMIHRzLynd1B0In1mjuRyjTUtgwcXa8z8S2wvKQ7D5BUoPU6iCVIQ99/IItv1t4w qB5qUEdn+02pqMbVuPAmz706uvmpu8LreJ/CCKuid1OKqd4mwoKYLqaSf9is/DzqV7 hjaqmPnKy67fA== From: "Rafael J. Wysocki" To: Linux PM Cc: LKML , Alan Stern , Ulf Hansson , Johan Hovold , Manivannan Sadhasivam , Jon Hunter Subject: [PATCH v1 09/10] PM: sleep: Propagate power.set_active in dependency chains Date: Tue, 11 Feb 2025 22:21:23 +0100 Message-ID: <47028492.fMDQidcC6G@rjwysocki.net> In-Reply-To: <2314745.iZASKD2KPV@rjwysocki.net> References: <2314745.iZASKD2KPV@rjwysocki.net> Precedence: bulk X-Mailing-List: linux-pm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-CLIENT-IP: 195.136.19.94 X-CLIENT-HOSTNAME: 195.136.19.94 X-VADE-SPAMSTATE: clean X-VADE-SPAMCAUSE: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgdegvddtkecutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfjqffogffrnfdpggftiffpkfenuceurghilhhouhhtmecuudehtdenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujfgurhephffvvefufffkjghfggfgtgesthfuredttddtjeenucfhrhhomhepfdftrghfrggvlhculfdrucghhihsohgtkhhifdcuoehrjhifsehrjhifhihsohgtkhhirdhnvghtqeenucggtffrrghtthgvrhhnpedvffeuiedtgfdvtddugeeujedtffetteegfeekffdvfedttddtuefhgeefvdejhfenucfkphepudelhedrudefiedrudelrdelgeenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepihhnvghtpeduleehrddufeeirdduledrleegpdhhvghlohepkhhrvggrtghhvghrrdhlohgtrghlnhgvthdpmhgrihhlfhhrohhmpehrjhifsehrjhifhihsohgtkhhirdhnvghtpdhnsggprhgtphhtthhopeejpdhrtghpthhtoheplhhinhhugidqphhmsehvghgvrhdrkhgvrhhnvghlrdhorhhgpdhrtghpthhtoheplhhinhhugidqkhgvrhhnvghlsehvghgvrhdrkhgvrhhnvghlrdhorhhgpdhrtghpthhtohepshhtvghrnhesrhhofihlrghnugdrhhgrrhhvrghrugdrvgguuhdprhgtphhtthhopehulhhfrdhhrghnshhsohhnsehlihhnrghrohdrohhrghdprhgtphhtthhopehjohhhrghnsehkvghrnhgvlhdrohhrghdprhgtphh X-DCC--Metrics: v370.home.net.pl 1024; Body=7 Fuz1=7 Fuz2=7 From: Rafael J. Wysocki After preparing pm_runtime_force_resume() for dealing with devices having power.set_active set, make the core propagate that flag in dependency chains, so that subordinate device are resumed along with the ones that they depend on, but take exceptions into account. Namely, do not set power.set_active for devices that have never had runtime PM enabled, for parents that have power.ignore_children set and for suppliers coming from device links with DL_FLAG_PM_RUNTIME unset. Signed-off-by: Rafael J. Wysocki --- drivers/base/power/main.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) --- a/drivers/base/power/main.c +++ b/drivers/base/power/main.c @@ -1189,18 +1189,31 @@ return PMSG_ON; } +static void dpm_cond_set_active(struct device *dev, bool cond) +{ + if (cond && !pm_runtime_no_support(dev)) + dev->power.set_active = true; +} + static void dpm_superior_set_must_resume(struct device *dev) { + bool set_active = dev->power.set_active; struct device_link *link; int idx; - if (dev->parent) + if (dev->parent) { dev->parent->power.must_resume = true; + dpm_cond_set_active(dev->parent, set_active && + !dev->parent->power.ignore_children); + } idx = device_links_read_lock(); - list_for_each_entry_rcu_locked(link, &dev->links.suppliers, c_node) + list_for_each_entry_rcu_locked(link, &dev->links.suppliers, c_node) { link->supplier->power.must_resume = true; + dpm_cond_set_active(link->supplier, set_active && + (link->flags & DL_FLAG_PM_RUNTIME)); + } device_links_read_unlock(idx); } @@ -1277,13 +1290,7 @@ dev->power.must_resume = true; if (dev->power.must_resume) { - if (dev_pm_test_driver_flags(dev, DPM_FLAG_SMART_SUSPEND) && - !pm_runtime_no_support(dev)) { - dev->power.set_active = true; - if (dev->parent && !dev->parent->power.ignore_children && - !pm_runtime_no_support(dev->parent)) - dev->parent->power.set_active = true; - } + dpm_cond_set_active(dev, dev_pm_test_driver_flags(dev, DPM_FLAG_SMART_SUSPEND)); dpm_superior_set_must_resume(dev); } From patchwork Tue Feb 11 21:25:29 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Rafael J. Wysocki" X-Patchwork-Id: 864303 Received: from cloudserver094114.home.pl (cloudserver094114.home.pl [79.96.170.134]) (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 590B32627E3; Tue, 11 Feb 2025 21:25:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=79.96.170.134 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739309154; cv=none; b=pw8QZobIflxXVpeznX4Azn3K3CE8+aMoQBr1oh8sMJSq9lIosvXuW1sUzlFrk9JROHMnDayuqrAxLqmLq0r3QTqMeKqSUyCdrVGfQ49pRCRYeOH6u0K36LuDGPKRlJviO4INP6RyJkQxU1sNUNCzdZk5JlgnvMz+PiG78kKWvbo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739309154; c=relaxed/simple; bh=cRfV58Kh8+/WrvCJJWhBR/V0oGVgKQc3FHgkhJO9CEE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=rbd4k5MLGgZfCl3LiR2LOfxbVQvHexpkRo/J9XapRjG0+Q4mdsK1ydHJegHx3mysPJA74hdUrzdnJZ8666LAmoSvGh3ZUMz34UQFebQTI002Z2qhD0B0HPjI0B+Dw6of1/+esGJbX2hq0SCqQGRSxeBUfFH2zutIUooNBLoHj/8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rjwysocki.net; spf=pass smtp.mailfrom=rjwysocki.net; dkim=pass (2048-bit key) header.d=rjwysocki.net header.i=@rjwysocki.net header.b=KAmVYPl3; arc=none smtp.client-ip=79.96.170.134 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rjwysocki.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rjwysocki.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rjwysocki.net header.i=@rjwysocki.net header.b="KAmVYPl3" Received: from localhost (127.0.0.1) (HELO v370.home.net.pl) by /usr/run/smtp (/usr/run/postfix/private/idea_relay_lmtp) via UNIX with SMTP (IdeaSmtpServer 6.2.1) id 31469b2175be8e51; Tue, 11 Feb 2025 22:25:43 +0100 Received: from kreacher.localnet (unknown [195.136.19.94]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by cloudserver094114.home.pl (Postfix) with ESMTPSA id 3E994770175; Tue, 11 Feb 2025 22:25:43 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rjwysocki.net; s=dkim; t=1739309143; bh=cRfV58Kh8+/WrvCJJWhBR/V0oGVgKQc3FHgkhJO9CEE=; h=From:Subject:Date; b=KAmVYPl3THXVXJPDHj7GSdRgIqGt6gy1+wrnDKKSB0vpQEpPX1ZBWZB7PJTugLHg1 Axni2/ZNjmuWWPcWjtPcKgLb7Tqalcj8+pp7WsPsudQ0YTkHgiNeV9qMDelXV1BI+i NlYXkH9KBVtDCgj8yAVpw1hYxA93kAxNqyOCI72eFVKG/KxsqNr+B9RQLUzv0/I++S F4gimHNrsZ7+9ETrZrxmyM2vV75SLCuTxD5g2SKcmFKqw4OUZZhOfG1aWaVEQGVRtf ccbeKgni+wMor+wWQ0mpydz7ru/eRS6NYp2PSOJqPOVUl3hYFlzxzFKiAJL2gR1b9A 6u19KVx+2i0uQ== From: "Rafael J. Wysocki" To: Linux PM Cc: LKML , Alan Stern , Ulf Hansson , Johan Hovold , Manivannan Sadhasivam , Jon Hunter Subject: [PATCH v1 10/10] PM: runtime: Discover the lack of runtime PM support Date: Tue, 11 Feb 2025 22:25:29 +0100 Message-ID: <2511990.jE0xQCEvom@rjwysocki.net> In-Reply-To: <2314745.iZASKD2KPV@rjwysocki.net> References: <2314745.iZASKD2KPV@rjwysocki.net> Precedence: bulk X-Mailing-List: linux-pm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-CLIENT-IP: 195.136.19.94 X-CLIENT-HOSTNAME: 195.136.19.94 X-VADE-SPAMSTATE: clean X-VADE-SPAMCAUSE: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgdegvddtkecutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfjqffogffrnfdpggftiffpkfenuceurghilhhouhhtmecuudehtdenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujfgurhephffvvefufffkjghfggfgtgesthfuredttddtjeenucfhrhhomhepfdftrghfrggvlhculfdrucghhihsohgtkhhifdcuoehrjhifsehrjhifhihsohgtkhhirdhnvghtqeenucggtffrrghtthgvrhhnpedvffeuiedtgfdvtddugeeujedtffetteegfeekffdvfedttddtuefhgeefvdejhfenucfkphepudelhedrudefiedrudelrdelgeenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepihhnvghtpeduleehrddufeeirdduledrleegpdhhvghlohepkhhrvggrtghhvghrrdhlohgtrghlnhgvthdpmhgrihhlfhhrohhmpehrjhifsehrjhifhihsohgtkhhirdhnvghtpdhnsggprhgtphhtthhopeejpdhrtghpthhtoheplhhinhhugidqphhmsehvghgvrhdrkhgvrhhnvghlrdhorhhgpdhrtghpthhtoheplhhinhhugidqkhgvrhhnvghlsehvghgvrhdrkhgvrhhnvghlrdhorhhgpdhrtghpthhtohepshhtvghrnhesrhhofihlrghnugdrhhgrrhhvrghrugdrvgguuhdprhgtphhtthhopehulhhfrdhhrghnshhsohhnsehlihhnrghrohdrohhrghdprhgtphhtthhopehjohhhrghnsehkvghrnhgvlhdrohhrghdprhgtphh X-DCC--Metrics: v370.home.net.pl 1024; Body=7 Fuz1=7 Fuz2=7 From: Rafael J. Wysocki Previous changes have updated the PM core to special-case devices that have never had runtime PM enabled in some places, but what if a device had had runtime PM enabled at one point, but then it was permanently disabled? Arguably, there is not much of a difference between such devices and the devices that have never had runtime PM enabled as far as system-wide suspend and resume is concerned, so they should be handled in the same way. For this reason, add a mechanism for discovering "lost" runtime PM support in devices with the help of the power.last_status field used for saving the last runtime PM status of the device known at the time when runtime PM was disabled for it. That field is set to RPM_INVALID initially and whenever runtime PM is enabled for a device (that is, when its power.disable_depth counter drops down to zero) and it is set to the current runtime PM status of the device when runtime PM is disabled (that is, the power.disable_depth counter becomes nonzero). Therefore, if power.last_status is equal to RPM_INVALID for a device with runtime PM disabled, it means that runtime PM has never been enabled for that device. The PM core will now change the power.last_status value to RPM_UNKNOWN for devices having runtime PM disabled and power.last_status different from RPM_INVALID during the "prepare" phase of system suspend. Then, __pm_runtime_disable() called subsequently on the device will set power.last_status to RPM_INVALID unless it changes from RPM_UNKNOWN to some other value in the meantime which requires enabling runtime PM for the device. When power.last_status becomes RPM_INVALID and runtime PM is still disabled, the device will be handled as a "no runtime PM support" one from that point on until runtime PM is enabled for it again. Signed-off-by: Rafael J. Wysocki --- drivers/base/power/main.c | 6 ++++++ drivers/base/power/runtime.c | 25 +++++++++++++++++++++++++ include/linux/pm.h | 1 + include/linux/pm_runtime.h | 2 ++ 4 files changed, 34 insertions(+) --- a/drivers/base/power/main.c +++ b/drivers/base/power/main.c @@ -1817,6 +1817,12 @@ * it again during the complete phase. */ pm_runtime_get_noresume(dev); + /* + * Devices that have had runtime PM disabled recently may need to be + * handled as though they have never supported it, so arrange for + * detecting that situation. + */ + pm_runtime_kick_last_status(dev); if (dev->power.syscore) return 0; --- a/drivers/base/power/runtime.c +++ b/drivers/base/power/runtime.c @@ -1480,6 +1480,9 @@ if (dev->power.disable_depth > 0) { dev->power.disable_depth++; + if (dev->power.last_status == RPM_UNKNOWN) + dev->power.last_status = RPM_INVALID; + goto out; } @@ -1568,6 +1571,28 @@ EXPORT_SYMBOL_GPL(devm_pm_runtime_enable); /** + * pm_runtime_kick_last_status - Start runtime PM support verification. + * @dev: Target device. + * + * If runtime PM is currently disabled for @dev, but it has been enabled at one + * point, change power.last_status for it to RPM_UNKNOWN, and if it is still + * RPM_UNKNOWN when __pm_runtime_disabled() is called for @dev next time, it + * will be changed to RPM_INVALID indicating no runtime PM support going + * forward until pm_runtime_enable() is called for @dev. + * + * This function is used by the PM core. + */ +void pm_runtime_kick_last_status(struct device *dev) +{ + spin_lock_irq(&dev->power.lock); + + if (dev->power.disable_depth && dev->power.last_status != RPM_INVALID) + dev->power.last_status = RPM_UNKNOWN; + + spin_unlock_irq(&dev->power.lock); +} + +/** * pm_runtime_forbid - Block runtime PM of a device. * @dev: Device to handle. * --- a/include/linux/pm.h +++ b/include/linux/pm.h @@ -597,6 +597,7 @@ RPM_RESUMING, RPM_SUSPENDED, RPM_SUSPENDING, + RPM_UNKNOWN, }; /* --- a/include/linux/pm_runtime.h +++ b/include/linux/pm_runtime.h @@ -80,6 +80,7 @@ extern int pm_runtime_barrier(struct device *dev); extern void pm_runtime_enable(struct device *dev); extern void __pm_runtime_disable(struct device *dev, bool check_resume); +extern void pm_runtime_kick_last_status(struct device *dev); extern void pm_runtime_allow(struct device *dev); extern void pm_runtime_forbid(struct device *dev); extern void pm_runtime_no_callbacks(struct device *dev); @@ -288,6 +289,7 @@ static inline int pm_runtime_barrier(struct device *dev) { return 0; } static inline void pm_runtime_enable(struct device *dev) {} static inline void __pm_runtime_disable(struct device *dev, bool c) {} +static inline void pm_runtime_kick_last_status(struct device *dev) {} static inline void pm_runtime_allow(struct device *dev) {} static inline void pm_runtime_forbid(struct device *dev) {}