... as far as we presently use them in the codebase.
Signed-off-by: Jan Beulich <jbeulich@suse.com>
---
Or should we make both parts proper featureset elements? At least
APERFMPERF could likely be made visible to guests (in principle).
---
v3: Use SDM-conforming names. (Sorry Jason, had to drop you R-b once
again.)
v2: Use bool and unions.
--- a/xen/include/xen/lib/x86/cpu-policy.h
+++ b/xen/include/xen/lib/x86/cpu-policy.h
@@ -121,7 +121,46 @@ struct cpu_policy
uint64_t :64, :64; /* Leaf 0x3 - PSN. */
uint64_t :64, :64; /* Leaf 0x4 - Structured Cache. */
uint64_t :64, :64; /* Leaf 0x5 - MONITOR. */
- uint64_t :64, :64; /* Leaf 0x6 - Therm/Perf. */
+
+ /* Leaf 0x6 - Therm/Perf. */
+ union {
+ uint32_t _6a;
+ struct {
+ bool :1,
+ turbo_boost:1,
+ arat:1,
+ :1,
+ :1,
+ :1,
+ :1,
+ hwp:1,
+ hwp_interrupt:1,
+ hwp_activity_window:1,
+ hwp_epp:1,
+ hwp_request_pkg:1,
+ :1,
+ hdc:1,
+ :1,
+ :1,
+ hwp_peci_override:1,
+ :1,
+ :1,
+ hw_feedback:1;
+ };
+ };
+ union {
+ uint32_t _6b;
+ };
+ union {
+ uint32_t _6c;
+ struct {
+ bool hw_feedback_cap:1;
+ };
+ };
+ union {
+ uint32_t _6d;
+ };
+
uint64_t :64, :64; /* Leaf 0x7 - Structured Features. */
uint64_t :64, :64; /* Leaf 0x8 - rsvd */
uint64_t :64, :64; /* Leaf 0x9 - DCA */
On 2026-01-14 08:43, Jan Beulich wrote:
> ... as far as we presently use them in the codebase.
>
> Signed-off-by: Jan Beulich <jbeulich@suse.com>
> + /* Leaf 0x6 - Therm/Perf. */
> + union {
> + uint32_t _6a;
> + struct {
> + bool :1,
> + hw_feedback:1;
> + };
> + union {
> + uint32_t _6c;
> + struct {
> + bool hw_feedback_cap:1;
Maybe with an comment of "/* aperf/mperf */" since that is probably how
it is better know? I was confused with hw_feedback above which is
different.
Actually, looking at patch 2, I'd prefer leaving this named aperfmperf.
While not the SDM name, I think it's a more common name for the feature.
Either way (but preferably with aperfmperf):
Reviewed-by: Jason Andryuk <jason.andryuk@amd.com>
Regards,
Jason
Le 14/01/2026 à 14:45, Jan Beulich a écrit :
> ... as far as we presently use them in the codebase.
>
> Signed-off-by: Jan Beulich <jbeulich@suse.com>
> ---
> Or should we make both parts proper featureset elements? At least
> APERFMPERF could likely be made visible to guests (in principle).
> ---
> v3: Use SDM-conforming names. (Sorry Jason, had to drop you R-b once
> again.)
> v2: Use bool and unions.
>
> --- a/xen/include/xen/lib/x86/cpu-policy.h
> +++ b/xen/include/xen/lib/x86/cpu-policy.h
> @@ -121,7 +121,46 @@ struct cpu_policy
> uint64_t :64, :64; /* Leaf 0x3 - PSN. */
> uint64_t :64, :64; /* Leaf 0x4 - Structured Cache. */
> uint64_t :64, :64; /* Leaf 0x5 - MONITOR. */
> - uint64_t :64, :64; /* Leaf 0x6 - Therm/Perf. */
> +
> + /* Leaf 0x6 - Therm/Perf. */
> + union {
> + uint32_t _6a;
> + struct {
> + bool :1,
> + turbo_boost:1,
> + arat:1,
> + :1,
> + :1,
> + :1,
> + :1,
> + hwp:1,
> + hwp_interrupt:1,
> + hwp_activity_window:1,
> + hwp_epp:1,
> + hwp_request_pkg:1,
> + :1,
> + hdc:1,
> + :1,
> + :1,
> + hwp_peci_override:1,
> + :1,
> + :1,
> + hw_feedback:1;
> + };
> + };
> + union {
> + uint32_t _6b;
> + };
> + union {
> + uint32_t _6c;
> + struct {
> + bool hw_feedback_cap:1;
> + };
> + };
> + union {
> + uint32_t _6d;
> + };
> +
While I'm ok for the a and c unions, I'm not convinced by the b and d
ones (union with just a single uint32_t in it) as it's quite verbose and
inconsistent with the rest of the cpu_policy structure.
> uint64_t :64, :64; /* Leaf 0x7 - Structured Features. */
> uint64_t :64, :64; /* Leaf 0x8 - rsvd */
> uint64_t :64, :64; /* Leaf 0x9 - DCA */
>
>
--
Teddy Astie | Vates XCP-ng Developer
XCP-ng & Xen Orchestra - Vates solutions
web: https://vates.tech
On 14.01.2026 17:55, Teddy Astie wrote:
> Le 14/01/2026 à 14:45, Jan Beulich a écrit :
>> ... as far as we presently use them in the codebase.
>>
>> Signed-off-by: Jan Beulich <jbeulich@suse.com>
>> ---
>> Or should we make both parts proper featureset elements? At least
>> APERFMPERF could likely be made visible to guests (in principle).
>> ---
>> v3: Use SDM-conforming names. (Sorry Jason, had to drop you R-b once
>> again.)
>> v2: Use bool and unions.
>>
>> --- a/xen/include/xen/lib/x86/cpu-policy.h
>> +++ b/xen/include/xen/lib/x86/cpu-policy.h
>> @@ -121,7 +121,46 @@ struct cpu_policy
>> uint64_t :64, :64; /* Leaf 0x3 - PSN. */
>> uint64_t :64, :64; /* Leaf 0x4 - Structured Cache. */
>> uint64_t :64, :64; /* Leaf 0x5 - MONITOR. */
>> - uint64_t :64, :64; /* Leaf 0x6 - Therm/Perf. */
>> +
>> + /* Leaf 0x6 - Therm/Perf. */
>> + union {
>> + uint32_t _6a;
>> + struct {
>> + bool :1,
>> + turbo_boost:1,
>> + arat:1,
>> + :1,
>> + :1,
>> + :1,
>> + :1,
>> + hwp:1,
>> + hwp_interrupt:1,
>> + hwp_activity_window:1,
>> + hwp_epp:1,
>> + hwp_request_pkg:1,
>> + :1,
>> + hdc:1,
>> + :1,
>> + :1,
>> + hwp_peci_override:1,
>> + :1,
>> + :1,
>> + hw_feedback:1;
>> + };
>> + };
>> + union {
>> + uint32_t _6b;
>> + };
>> + union {
>> + uint32_t _6c;
>> + struct {
>> + bool hw_feedback_cap:1;
>> + };
>> + };
>> + union {
>> + uint32_t _6d;
>> + };
>> +
>
> While I'm ok for the a and c unions, I'm not convinced by the b and d
> ones (union with just a single uint32_t in it) as it's quite verbose and
> inconsistent with the rest of the cpu_policy structure.
Indeed for them I wasn't quite certain. I could drop the union wrapping
for now (until individual fields appear), yet then I'd again be on the
edge: Use
uint32_t _6b;
or
uint32_t :32;
? Both have their pros and cons. Hence why I went with consistent layout
for all 4 fields. If there was a clear majority preference for either of
the above, I'd be fine to switch.
Jan
© 2016 - 2026 Red Hat, Inc.