Gitweb: http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=74ff2857f099951020a47420872f5c1460f32c27 Commit: 74ff2857f099951020a47420872f5c1460f32c27 Parent: f87519e8f4f1de9b39a40e56479a7ad2443169dd Author: Thomas Gleixner <[EMAIL PROTECTED]> AuthorDate: Wed Jan 30 13:34:05 2008 +0100 Committer: Ingo Molnar <[EMAIL PROTECTED]> CommitDate: Wed Jan 30 13:34:05 2008 +0100
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 <[EMAIL PROTECTED]> Signed-off-by: Ingo Molnar <[EMAIL PROTECTED]> --- arch/x86/mm/ioremap_32.c | 4 ++-- arch/x86/mm/ioremap_64.c | 14 ++++++-------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/arch/x86/mm/ioremap_32.c b/arch/x86/mm/ioremap_32.c index d43251c..213ace5 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 8862a19..bb9246c 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); - To unsubscribe from this list: send the line "unsubscribe git-commits-head" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html