On 01/07/2025 11:53 am, Andrew Cooper wrote: > diff --git a/xen/include/xen/lib/x86/cpu-policy.h > b/xen/include/xen/lib/x86/cpu-policy.h > index f43e1a3b21e9..aeaa16bbc732 100644 > --- a/xen/include/xen/lib/x86/cpu-policy.h > +++ b/xen/include/xen/lib/x86/cpu-policy.h > @@ -325,7 +325,10 @@ struct cpu_policy > uint32_t e21a; > struct { DECL_BITFIELD(e21a); }; > }; > - uint32_t /* b */:32, /* c */:32, /* d */:32; > + uint32_t ucode_size:12, /* Units of 16 bytes */ > + rap_size:8, /* Units of 8 entries */ > + :12;
Having tried this out on a real CPU, it's not correct. The APM and Genona PPR say that ucode_size is 12 bits wide, with the rest of the register reserved. However, the Turin PPR says it's 16 bits wide, with rap_size being 8 bits starting at bit 16. The raw value is 0x00080382, which matches the PPR. Therefore I'm going to turn this into a plain uint16_t and uint8_t as there's no need for bitfields any more. (Which I suspect might be why the 12->16 change was made.) ~Andrew