sh: wire up vmallocinfo support in ioremap() implementations.
This wires up the caller information for the ioremap VMA, which allows for more helpful caller tracking via /proc/vmallocinfo. Follows the x86 and powerpc changes of the same nature. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
This commit is contained in:
parent
1232d88a47
commit
bf3cdeda90
|
@ -233,10 +233,16 @@ unsigned long long poke_real_address_q(unsigned long long addr,
|
||||||
* doesn't exist, so everything must go through page tables.
|
* doesn't exist, so everything must go through page tables.
|
||||||
*/
|
*/
|
||||||
#ifdef CONFIG_MMU
|
#ifdef CONFIG_MMU
|
||||||
void __iomem *__ioremap(unsigned long offset, unsigned long size,
|
void __iomem *__ioremap_caller(unsigned long offset, unsigned long size,
|
||||||
unsigned long flags);
|
unsigned long flags, void *caller);
|
||||||
void __iounmap(void __iomem *addr);
|
void __iounmap(void __iomem *addr);
|
||||||
|
|
||||||
|
static inline void __iomem *
|
||||||
|
__ioremap(unsigned long offset, unsigned long size, unsigned long flags)
|
||||||
|
{
|
||||||
|
return __ioremap_caller(offset, size, flags, __builtin_return_address(0));
|
||||||
|
}
|
||||||
|
|
||||||
static inline void __iomem *
|
static inline void __iomem *
|
||||||
__ioremap_mode(unsigned long offset, unsigned long size, unsigned long flags)
|
__ioremap_mode(unsigned long offset, unsigned long size, unsigned long flags)
|
||||||
{
|
{
|
||||||
|
|
|
@ -33,10 +33,10 @@
|
||||||
* have to convert them into an offset in a page-aligned mapping, but the
|
* have to convert them into an offset in a page-aligned mapping, but the
|
||||||
* caller shouldn't need to know that small detail.
|
* caller shouldn't need to know that small detail.
|
||||||
*/
|
*/
|
||||||
void __iomem *__ioremap(unsigned long phys_addr, unsigned long size,
|
void __iomem *__ioremap_caller(unsigned long phys_addr, unsigned long size,
|
||||||
unsigned long flags)
|
unsigned long flags, void *caller)
|
||||||
{
|
{
|
||||||
struct vm_struct * area;
|
struct vm_struct *area;
|
||||||
unsigned long offset, last_addr, addr, orig_addr;
|
unsigned long offset, last_addr, addr, orig_addr;
|
||||||
pgprot_t pgprot;
|
pgprot_t pgprot;
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@ void __iomem *__ioremap(unsigned long phys_addr, unsigned long size,
|
||||||
/*
|
/*
|
||||||
* Ok, go for it..
|
* Ok, go for it..
|
||||||
*/
|
*/
|
||||||
area = get_vm_area(size, VM_IOREMAP);
|
area = get_vm_area_caller(size, VM_IOREMAP, caller);
|
||||||
if (!area)
|
if (!area)
|
||||||
return NULL;
|
return NULL;
|
||||||
area->phys_addr = phys_addr;
|
area->phys_addr = phys_addr;
|
||||||
|
@ -103,7 +103,7 @@ void __iomem *__ioremap(unsigned long phys_addr, unsigned long size,
|
||||||
|
|
||||||
return (void __iomem *)(offset + (char *)orig_addr);
|
return (void __iomem *)(offset + (char *)orig_addr);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(__ioremap);
|
EXPORT_SYMBOL(__ioremap_caller);
|
||||||
|
|
||||||
void __iounmap(void __iomem *addr)
|
void __iounmap(void __iomem *addr)
|
||||||
{
|
{
|
||||||
|
|
|
@ -258,15 +258,15 @@ static void shmedia_unmapioaddr(unsigned long vaddr)
|
||||||
pte_clear(&init_mm, vaddr, ptep);
|
pte_clear(&init_mm, vaddr, ptep);
|
||||||
}
|
}
|
||||||
|
|
||||||
void __iomem *__ioremap(unsigned long offset, unsigned long size,
|
void __iomem *__ioremap_caller(unsigned long offset, unsigned long size,
|
||||||
unsigned long flags)
|
unsigned long flags, void *caller)
|
||||||
{
|
{
|
||||||
char name[14];
|
char name[14];
|
||||||
|
|
||||||
sprintf(name, "phys_%08x", (u32)offset);
|
sprintf(name, "phys_%08x", (u32)offset);
|
||||||
return shmedia_alloc_io(offset, size, name, flags);
|
return shmedia_alloc_io(offset, size, name, flags);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(__ioremap);
|
EXPORT_SYMBOL(__ioremap_caller);
|
||||||
|
|
||||||
void __iounmap(void __iomem *virtual)
|
void __iounmap(void __iomem *virtual)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue