Commit edfe1a56 authored by Christophe Leroy's avatar Christophe Leroy Committed by Michael Ellerman

powerpc/mm: move ioremap_prot() into ioremap.c

Both ioremap_prot() are idenfical, move them into ioremap.c
Signed-off-by: default avatarChristophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/0b3eb0e0f1490a99fd6c983e166fb8946233f151.1566309262.git.christophe.leroy@c-s.fr
parent 4634c375
...@@ -34,3 +34,22 @@ void __iomem *ioremap_coherent(phys_addr_t addr, unsigned long size) ...@@ -34,3 +34,22 @@ void __iomem *ioremap_coherent(phys_addr_t addr, unsigned long size)
return iowa_ioremap(addr, size, prot, caller); return iowa_ioremap(addr, size, prot, caller);
return __ioremap_caller(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);
...@@ -47,23 +47,6 @@ ioremap_wt(phys_addr_t addr, unsigned long size) ...@@ -47,23 +47,6 @@ ioremap_wt(phys_addr_t addr, unsigned long size)
} }
EXPORT_SYMBOL(ioremap_wt); EXPORT_SYMBOL(ioremap_wt);
void __iomem *
ioremap_prot(phys_addr_t addr, unsigned long size, unsigned long flags)
{
pte_t pte = __pte(flags);
/* 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);
return __ioremap_caller(addr, size, pte_pgprot(pte), __builtin_return_address(0));
}
EXPORT_SYMBOL(ioremap_prot);
void __iomem * void __iomem *
__ioremap_caller(phys_addr_t addr, unsigned long size, pgprot_t prot, void *caller) __ioremap_caller(phys_addr_t addr, unsigned long size, pgprot_t prot, void *caller)
{ {
......
...@@ -203,29 +203,6 @@ void __iomem * __ioremap_caller(phys_addr_t addr, unsigned long size, ...@@ -203,29 +203,6 @@ void __iomem * __ioremap_caller(phys_addr_t addr, unsigned long size,
return ret; return ret;
} }
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_EXEC leak out */
pte = pte_exprotect(pte);
/*
* Force kernel mapping.
*/
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);
}
/* /*
* Unmap an IO region and remove it from imalloc'd list. * Unmap an IO region and remove it from imalloc'd list.
* Access to IO memory should be serialized by driver. * Access to IO memory should be serialized by driver.
...@@ -247,7 +224,6 @@ void iounmap(volatile void __iomem *token) ...@@ -247,7 +224,6 @@ void iounmap(volatile void __iomem *token)
vunmap(addr); vunmap(addr);
} }
EXPORT_SYMBOL(ioremap_prot);
EXPORT_SYMBOL(__ioremap_at); EXPORT_SYMBOL(__ioremap_at);
EXPORT_SYMBOL(iounmap); EXPORT_SYMBOL(iounmap);
EXPORT_SYMBOL(__iounmap_at); EXPORT_SYMBOL(__iounmap_at);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment