diff options
author | Jeremy Fitzhardinge <jeremy@goop.org> | 2008-09-07 18:21:13 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-10-13 04:20:56 -0400 |
commit | be43d72835ba610e4af274f2d123b26f66f4f7ed (patch) | |
tree | 004fe651aff85c6cfae6a174217b05d948b7cf6d /arch | |
parent | 07bb2f6236f11169fbd8a8916b16715b25fea9b6 (diff) |
x86: add _PAGE_IOMAP pte flag for IO mappings
Use one of the software-defined PTE bits to indicate that a mapping is
intended for an IO address. On native hardware this is irrelevent,
since a physical address is a physical address. But in a virtual
environment, physical addresses are also virtualized, so there needs
to be some way to distinguish between pseudo-physical addresses and
actual hardware addresses; _PAGE_IOMAP indicates this intent.
By default, __supported_pte_mask masks out _PAGE_IOMAP, so it doesn't
even appear in the final pagetable.
Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86/mm/init_32.c | 2 | ||||
-rw-r--r-- | arch/x86/mm/init_64.c | 2 | ||||
-rw-r--r-- | arch/x86/mm/ioremap.c | 8 |
3 files changed, 6 insertions, 6 deletions
diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c index bbe044dbe014..8396868e82c5 100644 --- a/arch/x86/mm/init_32.c +++ b/arch/x86/mm/init_32.c | |||
@@ -558,7 +558,7 @@ void zap_low_mappings(void) | |||
558 | 558 | ||
559 | int nx_enabled; | 559 | int nx_enabled; |
560 | 560 | ||
561 | pteval_t __supported_pte_mask __read_mostly = ~(_PAGE_NX | _PAGE_GLOBAL); | 561 | pteval_t __supported_pte_mask __read_mostly = ~(_PAGE_NX | _PAGE_GLOBAL | _PAGE_IOMAP); |
562 | EXPORT_SYMBOL_GPL(__supported_pte_mask); | 562 | EXPORT_SYMBOL_GPL(__supported_pte_mask); |
563 | 563 | ||
564 | #ifdef CONFIG_X86_PAE | 564 | #ifdef CONFIG_X86_PAE |
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c index 3e10054c5731..dec5c775e92b 100644 --- a/arch/x86/mm/init_64.c +++ b/arch/x86/mm/init_64.c | |||
@@ -89,7 +89,7 @@ early_param("gbpages", parse_direct_gbpages_on); | |||
89 | 89 | ||
90 | int after_bootmem; | 90 | int after_bootmem; |
91 | 91 | ||
92 | unsigned long __supported_pte_mask __read_mostly = ~0UL; | 92 | pteval_t __supported_pte_mask __read_mostly = ~_PAGE_IOMAP; |
93 | EXPORT_SYMBOL_GPL(__supported_pte_mask); | 93 | EXPORT_SYMBOL_GPL(__supported_pte_mask); |
94 | 94 | ||
95 | static int do_not_nx __cpuinitdata; | 95 | static int do_not_nx __cpuinitdata; |
diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c index 8cbeda15cd29..43c3b6896cd6 100644 --- a/arch/x86/mm/ioremap.c +++ b/arch/x86/mm/ioremap.c | |||
@@ -242,16 +242,16 @@ static void __iomem *__ioremap_caller(resource_size_t phys_addr, | |||
242 | switch (prot_val) { | 242 | switch (prot_val) { |
243 | case _PAGE_CACHE_UC: | 243 | case _PAGE_CACHE_UC: |
244 | default: | 244 | default: |
245 | prot = PAGE_KERNEL_NOCACHE; | 245 | prot = PAGE_KERNEL_IO_NOCACHE; |
246 | break; | 246 | break; |
247 | case _PAGE_CACHE_UC_MINUS: | 247 | case _PAGE_CACHE_UC_MINUS: |
248 | prot = PAGE_KERNEL_UC_MINUS; | 248 | prot = PAGE_KERNEL_IO_UC_MINUS; |
249 | break; | 249 | break; |
250 | case _PAGE_CACHE_WC: | 250 | case _PAGE_CACHE_WC: |
251 | prot = PAGE_KERNEL_WC; | 251 | prot = PAGE_KERNEL_IO_WC; |
252 | break; | 252 | break; |
253 | case _PAGE_CACHE_WB: | 253 | case _PAGE_CACHE_WB: |
254 | prot = PAGE_KERNEL; | 254 | prot = PAGE_KERNEL_IO; |
255 | break; | 255 | break; |
256 | } | 256 | } |
257 | 257 | ||