public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] xen: update mask_rw_pte after kernel page tables init changes
@ 2011-03-09 14:32 Stefano Stabellini
  2011-03-09 17:43 ` Konrad Rzeszutek Wilk
  0 siblings, 1 reply; 4+ messages in thread
From: Stefano Stabellini @ 2011-03-09 14:32 UTC (permalink / raw)
  To: Konrad Rzeszutek Wilk; +Cc: linux-kernel, yinghai, Stefano Stabellini

After "x86-64, mm: Put early page table high" already existing kernel
page table pages can be mapped using early_ioremap too so we need to
update mask_rw_pte to make sure these pages are still mapped RO.
The reason why we have to do that is explain by the commit message of
fef5ba797991f9335bcfc295942b684f9bf613a1:

"Xen requires that all pages containing pagetable entries to be mapped
read-only.  If pages used for the initial pagetable are already mapped
then we can change the mapping to RO.  However, if they are initially
unmapped, we need to make sure that when they are later mapped, they
are also mapped RO.

..SNIP..

the pagetable setup code early_ioremaps the pages to write their
entries, so we must make sure that mappings created in the early_ioremap
fixmap area are mapped RW.  (Those mappings are removed before the pages
are presented to Xen as pagetable pages.)"

We accomplish all this in mask_rw_pte by mapping RO all the pages mapped
using early_ioremap apart from the last one that has been allocated
because it is not a page table page yet (it has not been hooked into the
page tables yet).

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
---
 arch/x86/xen/mmu.c |    8 +++++---
 1 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
index 13783a1..5190af6 100644
--- a/arch/x86/xen/mmu.c
+++ b/arch/x86/xen/mmu.c
@@ -1440,10 +1440,12 @@ static __init pte_t mask_rw_pte(pte_t *ptep, pte_t pte)
 	/*
 	 * If the new pfn is within the range of the newly allocated
 	 * kernel pagetable, and it isn't being mapped into an
-	 * early_ioremap fixmap slot, make sure it is RO.
+	 * early_ioremap fixmap slot as a freshly allocated page, make sure
+	 * it is RO.
 	 */
-	if (!is_early_ioremap_ptep(ptep) &&
-	    pfn >= pgt_buf_start && pfn < pgt_buf_end)
+	if (((!is_early_ioremap_ptep(ptep) &&
+			pfn >= pgt_buf_start && pfn < pgt_buf_end)) ||
+			(is_early_ioremap_ptep(ptep) && pfn != (pgt_buf_end - 1)))
 		pte = pte_wrprotect(pte);
 
 	return pte;
-- 
1.5.6.5


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] xen: update mask_rw_pte after kernel page tables init changes
  2011-03-09 14:32 [PATCH] xen: update mask_rw_pte after kernel page tables init changes Stefano Stabellini
@ 2011-03-09 17:43 ` Konrad Rzeszutek Wilk
  2011-03-09 17:56   ` Konrad Rzeszutek Wilk
  0 siblings, 1 reply; 4+ messages in thread
From: Konrad Rzeszutek Wilk @ 2011-03-09 17:43 UTC (permalink / raw)
  To: Stefano Stabellini; +Cc: linux-kernel, yinghai

On Wed, Mar 09, 2011 at 02:32:52PM +0000, Stefano Stabellini wrote:
> After "x86-64, mm: Put early page table high" already existing kernel
> page table pages can be mapped using early_ioremap too so we need to
> update mask_rw_pte to make sure these pages are still mapped RO.
> The reason why we have to do that is explain by the commit message of
> fef5ba797991f9335bcfc295942b684f9bf613a1:
> 
> "Xen requires that all pages containing pagetable entries to be mapped
> read-only.  If pages used for the initial pagetable are already mapped
> then we can change the mapping to RO.  However, if they are initially
> unmapped, we need to make sure that when they are later mapped, they
> are also mapped RO.
> 
> ..SNIP..
> 
> the pagetable setup code early_ioremaps the pages to write their
> entries, so we must make sure that mappings created in the early_ioremap
> fixmap area are mapped RW.  (Those mappings are removed before the pages
> are presented to Xen as pagetable pages.)"
> 
> We accomplish all this in mask_rw_pte by mapping RO all the pages mapped
> using early_ioremap apart from the last one that has been allocated
> because it is not a page table page yet (it has not been hooked into the
> page tables yet).
> 
> Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>

Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>

Also pls apply my SOB to "xen: set max_pfn_mapped to the last pfn mapped"

Thank you for tracking this one down.
> ---
>  arch/x86/xen/mmu.c |    8 +++++---
>  1 files changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
> index 13783a1..5190af6 100644
> --- a/arch/x86/xen/mmu.c
> +++ b/arch/x86/xen/mmu.c
> @@ -1440,10 +1440,12 @@ static __init pte_t mask_rw_pte(pte_t *ptep, pte_t pte)
>  	/*
>  	 * If the new pfn is within the range of the newly allocated
>  	 * kernel pagetable, and it isn't being mapped into an
> -	 * early_ioremap fixmap slot, make sure it is RO.
> +	 * early_ioremap fixmap slot as a freshly allocated page, make sure
> +	 * it is RO.
>  	 */
> -	if (!is_early_ioremap_ptep(ptep) &&
> -	    pfn >= pgt_buf_start && pfn < pgt_buf_end)
> +	if (((!is_early_ioremap_ptep(ptep) &&
> +			pfn >= pgt_buf_start && pfn < pgt_buf_end)) ||
> +			(is_early_ioremap_ptep(ptep) && pfn != (pgt_buf_end - 1)))
>  		pte = pte_wrprotect(pte);
>  
>  	return pte;
> -- 
> 1.5.6.5

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] xen: update mask_rw_pte after kernel page tables init changes
  2011-03-09 17:43 ` Konrad Rzeszutek Wilk
