[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] xen/balloon: set ballooned out pages as invalid in p2m
On Tue, Jul 01, 2014 at 02:37:48PM +0100, David Vrabel wrote: > Since cd9151e26d31048b2b5e00fd02e110e07d2200c9 (xen/balloon: set a > mapping for ballooned out pages), a ballooned out page had its entry > in the p2m set to the MFN of one of the scratch pages. This means > that the p2m will contain many entries pointing to the same MFN. > > During a domain save, these many-to-one entries are not identified as > such and the scratch page is saved multiple times. On restore the > ballooned pages are populated with new frames and the domain may use > up its allocation before all pages can be restored. > > Set ballooned out pages as INVALID_P2M_ENTRY in the p2m (as they were > before), preventing them from being saved and re-populated on restore. > Won't that invalide the primal purpose of the scratch page code? That is cd9151e26d31048b2b5e00fd02e110e07d2200c9 xen/balloon: set a mapping for ballooned out pages " Allocate a page per cpu and map all the ballooned out pages to the corresponding mfn. Set the p2m accordingly. This way reading from a ballooned out page won't cause a kernel crash (see http://lists.xen.org/archives/html/xen-devel/2012-12/msg01154.html). " ? > Signed-off-by: David Vrabel <david.vrabel@xxxxxxxxxx> > Reported-by: Marek Marczykowski <marmarek@xxxxxxxxxxxxxxxxxxxxxx> > Tested-by: Marek Marczykowski <marmarek@xxxxxxxxxxxxxxxxxxxxxx> > --- > drivers/xen/balloon.c | 12 +++++------- > 1 file changed, 5 insertions(+), 7 deletions(-) > > diff --git a/drivers/xen/balloon.c b/drivers/xen/balloon.c > index b7a506f..5c660c7 100644 > --- a/drivers/xen/balloon.c > +++ b/drivers/xen/balloon.c > @@ -426,20 +426,18 @@ static enum bp_state decrease_reservation(unsigned long > nr_pages, gfp_t gfp) > * p2m are consistent. > */ > if (!xen_feature(XENFEAT_auto_translated_physmap)) { > - unsigned long p; > - struct page *scratch_page = > get_balloon_scratch_page(); > - > if (!PageHighMem(page)) { > + struct page *scratch_page = > get_balloon_scratch_page(); > + > ret = HYPERVISOR_update_va_mapping( > (unsigned long)__va(pfn << > PAGE_SHIFT), > > pfn_pte(page_to_pfn(scratch_page), > PAGE_KERNEL_RO), 0); > BUG_ON(ret); > - } > - p = page_to_pfn(scratch_page); > - __set_phys_to_machine(pfn, pfn_to_mfn(p)); > > - put_balloon_scratch_page(); > + put_balloon_scratch_page(); > + } > + __set_phys_to_machine(pfn, INVALID_P2M_ENTRY); > } > #endif > > -- > 1.7.10.4 > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |