|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 5/6] x86: use standard C types in struct cpuinfo_x86
On 09/02/2023 10:42 am, Jan Beulich wrote:
> Consolidate this to use exclusively standard types, and change oprofile
> code (apparently trying to mirror those types) at the same time. Where
> sensible actually drop local variables.
>
> No functional change intended.
>
> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
> ---
> Much like x86_capability[] already doesn't use a fixed width type, most
> if not all of the other fields touched here probably also shouldn't. I
> wasn't sure though whether switching might be controversial for some of
> them ...
x86_capability isn't an inherently 32bit structure. It's a bitmap, and
all of Xen's bitmap operations take unsigned int *.
Most other things in this structure don't need to have specific widths
IMO, but there is huge quantity of junk here.
> --- a/xen/arch/x86/include/asm/processor.h
> +++ b/xen/arch/x86/include/asm/processor.h
> @@ -119,24 +119,24 @@ struct x86_cpu_id {
> };
>
> struct cpuinfo_x86 {
> - __u8 x86; /* CPU family */
> - __u8 x86_vendor; /* CPU vendor */
> - __u8 x86_model;
> - __u8 x86_mask;
> + uint8_t x86; /* CPU family */
> + uint8_t x86_vendor; /* CPU vendor */
> + uint8_t x86_model;
> + uint8_t x86_mask;
These specific names always irritated me. They should be vendor,
family, model, stepping and probably in that order. The x86 prefix is
entirely redundant.
> int cpuid_level; /* Maximum supported CPUID level, -1=no CPUID */
There's no such thing a "no CPUID" cpu for Xen any more.
> - __u32 extended_cpuid_level; /* Maximum supported CPUID extended level */
> + uint32_t extended_cpuid_level; /* Maximum supported CPUID extended level
> */
This does need to be this wide, but I really regret the name being this
wide...
> unsigned int x86_capability[NCAPINTS];
> char x86_vendor_id[16];
> char x86_model_id[64];
These arrays should be 12 and 48 respectively, but the vendor id is
redundant with the vendor field.
Furthermore, we do some non-trivial string rearranging of the string,
and (seeing as you rejected my patch to print it on boot) only ever gets
used to hand to dom0 in a machine check.
> int x86_cache_size; /* in KB - valid for CPUS which support this call
> */
> int x86_cache_alignment; /* In bytes */
The only interesting thing I can see about this field is that the
Netburst quirk is wrong. double-pumped IO was a firmware setting
because it was a tradeoff and different workloads favoured different
settings.
> - __u32 x86_max_cores; /* cpuid returned max cores value */
> - __u32 booted_cores; /* number of cores as seen by OS */
> - __u32 x86_num_siblings; /* cpuid logical cpus per chip value */
> - __u32 apicid;
> - __u32 phys_proc_id; /* package ID of each logical CPU */
> - __u32 cpu_core_id; /* core ID of each logical CPU*/
> - __u32 compute_unit_id; /* AMD compute unit ID of each logical CPU */
> + uint32_t x86_max_cores; /* cpuid returned max cores value */
> + uint32_t booted_cores; /* number of cores as seen by OS */
> + uint32_t x86_num_siblings; /* cpuid logical cpus per chip value */
> + uint32_t apicid;
> + uint32_t phys_proc_id; /* package ID of each logical CPU */
> + uint32_t cpu_core_id; /* core ID of each logical CPU */
> + uint32_t compute_unit_id; /* AMD compute unit ID of each logical CPU */
There's lots of redundancy here, and half of these fields can be derived
directly from the 32bit APIC ID.
For the purpose of the type cleanup, Acked-by: Andrew Cooper
<andrew.cooper3@xxxxxxxxxx>.
~Andrew
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |