From nobody Mon Sep 28 04:10:05 2026 Received: from mail-pj1-f53.google.com (mail-pj1-f53.google.com [209.85.216.53]) (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 60E783B6344 for ; Wed, 26 Aug 2026 22:23:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787783012; cv=none; b=NY6WLd2cwccWbV4FnlqtKL+zR4a0usjDLXNDthv7Ib2ypkjA5pjQepSxgyLKZpY+Zb8Ao4LRH1iRYPAoIFZXPuO9Hin0HrM/2XjRX/4pJBRBykAnSTa8tpKY6iRVmiezpF6+F6pf8A7LeTEp7jcMdUEe8dxegIDNDooo7w+lCos= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787783012; c=relaxed/simple; bh=76GWlvs2S6RvtzUC9P3JnexZlLh1ZyGKNxkhMVs2ZXE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=hAWfGD240qOrH7RYTeY+Lj6FtisKhuX6GXMRSijvux4UfJix5Jei7gfjXVSQuwiMtY3sbjlEx84YFBnoJiziPAg08B8wFZDjiay4Obp+H60X7dRzGuSevkzbXDl33gVRxPlxH0E/PGg7LVqpzE3ZEPV1AzReq6S/QjwL3nRbMv8= 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=JOhXVm2V; arc=none smtp.client-ip=209.85.216.53 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="JOhXVm2V" Received: by mail-pj1-f53.google.com with SMTP id 98e67ed59e1d1-39647184c73so350152a91.1 for ; Wed, 26 Aug 2026 15:23:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre.com; s=google; t=1787783006; x=1788387806; 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=ZHtBci+7WqjdzbXMCO1Bw7FN1oZt8E0+8PQeHHnAE4w=; b=JOhXVm2VWPMnk+jZNNn5FkzrfLXTM5E5aNAjJt9aoduGjsv916fuUzASO9guLRMN5y jSNTG44cSJdy3/rl15cZmUT4e6tosTsnWLUu6q0qtHjGB9EDZ2U7IIJxJ/S/3kyu8xHl GuhBZrF9UmwSclQYgAQMtMyo1OlTGvkgmAvIaAZYsGJUUVQyF82yI+x+ZxV86i+QjlVh x4f0utW+FzE/B1i8niZKjB5qaxUy6S34AYnDZIJal7jn8+H4ImxTK1vaAgYqCL9IIavj 91fAx8iSC2A4AJ5icQdIISpufIXd2xzXpSXc5o67CPfmijLcWnfwHSIZSYd5qGu9DLY0 67tA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787783006; x=1788387806; 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=ZHtBci+7WqjdzbXMCO1Bw7FN1oZt8E0+8PQeHHnAE4w=; b=GKPf0tMHxtOoy/TcjKskA8m4pA3/2K0LlJKlqtEjECSRPoKeQRS/2H2UZBaL/dMcLF n3AsApgzXsnjTWOv5uZv4EE1ALRDNFkXSKaI+TYsRK3Isvc+Sq9X+PfbIhpzyDXBF/HG ojfDnayCb60hHNXEoBVMhpmYcz0XTuhfHwOF1SPshpNnCzL0j8foKGOjR8gwthtb5y+m KqdUysARXM3GyQxVGlU2bFGiT51rEpFRq0hajDycxzIbsJmBrUi+h3I04ExoBeHS4KjR Dbb3+4GGx6t0araKnrRgjwxqKGZSLp+ADIg0Nu3385M3EhjdSaNNMXXRCHjTWtcPIMu0 XFAw== X-Gm-Message-State: AFuF++lRAFQyi23FRAJE1oKIec+KBndR0zEpQIQyOhpSugYMvW5d4abw Tg8OQwDYnYH5G/PE9ye8QWZXVihbEa7LkxvQFSZ21p5cUhGoJFdXOOAt2vKgLZG9IYP5TVX9U4M fUQHVik0= X-Gm-Gg: AR+sD12OcTiBuZP6ay3uCryzkMc/MNcFc4Es+CP1GuowGReR0RwF2mrHli72eQtnD/G shVTv42k4bzNILervvsBgd19LilNSODUTk79FP9dkP/ZgzU830S7aBwBdMMv1jsGQTMevUHhVoj Ry2dajp0g/mJ5TazyfOlwveqMnpF2l6O8fZMN0J/RTBqamPtWKkO0q5SUg6W2Ptr/OiBzSJiGOn 4mKeDu0mFn6YjjTXjumfZbvCR6RGW2ipswgm+zsP3dEdbJKuu8HZRrZrftpvCKQrl6RcBly4B/O wNlBlZVEodmMBgLxV0vmHBKkpHrY+ypEQJBVoUW/4Iwpr0nyxqQUwznt85wmrC4kNltohLcsN1e c1y+JxEBV4pDNdQF6NqzI2cpKCtcZNWCNkODagZqJ5l9luSL0FMBvura3xMtz2w3HTw62R3tZq9 2Fm9suB394EUUF5zWzD+RTfguyFpMIRJHLr090bMcsEn4cRYE2yc4E3lr21g== X-Received: by 2002:a17:90a:e7cb:b0:38e:9ca8:e99 with SMTP id 98e67ed59e1d1-3969bb7ae09mr2031694a91.5.1787783006026; Wed, 26 Aug 2026 15:23:26 -0700 (PDT) Received: from localhost ([71.212.202.210]) by smtp.gmail.com with UTF8SMTPSA id 98e67ed59e1d1-396b1123142sm25952a91.15.2026.08.26.15.23.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Aug 2026 15:23:25 -0700 (PDT) From: "Kevin Hilman (TI)" Date: Wed, 26 Aug 2026 15:23:19 -0700 Subject: [PATCH v5 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: <20260826-topic-lpm-pmdomain-device-constraints-v5-1-28cbf43f7e38@baylibre.com> References: <20260826-topic-lpm-pmdomain-device-constraints-v5-0-28cbf43f7e38@baylibre.com> In-Reply-To: <20260826-topic-lpm-pmdomain-device-constraints-v5-0-28cbf43f7e38@baylibre.com> To: "Rafael J. Wysocki" , linux-pm@vger.kernel.org, Ulf Hansson Cc: linux-kernel@vger.kernel.org, Kendall Willis X-Mailer: b4 0.16-dev X-Developer-Signature: v=1; a=openpgp-sha256; l=954; i=khilman@baylibre.com; h=from:subject:message-id; bh=76GWlvs2S6RvtzUC9P3JnexZlLh1ZyGKNxkhMVs2ZXE=; b=owEBbQKS/ZANAwAIAVk3GJrT+8ZlAcsmYgBqj2dbUSE3zZgL6ihQq1NtmctUKHMNjRIetQSux PWtyJ0p3cuJAjMEAAEIAB0WIQR7h0YOFpJ/qfW/8QxZNxia0/vGZQUCao9nWwAKCRBZNxia0/vG ZYdWEACEuZstO7lQt3ypK8PXJqvKCK0x3y3ZEU0KlAthu17gPvIZNfUqua7LCr5HvmXZlL5VecV R3fKztBG0mYehpzm76hrIAZIY9VNNxoFwDx4grwpbVQr+zN+HcngXiU0/yECSkdL3UPVINTo8Eg pDfwrLR1xQOtHQiEU/aMhy6rCaTpT1MtJn6mRRwtK1LLCfPemx6xb3FMqF5gtV69DB7B86k3t1t HxPh4eVgTFxAtCpuhyBnEZTA6pg1JP6ZoVhw7X6uKAnkvwcTJWBXimSh3sLY8i6IdgE+4m0f95P UJOiAxAJi9lN68uJSe6zfZAN3bHjN3X7Hq2JdCsOnPzZptzhPb4wMBHZrQOy1nJa2vR315ZQEVq xU3n/6vMDPdPm/RuZDuWZv+XqmYS6gl9Jkp3gpo+lIq9LwLQ6E04b1Woy33c8w2z9jQzE4eRwI8 PTQvx9lnzKo9vyk8AuAtKgwleCi5vgYeFSYHyDuuqkFqLSyQKFO7RxQ0Cijisudcu/UWQ0+PTn+ wNb25Hd5U2P3yYR9wl4uW68eaCfJ8B7PXRUVhD8oYGnhgn6ivnEaU6yAJew3B3cH+ECxyZlzxk6 xvf7qPvorSavJkcE0ZVyBF0j8c9WdX4HUqtNFvx/nuJH08oPHrTvGnfpLwPWZMNV/PrEta/xVVz W3aGhdVnKuhoheA== 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) Reviewed-by: Kendall Willis Signed-off-by: Kevin Hilman (TI) --- 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 04:10:05 2026 Received: from mail-pl1-f175.google.com (mail-pl1-f175.google.com [209.85.214.175]) (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 7E24D49481F for ; Wed, 26 Aug 2026 22:23:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787783013; cv=none; b=N5hGDmnK6XHJmOpOes5Ql63w2pUGQ7O6Z0zD5Z7yw+msO/gmkfmWTP3yrdzifxmvz8+QRtSx9Uo4Og8sN4owDPeOBf7cVgJxy6WxlV82SagwOOkOfPTvhyPqpe3oYxaVLLAzdicn0Ebvrigi3BxKqatXlhuEPz99eWJoaCOLMxk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787783013; c=relaxed/simple; bh=n6IbrIYTHJLmOtIuXuCK5v8tN+VwLaWdhI/pGvjGMQQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=uAZgDh5bvYu+TEToGf8rdJgVuIsqJZI1j1B3YZ2FNP5v/qGqC97RZTZtJXJ1FKSnlFMMMkyh12r0iI+TnTMNgFHDZfC7VIHPkBXEhMK1rOeaqjM/HOEN4Vo6gQ2okIt4mDEfRSFlgbl47mTWWoYThegF5vbegzaT2eHSySXGDTc= 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=JlOgNswn; arc=none smtp.client-ip=209.85.214.175 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="JlOgNswn" Received: by mail-pl1-f175.google.com with SMTP id d9443c01a7336-2d6d28aa26cso10772445ad.2 for ; Wed, 26 Aug 2026 15:23:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre.com; s=google; t=1787783007; x=1788387807; 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=4J37In9uEiPMWKTA2NKfVk7z3AAOEYhOfwPb0A3ISuk=; b=JlOgNswncO3YJu7YVQEVJ7NiJFtaOrEx4NHQxuCVVuwqpqIw5DA6ldNmuJ0yBWQaXD 2kwVwBw7C69Bwz/eMJfD1/PIP1cnwFaYKD65R9Vwe3c9ysROSu18OLZOOVX9YJdcTKwS GcaWIp3CeQ8wpX/4vGV3w9WiAfg2VSPD/QdBy9EaQApLWzbTIPUB92nfpGcjIKImr/Ru q1244nrEK+9r6MaRL28i1v7hB+U2+O6k55gVzCBuZmX1IPdnOpH94DQHiwcJa4VxXuGS 3fDPolN0GoLMLrYnOyNO6miDSzR7ppBHc+g6hgwSLy1tJA/5MIgykSR8HGBFlb6yW94N t+Tw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787783007; x=1788387807; 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=4J37In9uEiPMWKTA2NKfVk7z3AAOEYhOfwPb0A3ISuk=; b=A4xvzqactRp2Mg2vAUrSqLMKJjSNGOM2klm6WKG9JSAK8yejXerRYMCEBiTHRWedla PBzoj2HU+MTbFN1PmS+KZRV1woDxIgO/4+hcTGc8SBMr/jN6fLiTy6osSNUJJNFJbI49 SO3KyEptUDkJar4WMzuSRbwgU22LBKyighZhDNO1LEFr2zCCW/iCmYFRNj+NGEdrKwcH 5JBRLGKwPA671afnuxwvo6IUrn9AreibyjPffDBla4uqlPcs26XrkA9kVUdHOO2HjAXg 0H5az7VcbXhHz+Gcead0L2WEKKfpm0C91gk2UhyL9ajL3DjbdHwudHZyiHvuALyyVEG2 lXbA== X-Gm-Message-State: AFuF++nzQFWKokXlAlJhelDSZo1HtVptQY+ANP70C6jFaTsUMLsZZwld mMq3IDw9Gy7bbn2LWAxR11NPeeW9MOzp0O0PrScLNlLm4UYCH+XwChnsKe7GoOhdq3wsXCNKW22 V+Kp82yk= X-Gm-Gg: AR+sD11U6cDCb2faXD3cxzzb0AuQlqay9eRNQsgGJfaUnp2HAZE6kNQ/Dh/cekm0xAD FyALkMnkZvQlmbDvJrKGqFgQBiTWZ0qQwG0SXm7KwEET2TAOxjPoyB/4wZ18UKPCyL3XpssK9Ti yEjo190VfsPozNoWPMdJkGNriCQI5vn6dgtSjAGaBhJzDuOP/3t1fb0klA2WET4rBncVbpKnvQh yF8qTPHWeosWJ2/UPqcoZpZrBrHJcWyqEUbzrBeTXNvLUkEtfyr9zqsz647Bjmh913G4rcN5t8/ QC9ZvcrBHee3+h2KI4eolHTKAqVCEdhcbdRci2XcRPc1hD+j43J6TAGwou6QluCYgCUNnK8sqYT QH6Pe6Rdr3ELmTgwwBWdxU4t71uiU5CTTz/9C0ozHQNmwSYSi2Yhut8zSnMGCUe5R7SyAPAe5S7 GakMNPV/geSny4/5gJtLK2kuX+qnYH0XPe6EFF1ExMribHPMj/Dc1mAMLnEP3Nf15KQLP2 X-Received: by 2002:a17:902:e74a:b0:2d2:da8e:9017 with SMTP id d9443c01a7336-2d707ae31e5mr146371815ad.8.1787783006976; Wed, 26 Aug 2026 15:23:26 -0700 (PDT) Received: from localhost ([71.212.202.210]) by smtp.gmail.com with UTF8SMTPSA id d9443c01a7336-2d70493f3f5sm11757095ad.1.2026.08.26.15.23.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Aug 2026 15:23:26 -0700 (PDT) From: "Kevin Hilman (TI)" Date: Wed, 26 Aug 2026 15:23:20 -0700 Subject: [PATCH v5 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: <20260826-topic-lpm-pmdomain-device-constraints-v5-2-28cbf43f7e38@baylibre.com> References: <20260826-topic-lpm-pmdomain-device-constraints-v5-0-28cbf43f7e38@baylibre.com> In-Reply-To: <20260826-topic-lpm-pmdomain-device-constraints-v5-0-28cbf43f7e38@baylibre.com> To: "Rafael J. Wysocki" , linux-pm@vger.kernel.org, Ulf Hansson Cc: linux-kernel@vger.kernel.org, Kendall Willis X-Mailer: b4 0.16-dev X-Developer-Signature: v=1; a=openpgp-sha256; l=2449; i=khilman@baylibre.com; h=from:subject:message-id; bh=n6IbrIYTHJLmOtIuXuCK5v8tN+VwLaWdhI/pGvjGMQQ=; b=owEBbQKS/ZANAwAIAVk3GJrT+8ZlAcsmYgBqj2dcqI2d6UQ58+Q7igPV2h5adhEgcUI1y9ajO 12WD+ZuqfyJAjMEAAEIAB0WIQR7h0YOFpJ/qfW/8QxZNxia0/vGZQUCao9nXAAKCRBZNxia0/vG ZbDqEACFU0vgx3RM5uBFlV//UOl0g3+KaoB+xBi9n5Y0dLeIrygdus01VjHYzTlzNBsaN9z5spm UpUuhJf3OpYSCyDrnDjTl6JT+pWuU3Lx5p80191S1YnGr4eGiAAzdfoa6Vq3RwUHRstdXLa9/lB pT6V8uM05ZXqG5y4CuT70eB2X8GPkvy1jJP1K4Ao0RNjv82eZUB4NyPf/g3c5os8gHJJoyxMxt0 /MEPDYARZP31DtpYSBeHr2MUoaFtyHL2xa0xfrc06bgsuwBqtbK949ApmzDLK8Pi8hhMqSBeQbg wngiPOOk/Q1HBQYj+pvG/tGm1T5JjzK4+gwQ1cHKUFnxuVri+lhsmxntmxGexXpkZkNwmly5so+ ZNra2wlDZwMln0M7UGpyjFoXWh53c+bQ6yRRaooJ7N0QnG/kIEVRzZqcbr/x/y6dM3sAYNo9+Bp aPOHIonyBKoyRSA7xKFbOKNcj913DqnQulVTDCmWoBoaUqeIR+B1oTzRLstt/j5HcFSniDDLQq0 QOU4I6gnTtzoI2WzWOAAq9tQ3zdM0HtRrZNkH3mSPn3P2OuUERbQytT+Wvey7q4iUINRVIhcgcl zZ6ZBJGe+hz6aER1p2X0qnWJxKTz9hIAQuv8WHxcP63YkxpCRrSr/Fa9twjh61lPYZKcyE0yUWm hESO8JyTAZWQPag== 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(). Reviewed-by: Kendall Willis Signed-off-by: Kevin Hilman (TI) Acked-by: Rafael J. Wysocki (Intel) --- 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 04:10:05 2026 Received: from mail-pg1-f181.google.com (mail-pg1-f181.google.com [209.85.215.181]) (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 E3B0E478E56 for ; Wed, 26 Aug 2026 22:23:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787783013; cv=none; b=nI39boZfBDh4aef4yKHtseds0AGFMV9CKoAYPnCFaOe6pPSODN1ptOiKa0yXwh/8eb+Ovh66CBiLz1VjTcsYR4Aom/f+n1qA7HaBFGS5/QV/93WN63PBqZLNwI+LFHE2YgpGz9e0f9hu1cDr0yPWDL9C1hUNe7XSBrZ0p4X820o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787783013; c=relaxed/simple; bh=GqndFSZk8fTM4Q3z/je+OwIp0v2J7tUgj9fTETnG4Z0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mIIY8DJqVRsWDQJlAv3lsrKUa4dLIIXfjRtO6+aRgk/iSbpKM+6mPgDuuwHjBgid8cfaDU1BdBWKblNKxp2LyeRy35N6mOJoepsfYqHQxzv4QhL3ByjQB0NQb/fzCIMOfadO9g3IGtCFyqvE8Uj7Dp2Ewb4clAT4FxSIuoUxw4I= 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=PeMmKu8i; arc=none smtp.client-ip=209.85.215.181 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="PeMmKu8i" Received: by mail-pg1-f181.google.com with SMTP id 41be03b00d2f7-cc1c8d4a959so893438a12.3 for ; Wed, 26 Aug 2026 15:23:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre.com; s=google; t=1787783008; x=1788387808; 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=BVnWg2iLmSAV51XI9dB+R2wGq0zBTwlXD7KgxikGiuQ=; b=PeMmKu8i/JcF2I1bC1hWYPUfiQTCHdR/vEMqde+nDw45vZPIdFJwBU0njE79Xh7h3b 2vdYAUGstGJNxDvYcdbD7OAfBq7707SoCjPoGwbfDO0NQQq2m6jPe1WIwJV+BXkmyVjI ZJLHH3U5EYrc+75Pf4mcZkd8KHXwKs7Knu3bmP26hquwaA9Rlf2919VhCFnfOyLC+4uI HE3e/CYK/30YynXl8l/1CpwSjLTwpmn+pp9P1Tnq23rrfM5hmOW1uncRSPcqE8MnwX0u bua1eHWZHV0CpjvW2Zo/ShMepAudFjjjot+dHzwG+VrvYn+iCt93pyaHM188S9LM5d4b HZ+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787783008; x=1788387808; 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=BVnWg2iLmSAV51XI9dB+R2wGq0zBTwlXD7KgxikGiuQ=; b=YFZ9eJKCJokSHgYWFA8ZtbtNjLdqZhFHb8buYrWVz7rm983KUPZmhFW2OApGEGmiby ntPQtcVoNh0ENjnIMq7ycKtQ41OHeqALVWV9eOAJb/8gcXWylmWnH8XM+N1qIddDFI3v w7oF18l2hr3YHfnRUy6K7DE6p00oJnCBMDv8W72FR8fsc1n/lYGv2+36b9lNGLyxc0y5 xjiRzCjvN4hDE/CxJBYO9DMkAXYGs/4iRJxTFYQpKZTe7S3IGyfel0vm9zMJia/1o9+m zt5kcGzf78yvxQV7SqKDp4GlGOkUejViyZsCV8VXSxsTt1U3LMR4mcfKClbeLdVOaQ1T p7gg== X-Gm-Message-State: AFuF++mdu/hFxNbYXKqKhG8GDpeJF2udCv8Wr/E77aa3CzWl8PFX7Hce t7WQnOPkcJJIlTFy/OHJm4v0OMEnJY5NTpSfc2srytunPw/nu+ASjGbS4KPM1zbYj1E= X-Gm-Gg: AR+sD11NkfvXX/r+NTM2cVSzBhrgNNA5qtCXhPLD3CcVLESclTMS+LhTHtwet1gthyT ePQzpUmT+CrnqnboTgj8vqUIZqOPBQv5u/QvJHiTpfzdjm5z8pvxd/5nl2mOMF77Ly014j48RcI POvyQ0Oo6BRy9VvnG0pzZErHmoEXCeruTSPT0pyWdmhZ6RgoaNJuYgB4y8RdsYcgqBNJkaQKu7B Uea36UfE3t6XG12gihJ6fniQQTtBOw9prFucb+COqF/rcLYMRx04ZK4NErpANtd2AUMDuWW5w1C tPsnZ5rQRvuVu5n7QIfAAvD+MQroC6Tr3qr3PfCpiX/J5mhmAvI+qTX6y/L8bThPQxPh44s5TO+ 2uCBquOOp80tDzCZZx/LYyuO6pqTdP5I2Thvyw0d6UUKBQNUb92b41n0dWUYsVLc33kkSFxxxDG srpV61ZwaGi2G8UxG5HbtyaUJokSC8DaWHnP0jHIHv3eSQkM3yhdYVGMdTlf89H6rBpbs1 X-Received: by 2002:a05:6a20:4b93:b0:3d0:c5c0:d9b3 with SMTP id adf61e73a8af0-3d0c5c0dd51mr5408104637.18.1787783007967; Wed, 26 Aug 2026 15:23:27 -0700 (PDT) Received: from localhost ([71.212.202.210]) by smtp.gmail.com with UTF8SMTPSA id 41be03b00d2f7-cc1bec86171sm1469691a12.27.2026.08.26.15.23.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Aug 2026 15:23:27 -0700 (PDT) From: "Kevin Hilman (TI)" Date: Wed, 26 Aug 2026 15:23:21 -0700 Subject: [PATCH v5 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: <20260826-topic-lpm-pmdomain-device-constraints-v5-3-28cbf43f7e38@baylibre.com> References: <20260826-topic-lpm-pmdomain-device-constraints-v5-0-28cbf43f7e38@baylibre.com> In-Reply-To: <20260826-topic-lpm-pmdomain-device-constraints-v5-0-28cbf43f7e38@baylibre.com> To: "Rafael J. Wysocki" , linux-pm@vger.kernel.org, Ulf Hansson Cc: linux-kernel@vger.kernel.org, Abel Vesa X-Mailer: b4 0.16-dev X-Developer-Signature: v=1; a=openpgp-sha256; l=3687; i=khilman@baylibre.com; h=from:subject:message-id; bh=GqndFSZk8fTM4Q3z/je+OwIp0v2J7tUgj9fTETnG4Z0=; b=owEBbQKS/ZANAwAIAVk3GJrT+8ZlAcsmYgBqj2dcl8uQBtCqpcUHycoSoVH/amfmT/xCaoO2q Kye8rp/InKJAjMEAAEIAB0WIQR7h0YOFpJ/qfW/8QxZNxia0/vGZQUCao9nXAAKCRBZNxia0/vG ZT4zD/sHm9vr2c33S8xj29Skq1lkfALxLbmiE+fHTAc36Oq6mxiGnMtJubFU0t4oolW0yeeqm0i A1DAnoo9IZx0MGX02ixxoifbaRFsbZh9pvfUYtinnJnss5jBoLlI6WuiKpt+MXiOBpCU0OiPKP7 7L6hse1JFXlYBbevqr0F5nZqJ3IzSEnSpaCNM1fjx/9SFN/tjUZUWgm7qIrTGQflXNRlOgX1Ryb 2QaDQrQxTJsw2l2XLOSd7BUM2CnVKJD7xokG7gr1jMX9OU8T23PdKb9PYTTdow3mRX1Z8hvrPBM u7lST5LEgv6dKLMSiEw8IIVaskj3Ky9JOWh6z2cRn6lmLQ3hKtEcKN7NsGemJU5aZB/6hmhQSRS ewZjGGGudq3q3N2TA8CEuYCW5s7DSvzweVMMElRxANSeVtpn/MDm9FQfE6WdK/+OaOrpauo6rz5 lcJJJGZcH/jqTOT3Dw1AWze5uzSTceLPN726L+GqAq5p7wcLzNNZ792ki7boJLFcYnOQOLlCqTo QMlPhQdSKmprlX22q5Nz9yKgpbqcXrpcxq/XlQumX4nszuPOE9iE8gGFkYQ+aJFBaoBtVEjOgeP 2GZ+ROjiPJG2HrhKNcr2W5DMkbDR+W043nCIUvnrRbmRNbwSnufZeJ7Mo9cTi3VPPx1LiDYAp4C 5lookvHC8zD36MA== 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. Reviewed-by: Abel Vesa Signed-off-by: Kevin Hilman (TI) --- 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..a296134d4005 --- /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) 2026 Kevin Hilman , Texas Instrumen= ts + */ + +#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 04:10:05 2026 Received: from mail-pj1-f50.google.com (mail-pj1-f50.google.com [209.85.216.50]) (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 8C1A9494812 for ; Wed, 26 Aug 2026 22:23:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787783014; cv=none; b=Bi4MpqwWTNGJNh+Wh+B8tZzIv56tpbiYQTt0PyWXIh217J4Pe40Bfn/ZTqepxHZYbU3NQSs0kMrn/8nR0B6fMBJPa28TELGuMQiQd3QHYIiNo7CCHumRqidM0mi/UXZGp67N5FfTjVALWsJDnx0p5nmDdyUktdpefjqV3MjKlzg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787783014; c=relaxed/simple; bh=qhCmIzp/0FT1HMjgFAUTckPFBnGHIlkyocQYAr+qsWQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JroGfnaIroBXN0+gKu38FKd/WYuSziFkz3kMqGiL5v7MkG5j0etJj+MsCRaGsx8f7plPyO9IZh0uc1DtIR3OR4we2Sx5zkSqY7eRIJWY2ErjraLzbAdYMvYSMLMQPuXqF6xSoPyOW1kHJXncz4OuEvRmCyT4c2RK1R0K5Q2xQiU= 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=jx2yrz1x; arc=none smtp.client-ip=209.85.216.50 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="jx2yrz1x" Received: by mail-pj1-f50.google.com with SMTP id 98e67ed59e1d1-3964e76d0f4so1889686a91.3 for ; Wed, 26 Aug 2026 15:23:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre.com; s=google; t=1787783009; x=1788387809; 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=YCxM69mybT560xdAeAhYtpvxwftOy/Pc4vdQDPlFYCQ=; b=jx2yrz1xUyqqVIhq07Bdq5FWXVFLAtuiLrWwQmxynD07tbfLIMagIIvdXaQZeTYx9M lDFA9PfqTY1+5861TgVNoan8KtHjddlHOPDrzUTSMzRGc0DkMF5AYgxeByCv5Iq/nNko EvIsAMB4G9+3ZjmTeiRLDKMfZWQ6QZ96IPQLPxY4O2wijV52Zd8mQEoQ1+PTV8zcNCzg cspucb+5v3Ej+WfoColiiVFJltykaMzXLPQiT7iL1Rkmnrw09p+VPmngBo//PnFC/pN+ HtLmQOY8KLnmKDLiAgWYFYTnDiEQjaAPvwxPu8d9ZCwEW3sO+ejQC81XNKnbRHM7aE3l KoWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787783009; x=1788387809; 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=YCxM69mybT560xdAeAhYtpvxwftOy/Pc4vdQDPlFYCQ=; b=RCjoiIN++0Y9Dhs+5UzDIAGmq0nJBgnWyZbqcYu3qOJf2NfivwK95g8LIPpIWWPOPi IcG16xAND7vm3dVnxb1B+k5OTGIlyFTKfyr/VMBTGAEPzjyN9ZhhkHvHl6sIlcGQXXwb hiPvzXzRU5hOvUpwJkv0Yu1Z6GmKJ1aYiCO4fp37RvpDyyIiVnTsY//syCjK9cNXimry 60+ioigQVANEaaOCe+azbOw4qe4ZHXh/xQN1w9JZyQtGSp4Z7CmU44vwSmdxJqlu5MNf pk9Hpn90xixdrYhkK47kAl5IOWVv8wm6nfKk3T+4Ecaw55+SWYDUVhD4/aiRsaV49zhs KbNA== X-Gm-Message-State: AFuF++mUAoGalZlplcQs1KYzm85jBGhPnZcQ9lB4nlRIP9ymuhCMgKJ4 Y7dLhSeBF6bEa78M07qcu2Euf87/fKNO2ZfvYu9+w7Fxt18sEGqXqD75Ww3n4Q8YTas= X-Gm-Gg: AR+sD11JY7t44xaqq8MyXg3dB5gW0uDGc0hjvcsppD9F9GV/nvKOD8vKNoiPu/YWYj9 PE76gcIU5lQSr8/+ZNy569WLwECoFGl6jqMnw0DriOqM7X581B44O9pCsZct+d85XvgnXwOZQ3h 6UrJ6PQa13jC+qkcPs7mkLbFsZbr8X1GA4BDpK0ccPnbRom0TEmUHyPmn/VGybP+rTF6g8pEOCy euz9wX90D2MxW/ec5RNI/jiEEXvNN4HhX3Nh0XIs1hD3hR7ug3wOj9QMDk2Mw/ynKhcisY8TDe3 LeLi+MPdykKZUtuRz/WS4bptKf7KvqdtBGfnkKljq2eA9Sos6Y6OrebnRERVvTVUus3fW22Y4IB 8hErjReYJgicYaMwNKhFSiWFxhaZZPHQg1EsUPWUVuvhWfGtunqbnH7U8gD2ZV3a6cIsfXPr3Bf 5luoqxmdBBb+RC+9ZpzOxfdbxDNnOqXh+NzHGUGIn9g/60fmbnBRLjxmdtQIrnQ+kwiTmW X-Received: by 2002:a17:90b:2e83:b0:38e:bfe:81e9 with SMTP id 98e67ed59e1d1-3966d160e93mr22267129a91.1.1787783008980; Wed, 26 Aug 2026 15:23:28 -0700 (PDT) Received: from localhost ([71.212.202.210]) by smtp.gmail.com with UTF8SMTPSA id 98e67ed59e1d1-396afff2650sm66414a91.0.2026.08.26.15.23.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Aug 2026 15:23:28 -0700 (PDT) From: "Kevin Hilman (TI)" Date: Wed, 26 Aug 2026 15:23:22 -0700 Subject: [PATCH v5 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: <20260826-topic-lpm-pmdomain-device-constraints-v5-4-28cbf43f7e38@baylibre.com> References: <20260826-topic-lpm-pmdomain-device-constraints-v5-0-28cbf43f7e38@baylibre.com> In-Reply-To: <20260826-topic-lpm-pmdomain-device-constraints-v5-0-28cbf43f7e38@baylibre.com> To: "Rafael J. Wysocki" , linux-pm@vger.kernel.org, Ulf Hansson Cc: linux-kernel@vger.kernel.org, Abel Vesa , Kendall Willis X-Mailer: b4 0.16-dev X-Developer-Signature: v=1; a=openpgp-sha256; l=3785; i=khilman@baylibre.com; h=from:subject:message-id; bh=qhCmIzp/0FT1HMjgFAUTckPFBnGHIlkyocQYAr+qsWQ=; b=owEBbQKS/ZANAwAIAVk3GJrT+8ZlAcsmYgBqj2dcj8LICYsP6kcZl89EKdspM/Bdva8ywEm3Y OnpiUwXjXeJAjMEAAEIAB0WIQR7h0YOFpJ/qfW/8QxZNxia0/vGZQUCao9nXAAKCRBZNxia0/vG ZdJdD/9/yRdiPtHBllwGxdBuUwGb/82KJnwYCFbHbnuGPOAIE7XSrnOuNl/Zcnq45oSffcCuwU3 z8YkqPXWPqOrS9rpuHW1uRt6Z4SayFqUUfO4r7zY/T2BusrhA9nW3So/DbbB+x5rH7eb3BtGKuA lg8VyDtVBcbPlSP5xIDCW5cTyzFBMTkVd0Tm+rAtGWJ4KuPj6ZyEoSnc2zni1lwyKhaRcZL5MgM opZg0W4pQAfeDN2cdMLHn2L5XQRtHeTv9rct/9nk6tqXzni5mk9rW+TyT5GeOokok+zlPFWp+Qx G6tA+QMt735Ntxcys3meMjajhBbC35IwgteyCx68aVozaolnWTi/+5NmyjKcjAWiVzL3e0jFjGs zrqbBf6cXvzZcreCBsLa6TNwMUbux70OJm23/Y2yVUTYI6hohUuvtXdfCywLUUD78Npq7bPHBE2 Ti7iNRuW5fDmrVOzLDrz6yxNxXTutGgnqnJmCjEsT8XE6hVCaddsnWdVGCCfkrgoHHDah8eHHSV vflkb0N+FA45K7aWpfAMhl6xM5us4SZOlvTe5XugTBeHxxaBMKErIsKvBqwQolsrjDFKqP0gSTq JsBDijLV90hPwTh2hsWchFgKDIGRZcFDcXLvjpvFysH+nVuyaQ5ZvYn704Tr6Yfd6dU8lN2g1h/ vPHDlDbLHAmK0Cg== 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. Reviewed-by: Abel Vesa Reviewed-by: Kendall Willis Signed-off-by: Kevin Hilman (TI) --- 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