Messages in this thread | | | Date | Sat, 6 Jan 2024 03:59:01 +0300 | From | "" <> | Subject | Re: [PATCHv5 10/16] x86/tdx: Convert shared memory back to private on kexec |
| |
On Fri, Jan 05, 2024 at 07:38:48PM +0000, Edgecombe, Rick P wrote: > The break apart looks good. > > On Sat, 2023-12-23 at 02:52 +0300, Kirill A. Shutemov wrote: > > + 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)); > > Does this need a full shootdown at this point, at least in the crash > case? A local flush for the non-crash case might be nice too.
See __flush_tlb_all() after the loop.
> Also, probably a barrier() between set_pte() and > tdx_enc_status_changed().
But why? There's no concurrency at this point. Interrupts are disabled and only one CPU is active. Nobody can touch the memory relevant for the PTE.
-- Kiryl Shutsemau / Kirill A. Shutemov
| |