aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2008-01-30 13:34:05 +0100
committerIngo Molnar <mingo@elte.hu>2008-01-30 13:34:05 +0100
commit74ff2857f099951020a47420872f5c1460f32c27 (patch)
tree2087ac62a943702239f226b4c64b543e17db30db
parentf87519e8f4f1de9b39a40e56479a7ad2443169dd (diff)
x86: make c_p_a unconditional in ioremap
Make c_p_a unconditional for ioremap and iounmap. This ensures complete consistency of the flags which are handed to ioremap_page_range and the real flags in the mappings. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r--arch/x86/mm/ioremap_32.c4
-rw-r--r--arch/x86/mm/ioremap_64.c14
2 files changed, 8 insertions, 10 deletions
diff --git a/arch/x86/mm/ioremap_32.c b/arch/x86/mm/ioremap_32.c
index d43251c9c1c..213ace58a18 100644
--- a/arch/x86/mm/ioremap_32.c
+++ b/arch/x86/mm/ioremap_32.c
@@ -74,7 +74,7 @@ void __iomem *__ioremap(unsigned long phys_addr, unsigned long size,
/*
* Ok, go for it..
*/
- area = get_vm_area(size, VM_IOREMAP | (flags << 20));
+ area = get_vm_area(size, VM_IOREMAP);
if (!area)
return NULL;
area->phys_addr = phys_addr;
@@ -189,7 +189,7 @@ void iounmap(volatile void __iomem *addr)
}
/* Reset the direct mapping. Can block */
- if ((p->flags >> 20) && p->phys_addr < virt_to_phys(high_memory) - 1) {
+ if (p->phys_addr < virt_to_phys(high_memory) - 1) {
change_page_attr(virt_to_page(__va(p->phys_addr)),
get_vm_area_size(p) >> PAGE_SHIFT,
PAGE_KERNEL);
diff --git a/arch/x86/mm/ioremap_64.c b/arch/x86/mm/ioremap_64.c
index 8862a19f39c..bb9246c4a07 100644
--- a/arch/x86/mm/ioremap_64.c
+++ b/arch/x86/mm/ioremap_64.c
@@ -31,7 +31,7 @@ EXPORT_SYMBOL(__phys_addr);
* conflicts.
*/
static int ioremap_change_attr(unsigned long phys_addr, unsigned long size,
- unsigned long flags)
+ pgprot_t prot)
{
int err = 0;
if (phys_addr + size - 1 < (end_pfn_map << PAGE_SHIFT)) {
@@ -50,8 +50,8 @@ static int ioremap_change_attr(unsigned long phys_addr, unsigned long size,
* the phys addr can be a in hole between nodes and
* not have an memmap entry.
*/
- err = change_page_attr_addr(vaddr,npages,
- MAKE_GLOBAL(__PAGE_KERNEL|flags));
+ err = change_page_attr_addr(vaddr, npages, prot);
+
if (!err)
global_flush_tlb();
}
@@ -97,7 +97,7 @@ void __iomem *__ioremap(unsigned long phys_addr, unsigned long size,
/*
* Ok, go for it..
*/
- area = get_vm_area(size, VM_IOREMAP | (flags << 20));
+ area = get_vm_area(size, VM_IOREMAP);
if (!area)
return NULL;
area->phys_addr = phys_addr;
@@ -107,8 +107,7 @@ void __iomem *__ioremap(unsigned long phys_addr, unsigned long size,
remove_vm_area((void *)(PAGE_MASK & (unsigned long) addr));
return NULL;
}
- if (flags && ioremap_change_attr(phys_addr, size, flags) < 0) {
- area->flags &= 0xffffff;
+ if (ioremap_change_attr(phys_addr, size, pgprot) < 0) {
vunmap(addr);
return NULL;
}
@@ -180,8 +179,7 @@ void iounmap(volatile void __iomem *addr)
}
/* Reset the direct mapping. Can block */
- if (p->flags >> 20)
- ioremap_change_attr(p->phys_addr, p->size, 0);
+ ioremap_change_attr(p->phys_addr, p->size, PAGE_KERNEL);
/* Finally remove it */
o = remove_vm_area((void *)addr);