aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86
diff options
context:
space:
mode:
authorJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>2010-09-03 09:55:16 -0400
committerStefano Stabellini <stefano.stabellini@eu.citrix.com>2010-10-22 16:25:44 -0400
commit98511f3532eb7fce274f37d94f29790922799e15 (patch)
tree7e44d06535592436115bca0317b14022d9da91c1 /arch/x86
parentf731e3ef02b4744f4d7ca2f63539b900e47db31f (diff)
xen: map a dummy page for local apic and ioapic in xen_set_fixmap
Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Diffstat (limited to 'arch/x86')
-rw-r--r--arch/x86/xen/mmu.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
index 42086ac406af..ffc5e24a53ba 100644
--- a/arch/x86/xen/mmu.c
+++ b/arch/x86/xen/mmu.c
@@ -1861,6 +1861,8 @@ __init pgd_t *xen_setup_kernel_pagetable(pgd_t *pgd,
1861} 1861}
1862#endif /* CONFIG_X86_64 */ 1862#endif /* CONFIG_X86_64 */
1863 1863
1864static unsigned char dummy_mapping[PAGE_SIZE] __page_aligned_bss;
1865
1864static void xen_set_fixmap(unsigned idx, phys_addr_t phys, pgprot_t prot) 1866static void xen_set_fixmap(unsigned idx, phys_addr_t phys, pgprot_t prot)
1865{ 1867{
1866 pte_t pte; 1868 pte_t pte;
@@ -1881,15 +1883,28 @@ static void xen_set_fixmap(unsigned idx, phys_addr_t phys, pgprot_t prot)
1881#else 1883#else
1882 case VSYSCALL_LAST_PAGE ... VSYSCALL_FIRST_PAGE: 1884 case VSYSCALL_LAST_PAGE ... VSYSCALL_FIRST_PAGE:
1883#endif 1885#endif
1884#ifdef CONFIG_X86_LOCAL_APIC
1885 case FIX_APIC_BASE: /* maps dummy local APIC */
1886#endif
1887 case FIX_TEXT_POKE0: 1886 case FIX_TEXT_POKE0:
1888 case FIX_TEXT_POKE1: 1887 case FIX_TEXT_POKE1:
1889 /* All local page mappings */ 1888 /* All local page mappings */
1890 pte = pfn_pte(phys, prot); 1889 pte = pfn_pte(phys, prot);
1891 break; 1890 break;
1892 1891
1892#ifdef CONFIG_X86_LOCAL_APIC
1893 case FIX_APIC_BASE: /* maps dummy local APIC */
1894 pte = pfn_pte(PFN_DOWN(__pa(dummy_mapping)), PAGE_KERNEL);
1895 break;
1896#endif
1897
1898#ifdef CONFIG_X86_IO_APIC
1899 case FIX_IO_APIC_BASE_0 ... FIX_IO_APIC_BASE_END:
1900 /*
1901 * We just don't map the IO APIC - all access is via
1902 * hypercalls. Keep the address in the pte for reference.
1903 */
1904 pte = pfn_pte(PFN_DOWN(__pa(dummy_mapping)), PAGE_KERNEL);
1905 break;
1906#endif
1907
1893 case FIX_PARAVIRT_BOOTMAP: 1908 case FIX_PARAVIRT_BOOTMAP:
1894 /* This is an MFN, but it isn't an IO mapping from the 1909 /* This is an MFN, but it isn't an IO mapping from the
1895 IO domain */ 1910 IO domain */
@@ -2027,6 +2042,8 @@ void __init xen_init_mmu_ops(void)
2027 pv_mmu_ops = xen_mmu_ops; 2042 pv_mmu_ops = xen_mmu_ops;
2028 2043
2029 vmap_lazy_unmap = false; 2044 vmap_lazy_unmap = false;
2045
2046 memset(dummy_mapping, 0xff, PAGE_SIZE);
2030} 2047}
2031 2048
2032/* Protected by xen_reservation_lock. */ 2049/* Protected by xen_reservation_lock. */