summaryrefslogtreecommitdiffstats
path: root/arch/powerpc/mm/ioremap.c
diff options
context:
space:
mode:
authorChristophe Leroy <christophe.leroy@c-s.fr>2019-08-20 14:07:15 +0000
committerMichael Ellerman <mpe@ellerman.id.au>2019-08-27 13:03:34 +1000
commitedfe1a5679263827ff94eb478c6ee0d65d467adf (patch)
treee3e205e075f89b39b9b4974b9212391f402707cd /arch/powerpc/mm/ioremap.c
parent4634c375db7a082b2522621519a5fb6eba977584 (diff)
downloadlinux-stable-edfe1a5679263827ff94eb478c6ee0d65d467adf.tar.gz
linux-stable-edfe1a5679263827ff94eb478c6ee0d65d467adf.tar.bz2
linux-stable-edfe1a5679263827ff94eb478c6ee0d65d467adf.zip
powerpc/mm: move ioremap_prot() into ioremap.c
Both ioremap_prot() are idenfical, move them into ioremap.c Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/0b3eb0e0f1490a99fd6c983e166fb8946233f151.1566309262.git.christophe.leroy@c-s.fr
Diffstat (limited to 'arch/powerpc/mm/ioremap.c')
-rw-r--r--arch/powerpc/mm/ioremap.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/arch/powerpc/mm/ioremap.c b/arch/powerpc/mm/ioremap.c
index 7f1d462e7745..3d388aaa3ee6 100644
--- a/arch/powerpc/mm/ioremap.c
+++ b/arch/powerpc/mm/ioremap.c
@@ -34,3 +34,22 @@ void __iomem *ioremap_coherent(phys_addr_t addr, unsigned long size)
return iowa_ioremap(addr, size, prot, caller);
return __ioremap_caller(addr, size, prot, caller);
}
+
+void __iomem *ioremap_prot(phys_addr_t addr, unsigned long size, unsigned long flags)
+{
+ pte_t pte = __pte(flags);
+ void *caller = __builtin_return_address(0);
+
+ /* writeable implies dirty for kernel addresses */
+ if (pte_write(pte))
+ pte = pte_mkdirty(pte);
+
+ /* we don't want to let _PAGE_USER and _PAGE_EXEC leak out */
+ pte = pte_exprotect(pte);
+ pte = pte_mkprivileged(pte);
+
+ if (iowa_is_active())
+ return iowa_ioremap(addr, size, pte_pgprot(pte), caller);
+ return __ioremap_caller(addr, size, pte_pgprot(pte), caller);
+}
+EXPORT_SYMBOL(ioremap_prot);