On 25/02/2025 9:07 am, Jan Beulich wrote:
> On 24.02.2025 17:05, Andrew Cooper wrote:
>> --- a/xen/arch/x86/cpu/common.c
>> +++ b/xen/arch/x86/cpu/common.c
>> @@ -819,6 +819,7 @@ void load_system_tables(void)
>> * support using ARRAY_SIZE against per-cpu variables.
>> */
>> struct tss_page *tss_page = &this_cpu(tss_page);
>> + idt_entry_t *idt = this_cpu(idt);
> Nit: Tab indentation here.
Yeah, I noticed that only after sending the email. Other parts of the
FRED series vastly changes this function.
>
>> @@ -830,7 +831,7 @@ void load_system_tables(void)
>> .limit = LAST_RESERVED_GDT_BYTE,
>> };
>> const struct desc_ptr idtr = {
>> - .base = (unsigned long)idt_tables[cpu],
>> + .base = (unsigned long)idt,
>> .limit = sizeof(bsp_idt) - 1,
>> };
> Coming back to the comment on the earlier patch: Now that you touch all
> of the idt_tables[] uses anyway, ...
>
>> @@ -30,7 +31,7 @@ typedef union {
>> } idt_entry_t;
>>
>> extern idt_entry_t bsp_idt[X86_IDT_VECTORS];
>> -extern idt_entry_t *idt_tables[];
>> +DECLARE_PER_CPU(idt_entry_t *, idt);
> ... this probably really ought to become
>
> DECLARE_PER_CPU(idt_entry_t (*)[X86_IDT_VECTORS], idt);
>
> ?
I'm afraid this doesn't compile.
arch/x86/crash.c:66:17: error: passing argument 1 of ‘set_ist’ from
incompatible pointer type [-Werror=incompatible-pointer-types]
...
note: expected ‘volatile idt_entry_t *’ but argument is of type
‘idt_entry_t (*)[256]’
Similarly {en,dis}able_each_ist() and _set_gate_lower().
~Andrew