From nobody Mon Sep 28 16:22:29 2026 Received: from mail-pl1-f176.google.com (mail-pl1-f176.google.com [209.85.214.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A76113C09F5 for ; Wed, 19 Aug 2026 17:08:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787159334; cv=none; b=kYS0/2PAyXVJsIKC+T4IZTfYtXte5NbzaGpAxs62M5hjgOSjJ+NNrrYakTTcwjhm6uS7leQb+FG/9UraXp7Ux+NYNyd63NHKUf/INTi4BMTCf/UsClQbO92veFrECQqnmXULNEnjnhA0XrA4dyemDT366067CB+dSx7/DZL871A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787159334; c=relaxed/simple; bh=ZRTeKE9L28SSClA6R8MmhIQyoSwY0qQWWZ4jOPVVcJQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=tF6iDU8XYZ02U0ccYxdXPpAHRdf06rMLYTr0yR7W9q7NuaYt1Zk/daZ6cEhNH8qiYSr1iYDYYe3BasdX3N7HTbfY/4Gt1srycrr3NWtAQVFZjsq8LmnBlEU8R38qKlUv2AhF9xPYMfuTeOX+8nVtySkA9FrIYxRFYE5hRDCdtmM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre.com header.i=@baylibre.com header.b=Qq5ig/05; arc=none smtp.client-ip=209.85.214.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre.com header.i=@baylibre.com header.b="Qq5ig/05" Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-2ccf2360620so9912615ad.3 for ; Wed, 19 Aug 2026 10:08:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre.com; s=google; t=1787159331; x=1787764131; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=xUBSfKa41ClVExPzLchTVHN/6r9ZIx4CRl6lZXXhjbE=; b=Qq5ig/05UyHTbZ/+Y9rqJ9+i4RdmH8onYHEKBPSToP1LVGjb/AxkmsKvr388Plw/Ab RPRyINjLf2b+9f2hioj8TL61cQimr/Z/8keb2WpBaGZrAoDBEy/VShhd3JY8qwwLIx2W EkpCSVBb4zZCtHSxRKLRFgbP+8YiqgxCzg7RtzpVO7Y0K6aw/kFJOje1qrp2zBx9TpiT B19RcftdcVKm9RtljBddFp8JTKg95rn95VLvmToTVqMy4AtFsYstTqFconfoDkXwcMWp 0465YwJLEbk1wECLjvhuOCpaTpK1+aexRuhp1YVEM+BPDy0rjXOXqrLpjH/pD2zeCQof xfNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787159331; x=1787764131; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=xUBSfKa41ClVExPzLchTVHN/6r9ZIx4CRl6lZXXhjbE=; b=mX5v7fTXu89s0FrkgSVHBxKe8fOErRLsrlIkBxEGKaMLNGWIma0Dh3gFqAAXfcRgBf rmnY8fE1XnMgPsASLfdVUukznFY4duPTa5ICjI83cOT9G9ofgC4uWHvi6Co8fNDMF4sf ffLeEWaNumbbVAInHOFPq3eRGee5hLZin4gbKbqxr2N3Kp72RnSzNeKBggPtti0W4IDv y3tapurYOGht5AKfAwzktrtuuzV5VH8CNMc0oZpxu9v16dT7M0O1xk7wBnGXUkAYKweQ 64F1iMTbsb1uh4JAJrAj++oJo2H8WCSKkn4b3cfxe8jfsueCytuQRAcfjFdqz7Hoas7R AADw== X-Gm-Message-State: AFuF++kJPB2ncrodHCVEWJATYOeRWkzjwRNhtidfQn4mdBxWzMKiU4Q/ 3UpE3cmYP/axTEa+W2g1qL4doDbMmrRkuungJhnRF3Eg1wnNqLwBIk4fLl6PQGgtZF8= X-Gm-Gg: AR+sD10KZ30asI3frhXjxZmRAYR+ca8i6d7nA+kQv76J9DJxRvL2/Nqfx2aU/h+mPTl 4JjKH361pSMGxLEZ1PQvb5gyncEJAEFQif+tol9jONBTh4iT0K6e9ArrlQirPoobliTNBW/Ysxg WRwb2D6hgN8h5wxGIMEso9JM4/F1MZi69Or31ce6Ymu1XgtGIEf++/zEDwNCzDavcGC6ZjZkA/4 lqoaz4I+C47T+7KcgpEiVOlvt3v/SxDZqRX9eS0tHfWOerm2gsDnd788r3KqzrzGXcpvwnCXlZa IzelQyRJK6tOjMbucIyN+QcyOZGFrbgp1KGl/5oDjlESGsePikFTmiVwIws8JQ84OspCu3ka6vz MUDlt/7mA6a1j2YV6+feVGxXG0yc/3fIN5shKc2H8aNWDPsSMx4qaVn08MlLzHFYd2egUE8DwAl g0RKJCPrB2r6wE9FweQ9MvQ4p5/j/osSzhQx9FngZ+DwgUUwxl2NZhDGXthg== X-Received: by 2002:a17:903:b8c:b0:2d0:cc92:f7a9 with SMTP id d9443c01a7336-2d5fd69625fmr119939225ad.4.1787159331030; Wed, 19 Aug 2026 10:08:51 -0700 (PDT) Received: from localhost ([71.212.202.210]) by smtp.gmail.com with UTF8SMTPSA id d9443c01a7336-2d5bb499d4bsm30471145ad.4.2026.08.19.10.08.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Aug 2026 10:08:50 -0700 (PDT) From: "Kevin Hilman (TI)" Date: Wed, 19 Aug 2026 10:08:36 -0700 Subject: [PATCH v4 1/4] PM / QoS: add flag to indicate latency applies system-wide Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260819-topic-lpm-pmdomain-device-constraints-v4-1-7ceb095f5474@baylibre.com> References: <20260819-topic-lpm-pmdomain-device-constraints-v4-0-7ceb095f5474@baylibre.com> In-Reply-To: <20260819-topic-lpm-pmdomain-device-constraints-v4-0-7ceb095f5474@baylibre.com> To: "Rafael J. Wysocki" , linux-pm@vger.kernel.org, Ulf Hansson Cc: linux-kernel@vger.kernel.org X-Mailer: b4 0.16-dev X-Developer-Signature: v=1; a=openpgp-sha256; l=907; i=khilman@baylibre.com; h=from:subject:message-id; bh=ZRTeKE9L28SSClA6R8MmhIQyoSwY0qQWWZ4jOPVVcJQ=; b=owEBbQKS/ZANAwAIAVk3GJrT+8ZlAcsmYgBqheMgtfBgyxTLzLlxD9Zfo4Umj75SGpJOpzkfc W8grdPl3hOJAjMEAAEIAB0WIQR7h0YOFpJ/qfW/8QxZNxia0/vGZQUCaoXjIAAKCRBZNxia0/vG ZY8nD/0czsSND3cHagA//fG/XO2WympIGUl6XQ9WtsFBJ16Z2eu75/8pmRTTzOaEXz2wgBqkah6 xQUrdmB0jIV5aMU/654kfEI/LDO16osHfGTG/hnCctIL/St0XREvPv11kVz2wCEhQqgYR975p3d tvch7exQg4T8NIy4CTPYTJDANrVgSsG6yjNj+6avYEuHuNg5MZLAxlhXPUD51kGzu3ztjR4Jsnp Ivtrp5LGTgBmTE6Fhq6Hnj3vufTlpxjjk3FfE4GbskB2+ME2SFrtuHdKizHD5CPItVfXK6X3p+m W6NCVKCMm3iNImROgn1qbKYpTiazvY8wbSVXF9eQFkS2KOlSQ2vXm2zOWMj/TjtSmFqf+PVXALh hK2FE5iuZXjX/DgFcPXQgxGMiPbKlabb0uhrHeeaBClIUmbuKK4VJ47hRFheC0muUMq71qec/p4 X4AeYCiLFsPDjLhloHJbUXVKmSmICS94uNo2rjs4sm9X0ODDH2xpM0H4wzyUukbeeopC7jtw+St KR8CyWJFHOT+kg76KelTyUvgEn5pqXijSoR2odytrAgKTs2PtiqkCxpU8BHiA4W7xqa0bVbZg7t IvaTXiAQWZ1AZl1ael8vuclrYXWsiP8vnZwQZDH2OPxLFtOi+V8wq7K1zPXENpdZNnGNRFsuK1h uc3AeO/p3vZc/Ng== X-Developer-Key: i=khilman@baylibre.com; a=openpgp; fpr=7B87460E16927FA9F5BFF10C5937189AD3FBC665 By default, the QoS resume latency currenly only applied to runtime PM decisions. Add new PM_QOS_FLAG_LATENCY_SYS flag to indicate that the resume latency QoS constraint should be applied to system-wide PM *in addition to* runtime PM. Acked-by: Rafael J. Wysocki (Intel) Signed-off-by: Kevin Hilman (TI) Reviewed-by: Kendall Willis --- include/linux/pm_qos.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/linux/pm_qos.h b/include/linux/pm_qos.h index 6cea4455f867..aededda52b6b 100644 --- a/include/linux/pm_qos.h +++ b/include/linux/pm_qos.h @@ -37,6 +37,8 @@ enum pm_qos_flags_status { #define PM_QOS_LATENCY_TOLERANCE_NO_CONSTRAINT (-1) =20 #define PM_QOS_FLAG_NO_POWER_OFF (1 << 0) +/* latency value applies to system-wide suspend/s2idle */ +#define PM_QOS_FLAG_LATENCY_SYS (2 << 0) =20 enum pm_qos_type { PM_QOS_UNITIALIZED, --=20 2.47.3 From nobody Mon Sep 28 16:22:29 2026 Received: from mail-pj1-f47.google.com (mail-pj1-f47.google.com [209.85.216.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 917813C10B3 for ; Wed, 19 Aug 2026 17:08:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787159334; cv=none; b=SJvJRINl7VG25wEhq2zdnirIwhxEL8kh6SSriM2kxZoZ9Tlr2lRdANG4Ts5ulKQIeQXnX2oBpBb3s9qoqdM2Uka0gL+rXWPHuzcoRiHjsORpuFb5UOjQwnvBm+vskdbtzGAeyTw8V/MGajKrQD1CtYUVOx9cnhfMutIMd3uzbiA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787159334; c=relaxed/simple; bh=kT7l6yKHSWNEo0ZyKLhkRiOg4K1P7BnLKxXKfx2FbSM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=aYz4R0LQQzseHzfhL8DmKbcjiJN+LGO0PF9ATMs+zY96AvufSXRAA53AXX9qoHfh8ykBhg9lwHCxBv+JUfC8eATCzLNoQlySRBKG4phijyiZNdFDguFpDrrwc0ZDBomOSTJ+8zgGsj66OMd1ageM5Y5FJRfUN+k+ctNkefTAvAc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre.com header.i=@baylibre.com header.b=gAmintRX; arc=none smtp.client-ip=209.85.216.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre.com header.i=@baylibre.com header.b="gAmintRX" Received: by mail-pj1-f47.google.com with SMTP id 98e67ed59e1d1-38deea72eebso1390734a91.1 for ; Wed, 19 Aug 2026 10:08:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre.com; s=google; t=1787159332; x=1787764132; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Dqx7qHH4kG1tVW6pyBEk7S9H/Q9y6a6UvLPHEGfP68U=; b=gAmintRX+Ji3FdJuVS47zLg5BkW3IdS+0TEvMpuwLauxHXq5Kg11OW4+pYKJf+m5fE RaFvFRcEy86+P0fJrP2UCYEkeQqgz3RdHNEoPzJ9D5KUrvPshOARO8mfr2ad6ZD4LJY9 BcnQ3kY+zpF4O0thW+YPSzmTtIyegNP94OqUAg/YJx/feluwFBe6kp7qy2Uz7aVMcaGz zXTkSzV423f9Tkgfy402fSNSU5y9ghkzGs++sjvCXeMchifQpzkYu/npugwO1VErBtqD X5H7FWxR+HlYIyxuTd+JmdQwR/KJMJxzItbm4O8RThosGTSobIv0AJt30NBWAJKYdQxc ek+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787159332; x=1787764132; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Dqx7qHH4kG1tVW6pyBEk7S9H/Q9y6a6UvLPHEGfP68U=; b=qeNFp8R0NWNGLhNMxug/CP9I4jetShN1rs9CkCNq+tAFdagkKkQ513pWGlM3whaPR3 rHyl6WQ/3gHNVCBsM62sPam2BbU+S98X3gaaFEHEIYCS6wL/s/Cmdj0XHy6P1VcKGEN2 YM7UB1UVcOhZyOrZrNF3QmSC9+cfzJxb3bMeEurawuZqOMZ7DwUsjN8owoVt7L0KYJd8 ujG1oANozWQ+hMGpu2t6jAifB3w33ROjvjPS/IKXauujo35+j+mHezLarqwD0Mz/YFuj nZdsidQCRAU2ApdGuUHQVkeEucPuoqTguMc88pX2mL5Sb2M5dL7LxTXRgVhA7mO+dNbZ +Xng== X-Gm-Message-State: AFuF++k6jpPpwUsi0Hd9jA1xYkNbb+BwEkCYvmoPWJV1RbGKo0R/VHqO LeCY3Rh2Oi1ex0UFS+blnXaKJHaHulijUlgJl0O+dS2sITJZS7sDQg+tgHk+3rrNmfm+8bKoCHH vln93vms= X-Gm-Gg: AR+sD13uw906yFDxOMMNJeVa7I+Z6Lvt60K6O7zZT1Kc1krTMZuEOpUaKSc6XGn3i1k Rh95/gmScLlY8cIvsFj80BRoRw/V3ru/suoKYHNQgSWSnnlcy85pXu/blnqRebCkfnoF0RbLCRz wUGE6FPvvCTdpfRiyliZwCWr0IwXeR5hvnlA3HzXIIQ4Ew9tYa2x4pe+xJ7CSv6kLai+BDK995s XFMoa92wOX9ePZztYc5ySyqyI5zf9JiLZKL+Rbq5l9CzqW7aFvvxgLNpPfnQG4Vn+/aVLYVIVN4 aGhdNJpRCfb1QbocGoNvu0ej4j/gNHJC19ROpld3BNbq766v+1mmmGP+pjVV8YqNW8Aduu9xrHT 9B7pJboQqaMwRzGY4TdtSX9UZfnwKfuwiwi7F+XSwx+Qu+pcp03f02HFr6qMBAPN/3JCKAqjlg/ bo3XyAUC61hxFKVbbsYg7bYXjNiMRbLamQXMYr5jVGTiNe/e4cQYik5zakOw== X-Received: by 2002:a17:90b:3945:b0:37f:eafd:3505 with SMTP id 98e67ed59e1d1-39580eafaa7mr12425713a91.6.1787159332037; Wed, 19 Aug 2026 10:08:52 -0700 (PDT) Received: from localhost ([71.212.202.210]) by smtp.gmail.com with UTF8SMTPSA id 98e67ed59e1d1-3957fb17eb5sm3927600a91.3.2026.08.19.10.08.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Aug 2026 10:08:51 -0700 (PDT) From: "Kevin Hilman (TI)" Date: Wed, 19 Aug 2026 10:08:37 -0700 Subject: [PATCH v4 2/4] PM / QoS: add lockless read for flags Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260819-topic-lpm-pmdomain-device-constraints-v4-2-7ceb095f5474@baylibre.com> References: <20260819-topic-lpm-pmdomain-device-constraints-v4-0-7ceb095f5474@baylibre.com> In-Reply-To: <20260819-topic-lpm-pmdomain-device-constraints-v4-0-7ceb095f5474@baylibre.com> To: "Rafael J. Wysocki" , linux-pm@vger.kernel.org, Ulf Hansson Cc: linux-kernel@vger.kernel.org X-Mailer: b4 0.16-dev X-Developer-Signature: v=1; a=openpgp-sha256; l=2402; i=khilman@baylibre.com; h=from:subject:message-id; bh=kT7l6yKHSWNEo0ZyKLhkRiOg4K1P7BnLKxXKfx2FbSM=; b=owEBbQKS/ZANAwAIAVk3GJrT+8ZlAcsmYgBqheMgeG+05eHPHI3TOsaj5d/rdj85QjgWlBIgh /uFGPdvYTGJAjMEAAEIAB0WIQR7h0YOFpJ/qfW/8QxZNxia0/vGZQUCaoXjIAAKCRBZNxia0/vG Zcr2D/9wbVGbTCW9gHU2mhy6WgNfPOEdSuM6H8rJnHyALn5PSl421NM7pQMVcQNwYECX8o+lMSR uIIMuP3g5jGpZ2X+gWpnkYNVrUW08u9KdvZNPiu0LTQ9EilCP2+EIZ8jaamPspUPLwUm3cmvB3r rQxR7ebfkvVhwJ64f5cBcEt8zI4XPHctGv3wOn8PXmNKGbElGB7D0fQSRROPWI55hYK7czPIL2z 5tGDjgOauzE7k1zosGJjbbPKR0WB5oSp1Qz4uNh0x1SE+PsFie9o+GrzMvX8xYiSB4T3llTAWam IohRBRwNghMXAS65qWcLNAALARR+g9UbYzSGacKNfgCz7KYvkNfpz+NDZEZm6hpjcp9WsNHSA70 KcTqBIUeveDxu4alkiQ4+VI+qNJ5PHlb7Df5jKQVAck+xZ5qVkmN2wcNXnBQ5YSqQHKI7HSLQzT AVZHxyP4zx/lDGbyMzboAoomfrFjK53OtkQ65106vcqyNONM6MkSATVK24v++TPVSNOgtLjxe4w rkuWM3jwyNKMdazCbM98xL/oyPNRaYWxsb97/Jl2X9lSReXXBspXXyvtgIpVq+6Mbw1KQGsZPiy mdxU5YLCjMCoLQzeJ3UJPGb+BggUzTjgnq5dnRMYYPWdcbrDS5sRErxgRH3xl8p4xd944EFwH4W /+lxIZPyq+dmtBQ== X-Developer-Key: i=khilman@baylibre.com; a=openpgp; fpr=7B87460E16927FA9F5BFF10C5937189AD3FBC665 Add a lockless read for QoS flags similar to the lockless read for resume latency (dev_pm_qos_raw_resume_latency) which may be called from atomic context (e.g. genpd governors running under a raw spinlock or in the syscore suspend path), where taking that sleeping lock would be invalid on PREEMPT_RT. dev_pm_qos_raw_flags() now reads dev->power.qos->flags.effective_flags with READ_ONCE() so also add corresponding WRITE_ONCE() to the two effective_flags writes, the same way pm_qos_set_value() already does for target_value/pm_qos_read_value(). Signed-off-by: Kevin Hilman (TI) Reviewed-by: Kendall Willis --- include/linux/pm_qos.h | 7 +++++++ kernel/power/qos.c | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/include/linux/pm_qos.h b/include/linux/pm_qos.h index aededda52b6b..439a9e779d81 100644 --- a/include/linux/pm_qos.h +++ b/include/linux/pm_qos.h @@ -219,6 +219,12 @@ static inline s32 dev_pm_qos_raw_resume_latency(struct= device *dev) PM_QOS_RESUME_LATENCY_NO_CONSTRAINT : pm_qos_read_value(&dev->power.qos->resume_latency); } + +static inline s32 dev_pm_qos_raw_flags(struct device *dev) +{ + return IS_ERR_OR_NULL(dev->power.qos) ? + 0 : READ_ONCE(dev->power.qos->flags.effective_flags); +} #else static inline enum pm_qos_flags_status __dev_pm_qos_flags(struct device *d= ev, s32 mask) @@ -300,6 +306,7 @@ static inline s32 dev_pm_qos_raw_resume_latency(struct = device *dev) { return PM_QOS_RESUME_LATENCY_NO_CONSTRAINT; } +static inline s32 dev_pm_qos_raw_flags(struct device *dev) { return 0; } #endif =20 static inline int freq_qos_request_active(struct freq_qos_request *req) diff --git a/kernel/power/qos.c b/kernel/power/qos.c index 1944dbeb0d4c..c241da5bccf6 100644 --- a/kernel/power/qos.c +++ b/kernel/power/qos.c @@ -159,7 +159,7 @@ static void pm_qos_flags_remove_req(struct pm_qos_flags= *pqf, list_for_each_entry(req, &pqf->list, node) val |=3D req->flags; =20 - pqf->effective_flags =3D val; + WRITE_ONCE(pqf->effective_flags, val); } =20 /** @@ -193,7 +193,7 @@ bool pm_qos_update_flags(struct pm_qos_flags *pqf, req->flags =3D val; INIT_LIST_HEAD(&req->node); list_add_tail(&req->node, &pqf->list); - pqf->effective_flags |=3D val; + WRITE_ONCE(pqf->effective_flags, pqf->effective_flags | val); break; default: /* no action */ --=20 2.47.3 From nobody Mon Sep 28 16:22:29 2026 Received: from mail-pg1-f177.google.com (mail-pg1-f177.google.com [209.85.215.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D67703BE652 for ; Wed, 19 Aug 2026 17:08:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787159336; cv=none; b=cq2Ptfd+yA7U19/ckoAHyxu8+Le6SY/idCSBWg6EjjankD7b48+BxCoIj/hAhCZfT7v5aPhbOE1cjaNODQEjCDZZKclwOwVrJ5ZTQDCKsiZy0djRi79Lr+BpspwDvL16KwjU8406yG0j2OM6cE5Pr0UuJ7x6t/rZvvmwkhqeNUw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787159336; c=relaxed/simple; bh=5rjDFKrQjDb9eFQM3Ed8es5nA9wG2/nn9jeWV02CJE0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CVmcRid/GTBY3tvNUc95sNeNeCR+oR17n2DO6H/Zugt1rstf8YZ4J0xojprz9hUtIimBEnkHxCWj4xThmIkkijzgZYKkTkRGQskg+rvY1NA2mfnb7ov/5OLwfx18bivqMocB1xQ41tmAoi88kgvZu8MCcO5V3jJTLYwBH64H7YE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre.com header.i=@baylibre.com header.b=VYvVfKhv; arc=none smtp.client-ip=209.85.215.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre.com header.i=@baylibre.com header.b="VYvVfKhv" Received: by mail-pg1-f177.google.com with SMTP id 41be03b00d2f7-cbedda4c154so596153a12.1 for ; Wed, 19 Aug 2026 10:08:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre.com; s=google; t=1787159333; x=1787764133; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=NcXnwaqVZBrDKAIpVWjFshZCqZYemDSzfGz6X+k72g8=; b=VYvVfKhv4TKG8Csb2escUi0s4654NyaBff+0H2LzY2eL0x57qtz2OWu+AZu0oHHNDG kg1Xqd1DZ2nPCQp76Klvz8EY6DCxYbgpM4SOJAWnBoj8yqPNGOHYrUkbB0gpxC17F/LI 2gLMl9ZUqpi0FyeouFpFQYI+ANd7p/iQk+ey5mEwmzzFQTLdysOWnWURznuKx+U7owXX mLgKEmO66sMKJFO+EwPIqQ6EBV2kfllkTcWRJU0cQbxc7ZQuZd2Ne2yf08e34vzvvWUP Afx4gfaJ+rZDxffObnIMsJ0mkf7dWyNeZrCSYcqS2bqAUY76kn/xJzqCEjxGztLz6X0i 4iwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787159333; x=1787764133; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=NcXnwaqVZBrDKAIpVWjFshZCqZYemDSzfGz6X+k72g8=; b=jSXSmHh6KJO++k3qcZVZvUXm6YbWoQVVcOyEe+7638Qkv511ATDVDIfNi2BEleTTz4 Uge2ta2LuxguyRp1P7g0ASDBp3gFJ5cYUrzK3IUzTKl4QUUhUzD8NWquaI645K7puBYD hgW3CwSX8kREheOCh07exwRPrcw+niNh6e9VhSpMqrYl2ojF93hmDWp4TqGbR7eEcNBa ZUWj4R2tTWijX4l/CI8Y047FvdrbAWwPRkIsm9j0H+8exXZ4Vdbn5QdT88Pkz1z2xmTF KCXz7OcH23prP3Ts2gyyeHGFmnzJ8nWgU8CbZd36KyHWgSfB7DzTv4pNE+McQeoMd7xG uHvQ== X-Gm-Message-State: AFuF++n7sZo1KFg8YjLemFMAq3Zqv5jh4FRXrAGxB8qM9FOiVaX+GYvT sluXmdeLzASpTI1k3Iv267lGbiXsNrWZKCbeIP7dsBrFBYhyvGmbj786ZT0ficu+ey0= X-Gm-Gg: AR+sD138DNmg5hkwjCsxCIFSU4/IcX147cZcNPrXbIfIJr/7v0HmA/yVbXeUFD/jMJu VPyJt3Be82eOBvqsnnfk68WKta+JW7pbw9RFt4kySKc85t6KaKLj7zqq5+d68+AEdV/HMrbNnpt AXPtNswSkqEUXR6aXJdFQCkG4sxKmJvTs89t+2rg3nAs4sJzxEvfLjwOir7Xw0M5cL4cHesClmR cZL8eIf8Du4AdJYc+jyLsL+Jt3Uupo6GBVDY3uYoLJfj+nHsGxr1bESAlv0OeRBmPKIO2b+U4Yr c1t1sgNRUAYRRDwviCFOhijM0dMg/LsXoMJKlCa/EWP9+rHXqJXBXi6yOgjoydVvxbYD5Af2R+H s/KCKakDHI4EgLeIiE5s6s9vUtncSEuQ+yXt5gyxvwaa0GM/WCdkpDlYecsIMrp0M1SnSrM40xV QGeBktvuKc2JiPa8dYCLelGiLmAncQ1dKC/k4jwtexM4s7IaqPH8FyeY6LPA== X-Received: by 2002:a17:90b:4a4b:b0:38f:240d:b857 with SMTP id 98e67ed59e1d1-39580a4d03cmr11013093a91.2.1787159333155; Wed, 19 Aug 2026 10:08:53 -0700 (PDT) Received: from localhost ([71.212.202.210]) by smtp.gmail.com with UTF8SMTPSA id 98e67ed59e1d1-3957f6b9cfbsm1203547a91.1.2026.08.19.10.08.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Aug 2026 10:08:52 -0700 (PDT) From: "Kevin Hilman (TI)" Date: Wed, 19 Aug 2026 10:08:38 -0700 Subject: [PATCH v4 3/4] pmdomain: core: add genpd_for_each_child() helper Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260819-topic-lpm-pmdomain-device-constraints-v4-3-7ceb095f5474@baylibre.com> References: <20260819-topic-lpm-pmdomain-device-constraints-v4-0-7ceb095f5474@baylibre.com> In-Reply-To: <20260819-topic-lpm-pmdomain-device-constraints-v4-0-7ceb095f5474@baylibre.com> To: "Rafael J. Wysocki" , linux-pm@vger.kernel.org, Ulf Hansson Cc: linux-kernel@vger.kernel.org X-Mailer: b4 0.16-dev X-Developer-Signature: v=1; a=openpgp-sha256; l=3638; i=khilman@baylibre.com; h=from:subject:message-id; bh=5rjDFKrQjDb9eFQM3Ed8es5nA9wG2/nn9jeWV02CJE0=; b=owEBbQKS/ZANAwAIAVk3GJrT+8ZlAcsmYgBqheMgnhYNOkWBn64xmzenyc+flwmGG+entv65A 1xolLCMmFeJAjMEAAEIAB0WIQR7h0YOFpJ/qfW/8QxZNxia0/vGZQUCaoXjIAAKCRBZNxia0/vG ZfhLEACBgHuXVvgh9ibODD7ANTt6um+n8FeNZOZZqdBa+tT1TNtA0uzYMfaCnnGJUuIvjo7Eaf5 +uVPVq3r8OV1cn0KAlAsbd2KHM+o0VeCJqNPthTSoEstWqXv1QCEGBd3ddXA4ATiyjpUdFbmnfC 15SWwiMWQxo+tIqYGKDdbzKR2NSRkx6RyqycCeulmiTqFLUQompJ2NN/b2cHDM5sddxX+hswt6t KvayuSorDMHVXy9rv0R22XU75uWc9JI+bzSc9gGHRQCbvNcZUV07Gs9iGwUZ1pWEHtgv7Sd0fv9 kmHHEt3aon6RJrAqNIh0OjGCWjZGSQn5H9ZrEtmlA2/e3zz3bVZ6SRGPoSTNBpw808fIOPtseWS 6e4aUMj8w/fIEh5W034v7pa2ggf8aHTwTZw2jkelW0wE6KfQwIr58504wiUSuRNJPJj4KzpJxZ2 Y7NiZXDED2LSpztyDh3pkaNci3LBb9SaCUpbcv+0sTn3QOBv22+sMaXrc4sMiYCPUJgeYfau4Gg ZrIxoL/i0FHx+RTel2JCT3ZHCZqISSO8GQWJGgFTBuQ93/x3satY/6br8ClMylALSbxQJj4crzR mUanugX++EF4x/CfKsUaK7X0nSzI56FLYCgsFM9A1TexGB7lMtMHTLa40VNH/6dJgBdROTBMSXK TwBk6uKDpCwh5oQ== X-Developer-Key: i=khilman@baylibre.com; a=openpgp; fpr=7B87460E16927FA9F5BFF10C5937189AD3FBC665 Add a new internal helper function genpd_for_each_child() that recursively iterates over all devices in a PM domain and its child domains (subdomains). This helper is useful for governors and other core PM domain code that needs to examine or apply operations to all devices within a domain hierarchy. The function takes a callback that is invoked for each device, and supports early termination if the callback returns a non-zero value. The helper is defined in a new internal header drivers/pmdomain/core.h and implemented in drivers/pmdomain/core.c, making it available to other PM domain subsystem components. The first user of this helper is the cpu_system_power_down_ok() governor function, which uses it to check device QoS latency constraints across the entire domain hierarchy. Signed-off-by: Kevin Hilman (TI) Reviewed-by: Abel Vesa --- drivers/pmdomain/core.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ drivers/pmdomain/core.h | 17 +++++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/drivers/pmdomain/core.c b/drivers/pmdomain/core.c index 842c4169e290..ff27369d9a97 100644 --- a/drivers/pmdomain/core.c +++ b/drivers/pmdomain/core.c @@ -24,6 +24,8 @@ #include #include =20 +#include "core.h" + /* Provides a unique ID for each genpd device */ static DEFINE_IDA(genpd_ida); =20 @@ -276,6 +278,49 @@ static void genpd_sd_counter_inc(struct generic_pm_dom= ain *genpd) smp_mb__after_atomic(); } =20 +/** + * genpd_for_each_child - Recursively iterate over all devices + * in a PM domain and its subdomains. + * @genpd: PM domain to iterate over. + * @fn: Callback function to invoke for each device. + * @data: Data to pass to the callback function. + * + * This function recursively walks through all devices in the given PM dom= ain + * and all devices in its child PM domains (subdomains). For each device f= ound, + * the callback function @fn is invoked with the device and @data as argum= ents. + * + * Note: this function is inteded for use by the core and governors, + * not for pmdomain providers. + * + * Returns: 0 on success, or the first non-zero value returned by @fn. + */ +int genpd_for_each_child(struct generic_pm_domain *genpd, + int (*fn)(struct device *dev, void *data), + void *data) +{ + struct pm_domain_data *pdd; + struct gpd_link *link; + int ret; + + /* First, iterate over all devices in this domain */ + list_for_each_entry(pdd, &genpd->dev_list, list_node) { + ret =3D fn(pdd->dev, data); + if (ret) + return ret; + } + + /* Then, recursively iterate over all child domains (subdomains) */ + list_for_each_entry(link, &genpd->parent_links, parent_node) { + struct generic_pm_domain *child_pd =3D link->child; + + ret =3D genpd_for_each_child(child_pd, fn, data); + if (ret) + return ret; + } + + return 0; +} + #ifdef CONFIG_DEBUG_FS static struct dentry *genpd_debugfs_dir; =20 diff --git a/drivers/pmdomain/core.h b/drivers/pmdomain/core.h new file mode 100644 index 000000000000..7061891d31fb --- /dev/null +++ b/drivers/pmdomain/core.h @@ -0,0 +1,17 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Internal header for PM domain core + * + * Copyright (C) 2011 Rafael J. Wysocki , Renesas Electronics= Corp. + */ + +#ifndef __PM_DOMAIN_CORE_H__ +#define __PM_DOMAIN_CORE_H__ + +#include + +int genpd_for_each_child(struct generic_pm_domain *genpd, + int (*fn)(struct device *dev, void *data), + void *data); + +#endif /* __PM_DOMAIN_CORE_H__ */ --=20 2.47.3 From nobody Mon Sep 28 16:22:29 2026 Received: from mail-pg1-f176.google.com (mail-pg1-f176.google.com [209.85.215.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 174D83C1F5B for ; Wed, 19 Aug 2026 17:08:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787159336; cv=none; b=JuA2olkemAJW47vApiEwHqpDCUGiLUAqWx+nPreaGaP0ympD1bjMBb+Yl4GhR4hZjVVCvaMvCfnutslNbNVThw+/JH4om6RPx/xO1SJrknaRnQwLEVJCOqXCQjIyZbl4mL3VMpSHe1hoiZCpWeFmTNb6R5B/UkL3VE25MOjP+BQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787159336; c=relaxed/simple; bh=hee69kKQIxporq4hpHQJrmvt+8VHKRthHchQouUgNHE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jDpke72KALs0Al5DFaE3CAnLMgY6Uh/JaCBYg1suGKKe13ofmeOuM5RZ6f8mBTLcEHWcqfzSk5IwXOxUnhKK5YlAbS0LNtTSR5Cc0RKyPJ8+6bpD8BA1YCa7HIqWXDrdIwa1NT82ZsWHBTJWx6+rrg7zLUADkjXV7daFMvKDa2o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre.com header.i=@baylibre.com header.b=of9wfxPk; arc=none smtp.client-ip=209.85.215.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre.com header.i=@baylibre.com header.b="of9wfxPk" Received: by mail-pg1-f176.google.com with SMTP id 41be03b00d2f7-cbb8b54fcf8so1057747a12.0 for ; Wed, 19 Aug 2026 10:08:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre.com; s=google; t=1787159334; x=1787764134; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Y5t8wlz8xh6A0GblrRm2xNMS4IUSixAVnXUOD2UoJaI=; b=of9wfxPknzKNEBvMWRLwI4oTgwZOP/E1nhQAQEwP4V8NlLyZBRtmQvqXPVcuHnvvXw UVa89/V3/C/y3MkZu2fS7eLyvJ7vOomqlUu/qRTZ5saRkZFkwvie2x1uJ4xOaxRhGwIr EuMqWw8/RI8kvV7q/Nq+wII4b8YjMV9LZoGvykhnINeslevd87bKg+aNJxxDXFz1yuiV iBN0UyLyyo2pCcl6vcgDCi8inYeLF4FtLJIdzS1R5/EixzsBR6HymSNN2Dgew2UXiSxF cqnHgPPFgPC0iaZ5GCdx6CuFsMd8WjDs7n9cZ1D3nTpCHc0F7T1OBsiFCKOQoUXvKHBt 0zFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787159334; x=1787764134; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Y5t8wlz8xh6A0GblrRm2xNMS4IUSixAVnXUOD2UoJaI=; b=Vr9wAuuWbFliczrs+vlnGtBjlz6i+zJw1gs+CxXF+X9CCwN5XOKv2dq2+4AkGL81HJ 64qwe6Z0/DKwEZCqXNV9s0bHk8h0TV5tO9ZDlfks7RhQUfSKmW//wdsLmDzbdva+dYHD o+uH1IXbwjzgEUHvkE3e0HrQe9ZzKmxjUpEsHYHc0VDbmFtq5S/LfgtPFgK00K+tK6Ne Ce1KVIiAYfjz7BtHR+6Q5ZVLR/BK0RAp3GUni7zSF0ueuIS1z/64NDocNW1fkDSVGOvm lOSROLK7/WVY7FXAblWz2tPZy7fSk1bUiKj+8+npo4nnhBtezQFWD5n0TqTN1GBNoz10 ycgg== X-Gm-Message-State: AOJu0YxtbNPyNssWQer6NiWWujrD5Y7YcFt9VfRU0pfUxXwu1yrfErbq 8NcGA6yGX0Fw4NTp64jj3nHpNeV4zhoRrw2VqAGiv94HA1S0nf4G4oTWJ3WGU3aCXYuCba8M9oN r8e9vD7o= X-Gm-Gg: AR+sD12OmRqColAqhBKvCj//530zjK+3+h9aLKQ8mtsmTAOzvU56P1R0VGuLwFaPYK1 SNO/k0C0D2e4g1UOn9+e4SA9gQsJGZb9JmJmYFxJ/bN2BBvo1kGfdPE5eNYrA/CGP5Ao9T1KPHG WQtFlaIvYydjvXvSNqFcpOFFEbPlybXQ9SXQNbXIAQ1Izliy/WwZjC3swMQtroF9hUlowy5kT+G OI+rfY+AU9rZeDy32ZPpYrRhzTyCcumf7gzELakDEVMbSjJgCTOOnoAGtmGyZrCjAJuPV1tPetX ojcXtw1Vm4nS1ZPwsqhGq9SOHuo9tX+xp3lI71MOpLNptN4LgtZDNcS9hfoyjU9T5oBKL78asDm CglgfkhX9523VuaPEjqLHpK+8mu1MMQfAM8Lzj3wWK97+QWN7LSB/AB2MDh2t3B787MvpmFHnJU gYau+83S4Jm5Sk/vsZr6nnK671M/NjbaLbPeLkXaX27eNG7C6qD/Pux+h9QQ== X-Received: by 2002:a05:6a21:3382:b0:3c3:8d86:9856 with SMTP id adf61e73a8af0-3cd0128b46cmr11793410637.14.1787159334361; Wed, 19 Aug 2026 10:08:54 -0700 (PDT) Received: from localhost ([71.212.202.210]) by smtp.gmail.com with UTF8SMTPSA id 41be03b00d2f7-cc155675287sm862223a12.20.2026.08.19.10.08.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Aug 2026 10:08:53 -0700 (PDT) From: "Kevin Hilman (TI)" Date: Wed, 19 Aug 2026 10:08:39 -0700 Subject: [PATCH v4 4/4] pmdomain: add support system-wide resume latency constraints Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260819-topic-lpm-pmdomain-device-constraints-v4-4-7ceb095f5474@baylibre.com> References: <20260819-topic-lpm-pmdomain-device-constraints-v4-0-7ceb095f5474@baylibre.com> In-Reply-To: <20260819-topic-lpm-pmdomain-device-constraints-v4-0-7ceb095f5474@baylibre.com> To: "Rafael J. Wysocki" , linux-pm@vger.kernel.org, Ulf Hansson Cc: linux-kernel@vger.kernel.org X-Mailer: b4 0.16-dev X-Developer-Signature: v=1; a=openpgp-sha256; l=3685; i=khilman@baylibre.com; h=from:subject:message-id; bh=hee69kKQIxporq4hpHQJrmvt+8VHKRthHchQouUgNHE=; b=owEBbQKS/ZANAwAIAVk3GJrT+8ZlAcsmYgBqheMgYgqb9m8k6OMptsXlTicb5pRdRBlUE9gN6 AjWNLVvyGWJAjMEAAEIAB0WIQR7h0YOFpJ/qfW/8QxZNxia0/vGZQUCaoXjIAAKCRBZNxia0/vG ZWpkD/46WPRAKnPN8Q1ss8fSksmI6xyk1VjYM5pRj5kbCi0WsMa0T3bZVuaBDqapwAnAXNqpSs5 AQpNijsW7L00fv/gJwVhhu4wIrddye7HEYJTXVDvJk8WOLMxzqdW/kbfTEqg8s0e52Ol/gS+N7J w10Xew1rnFmEDiFw8KyO+L/pOIZ/sSxJcC84x4iZG5iCG4fXQ9rJP6lXcL8svi2CCdGhMdhCk51 rVhIyHVhrxmQKSij58Un4UrEsaAZiaikJyTb68qifVij3R+cJiwZ5FiBTIwtMv7KBhyn9nZwkD4 Q0m/38t9nAZ0MZCbcojaQhzRiBIIYRoAYU4hgbRTkWsi4iPB+5zEN/lm1EQfmdfHVOR60MHSvqu nKtj3MTy19nCTi1GEbw+ADc4FawO+yIiTel0B5NXuJTPMwQiJOaao8LyTPl1q404SrUHLSjZoAD NAeanyngfGqQ/o36s+eQFGnoWNhDlWEm1vveRR8BiN7s1Di831VBY67lGkfVpwR6zVhmccSTOgD bq6yrjHZfHVulvggstknLwrnigra08yQ1/Ul/akc0RK5H9bIKOC22paRnNgzJ6G13fDl6AgP7Gt /fsPUw37g9W4aM/2SD/pc27Eie7z9EE7ZLWANAsNffltWb1drwLcw7p7et6Ge6fD18AuTE+cp3Z ikejdennHoQY1sg== X-Developer-Key: i=khilman@baylibre.com; a=openpgp; fpr=7B87460E16927FA9F5BFF10C5937189AD3FBC665 In addition to checking for CPU latency constraints when checking if OK to power down a domain, also check for QoS latency constraints in all devices of a domain and use that in determining the final latency constraint to use for the domain. Since cpu_system_power_down_ok() is used for system-wide suspend, the per-device constratints are only relevant if the LATENCY_SYS QoS flag is set. Signed-off-by: Kevin Hilman (TI) Reviewed-by: Abel Vesa Reviewed-by: Kendall Willis --- drivers/pmdomain/governor.c | 56 +++++++++++++++++++++++++++++++++++++++++= +++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/drivers/pmdomain/governor.c b/drivers/pmdomain/governor.c index 96737abbb496..1a85fd375db9 100644 --- a/drivers/pmdomain/governor.c +++ b/drivers/pmdomain/governor.c @@ -13,6 +13,8 @@ #include #include =20 +#include "core.h" + static int dev_update_qos_constraint(struct device *dev, void *data) { s64 *constraint_ns_p =3D data; @@ -425,17 +427,71 @@ static bool cpu_power_down_ok(struct dev_pm_domain *p= d) return true; } =20 +/** + * check_device_qos_latency - Callback to check device QoS latency constra= ints + * @dev: Device to check + * @data: Pointer to s32 variable holding minimum latency found so far + * + * This callback checks if the device has a system-wide resume latency QoS + * constraint and updates the minimum latency if this device has a stricter + * constraint. + * + * This runs in atomic context: for a CPU domain the genpd lock is a raw + * spinlock and the s2idle path runs in the syscore suspend window with + * interrupts disabled. The lockless dev_pm_qos_raw_*() accessors must + * therefore be used here; the locked dev_pm_qos_read_value() / + * dev_pm_qos_flags() would take dev->power.lock, which is a sleeping lock + * on PREEMPT_RT and must not be acquired in this context. The values read + * are best-effort, which matches the sibling cpu_power_down_ok() governor. + * + * The system-wide flag is checked first so that devices that have not opt= ed + * in only incur a single lockless read. + * + * Returns: 0 to continue iteration. + */ +static int check_device_qos_latency(struct device *dev, void *data) +{ + s32 *min_dev_latency =3D data; + s32 dev_latency; + + if (!(dev_pm_qos_raw_flags(dev) & PM_QOS_FLAG_LATENCY_SYS)) + return 0; + + dev_latency =3D dev_pm_qos_raw_resume_latency(dev); + if (dev_latency !=3D PM_QOS_RESUME_LATENCY_NO_CONSTRAINT) { + dev_dbg(dev, + "has QoS system-wide resume latency=3D%d\n", + dev_latency); + if (dev_latency < *min_dev_latency) + *min_dev_latency =3D dev_latency; + } + + return 0; +} + static bool cpu_system_power_down_ok(struct dev_pm_domain *pd) { s64 constraint_ns =3D cpu_wakeup_latency_qos_limit() * NSEC_PER_USEC; struct generic_pm_domain *genpd =3D pd_to_genpd(pd); int state_idx =3D genpd->state_count - 1; + s32 min_dev_latency =3D PM_QOS_RESUME_LATENCY_NO_CONSTRAINT; + s64 min_dev_latency_ns =3D PM_QOS_RESUME_LATENCY_NO_CONSTRAINT_NS; =20 if (!(genpd->flags & GENPD_FLAG_CPU_DOMAIN)) { genpd->state_idx =3D state_idx; return true; } =20 + genpd_for_each_child(genpd, check_device_qos_latency, + &min_dev_latency); + + /* If device latency < CPU wakeup latency, use it instead */ + if (min_dev_latency !=3D PM_QOS_RESUME_LATENCY_NO_CONSTRAINT) { + min_dev_latency_ns =3D min_dev_latency * NSEC_PER_USEC; + if (min_dev_latency_ns < constraint_ns) + constraint_ns =3D min_dev_latency_ns; + } + /* Find the deepest state for the latency constraint. */ while (state_idx >=3D 0) { s64 latency_ns =3D genpd->states[state_idx].power_off_latency_ns + --=20 2.47.3