xen: Cope with unmapped pages when initializing kernel pagetable
authorJeremy Fitzhardinge <jeremy@goop.org>
Wed, 13 Oct 2010 23:02:24 +0000 (16:02 -0700)
committerH. Peter Anvin <hpa@linux.intel.com>
Wed, 13 Oct 2010 23:07:13 +0000 (16:07 -0700)
commitfef5ba797991f9335bcfc295942b684f9bf613a1
tree25aa49f656def959f5380d1320ebbf1f469e3c07
parentc7fc2de0c83dbd2eaf759c5cd0e2b9cf1eb4df3a
xen: Cope with unmapped pages when initializing kernel pagetable

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.

We do this by knowing that the kernel pagetable memory is pre-allocated
in the range e820_table_start - e820_table_end, so any pfn within this
range should be mapped read-only.  However, 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.)

Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
LKML-Reference: <4CB63A80.8060702@goop.org>
Cc: Yinghai Lu <yinghai@kernel.org>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
arch/x86/include/asm/io.h
arch/x86/mm/ioremap.c
arch/x86/xen/mmu.c