ia64/xen-unstable

view xen/include/asm-x86/fixmap.h @ 15812:86a154e1ef5d

[HVM] Shadow: don't shadow the p2m table.
For HVM vcpus with paging disabled, we used to shadow the p2m table,
and skip the p2m lookup to go from gfn to mfn. Instead, we now
provide a simple pagetable that gives a one-to-one mapping of 4GB, and
shadow that, making the translations from gfn to mfn via the p2m.
This removes the paging-disabled special-case code from the shadow
fault handler, and allows us to expand the p2m interface, since all HVM
translations now go through the same p2m lookups.
Signed-off-by: Tim Deegan <Tim.Deegan@xensource.com>
author Tim Deegan <Tim.Deegan@xensource.com>
date Fri Aug 31 11:06:22 2007 +0100 (2007-08-31)
parents 2b43fb3afb3e
children ca495837a722
line source
1 /*
2 * fixmap.h: compile-time virtual memory allocation
3 *
4 * This file is subject to the terms and conditions of the GNU General Public
5 * License. See the file "COPYING" in the main directory of this archive
6 * for more details.
7 *
8 * Copyright (C) 1998 Ingo Molnar
9 * Modifications for Xen are copyright (c) 2002-2004, K A Fraser
10 */
12 #ifndef _ASM_FIXMAP_H
13 #define _ASM_FIXMAP_H
15 #include <xen/config.h>
16 #include <asm/apicdef.h>
17 #include <asm/acpi.h>
18 #include <asm/page.h>
19 #include <xen/kexec.h>
21 /*
22 * Here we define all the compile-time 'special' virtual
23 * addresses. The point is to have a constant address at
24 * compile time, but to set the physical address only
25 * in the boot process. We allocate these special addresses
26 * from the end of virtual memory backwards.
27 */
28 enum fixed_addresses {
29 #ifdef CONFIG_X86_PAE
30 FIX_PAE_HIGHMEM_0,
31 FIX_PAE_HIGHMEM_END = FIX_PAE_HIGHMEM_0 + NR_CPUS-1,
32 #endif
33 FIX_APIC_BASE,
34 FIX_IO_APIC_BASE_0,
35 FIX_IO_APIC_BASE_END = FIX_IO_APIC_BASE_0 + MAX_IO_APICS-1,
36 FIX_ACPI_BEGIN,
37 FIX_ACPI_END = FIX_ACPI_BEGIN + FIX_ACPI_PAGES - 1,
38 FIX_HPET_BASE,
39 FIX_CYCLONE_TIMER,
40 FIX_KEXEC_BASE_0,
41 FIX_KEXEC_BASE_END = FIX_KEXEC_BASE_0 \
42 + ((KEXEC_XEN_NO_PAGES >> 1) * KEXEC_IMAGE_NR) - 1,
43 __end_of_fixed_addresses
44 };
46 #define FIXADDR_TOP (IOREMAP_VIRT_END - PAGE_SIZE)
47 #define FIXADDR_SIZE (__end_of_fixed_addresses << PAGE_SHIFT)
48 #define FIXADDR_START (FIXADDR_TOP - FIXADDR_SIZE)
50 extern void __set_fixmap(
51 enum fixed_addresses idx, unsigned long mfn, unsigned long flags);
53 #define set_fixmap(idx, phys) \
54 __set_fixmap(idx, (phys)>>PAGE_SHIFT, PAGE_HYPERVISOR)
56 #define set_fixmap_nocache(idx, phys) \
57 __set_fixmap(idx, (phys)>>PAGE_SHIFT, PAGE_HYPERVISOR_NOCACHE)
59 #define __fix_to_virt(x) (FIXADDR_TOP - ((x) << PAGE_SHIFT))
60 #define __virt_to_fix(x) ((FIXADDR_TOP - ((x)&PAGE_MASK)) >> PAGE_SHIFT)
62 #define fix_to_virt(x) (__fix_to_virt(x))
64 static inline unsigned long virt_to_fix(const unsigned long vaddr)
65 {
66 BUG_ON(vaddr >= FIXADDR_TOP || vaddr < FIXADDR_START);
67 return __virt_to_fix(vaddr);
68 }
70 #endif