mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Zhongqiu Han <zhongqiu.han@oss.qualcomm.com>
To: Sibi Sankar <sibi.sankar@oss.qualcomm.com>,
	rafael@kernel.org, viresh.kumar@linaro.org, mingo@redhat.com,
	peterz@infradead.org, linux-arm-msm@vger.kernel.org,
	juri.lelli@redhat.com, vincent.guittot@linaro.org,
	dietmar.eggemann@arm.com
Cc: linux-kernel@vger.kernel.org, rostedt@goodmis.org,
	bsegall@google.com, mgorman@suse.de, vschneid@redhat.com,
	kprateek.nayak@amd.com, linux-pm@vger.kernel.org,
	zhongqiu.han@oss.qualcomm.com
Subject: Re: [PATCH 1/2] cpufreq: allow cpuinfo max to decrease when boost is disabled
Date: Mon, 10 Aug 2026 17:54:09 +0800	[thread overview]
Message-ID: <3a20b69e-b072-4723-925f-514d8162e259@oss.qualcomm.com> (raw)
In-Reply-To: <18d763f0-d817-45d3-8c79-10639d5a5e47@oss.qualcomm.com>

On 8/7/2026 10:23 PM, Sibi Sankar wrote:
> 
> On 8/6/2026 4:52 PM, Zhongqiu Han wrote:
>> Hi Sibi and Ananthu,
>>
>> On 8/6/2026 12:42 PM, Sibi Sankar wrote:
>>> From: Ananthu C V <ananthu.cv@oss.qualcomm.com>
>>>
>>> Commit 538b0188da46 ("cpufreq: ACPI: Set cpuinfo.max_freq directly
>>> if max boost is known") guarded cpuinfo max updates to only allow
>>> increases, preserving values set directly by drivers above the freq
>>> table maximum. This prevents cpuinfo max from decreasing on boost
>>> disable, leaving policy max pinned at the boost ceiling.
>>>
>>> Remove the guard so cpuinfo max is always derived from the frequency
>>> table scan. Drivers that correctly flag boost entries are unaffected
>>> since the scan already excludes them when boost is off.
>>>
>>> Fixes: 538b0188da46 ("cpufreq: ACPI: Set cpuinfo.max_freq directly if 
>>> max boost is known")
>>> Signed-off-by: Ananthu C V <ananthu.cv@oss.qualcomm.com>
>>> Signed-off-by: Sibi Sankar <sibi.sankar@oss.qualcomm.com>
>>> ---
>>>   drivers/cpufreq/freq_table.c | 7 +------
>>>   1 file changed, 1 insertion(+), 6 deletions(-)
>>>
>>> diff --git a/drivers/cpufreq/freq_table.c b/drivers/cpufreq/freq_table.c
>>> index ea994647abc8..791118466ca4 100644
>>> --- a/drivers/cpufreq/freq_table.c
>>> +++ b/drivers/cpufreq/freq_table.c
>>> @@ -50,12 +50,7 @@ int cpufreq_frequency_table_cpuinfo(struct 
>>> cpufreq_policy *policy)
>>>       }
>>>         policy->cpuinfo.min_freq = min_freq;
>>> -    /*
>>> -     * If the driver has set its own cpuinfo.max_freq above 
>>> max_freq, leave
>>> -     * it as is.
>>> -     */
>>> -    if (policy->cpuinfo.max_freq < max_freq)
>>> -        policy->cpuinfo.max_freq = max_freq;
>>
>> As I understand it, the guard added by commit 538b0188da46 is
>> intended for drivers (e.g. acpi-cpufreq and AMD) that may set
>> cpuinfo.max_freq above the maximum frequency in the frequency table.
>> Removing it may cause those drivers to lose their boost maximum
>> frequency.
> 
> Yup, we did mention the same in the cover letter.
> 
>>
>> The regression should instead be related to commit db80ad776cd2
>> ("cpufreq: Remove driver default policy->min/max init"), which removed
>> the "policy->max = max_freq" initialization that previously allowed
>> policy->max to track the result of the boost-aware frequency scan.
>>
>> Please feel free to let me know what you think. Thanks
>>
> 
> The commit db80ad776cd2 is unrelated. The problem comes from the
> fact that policy_set_boost uses policy->cpuinfo.max_freq in it's
> freq_qos_update_request. If we modify it to use a frequency that
> adheres to the boost and per-policy boost flag instead might be
> the right thing to do here.
> 

Hi Sibi,

Please let me know if you see any issues with the analysis below:

[Background]
Commit 538b0188da46 ("cpufreq: ACPI: Set cpuinfo.max_freq directly if
max boost is known") made `cpuinfo.max_freq` hold the CPU's real
physical maximum independently of the frequency table — for drivers
whose max boost frequency is not in the table and added the
if (cpuinfo.max_freq < max_freq) guard so it can only be raised, never
lowered.


[Root cause]
Commit 6e39ba4e5a82 ("cpufreq: Add boost_freq_req QoS request") changed
the value fed to the boost QoS request from the boost-aware policy->max
computed by each driver's .set_boost() to cpuinfo.max_freq,
overloading one field with two conflicting roles: a boost ceiling that
must track boost state in both directions, and a constant physical
maximum. Only cppc_cpufreq_set_boost() and amd_pstate_cpu_boost_update()
were taught to update it in both directions; cpufreq_boost_set_sw() was
missed — it can only do so indirectly via
cpufreq_frequency_table_cpuinfo(), where the 538b0188da46 guard forbids
a decrease. So on boost-disable boost_freq_req can't be lowered and
policy->max stays pinned at the boost frequency.


[Trigger]
Before Commit db80ad776cd2 ("cpufreq: Remove driver default policy->min
max init") removed policy->max = max_freq, that write still pushed
policy->max down and masked the issue. Removing that write just made it
reproducible.


[Conclusion]
Removing the Commit 538b0188da46 guard maybe therefore not the right 
fix, the drivers that rely on it would lose their real boost maximum at 
init. The fix should belong in policy_set_boost() / 
cpufreq_boost_set_sw(): source boost_freq_req from the boost-aware table 
maximum instead of the sticky cpuinfo.max_freq. `Fixes:` should point at 
6e39ba4e5a82.


>>
>>> +    policy->cpuinfo.max_freq = max_freq;
>>>         if (min_freq == ~0)
>>>           return -EINVAL;
>>
>>


-- 
Thx and BRs,
Zhongqiu Han

  reply	other threads:[~2026-08-10  9:54 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-06  4:42 [PATCH 0/2] sched/cpufreq: Fix schedutil's boost frequency handling Sibi Sankar
2026-08-06  4:42 ` [PATCH 1/2] cpufreq: allow cpuinfo max to decrease when boost is disabled Sibi Sankar
2026-08-06  9:28   ` Dmitry Baryshkov
2026-08-06 10:11     ` Sibi Sankar
2026-08-06 12:12       ` Dmitry Baryshkov
2026-08-07 12:12         ` Sibi Sankar
2026-08-06 11:22   ` Zhongqiu Han
2026-08-07 14:23     ` Sibi Sankar
2026-08-10  9:54       ` Zhongqiu Han [this message]
2026-08-06  4:42 ` [PATCH 2/2] sched/cpufreq: Update schedutil's DVFS request to reach the boost frequencies Sibi Sankar
2026-08-06  9:02   ` Christian Loehle
2026-08-06 15:13     ` Vincent Guittot
2026-08-07 14:41       ` Sibi Sankar
2026-08-06 15:09   ` Vincent Guittot
2026-08-07 14:32     ` Sibi Sankar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3a20b69e-b072-4723-925f-514d8162e259@oss.qualcomm.com \
    --to=zhongqiu.han@oss.qualcomm.com \
    --cc=bsegall@google.com \
    --cc=dietmar.eggemann@arm.com \
    --cc=juri.lelli@redhat.com \
    --cc=kprateek.nayak@amd.com \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=mgorman@suse.de \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=rafael@kernel.org \
    --cc=rostedt@goodmis.org \
    --cc=sibi.sankar@oss.qualcomm.com \
    --cc=vincent.guittot@linaro.org \
    --cc=viresh.kumar@linaro.org \
    --cc=vschneid@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®