[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Ping²: [PATCH] x86/PV: make post-migration page state consistent
On 11.09.2020 12:34, Jan Beulich wrote: > When a page table page gets de-validated, its type reference count drops > to zero (and PGT_validated gets cleared), but its type remains intact. > XEN_DOMCTL_getpageframeinfo3, therefore, so far reported prior usage for > such pages. An intermediate write to such a page via e.g. > MMU_NORMAL_PT_UPDATE, however, would transition the page's type to > PGT_writable_page, thus altering what XEN_DOMCTL_getpageframeinfo3 would > return. In libxc the decision which pages to normalize / localize > depends solely on the type returned from the domctl. As a result without > further precautions the guest won't be able to tell whether such a page > has had its (apparent) PTE entries transitioned to the new MFNs. > > Add a check of PGT_validated, thus consistently avoiding normalization / > localization in the tool stack. > > Alongside using XEN_DOMCTL_PFINFO_NOTAB instead of plain zero for the > change at hand, also change the variable's initializer to use this > constant, too. Take the opportunity and also adjust its type. > > Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> I think I did address all questions here. Jan > --- a/xen/arch/x86/domctl.c > +++ b/xen/arch/x86/domctl.c > @@ -215,7 +215,8 @@ long arch_do_domctl( > > for ( i = 0; i < num; ++i ) > { > - unsigned long gfn = 0, type = 0; > + unsigned long gfn = 0; > + unsigned int type = XEN_DOMCTL_PFINFO_NOTAB; > struct page_info *page; > p2m_type_t t; > > @@ -255,6 +256,8 @@ long arch_do_domctl( > > if ( page->u.inuse.type_info & PGT_pinned ) > type |= XEN_DOMCTL_PFINFO_LPINTAB; > + else if ( !(page->u.inuse.type_info & PGT_validated) ) > + type = XEN_DOMCTL_PFINFO_NOTAB; > > if ( page->count_info & PGC_broken ) > type = XEN_DOMCTL_PFINFO_BROKEN; >
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |