From: Thomas Gleixner <tglx@linutronix.de>
Date: Wed, 30 Jan 2008 12:34:05 +0000 (+0100)
Subject: x86: make c_p_a unconditional in ioremap
X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=74ff2857f099951020a47420872f5c1460f32c27;p=GitHub%2FLineageOS%2FG12%2Fandroid_kernel_amlogic_linux-4.9.git

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>
---

diff --git a/arch/x86/mm/ioremap_32.c b/arch/x86/mm/ioremap_32.c
index d43251c9c1c6..213ace58a188 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 8862a19f39c8..bb9246c4a07b 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);