On 3/25/24 3:39 AM, Kirill A. Shutemov wrote: > The kernel will convert all shared memory back to private during kexec. > The direct mapping page tables will provide information on which memory > is shared. > > It is extremely important to convert all shared memory. If a page is > missed, it will cause the second kernel to crash when it accesses it. > > Keep track of the number of shared pages. This will allow for > cross-checking against the shared information in the direct mapping and > reporting if the shared bit is lost. > > Signed-off-by: Kirill A. Shutemov <kirill.shutemov@xxxxxxxxxxxxxxx> > --- Looks good to me. Reviewed-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@xxxxxxxxxxxxxxx> > arch/x86/coco/tdx/tdx.c | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/arch/x86/coco/tdx/tdx.c b/arch/x86/coco/tdx/tdx.c > index 26fa47db5782..979891e97d83 100644 > --- a/arch/x86/coco/tdx/tdx.c > +++ b/arch/x86/coco/tdx/tdx.c > @@ -38,6 +38,8 @@ > > #define TDREPORT_SUBTYPE_0 0 > > +static atomic_long_t nr_shared; > + > /* Called from __tdx_hypercall() for unrecoverable failure */ > noinstr void __noreturn __tdx_hypercall_failed(void) > { > @@ -821,6 +823,11 @@ static int tdx_enc_status_change_finish(unsigned long vaddr, int numpages, > if (!enc && !tdx_enc_status_changed(vaddr, numpages, enc)) > return -EIO; > > + if (enc) > + atomic_long_sub(numpages, &nr_shared); > + else > + atomic_long_add(numpages, &nr_shared); > + > return 0; > } > -- Sathyanarayanan Kuppuswamy Linux Kernel Developer _______________________________________________ kexec mailing list kexec@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/kexec