From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: [PATCH 1/2] XEN, X86: Improve semantic support for pagetable_reserve PVOP Date: Mon, 13 Aug 2012 16:43:50 -0400 Message-ID: <20120813204350.GC12550@phenom.dumpdata.com> References: <1344608227-30910-1-git-send-email-attilio.rao@citrix.com> <1344608227-30910-2-git-send-email-attilio.rao@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Content-Disposition: inline In-Reply-To: <1344608227-30910-2-git-send-email-attilio.rao@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Attilio Rao Cc: Stefano Stabellini , xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org On Fri, Aug 10, 2012 at 03:17:06PM +0100, Attilio Rao wrote: > - Allow xen_mapping_pagetable_reserve() to handle a start different from > pgt_buf_start, but still bigger than it. > - Add checks to xen_mapping_pagetable_reserve() and native_pagetable_reserve() > for verifying start and end are contained in the range > [pgt_buf_start, pgt_buf_top]. > - In xen_mapping_pagetable_reserve(), change printk into pr_debug. > - In xen_mapping_pagetable_reserve(), print out diagnostic only if there is > an actual need to do that (or, in other words, if there are actually some > pages going to switch from RO to RW). > > Signed-off-by: Attilio Rao > --- > arch/x86/mm/init.c | 4 ++++ > arch/x86/xen/mmu.c | 22 ++++++++++++++++++++-- > 2 files changed, 24 insertions(+), 2 deletions(-) > > diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c > index e0e6990..c5849b6 100644 > --- a/arch/x86/mm/init.c > +++ b/arch/x86/mm/init.c > @@ -92,6 +92,10 @@ static void __init find_early_table_space(struct map_range *mr, unsigned long en > > void __init native_pagetable_reserve(u64 start, u64 end) > { > + if (start < PFN_PHYS(pgt_buf_start) || end > PFN_PHYS(pgt_buf_top)) > + panic("Invalid address range: [%llu - %llu] should be a subset of [%llu - %llu]\n" > + start, end, PFN_PHYS(pgt_buf_start), > + PFN_PHYS(pgt_buf_top)); > memblock_reserve(start, end - start); > } > > diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c > index b65a761..8d943e0a 100644 > --- a/arch/x86/xen/mmu.c > +++ b/arch/x86/xen/mmu.c > @@ -1180,12 +1180,30 @@ static void __init xen_pagetable_setup_start(pgd_t *base) > > static __init void xen_mapping_pagetable_reserve(u64 start, u64 end) > { > + u64 sh_start; sh... shared? shell? Can it be just 'begin' or 'pgt_buf_start_phys' ? Or 'start_phys' ? Perhaps 'orig_start' ? 'early_start'? '_start'? > + > + sh_start = PFN_PHYS(pgt_buf_start); > + > + if (start < sh_start || end > PFN_PHYS(pgt_buf_top)) > + panic("Invalid address range: [%llu - %llu] should be a subset of [%llu - %llu]\n" > + start, end, sh_start, PFN_PHYS(pgt_buf_top)); > + > + /* set RW the initial range */ > + if (start != sh_start) > + pr_debug("xen: setting RW the range %llx - %llx\n", > + sh_start, start); > + while (sh_start < start) { > + make_lowmem_page_readwrite(__va(sh_start)); > + sh_start += PAGE_SIZE; > + } > + > /* reserve the range used */ > native_pagetable_reserve(start, end); > > /* set as RW the rest */ > - printk(KERN_DEBUG "xen: setting RW the range %llx - %llx\n", end, > - PFN_PHYS(pgt_buf_top)); > + if (end != PFN_PHYS(pgt_buf_top)) > + pr_debug("xen: setting RW the range %llx - %llx\n", > + end, PFN_PHYS(pgt_buf_top)); > while (end < PFN_PHYS(pgt_buf_top)) { > make_lowmem_page_readwrite(__va(end)); > end += PAGE_SIZE; > -- > 1.7.2.5