On 05.03.2025 01:02, Andrew Cooper wrote: > This can be a plain per_cpu() variable, and __read_mostly seeing as it's > allocated once and never touched again.
cpu_smpboot_free() certainly touches (really: modifies) it again. Just that ... > @@ -1009,7 +1009,7 @@ static void cpu_smpboot_free(unsigned int cpu, bool > remove) > if ( remove ) > { > FREE_XENHEAP_PAGE(per_cpu(gdt, cpu)); > - FREE_XENHEAP_PAGE(idt_tables[cpu]); > + FREE_XENHEAP_PAGE(per_cpu(idt, cpu)); ... this function-like macro hides that the macro argument is written to. (This is the kind of hiding that elsewhere I think you dislike, yet there macros were an idea of yours, iirc.) Jan