[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [RFC PATCH 6/8]: Ballooning changes
And patches like this one are the reason why I don't want xen_pvh_domain in non-x86 xen files: I am pretty sure that if you didn't use xen_pvh_domain here but a combination of XENFEAT_auto_translated_physmap and xen_hvm_domain I would be able to reuse this work on ARM (that doesn't have a working balloon driver yet) as is. On Thu, 16 Aug 2012, 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()) { > + 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()) { > 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); > @@ -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()) > + __set_phys_to_machine(pfn, INVALID_P2M_ENTRY); > balloon_append(pfn_to_page(pfn)); > } > > -- > 1.7.2.3 > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxx > http://lists.xen.org/xen-devel > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |