From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: David Vrabel <david.vrabel@citrix.com>
Cc: "xen-devel@lists.xensource.com" <xen-devel@lists.xensource.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"JBeulich@suse.com" <JBeulich@suse.com>
Subject: Re: [Xen-devel] [PATCH] auto balloon initial domain and fix dom0_mem=X inconsistencies (v5).
Date: Mon, 7 May 2012 14:48:08 -0400 [thread overview]
Message-ID: <20120507184808.GA7249@phenom.dumpdata.com> (raw)
In-Reply-To: <4FA2B1EF.8080900@citrix.com>
On Thu, May 03, 2012 at 05:27:27PM +0100, David Vrabel wrote:
> On 03/05/12 16:15, David Vrabel wrote:
> >
> > xen: update VA mapping when releasing memory during setup
> >
> > In xen_memory_setup(), if a page that is being released has a VA
> > mapping this must also be updated. Otherwise, the page will be not
> > released completely -- it will still be referenced in Xen and won't be
> > freed util the mapping is removed and this prevents it from being
> > reallocated at a different PFN.
> >
> > This was already being done for the ISA memory region in
> > xen_ident_map_ISA() but on many systems this was omitting a few pages
> > as many systems marked a few pages below the ISA memory region as
> > reserved in the e820 map.
> >
> > Signed-off-by: David Vrabel <david.vrabel@citrix.com>
> > ---
> [...]
> > --- a/arch/x86/xen/mmu.c
> > +++ b/arch/x86/xen/mmu.c
> > @@ -1929,29 +1929,6 @@ static void xen_set_fixmap(unsigned idx, phys_addr_t phys, pgprot_t prot)
> > #endif
> > }
> >
> > -void __init xen_ident_map_ISA(void)
> > -{
> > - unsigned long pa;
> > -
> > - /*
> > - * If we're dom0, then linear map the ISA machine addresses into
> > - * the kernel's address space.
> > - */
> > - if (!xen_initial_domain())
> > - return;
>
> It might look like this test has gone, however the new code which
> updates the VA mapping uses the e820 map and for a domU its map will not
> have a ISA region so there's no mapping to be updated.
What if you use e820_hole=1 and the pci=xx in the guest?
>
> David
>
> > -
> > - xen_raw_printk("Xen: setup ISA identity maps\n");
> > -
> > - for (pa = ISA_START_ADDRESS; pa < ISA_END_ADDRESS; pa += PAGE_SIZE) {
> > - pte_t pte = mfn_pte(PFN_DOWN(pa), PAGE_KERNEL_IO);
> > -
> > - if (HYPERVISOR_update_va_mapping(PAGE_OFFSET + pa, pte, 0))
> > - BUG();
> > - }
> > -
> > - xen_flush_tlb();
> > -}
> > -
> > static void __init xen_post_allocator_init(void)
> > {
> > pv_mmu_ops.set_pte = xen_set_pte;
> > diff --git a/arch/x86/xen/setup.c b/arch/x86/xen/setup.c
> > index 506a3e6..d5f8714 100644
> > --- a/arch/x86/xen/setup.c
> > +++ b/arch/x86/xen/setup.c
> > @@ -139,6 +139,13 @@ static unsigned long __init xen_do_chunk(unsigned long start,
> >
> > return len;
> > }
> > +
> > +static unsigned long __init xen_release_chunk(unsigned long start,
> > + unsigned long end)
> > +{
> > + return xen_do_chunk(start, end, true);
> > +}
> > +
> > static unsigned long __init xen_populate_chunk(
> > const struct e820entry *list, size_t map_size,
> > unsigned long max_pfn, unsigned long *last_pfn,
> > @@ -197,6 +204,29 @@ static unsigned long __init xen_populate_chunk(
> > }
> > return done;
> > }
> > +
> > +static void __init xen_set_identity_and_release_chunk(
> > + unsigned long start_pfn, unsigned long end_pfn, unsigned long nr_pages,
> > + unsigned long *released, unsigned long *identity)
> > +{
> > + unsigned long pfn;
> > +
> > + /*
> > + * If the PFNs are currently mapped, the VA mapping also needs
> > + * to be updated to be 1:1.
> > + */
> > + for (pfn = start_pfn; pfn <= max_pfn_mapped && pfn < end_pfn; pfn++)
> > + (void)HYPERVISOR_update_va_mapping(
> > + (unsigned long)__va(pfn << PAGE_SHIFT),
> > + mfn_pte(pfn, PAGE_KERNEL_IO), 0);
> > +
> > + if (start_pfn < nr_pages)
> > + *released += xen_release_chunk(
> > + start_pfn, min(end_pfn, nr_pages));
> > +
> > + *identity += set_phys_range_identity(start_pfn, end_pfn);
> > +}
> > +
> > static unsigned long __init xen_set_identity_and_release(
> > const struct e820entry *list, size_t map_size, unsigned long nr_pages)
> > {
> > @@ -226,14 +256,11 @@ static unsigned long __init xen_set_identity_and_release(
> > if (entry->type == E820_RAM)
> > end_pfn = PFN_UP(entry->addr);
> >
> > - if (start_pfn < end_pfn) {
> > - if (start_pfn < nr_pages)
> > - released += xen_do_chunk(
> > - start_pfn, min(end_pfn, nr_pages), true);
> > + if (start_pfn < end_pfn)
> > + xen_set_identity_and_release_chunk(
> > + start_pfn, end_pfn, nr_pages,
> > + &released, &identity);
> >
> > - identity += set_phys_range_identity(
> > - start_pfn, end_pfn);
> > - }
> > start = end;
> > }
> > }
> > diff --git a/arch/x86/xen/xen-ops.h b/arch/x86/xen/xen-ops.h
> > index b095739..506fa08 100644
> > --- a/arch/x86/xen/xen-ops.h
> > +++ b/arch/x86/xen/xen-ops.h
> > @@ -28,7 +28,6 @@ void xen_setup_shared_info(void);
> > void xen_build_mfn_list_list(void);
> > void xen_setup_machphys_mapping(void);
> > pgd_t *xen_setup_kernel_pagetable(pgd_t *pgd, unsigned long max_pfn);
> > -void xen_ident_map_ISA(void);
> > void xen_reserve_top(void);
> > extern unsigned long xen_max_p2m_pfn;
> >
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
next prev parent reply other threads:[~2012-05-07 18:54 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-04-16 17:15 [PATCH] auto balloon initial domain and fix dom0_mem=X inconsistencies (v5) Konrad Rzeszutek Wilk
2012-04-16 17:15 ` [PATCH 1/8] xen/p2m: Move code around to allow for better re-usage Konrad Rzeszutek Wilk
2012-04-16 17:15 ` [PATCH 2/8] xen/p2m: Allow alloc_p2m_middle to call reserve_brk depending on argument Konrad Rzeszutek Wilk
2012-04-16 17:15 ` [PATCH 3/8] xen/p2m: Collapse early_alloc_p2m_middle redundant checks Konrad Rzeszutek Wilk
2012-04-16 17:15 ` [PATCH 4/8] xen/p2m: An early bootup variant of set_phys_to_machine Konrad Rzeszutek Wilk
2012-04-16 17:15 ` [PATCH 5/8] xen/setup: Only print "Freeing XXX-YYY pfn range: Z pages freed" if Z > 0 Konrad Rzeszutek Wilk
2012-05-03 11:59 ` David Vrabel
2012-04-16 17:15 ` [PATCH 6/8] xen/setup: Work properly with 'dom0_mem=X' or with not dom0_mem Konrad Rzeszutek Wilk
2012-05-03 11:54 ` [Xen-devel] " David Vrabel
2012-04-16 17:15 ` [PATCH 7/8] xen/setup: Populate freed MFNs from non-RAM E820 entries and gaps to E820 RAM Konrad Rzeszutek Wilk
2012-05-03 11:56 ` [Xen-devel] " David Vrabel
2012-04-16 17:15 ` [PATCH 8/8] xen/setup: Combine the two hypercall functions - since they are quite similar Konrad Rzeszutek Wilk
2012-05-03 11:58 ` [Xen-devel] " David Vrabel
2012-05-03 15:37 ` Konrad Rzeszutek Wilk
2012-05-01 16:37 ` [PATCH] auto balloon initial domain and fix dom0_mem=X inconsistencies (v5) Konrad Rzeszutek Wilk
2012-05-02 9:05 ` Jan Beulich
2012-05-02 9:05 ` Jan Beulich
2012-05-03 11:48 ` David Vrabel
2012-05-03 15:15 ` [Xen-devel] " David Vrabel
2012-05-03 16:27 ` David Vrabel
2012-05-07 18:48 ` Konrad Rzeszutek Wilk [this message]
2012-05-08 18:12 ` David Vrabel
2012-05-08 18:24 ` Konrad Rzeszutek Wilk
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120507184808.GA7249@phenom.dumpdata.com \
--to=konrad.wilk@oracle.com \
--cc=JBeulich@suse.com \
--cc=david.vrabel@citrix.com \
--cc=linux-kernel@vger.kernel.org \
--cc=xen-devel@lists.xensource.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.