Skip to content

Commit

Permalink
sh: wire up vmallocinfo support in ioremap() implementations.
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Paul Mundt committed Dec 14, 2009
1 parent 1232d88 commit bf3cded
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 10 deletions.
10 changes: 8 additions & 2 deletions arch/sh/include/asm/io.h
Original file line number Diff line number Diff line change
Expand Up @@ -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.
*/
#ifdef CONFIG_MMU
void __iomem *__ioremap(unsigned long offset, unsigned long size,
unsigned long flags);
void __iomem *__ioremap_caller(unsigned long offset, unsigned long size,
unsigned long flags, void *caller);
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 *
__ioremap_mode(unsigned long offset, unsigned long size, unsigned long flags)
{
Expand Down
10 changes: 5 additions & 5 deletions arch/sh/mm/ioremap_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,10 @@
* have to convert them into an offset in a page-aligned mapping, but the
* caller shouldn't need to know that small detail.
*/
void __iomem *__ioremap(unsigned long phys_addr, unsigned long size,
unsigned long flags)
void __iomem *__ioremap_caller(unsigned long phys_addr, unsigned long size,
unsigned long flags, void *caller)
{
struct vm_struct * area;
struct vm_struct *area;
unsigned long offset, last_addr, addr, orig_addr;
pgprot_t pgprot;

Expand Down Expand Up @@ -67,7 +67,7 @@ void __iomem *__ioremap(unsigned long phys_addr, unsigned long size,
/*
* Ok, go for it..
*/
area = get_vm_area(size, VM_IOREMAP);
area = get_vm_area_caller(size, VM_IOREMAP, caller);
if (!area)
return NULL;
area->phys_addr = phys_addr;
Expand Down Expand Up @@ -103,7 +103,7 @@ void __iomem *__ioremap(unsigned long phys_addr, unsigned long size,

return (void __iomem *)(offset + (char *)orig_addr);
}
EXPORT_SYMBOL(__ioremap);
EXPORT_SYMBOL(__ioremap_caller);

void __iounmap(void __iomem *addr)
{
Expand Down
6 changes: 3 additions & 3 deletions arch/sh/mm/ioremap_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -258,15 +258,15 @@ static void shmedia_unmapioaddr(unsigned long vaddr)
pte_clear(&init_mm, vaddr, ptep);
}

void __iomem *__ioremap(unsigned long offset, unsigned long size,
unsigned long flags)
void __iomem *__ioremap_caller(unsigned long offset, unsigned long size,
unsigned long flags, void *caller)
{
char name[14];

sprintf(name, "phys_%08x", (u32)offset);
return shmedia_alloc_io(offset, size, name, flags);
}
EXPORT_SYMBOL(__ioremap);
EXPORT_SYMBOL(__ioremap_caller);

void __iounmap(void __iomem *virtual)
{
Expand Down

0 comments on commit bf3cded

Please sign in to comment.