[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] xen/balloon: do not modify the p2m for auto_translate guests
On Fri, 13 Dec 2013, Konrad Rzeszutek Wilk wrote: > On Wed, Dec 11, 2013 at 04:58:42PM +0000, Stefano Stabellini wrote: > > decrease_reservation doesn't modify the p2m for auto_translate guests, > > but increase_reservation does. > > Fix that by avoiding any p2m modifications in both increase_reservation > > and decrease_reservation for auto_translated guests. > > > > Avoid allocating or using scratch pages for auto_translated guests. > > > > Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> > > --- > > drivers/xen/balloon.c | 63 > > ++++++++++++++++++++++++++----------------------- > > 1 file changed, 34 insertions(+), 29 deletions(-) > > > > diff --git a/drivers/xen/balloon.c b/drivers/xen/balloon.c > > index 55ea73f..4c02e2b 100644 > > --- a/drivers/xen/balloon.c > > +++ b/drivers/xen/balloon.c > > @@ -350,17 +350,19 @@ static enum bp_state increase_reservation(unsigned > > long nr_pages) > > > > pfn = page_to_pfn(page); > > > > - set_phys_to_machine(pfn, frame_list[i]); > > - > > #ifdef CONFIG_XEN_HAVE_PVMMU > > - /* Link back into the page tables if not highmem. */ > > - if (xen_pv_domain() && !PageHighMem(page)) { > > - int ret; > > - ret = HYPERVISOR_update_va_mapping( > > - (unsigned long)__va(pfn << PAGE_SHIFT), > > - mfn_pte(frame_list[i], PAGE_KERNEL), > > - 0); > > - BUG_ON(ret); > > + if (!xen_feature(XENFEAT_auto_translated_physmap)) { > > + set_phys_to_machine(pfn, frame_list[i]); > > + > > + /* Link back into the page tables if not highmem. */ > > + if (!PageHighMem(page)) { > > + int ret; > > + ret = HYPERVISOR_update_va_mapping( > > + (unsigned long)__va(pfn << > > PAGE_SHIFT), > > + mfn_pte(frame_list[i], > > PAGE_KERNEL), > > + 0); > > + BUG_ON(ret); > > + } > > } > > #endif > > > > @@ -378,7 +380,6 @@ static enum bp_state decrease_reservation(unsigned long > > nr_pages, gfp_t gfp) > > enum bp_state state = BP_DONE; > > unsigned long pfn, i; > > struct page *page; > > - struct page *scratch_page; > > int ret; > > struct xen_memory_reservation reservation = { > > .address_bits = 0, > > @@ -411,27 +412,29 @@ static enum bp_state decrease_reservation(unsigned > > long nr_pages, gfp_t gfp) > > > > scrub_page(page); > > > > +#ifdef CONFIG_XEN_HAVE_PVMMU > > /* > > * Ballooned out frames are effectively replaced with > > * a scratch frame. Ensure direct mappings and the > > * p2m are consistent. > > */ > > - scratch_page = get_balloon_scratch_page(); > > -#ifdef CONFIG_XEN_HAVE_PVMMU > > - if (xen_pv_domain() && !PageHighMem(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); > > - } > > -#endif > > if (!xen_feature(XENFEAT_auto_translated_physmap)) { > > unsigned long p; > > + struct page *scratch_page = > > get_balloon_scratch_page(); > > + > > + if (!PageHighMem(page)) { > > How come you removed the 'xen_pv_domain' part? I thought that it's meaningless here. What we care about is whether it is an auto_translated guests or not, everything else is irrelevant. It also goes in the direction of using specific tests for things instead of catch all tests like xen_pv_domain that don't mean much anymore. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |