mirror of
https://git.yoctoproject.org/meta-ti
synced 2026-07-17 06:48:07 +00:00
189ce92b4c
Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> Signed-off-by: Denys Dmytriyenko <denys@ti.com>
52 lines
1.8 KiB
Diff
52 lines
1.8 KiB
Diff
From 25ca214b138f89e6881a9fee029f1c55756bd8a3 Mon Sep 17 00:00:00 2001
|
|
From: KyongHo <pullip.cho@samsung.com>
|
|
Date: Tue, 29 May 2012 15:06:49 -0700
|
|
Subject: [PATCH 32/86] mm: fix faulty initialization in vmalloc_init()
|
|
|
|
commit dbda591d920b4c7692725b13e3f68ecb251e9080 upstream.
|
|
|
|
The transfer of ->flags causes some of the static mapping virtual
|
|
addresses to be prematurely freed (before the mapping is removed) because
|
|
VM_LAZY_FREE gets "set" if tmp->flags has VM_IOREMAP set. This might
|
|
cause subsequent vmalloc/ioremap calls to fail because it might allocate
|
|
one of the freed virtual address ranges that aren't unmapped.
|
|
|
|
va->flags has different types of flags from tmp->flags. If a region with
|
|
VM_IOREMAP set is registered with vm_area_add_early(), it will be removed
|
|
by __purge_vmap_area_lazy().
|
|
|
|
Fix vmalloc_init() to correctly initialize vmap_area for the given
|
|
vm_struct.
|
|
|
|
Also initialise va->vm. If it is not set, find_vm_area() for the early
|
|
vm regions will always fail.
|
|
|
|
Signed-off-by: KyongHo Cho <pullip.cho@samsung.com>
|
|
Cc: "Olav Haugan" <ohaugan@codeaurora.org>
|
|
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
|
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
|
|
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|
---
|
|
mm/vmalloc.c | 3 ++-
|
|
1 file changed, 2 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/mm/vmalloc.c b/mm/vmalloc.c
|
|
index 877ca04..577e51d 100644
|
|
--- a/mm/vmalloc.c
|
|
+++ b/mm/vmalloc.c
|
|
@@ -1185,9 +1185,10 @@ void __init vmalloc_init(void)
|
|
/* Import existing vmlist entries. */
|
|
for (tmp = vmlist; tmp; tmp = tmp->next) {
|
|
va = kzalloc(sizeof(struct vmap_area), GFP_NOWAIT);
|
|
- va->flags = tmp->flags | VM_VM_AREA;
|
|
+ va->flags = VM_VM_AREA;
|
|
va->va_start = (unsigned long)tmp->addr;
|
|
va->va_end = va->va_start + tmp->size;
|
|
+ va->vm = tmp;
|
|
__insert_vmap_area(va);
|
|
}
|
|
|
|
--
|
|
1.7.9.5
|
|
|