On Fri, May 31, 2024 at 05:14:42PM +0200, Borislav Petkov wrote: > On Tue, May 28, 2024 at 12:55:14PM +0300, Kirill A. Shutemov wrote: > > +static void tdx_kexec_finish(void) > > +{ > > + unsigned long addr, end; > > + long found = 0, shared; > > + > > + lockdep_assert_irqs_disabled(); > > + > > + addr = PAGE_OFFSET; > > + end = PAGE_OFFSET + get_max_mapped(); > > + > > + while (addr < end) { > > + unsigned long size; > > + unsigned int level; > > + pte_t *pte; > > + > > + pte = lookup_address(addr, &level); > > + size = page_level_size(level); > > + > > + if (pte && pte_decrypted(*pte)) { > > + int pages = size / PAGE_SIZE; > > + > > + /* > > + * Touching memory with shared bit set triggers implicit > > + * conversion to shared. > > + * > > + * Make sure nobody touches the shared range from > > + * now on. > > + */ > > + set_pte(pte, __pte(0)); > > + > > Format the below into a comment here: > > /* > > The only thing one can do at this point on failure is panic. It is > reasonable to proceed, especially for the crash case because the > kexec-ed kernel is using a different page table so there won't be > a mismatch between shared/private marking of the page so it doesn't > matter. Page tables would not make a difference here. We will switch to identity mappings soon. And kexec-ed kernel will build new page tables from scratch. I will drop the part after "It is reasonable to proceed". -- Kiryl Shutsemau / Kirill A. Shutemov