All of lore.kernel.org
 help / color / mirror / Atom feed
From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Cc: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"xen-devel@lists.xensource.com" <xen-devel@lists.xensource.com>
Subject: Re: [Xen-devel] [PATCH 02/11] xen/x86: Use memblock_reserve for sensitive areas.
Date: Mon, 20 Aug 2012 10:13:05 -0400	[thread overview]
Message-ID: <20120820141305.GA2713@phenom.dumpdata.com> (raw)
In-Reply-To: <alpine.DEB.2.02.1208171835010.15568@kaball.uk.xensource.com>

On Fri, Aug 17, 2012 at 06:35:12PM +0100, Stefano Stabellini wrote:
> On Thu, 16 Aug 2012, Konrad Rzeszutek Wilk wrote:
> > instead of a big memblock_reserve. This way we can be more
> > selective in freeing regions (and it also makes it easier
> > to understand where is what).
> > 
> > [v1: Move the auto_translate_physmap to proper line]
> > [v2: Per Stefano suggestion add more comments]
> > Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
> 
> much better now!

Thought interestingly enough it breaks 32-bit dom0s (and only dom0s).
Will have a revised patch posted shortly.

> 
> >  arch/x86/xen/enlighten.c |   48 ++++++++++++++++++++++++++++++++++++++++++++++
> >  arch/x86/xen/p2m.c       |    5 ++++
> >  arch/x86/xen/setup.c     |    9 --------
> >  3 files changed, 53 insertions(+), 9 deletions(-)
> > 
> > diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
> > index ff962d4..e532eb5 100644
> > --- a/arch/x86/xen/enlighten.c
> > +++ b/arch/x86/xen/enlighten.c
> > @@ -998,7 +998,54 @@ static int xen_write_msr_safe(unsigned int msr, unsigned low, unsigned high)
> >  
> >  	return ret;
> >  }
> > +/*
> > + * If the MFN is not in the m2p (provided to us by the hypervisor) this
> > + * function won't do anything. In practice this means that the XenBus
> > + * MFN won't be available for the initial domain. */
> > +static void __init xen_reserve_mfn(unsigned long mfn)
> > +{
> > +	unsigned long pfn;
> > +
> > +	if (!mfn)
> > +		return;
> > +	pfn = mfn_to_pfn(mfn);
> > +	if (phys_to_machine_mapping_valid(pfn))
> > +		memblock_reserve(PFN_PHYS(pfn), PAGE_SIZE);
> > +}
> > +static void __init xen_reserve_internals(void)
> > +{
> > +	unsigned long size;
> > +
> > +	if (!xen_pv_domain())
> > +		return;
> > +
> > +	/* xen_start_info does not exist in the M2P, hence can't use
> > +	 * xen_reserve_mfn. */
> > +	memblock_reserve(__pa(xen_start_info), PAGE_SIZE);
> > +
> > +	xen_reserve_mfn(PFN_DOWN(xen_start_info->shared_info));
> > +	xen_reserve_mfn(xen_start_info->store_mfn);
> >  
> > +	if (!xen_initial_domain())
> > +		xen_reserve_mfn(xen_start_info->console.domU.mfn);
> > +
> > +	if (xen_feature(XENFEAT_auto_translated_physmap))
> > +		return;
> > +
> > +	/*
> > +	 * ALIGN up to compensate for the p2m_page pointing to an array that
> > +	 * can partially filled (look in xen_build_dynamic_phys_to_machine).
> > +	 */
> > +
> > +	size = PAGE_ALIGN(xen_start_info->nr_pages * sizeof(unsigned long));
> > +
> > +	/* We could use xen_reserve_mfn here, but would end up looping quite
> > +	 * a lot (and call memblock_reserve for each PAGE), so lets just use
> > +	 * the easy way and reserve it wholesale. */
> > +	memblock_reserve(__pa(xen_start_info->mfn_list), size);
> > +
> > +	/* The pagetables are reserved in mmu.c */
> > +}
> >  void xen_setup_shared_info(void)
> >  {
> >  	if (!xen_feature(XENFEAT_auto_translated_physmap)) {
> > @@ -1362,6 +1409,7 @@ asmlinkage void __init xen_start_kernel(void)
> >  	xen_raw_console_write("mapping kernel into physical memory\n");
> >  	pgd = xen_setup_kernel_pagetable(pgd, xen_start_info->nr_pages);
> >  
> > +	xen_reserve_internals();
> >  	/* Allocate and initialize top and mid mfn levels for p2m structure */
> >  	xen_build_mfn_list_list();
> >  
> > diff --git a/arch/x86/xen/p2m.c b/arch/x86/xen/p2m.c
> > index e4adbfb..6a2bfa4 100644
> > --- a/arch/x86/xen/p2m.c
> > +++ b/arch/x86/xen/p2m.c
> > @@ -388,6 +388,11 @@ void __init xen_build_dynamic_phys_to_machine(void)
> >  	}
> >  
> >  	m2p_override_init();
> > +
> > +	/* NOTE: We cannot call memblock_reserve here for the mfn_list as there
> > +	 * isn't enough pieces to make it work (for one - we are still using the
> > +	 * Xen provided pagetable). Do it later in xen_reserve_internals.
> > +	 */
> >  }
> >  
> >  unsigned long get_phys_to_machine(unsigned long pfn)
> > diff --git a/arch/x86/xen/setup.c b/arch/x86/xen/setup.c
> > index a4790bf..9efca75 100644
> > --- a/arch/x86/xen/setup.c
> > +++ b/arch/x86/xen/setup.c
> > @@ -424,15 +424,6 @@ char * __init xen_memory_setup(void)
> >  	e820_add_region(ISA_START_ADDRESS, ISA_END_ADDRESS - ISA_START_ADDRESS,
> >  			E820_RESERVED);
> >  
> > -	/*
> > -	 * Reserve Xen bits:
> > -	 *  - mfn_list
> > -	 *  - xen_start_info
> > -	 * See comment above "struct start_info" in <xen/interface/xen.h>
> > -	 */
> > -	memblock_reserve(__pa(xen_start_info->mfn_list),
> > -			 xen_start_info->pt_base - xen_start_info->mfn_list);
> > -
> >  	sanitize_e820_map(e820.map, ARRAY_SIZE(e820.map), &e820.nr_map);
> >  
> >  	return "Xen";
> > -- 
> > 1.7.7.6
> > 
> > 
> > _______________________________________________
> > Xen-devel mailing list
> > Xen-devel@lists.xen.org
> > http://lists.xen.org/xen-devel
> > 

  reply	other threads:[~2012-08-20 14:23 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-16 16:03 [PATCH] Boot PV guests with more than 128GB (v3) for v3.7 Konrad Rzeszutek Wilk
2012-08-16 16:03 ` [PATCH 01/11] xen/p2m: Fix the comment describing the P2M tree Konrad Rzeszutek Wilk
2012-08-17 17:29   ` [Xen-devel] " Stefano Stabellini
2012-08-16 16:03 ` [PATCH 02/11] xen/x86: Use memblock_reserve for sensitive areas Konrad Rzeszutek Wilk
2012-08-17 17:35   ` [Xen-devel] " Stefano Stabellini
2012-08-20 14:13     ` Konrad Rzeszutek Wilk [this message]
2012-08-21 17:27       ` Q:pt_base in COMPAT mode offset by two pages. Was:Re: " Konrad Rzeszutek Wilk
2012-08-21 19:03         ` Konrad Rzeszutek Wilk
2012-08-22 10:48           ` Stefano Stabellini
2012-08-22 14:00             ` Konrad Rzeszutek Wilk
2012-08-22 14:12           ` Jan Beulich
2012-08-22 14:41             ` Stefano Stabellini
2012-08-22 14:57             ` Konrad Rzeszutek Wilk
2012-08-22 15:59           ` Jan Beulich
2012-08-22 16:21             ` Konrad Rzeszutek Wilk
2012-08-22 18:55             ` [Xen-devel] Q:pt_base in COMPAT mode offset by two pages. Was:Re: " Konrad Rzeszutek Wilk
2012-08-23  6:23               ` Jan Beulich
2012-08-23  6:23                 ` Jan Beulich
2012-08-16 16:03 ` [PATCH 03/11] xen/mmu: The xen_setup_kernel_pagetable doesn't need to return anything Konrad Rzeszutek Wilk
2012-08-16 16:03 ` [PATCH 04/11] xen/mmu: Provide comments describing the _ka and _va aliasing issue Konrad Rzeszutek Wilk
2012-08-16 16:03 ` [PATCH 05/11] xen/mmu: use copy_page instead of memcpy Konrad Rzeszutek Wilk
2012-08-16 16:03 ` [PATCH 06/11] xen/mmu: For 64-bit do not call xen_map_identity_early Konrad Rzeszutek Wilk
2012-08-17 17:41   ` [Xen-devel] " Stefano Stabellini
2012-08-17 17:45     ` Konrad Rzeszutek Wilk
2012-08-20 11:45       ` Stefano Stabellini
2012-08-20 11:53         ` Ian Campbell
2012-08-20 11:58           ` Stefano Stabellini
2012-08-20 12:06             ` Konrad Rzeszutek Wilk
2012-08-20 12:19               ` Stefano Stabellini
2012-08-23 15:40             ` Konrad Rzeszutek Wilk
2012-08-23 15:57               ` Stefano Stabellini
2012-08-16 16:03 ` [PATCH 07/11] xen/mmu: Recycle the Xen provided L4, L3, and L2 pages Konrad Rzeszutek Wilk
2012-08-17 18:07   ` [Xen-devel] " Stefano Stabellini
2012-08-17 18:05     ` Konrad Rzeszutek Wilk
2012-08-16 16:03 ` [PATCH 08/11] xen/p2m: Add logic to revector a P2M tree to use __va leafs Konrad Rzeszutek Wilk
2012-08-16 16:03 ` [PATCH 09/11] xen/mmu: Copy and revector the P2M tree Konrad Rzeszutek Wilk
2012-08-16 16:03 ` [PATCH 10/11] xen/mmu: Remove from __ka space PMD entries for pagetables Konrad Rzeszutek Wilk
2012-08-16 16:03 ` [PATCH 11/11] xen/mmu: Release just the MFN list, not MFN list and part of pagetables Konrad Rzeszutek Wilk
2012-08-21 14:18   ` [Xen-devel] " Stefano Stabellini
2012-08-21 14:57     ` Konrad Rzeszutek Wilk
2012-08-21 15:27       ` Stefano Stabellini
2012-09-17 18:06   ` William Dauchy
2012-09-17 18:18     ` Konrad Rzeszutek Wilk
2012-08-17 17:39 ` [PATCH] Boot PV guests with more than 128GB (v3) for v3.7 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=20120820141305.GA2713@phenom.dumpdata.com \
    --to=konrad.wilk@oracle.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stefano.stabellini@eu.citrix.com \
    --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.