On Thu, Feb 01, 2024 at 12:09:01AM +0100, Paolo Bonzini wrote: > In commit fbf6449f84bf ("x86/sev-es: Set x86_virt_bits to the correct > value straight away, instead of a two-phase approach"), the initialization > of c->x86_phys_bits was moved after this_cpu->c_early_init(c). This is > incorrect because early_init_amd() expected to be able to reduce the > value according to the contents of CPUID leaf 0x8000001f. > > Fortunately, the bug was negated by init_amd()'s call to early_init_amd(), > which does reduce x86_phys_bits in the end. However, this is very > late in the boot process and, most notably, the wrong value is used for > x86_phys_bits when setting up MTRRs. > > To fix this, call get_cpu_address_sizes() as soon as X86_FEATURE_CPUID is > set/cleared, and c->extended_cpuid_level is retrieved. > > Fixes: fbf6449f84bf ("x86/sev-es: Set x86_virt_bits to the correct value straight away, instead of a two-phase approach") > Cc: Adam Dunlap <acdunlap@xxxxxxxxxx> > Cc: Kirill A. Shutemov <kirill.shutemov@xxxxxxxxxxxxxxx> > Cc: Xiaoyao Li <xiaoyao.li@xxxxxxxxx> > Cc: Kai Huang <kai.huang@xxxxxxxxx> > Cc: Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx> > Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx> > Cc: Ingo Molnar <mingo@xxxxxxxxxx> > Cc: x86@xxxxxxxxxx > Cc: stable@xxxxxxxxxxxxxxx > Signed-off-by: Paolo Bonzini <pbonzini@xxxxxxxxxx> Reviewed-by: Kirill A. Shutemov <kirill.shutemov@xxxxxxxxxxxxxxx> -- Kiryl Shutsemau / Kirill A. Shutemov