@ 2011-03-09 17:56   ` Konrad Rzeszutek Wilk
  2011-03-09 18:11     ` Stefano Stabellini
  0 siblings, 1 reply; 4+ messages in thread
From: Konrad Rzeszutek Wilk @ 2011-03-09 17:56 UTC (permalink / raw)
  To: Stefano Stabellini; +Cc: linux-kernel, yinghai

> > Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
> 
> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
> 
> Also pls apply my SOB to "xen: set max_pfn_mapped to the last pfn mapped"
> 

Ooops. Please convert those SOBs to Acked-by.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] xen: update mask_rw_pte after kernel page tables init changes
  2011-03-09 17:56   ` Konrad Rzeszutek Wilk
@ 2011-03-09 18:11     ` Stefano Stabellini
  0 siblings, 0 replies; 4+ messages in thread
From: Stefano Stabellini @ 2011-03-09 18:11 UTC (permalink / raw)
  To: Konrad Rzeszutek Wilk
  Cc: Stefano Stabellini, linux-kernel@vger.kernel.org,
	yinghai@kernel.org

On Wed, 9 Mar 2011, Konrad Rzeszutek Wilk wrote:
> > > Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
> > 
> > Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
> > 
> > Also pls apply my SOB to "xen: set max_pfn_mapped to the last pfn mapped"
> > 
> 
> Ooops. Please convert those SOBs to Acked-by.
> 

done, thanks :)
I have put together a branch based on tip/x86/mm with those three
patches applied and your acked-by:

git://xenbits.xen.org/people/sstabellini/linux-pvhvm.git 2.6.38-tip-fixes

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2011-03-09 18:12 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-03-09 14:32 [PATCH] xen: update mask_rw_pte after kernel page tables init changes Stefano Stabellini
2011-03-09 17:43 ` Konrad Rzeszutek Wilk
2011-03-09 17:56   ` Konrad Rzeszutek Wilk
2011-03-09 18:11     ` Stefano Stabellini

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox