From nobody Sat Apr 4 07:50:50 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 640053750CB for ; Fri, 20 Mar 2026 09:38:24 +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=1773999505; cv=none; b=s1SH/NPUd8eYfGL7KUCMh+hMPRcPo5xWtzQ5YcBynx53Zg8dpGU0g5GqnCQfNezFD59JIMjHd+1OMTEtJuW7kaDCXR/RhIpTSwW090ieDMA7tXaHnSqP4+UovARaym4llMNPqM5FfqmIz2Gvq5QWPyw6aUMDBIfOiEJ5dBdGkK0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773999505; c=relaxed/simple; bh=2YCuEty2unv7N8a/bv0AHivwyDfA6N+PF5ZTIGgY3po=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=R/E4hwqf9QfmN8YKZzVVCzX/CghKof9vx1Jetvo4dSyY684ws7quA0DbcYg4Y8beHC+wSE/tS8BZuc6c5MkPvuoPza34/fm0wKpTSU8+av3yTbucp1j+OWf2IXVKyU/ioi/8Wm1zCRONZ9iAhngE7JfR3d9KdsljDdIYc9cnHJ0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=dO7RKIhK; arc=none smtp.client-ip=209.85.214.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="dO7RKIhK" Received: by mail-pl1-f175.google.com with SMTP id d9443c01a7336-2ab46931cf1so24126845ad.0 for ; Fri, 20 Mar 2026 02:38:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1773999504; x=1774604304; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=vQasu/xrnIk8QOOWcGsoDHIKa5Hw9PFKHEZ6nnxa6ME=; b=dO7RKIhKRoy3Xx7xlqS1MJahw48mmfdFVPT3fZ/rTC37Pnqn/beiPaps75ysAau9Hf B1NHewdaWOCRkr2cXhVS3gsgXD1CfdbicrC8vLzwYIzJ+f6PyLNBL4KgMVNd0BlLEyR+ vCDreZO2fbMy8lQNLc12VFt+T3+dVScvEAkavraRmZDfQEqrnancuuZLAYmp6UpeBYZB JfcRes9aPv5t5wmM4pmTNb+d1vFWCveE35X2JfExNBKKhV7t6moxKdIr0KNHHpboTBLL G31LNbWM4bESeNEqTbhr5ArRB7rk3BiQKXKEpsFw6FV+t6ylHPkxKPVGD4dw8b2Nryka JZMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773999504; x=1774604304; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=vQasu/xrnIk8QOOWcGsoDHIKa5Hw9PFKHEZ6nnxa6ME=; b=aBlv48QKykijW1/R8oGJxfPyfJnyxZxeQPtY4Mv2Rmrt6xpL6u5YDxwmHqZOM5t64G rvR1XENHYya1y6quEGDWGEaXj+qKgYChXU2JWFsBrhZ8uBoItMmlxFEepDUEqpHj6r8j 8XZYiSImmyPP7kHu752Wf0Y7nLhJzsbfLofgmUTcwmAL6tw/9IZT/iUhn0lo9dmyuzlr ftcSkEjp3xVumgARwTTzyaGN9KEdO/63BGq5d28vYm9jKcBTKwzQvNeIhXEZKRgKO4eR 8pEkII1IEBnS1PfppeUKJMBGf+VA382vAh3ulYeUmD7kDYdxCrYQ2jRbD8a5/T2rnZZH GPbQ== X-Forwarded-Encrypted: i=1; AJvYcCWIq8x+Jklt2oDW6JLPRO6FG/LAjMoBsEbAenJyVyFLmLnNFeVh0Da8pbKVy2axOSk5tXSgKibKKT3DsdQ=@vger.kernel.org X-Gm-Message-State: AOJu0YwhuDAeWrCDMVYAuFz4ZTgsjRg4d0msrI1viJaE3burOLmJulWh FX2PCimyp73vhk5Lc1PEphCjtlEZZd5mlVurIP6+/hUWefH8oFmaX11J9wKGEo9RNds= X-Gm-Gg: ATEYQzyYnBqEEpGVBY1NWvR0XvsPGP2upCD/HTwIOMfTVBHqFwD6PajUDk8DfWt/rAL P3E9b1hmn6+9nkyWc+J3azhNz1vgee7dZoZf8Fsa7E8pJ9IBm06CJSG29NzaZZhCgtdOZXgM+mH Q+kMgUzL6Nq3jAP4psbilxYyqhW4Jn5tsnFchpNFLt9vOXXVyaDFn+nWtMFHgQGXqa/R10Ij1zm pcct38QOXpKpuwEHLB6V2lyQ59YWZlwibEnjN/PvAu1iTWdnsDggbobz1qrs1CrNij6vMTR+k5T p9GZjbfx1bCD56HS/35gegqlFI5T/4s75GjQSBRs9qYslGumwIKTAsOD2F/GMVGu6R0M1ztXKqg lkQIE5HNHyML0P5yA6B1Epq5yJnu6G/mWQoi/Ne0bYqHDXgftJ6A5wmDL20K3moGs1O64acW6ek 1vMUXgRSF4eRrPK1hRuPcq72Ol5/pgVgAFd88= X-Received: by 2002:a17:902:d2c9:b0:2b0:52dc:f1c1 with SMTP id d9443c01a7336-2b0827bd48fmr20166035ad.16.1773999503526; Fri, 20 Mar 2026 02:38:23 -0700 (PDT) Received: from localhost ([122.172.81.200]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b083655b5dsm23012515ad.52.2026.03.20.02.38.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 20 Mar 2026 02:38:22 -0700 (PDT) From: Viresh Kumar To: "Rafael J. Wysocki" , Viresh Kumar Cc: linux-pm@vger.kernel.org, Vincent Guittot , Sumit Semwal , Lifeng Zheng , linux-kernel@vger.kernel.org Subject: [PATCH V2] cpufreq: conservative: Reset requested_freq on limits change Date: Fri, 20 Mar 2026 15:08:14 +0530 Message-Id: X-Mailer: git-send-email 2.31.1.272.g89b43f80a514 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" A recently reported issue highlighted that the cached requested_freq is not guaranteed to stay in sync with policy->cur. If the platform changes the actual CPU frequency after the governor sets one (e.g. due to platform-specific frequency scaling) and a re-sync occurs later, policy->cur may diverge from requested_freq. This can lead to incorrect behavior in the conservative governor. For example, the governor may assume the CPU is already running at the maximum frequency and skip further increases even though there is still headroom. Avoid this by resetting the cached requested_freq to policy->cur on detecting a change in policy limits. Reported-by: Lifeng Zheng Tested-by: Lifeng Zheng Link: https://lore.kernel.org/all/20260210115458.3493646-1-zhenglifeng1@hua= wei.com/ Signed-off-by: Viresh Kumar Reviewed-by: Zhongqiu Han --- [v2] - Completely different design to solve the problem. drivers/cpufreq/cpufreq_conservative.c | 12 ++++++++++++ drivers/cpufreq/cpufreq_governor.c | 3 +++ drivers/cpufreq/cpufreq_governor.h | 1 + 3 files changed, 16 insertions(+) diff --git a/drivers/cpufreq/cpufreq_conservative.c b/drivers/cpufreq/cpufr= eq_conservative.c index e0e847764511..df01d33993d8 100644 --- a/drivers/cpufreq/cpufreq_conservative.c +++ b/drivers/cpufreq/cpufreq_conservative.c @@ -313,6 +313,17 @@ static void cs_start(struct cpufreq_policy *policy) dbs_info->requested_freq =3D policy->cur; } =20 +static void cs_limits(struct cpufreq_policy *policy) +{ + struct cs_policy_dbs_info *dbs_info =3D to_dbs_info(policy->governor_data= ); + + /* + * The limits have changed, so may have the current frequency. Reset + * requested_freq to avoid any unintended outcomes due to the mismatch. + */ + dbs_info->requested_freq =3D policy->cur; +} + static struct dbs_governor cs_governor =3D { .gov =3D CPUFREQ_DBS_GOVERNOR_INITIALIZER("conservative"), .kobj_type =3D { .default_groups =3D cs_groups }, @@ -322,6 +333,7 @@ static struct dbs_governor cs_governor =3D { .init =3D cs_init, .exit =3D cs_exit, .start =3D cs_start, + .limits =3D cs_limits, }; =20 #define CPU_FREQ_GOV_CONSERVATIVE (cs_governor.gov) diff --git a/drivers/cpufreq/cpufreq_governor.c b/drivers/cpufreq/cpufreq_g= overnor.c index 36eb7aee4bcd..acf101878733 100644 --- a/drivers/cpufreq/cpufreq_governor.c +++ b/drivers/cpufreq/cpufreq_governor.c @@ -563,6 +563,7 @@ EXPORT_SYMBOL_GPL(cpufreq_dbs_governor_stop); =20 void cpufreq_dbs_governor_limits(struct cpufreq_policy *policy) { + struct dbs_governor *gov =3D dbs_governor_of(policy); struct policy_dbs_info *policy_dbs; =20 /* Protect gov->gdbs_data against cpufreq_dbs_governor_exit() */ @@ -574,6 +575,8 @@ void cpufreq_dbs_governor_limits(struct cpufreq_policy = *policy) mutex_lock(&policy_dbs->update_mutex); cpufreq_policy_apply_limits(policy); gov_update_sample_delay(policy_dbs, 0); + if (gov->limits) + gov->limits(policy); mutex_unlock(&policy_dbs->update_mutex); =20 out: diff --git a/drivers/cpufreq/cpufreq_governor.h b/drivers/cpufreq/cpufreq_g= overnor.h index 168c23fd7fca..1462d59277bd 100644 --- a/drivers/cpufreq/cpufreq_governor.h +++ b/drivers/cpufreq/cpufreq_governor.h @@ -138,6 +138,7 @@ struct dbs_governor { int (*init)(struct dbs_data *dbs_data); void (*exit)(struct dbs_data *dbs_data); void (*start)(struct cpufreq_policy *policy); + void (*limits)(struct cpufreq_policy *policy); }; =20 static inline struct dbs_governor *dbs_governor_of(struct cpufreq_policy *= policy) --=20 2.31.1.272.g89b43f80a514