diff options
author | Paul Mundt <lethal@linux-sh.org> | 2009-12-14 00:23:41 -0500 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2009-12-14 00:23:41 -0500 |
commit | bf3cdeda901c7f42de3cddc8c5aa19f6b8d8f9df (patch) | |
tree | 4f0ebc608a8ea53d723be1695fbc9606a255ae85 /arch/sh | |
parent | 1232d88a47626cad13ba82f3a9ea814820bc1c65 (diff) |
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>
Diffstat (limited to 'arch/sh')
-rw-r--r-- | arch/sh/include/asm/io.h | 10 | ||||
-rw-r--r-- | arch/sh/mm/ioremap_32.c | 10 | ||||
-rw-r--r-- | arch/sh/mm/ioremap_64.c | 6 |
3 files changed, 16 insertions, 10 deletions
diff --git a/arch/sh/include/asm/io.h b/arch/sh/include/asm/io.h index 512cd3e9d0ca..988c1be58e51 100644 --- a/arch/sh/include/asm/io.h +++ b/arch/sh/include/asm/io.h | |||
@@ -233,11 +233,17 @@ unsigned long long poke_real_address_q(unsigned long long addr, | |||
233 | * doesn't exist, so everything must go through page tables. | 233 | * doesn't exist, so everything must go through page tables. |
234 | */ | 234 | */ |
235 | #ifdef CONFIG_MMU | 235 | #ifdef CONFIG_MMU |
236 | void __iomem *__ioremap(unsigned long offset, unsigned long size, | 236 | void __iomem *__ioremap_caller(unsigned long offset, unsigned long size, |
237 | unsigned long flags); | 237 | unsigned long flags, void *caller); |
238 | void __iounmap(void __iomem *addr); | 238 | void __iounmap(void __iomem *addr); |
239 | 239 | ||
240 | static inline void __iomem * | 240 | static inline void __iomem * |
241 | __ioremap(unsigned long offset, unsigned long size, unsigned long flags) | ||
242 | { | ||
243 | return __ioremap_caller(offset, size, flags, __builtin_return_address(0)); | ||
244 | } | ||
245 | |||
246 | static inline void __iomem * | ||
241 | __ioremap_mode(unsigned long offset, unsigned long size, unsigned long flags) | 247 | __ioremap_mode(unsigned long offset, unsigned long size, unsigned long flags) |
242 | { | 248 | { |
243 | #if defined(CONFIG_SUPERH32) && !defined(CONFIG_PMB_FIXED) && !defined(CONFIG_PMB) | 249 | #if defined(CONFIG_SUPERH32) && !defined(CONFIG_PMB_FIXED) && !defined(CONFIG_PMB) |
diff --git a/arch/sh/mm/ioremap_32.c b/arch/sh/mm/ioremap_32.c index a86eaa9d75a5..2141befb4f91 100644 --- a/arch/sh/mm/ioremap_32.c +++ b/arch/sh/mm/ioremap_32.c | |||
@@ -33,10 +33,10 @@ | |||
33 | * have to convert them into an offset in a page-aligned mapping, but the | 33 | * have to convert them into an offset in a page-aligned mapping, but the |
34 | * caller shouldn't need to know that small detail. | 34 | * caller shouldn't need to know that small detail. |
35 | */ | 35 | */ |
36 | void __iomem *__ioremap(unsigned long phys_addr, unsigned long size, | 36 | void __iomem *__ioremap_caller(unsigned long phys_addr, unsigned long size, |
37 | unsigned long flags) | 37 | unsigned long flags, void *caller) |
38 | { | 38 | { |
39 | struct vm_struct * area; | 39 | struct vm_struct *area; |
40 | unsigned long offset, last_addr, addr, orig_addr; | 40 | unsigned long offset, last_addr, addr, orig_addr; |
41 | pgprot_t pgprot; | 41 | pgprot_t pgprot; |
42 | 42 | ||
@@ -67,7 +67,7 @@ void __iomem *__ioremap(unsigned long phys_addr, unsigned long size, | |||
67 | /* | 67 | /* |
68 | * Ok, go for it.. | 68 | * Ok, go for it.. |
69 | */ | 69 | */ |
70 | area = get_vm_area(size, VM_IOREMAP); | 70 | area = get_vm_area_caller(size, VM_IOREMAP, caller); |
71 | if (!area) | 71 | if (!area) |
72 | return NULL; | 72 | return NULL; |
73 | area->phys_addr = phys_addr; | 73 | area->phys_addr = phys_addr; |
@@ -103,7 +103,7 @@ void __iomem *__ioremap(unsigned long phys_addr, unsigned long size, | |||
103 | 103 | ||
104 | return (void __iomem *)(offset + (char *)orig_addr); | 104 | return (void __iomem *)(offset + (char *)orig_addr); |
105 | } | 105 | } |
106 | EXPORT_SYMBOL(__ioremap); | 106 | EXPORT_SYMBOL(__ioremap_caller); |
107 | 107 | ||
108 | void __iounmap(void __iomem *addr) | 108 | void __iounmap(void __iomem *addr) |
109 | { | 109 | { |
diff --git a/arch/sh/mm/ioremap_64.c b/arch/sh/mm/ioremap_64.c index b16843d02b76..ef434657d428 100644 --- a/arch/sh/mm/ioremap_64.c +++ b/arch/sh/mm/ioremap_64.c | |||
@@ -258,15 +258,15 @@ static void shmedia_unmapioaddr(unsigned long vaddr) | |||
258 | pte_clear(&init_mm, vaddr, ptep); | 258 | pte_clear(&init_mm, vaddr, ptep); |
259 | } | 259 | } |
260 | 260 | ||
261 | void __iomem *__ioremap(unsigned long offset, unsigned long size, | 261 | void __iomem *__ioremap_caller(unsigned long offset, unsigned long size, |
262 | unsigned long flags) | 262 | unsigned long flags, void *caller) |
263 | { | 263 | { |
264 | char name[14]; | 264 | char name[14]; |
265 | 265 | ||
266 | sprintf(name, "phys_%08x", (u32)offset); | 266 | sprintf(name, "phys_%08x", (u32)offset); |
267 | return shmedia_alloc_io(offset, size, name, flags); | 267 | return shmedia_alloc_io(offset, size, name, flags); |
268 | } | 268 | } |
269 | EXPORT_SYMBOL(__ioremap); | 269 | EXPORT_SYMBOL(__ioremap_caller); |
270 | 270 | ||
271 | void __iounmap(void __iomem *virtual) | 271 | void __iounmap(void __iomem *virtual) |
272 | { | 272 | { |