diff options
author | Michael Ellerman <michael@ellerman.id.au> | 2010-11-28 13:26:36 -0500 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2010-12-08 23:35:32 -0500 |
commit | 7a9d12568e34e37a72d9e00ce01b62dec527e663 (patch) | |
tree | 117f1d41ae3fe773bca81d9a4c6286c2f9ff2134 /arch/powerpc | |
parent | bb2c458b8b8c8a53f65b78051d22a0f13d53abcb (diff) |
powerpc: Record vma->phys_addr in ioremap()
The vmalloc code can track the physical address of a vma, when the
vma is used for ioremap, if set it is displayed in /proc/vmallocinfo.
Because get_vm_area_caller() doesn't know it's being called for
ioremap() it's up to the arch code to set the phys_addr. A bunch
of other arch's do this, I'm not sure why powerpc doesn't?
Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc')
-rw-r--r-- | arch/powerpc/mm/pgtable_32.c | 1 | ||||
-rw-r--r-- | arch/powerpc/mm/pgtable_64.c | 2 |
2 files changed, 3 insertions, 0 deletions
diff --git a/arch/powerpc/mm/pgtable_32.c b/arch/powerpc/mm/pgtable_32.c index a87ead0138b4..71932d000a72 100644 --- a/arch/powerpc/mm/pgtable_32.c +++ b/arch/powerpc/mm/pgtable_32.c | |||
@@ -230,6 +230,7 @@ __ioremap_caller(phys_addr_t addr, unsigned long size, unsigned long flags, | |||
230 | area = get_vm_area_caller(size, VM_IOREMAP, caller); | 230 | area = get_vm_area_caller(size, VM_IOREMAP, caller); |
231 | if (area == 0) | 231 | if (area == 0) |
232 | return NULL; | 232 | return NULL; |
233 | area->phys_addr = p; | ||
233 | v = (unsigned long) area->addr; | 234 | v = (unsigned long) area->addr; |
234 | } else { | 235 | } else { |
235 | v = (ioremap_bot -= size); | 236 | v = (ioremap_bot -= size); |
diff --git a/arch/powerpc/mm/pgtable_64.c b/arch/powerpc/mm/pgtable_64.c index 21d6dfab7942..88927a05cdc2 100644 --- a/arch/powerpc/mm/pgtable_64.c +++ b/arch/powerpc/mm/pgtable_64.c | |||
@@ -223,6 +223,8 @@ void __iomem * __ioremap_caller(phys_addr_t addr, unsigned long size, | |||
223 | caller); | 223 | caller); |
224 | if (area == NULL) | 224 | if (area == NULL) |
225 | return NULL; | 225 | return NULL; |
226 | |||
227 | area->phys_addr = paligned; | ||
226 | ret = __ioremap_at(paligned, area->addr, size, flags); | 228 | ret = __ioremap_at(paligned, area->addr, size, flags); |
227 | if (!ret) | 229 | if (!ret) |
228 | vunmap(area->addr); | 230 | vunmap(area->addr); |