> From: Kirill A. Shutemov <kirill.shutemov@xxxxxxxxxxxxxxx> > Sent: Friday, June 28, 2024 3:05 AM > To: Dexuan Cui <decui@xxxxxxxxxxxxx> > > [...] > > static bool tdx_enc_status_changed(unsigned long vaddr, int numpages, > [...] > This patch collied with kexec changes. tdx_kexec_finish() calls > tdx_enc_status_changed() after clearing pte, so slow_virt_to_phys() > crashes on in. > > Daxuan, could you check if the fixup below works for you on vmalloc > addresses? > > diff --git a/arch/x86/coco/tdx/tdx.c b/arch/x86/coco/tdx/tdx.c > index ef8ec2425998..5e455c883bcc 100644 > --- a/arch/x86/coco/tdx/tdx.c > +++ b/arch/x86/coco/tdx/tdx.c > @@ -813,8 +813,15 @@ static bool tdx_enc_status_changed(unsigned > long vaddr, int numpages, bool enc) > step = PAGE_SIZE; > > for (addr = start; addr < end; addr += step) { > - phys_addr_t start_pa = slow_virt_to_phys((void *)addr); > - phys_addr_t end_pa = start_pa + step; > + phys_addr_t start_pa; > + phys_addr_t end_pa; > + > + if (virt_addr_valid(addr)) > + start_pa = __pa(addr); > + else > + start_pa = slow_virt_to_phys((void *)addr); > + > + end_pa = start_pa + step; > > if (!tdx_enc_status_changed_phys(start_pa, end_pa, enc)) > return false; > -- > Kiryl Shutsemau / Kirill A. Shutemov Hi Kirill, your fixup works for me. BTW, I just realized that virt_addr_valid() returns false for a vmalloc'd address. Thanks, Dexuan