From: Nicola Vetrini <nicola.vetrini@bugseng.com>
To: "Penny, Zheng" <penny.zheng@amd.com>
Cc: "Jan Beulich" <jbeulich@suse.com>,
"Huang, Ray" <Ray.Huang@amd.com>,
"Andrew Cooper" <andrew.cooper3@citrix.com>,
"Roger Pau Monné" <roger.pau@citrix.com>,
xen-devel@lists.xenproject.org
Subject: Re: [PATCH v3 07/15] xen/cpufreq: fix core frequency calculation for AMD Family 1Ah CPUs
Date: Wed, 26 Mar 2025 11:14:03 +0100 [thread overview]
Message-ID: <3e0155aeee7a8629801adbc9c78a5bb6@bugseng.com> (raw)
In-Reply-To: <DM4PR12MB84515BDB3E64C4AEA561B266E1A62@DM4PR12MB8451.namprd12.prod.outlook.com>
On 2025-03-26 10:54, Penny, Zheng wrote:
> [Public]
>
> Hi,
>
>> -----Original Message-----
>> From: Jan Beulich <jbeulich@suse.com>
>> Sent: Monday, March 24, 2025 11:48 PM
>> To: Penny, Zheng <penny.zheng@amd.com>
>> Cc: Huang, Ray <Ray.Huang@amd.com>; Andrew Cooper
>> <andrew.cooper3@citrix.com>; Roger Pau Monné <roger.pau@citrix.com>;
>> xen-
>> devel@lists.xenproject.org; Nicola Vetrini
>> <nicola.vetrini@bugseng.com>
>> Subject: Re: [PATCH v3 07/15] xen/cpufreq: fix core frequency
>> calculation for AMD
>> Family 1Ah CPUs
>>
>> On 06.03.2025 09:39, Penny Zheng wrote:
>> > This commit fixes core frequency calculation for AMD Family 1Ah CPUs,
>> > due to a change in the PStateDef MSR layout in AMD Family 1Ah+.
>> > In AMD Family 1Ah+, Core current operating frequency in MHz is
>> > calculated as
>> > follows:
>>
>> Why 1Ah+? In the code you correctly limit to just 1Ah.
>>
>> > --- a/xen/arch/x86/cpu/amd.c
>> > +++ b/xen/arch/x86/cpu/amd.c
>> > @@ -572,12 +572,24 @@ static void amd_get_topology(struct cpuinfo_x86 *c)
>> > :
>> > c->cpu_core_id); }
>> >
>> > +static uint64_t amd_parse_freq(const struct cpuinfo_x86 *c, uint64_t
>> > +value) {
>> > + ASSERT(c->x86 <= 0x1A);
>> > +
>> > + if (c->x86 < 0x17)
>> > + return (((value & 0x3f) + 0x10) * 100) >> ((value >> 6) & 7);
>> > + else if (c->x86 <= 0x19)
>> > + return ((value & 0xff) * 25 * 8) / ((value >> 8) & 0x3f);
>> > + else
>> > + return (value & 0xfff) * 5;
>> > +}
>>
>> Could I talk you into omitting the unnecessary "else" in cases like
>> this one?
>> (This may also make sense to express as switch().)
>>
>
> Sorry, bad habit... will change it to switch
>
>> > @@ -658,19 +670,20 @@ void amd_log_freq(const struct cpuinfo_x86 *c)
>> > if (!(lo >> 63))
>> > return;
>> >
>> > -#define FREQ(v) (c->x86 < 0x17 ? ((((v) & 0x3f) + 0x10) * 100) >> (((v) >> 6) &
>> 7) \
>> > - : (((v) & 0xff) * 25 * 8) / (((v) >> 8) & 0x3f))
>> > if (idx && idx < h &&
>> > !rdmsr_safe(0xC0010064 + idx, val) && (val >> 63) &&
>> > !rdmsr_safe(0xC0010064, hi) && (hi >> 63))
>> > printk("CPU%u: %lu (%lu ... %lu) MHz\n",
>> > - smp_processor_id(), FREQ(val), FREQ(lo), FREQ(hi));
>> > + smp_processor_id(),
>> > + amd_parse_freq(c, val),
>> > + amd_parse_freq(c, lo), amd_parse_freq(c, hi));
>>
>> I fear Misra won't like multiple function calls to evaluate the
>> parameters to pass to
>> another function. Iirc smp_process_id() has special exception, so
>> that's okay here.
>> This may be possible to alleviate by marking the new helper pure or
>> even const
>> (see gcc doc as to caveats with passing pointers to const functions).
>> Cc-ing Nicola
>> for possible clarification or correction.
>>
>
> Maybe we shall declare the function __pure. Having checked the gcc doc,
> ``
> a function that has pointer arguments must not be declared const
> ``
> Otherwise we store the "c->x86" value to avoid using the pointer
>
Either way could work. ECLAIR will automatically pick up
__attribute__((pure)) or __attribute__((const)) from the declaration.
Maybe it could be const, as from a cursory look I don't think the gcc
restriction on pointer arguments applies, as the pointee is not modified
between successive calls, but I might be mistaken.
>> Jan
--
Nicola Vetrini, B.Sc.
Software Engineer
BUGSENG (https://bugseng.com)
LinkedIn: https://www.linkedin.com/in/nicola-vetrini-a42471253
next prev parent reply other threads:[~2025-03-26 10:14 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-06 8:39 [PATCH v3 00/15] amd-cppc CPU Performance Scaling Driver Penny Zheng
2025-03-06 8:39 ` [PATCH v3 01/15] xen/cpufreq: introduces XEN_PM_PSD for solely delivery of _PSD Penny Zheng
2025-03-24 14:08 ` Jan Beulich
2025-04-01 3:25 ` Penny, Zheng
2025-03-06 8:39 ` [PATCH v3 02/15] xen/x86: introduce new sub-hypercall to propagate CPPC data Penny Zheng
2025-03-24 14:28 ` Jan Beulich
2025-03-25 4:12 ` Penny, Zheng
2025-03-25 7:53 ` Jan Beulich
2025-03-28 8:27 ` Penny, Zheng
2025-03-28 8:36 ` Jan Beulich
2025-03-06 8:39 ` [PATCH v3 03/15] xen/cpufreq: refactor cmdline "cpufreq=xxx" Penny Zheng
2025-03-24 15:00 ` Jan Beulich
2025-03-26 7:20 ` Penny, Zheng
2025-03-26 10:43 ` Jan Beulich
2025-04-01 5:44 ` Penny, Zheng
2025-04-01 6:38 ` Jan Beulich
2025-04-01 6:56 ` Penny, Zheng
2025-03-06 8:39 ` [PATCH v3 04/15] xen/cpufreq: move XEN_PROCESSOR_PM_xxx to internal header Penny Zheng
2025-03-24 15:11 ` Jan Beulich
2025-03-26 7:48 ` Penny, Zheng
2025-03-06 8:39 ` [PATCH v3 05/15] xen/x86: introduce "cpufreq=amd-cppc" xen cmdline Penny Zheng
2025-03-24 15:26 ` Jan Beulich
2025-03-26 8:35 ` Penny, Zheng
2025-03-26 10:55 ` Jan Beulich
2025-03-27 3:12 ` Penny, Zheng
2025-03-27 7:48 ` Jan Beulich
2025-03-28 4:43 ` Penny, Zheng
2025-03-25 10:00 ` Jan Beulich
2025-03-06 8:39 ` [PATCH v3 06/15] xen/cpufreq: disable px statistic info in amd-cppc mode Penny Zheng
2025-03-24 15:34 ` Jan Beulich
2025-03-06 8:39 ` [PATCH v3 07/15] xen/cpufreq: fix core frequency calculation for AMD Family 1Ah CPUs Penny Zheng
2025-03-24 15:47 ` Jan Beulich
2025-03-25 10:55 ` Nicola Vetrini
2025-03-26 9:54 ` Penny, Zheng
2025-03-26 10:14 ` Nicola Vetrini [this message]
2025-03-26 10:19 ` Jan Beulich
2025-03-06 8:39 ` [PATCH v3 08/15] xen/amd: export processor max frequency value Penny Zheng
2025-03-24 15:52 ` Jan Beulich
2025-03-27 8:38 ` Penny, Zheng
2025-03-06 8:39 ` [PATCH v3 09/15] xen/x86: introduce a new amd cppc driver for cpufreq scaling Penny Zheng
2025-03-25 9:57 ` Jan Beulich
2025-03-25 13:58 ` Jason Andryuk
2025-04-03 7:40 ` Penny, Zheng
2025-04-03 7:54 ` Jan Beulich
2025-03-06 8:39 ` [PATCH v3 10/15] xen/cpufreq: only set gov NULL when cpufreq_driver.setpolicy is NULL Penny Zheng
2025-03-24 16:32 ` Jan Beulich
2025-03-06 8:39 ` [PATCH v3 11/15] xen/cpufreq: abstract Energy Performance Preference value Penny Zheng
2025-03-25 10:13 ` Jan Beulich
2025-03-06 8:39 ` [PATCH v3 12/15] xen/x86: implement EPP support for the amd-cppc driver in active mode Penny Zheng
2025-03-25 10:48 ` Jan Beulich
2025-03-28 4:07 ` Penny, Zheng
2025-03-28 7:18 ` Jan Beulich
2025-04-08 10:32 ` Penny, Zheng
2025-03-06 8:39 ` [PATCH v3 13/15] tools/xenpm: Print CPPC parameters for amd-cppc driver Penny Zheng
2025-03-06 8:39 ` [PATCH v3 14/15] xen/xenpm: Adapt cpu frequency monitor in xenpm Penny Zheng
2025-03-25 11:26 ` Jan Beulich
2025-03-25 16:37 ` Jason Andryuk
2025-03-26 15:45 ` Anthony PERARD
2025-03-06 8:39 ` [PATCH v3 15/15] xen/cpufreq: Adapt SET/GET_CPUFREQ_CPPC xen_sysctl_pm_op for amd-cppc driver Penny Zheng
2025-03-25 16:59 ` Jan Beulich
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=3e0155aeee7a8629801adbc9c78a5bb6@bugseng.com \
--to=nicola.vetrini@bugseng.com \
--cc=Ray.Huang@amd.com \
--cc=andrew.cooper3@citrix.com \
--cc=jbeulich@suse.com \
--cc=penny.zheng@amd.com \
--cc=roger.pau@citrix.com \
--cc=xen-devel@lists.xenproject.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.