[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [RFC PATCH 6/8]: Ballooning changes
On Thu, 2012-08-16 at 02:05 +0100, Mukesh Rathor wrote: > --- > drivers/xen/balloon.c | 26 +++++++++++++++++++++----- > 1 files changed, 21 insertions(+), 5 deletions(-) > > diff --git a/drivers/xen/balloon.c b/drivers/xen/balloon.c > index 31ab82f..57960a1 100644 > --- a/drivers/xen/balloon.c > +++ b/drivers/xen/balloon.c > @@ -358,10 +358,18 @@ static enum bp_state increase_reservation(unsigned long > nr_pages) > BUG_ON(!xen_feature(XENFEAT_auto_translated_physmap) && > phys_to_machine_mapping_valid(pfn)); > > - set_phys_to_machine(pfn, frame_list[i]); > - > + if (!xen_pvh_domain()) { XENFEAT_auto_translated...? > + set_phys_to_machine(pfn, frame_list[i]); > + } else { > + pte_t *ptep; > + unsigned int level; > + void *addr = __va(pfn << PAGE_SHIFT); > + ptep = lookup_address((unsigned long)addr, &level); > + set_pte(ptep, pfn_pte(pfn, PAGE_KERNEL)); > + } > /* Link back into the page tables if not highmem. */ > - if (xen_pv_domain() && !PageHighMem(page)) { > + if (xen_pv_domain() && !PageHighMem(page) && > + !xen_pvh_domain()) { It feels like this ought to be inside the !xen_pvh_domain above as well as just hte set_phys_to_machine. And is the else above not missing a !PageHighMem check? > int ret; > ret = HYPERVISOR_update_va_mapping( > (unsigned long)__va(pfn << PAGE_SHIFT), > @@ -417,7 +425,14 @@ static enum bp_state decrease_reservation(unsigned long > nr_pages, gfp_t gfp) > > scrub_page(page); > > - if (xen_pv_domain() && !PageHighMem(page)) { > + if (xen_pvh_domain() && !PageHighMem(page)) { > + unsigned int level; > + pte_t *ptep; > + void *addr = __va(pfn << PAGE_SHIFT); > + ptep = lookup_address((unsigned long)addr, &level); > + set_pte(ptep, __pte(0)); > + > + } else if (xen_pv_domain() && !PageHighMem(page)) { > ret = HYPERVISOR_update_va_mapping( > (unsigned long)__va(pfn << PAGE_SHIFT), > __pte_ma(0), 0); This pattern: if ( xen_pvh_... ) ... lookup_address / set_pte ... else ... HYOERVISOR_update_va_mapping Was present above too -- candidate for a helper? (I was a bit surprised there wasn't already one...) > @@ -433,7 +448,8 @@ static enum bp_state decrease_reservation(unsigned long > nr_pages, gfp_t gfp) > /* No more mappings: invalidate P2M and add to balloon. */ > for (i = 0; i < nr_pages; i++) { > pfn = mfn_to_pfn(frame_list[i]); > - __set_phys_to_machine(pfn, INVALID_P2M_ENTRY); > + if (!xen_pvh_domain()) XENFEAT_something? > + __set_phys_to_machine(pfn, INVALID_P2M_ENTRY); > balloon_append(pfn_to_page(pfn)); > } > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |