]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.0-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 14 Jun 2012 22:36:59 +0000 (15:36 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 14 Jun 2012 22:36:59 +0000 (15:36 -0700)
added patches:
mm-fix-faulty-initialization-in-vmalloc_init.patch
mm-vmalloc.c-change-void-into-explict-vm_struct.patch

queue-3.0/mm-fix-faulty-initialization-in-vmalloc_init.patch [new file with mode: 0644]
queue-3.0/mm-vmalloc.c-change-void-into-explict-vm_struct.patch [new file with mode: 0644]
queue-3.0/series

diff --git a/queue-3.0/mm-fix-faulty-initialization-in-vmalloc_init.patch b/queue-3.0/mm-fix-faulty-initialization-in-vmalloc_init.patch
new file mode 100644 (file)
index 0000000..1f781dd
--- /dev/null
@@ -0,0 +1,49 @@
+From dbda591d920b4c7692725b13e3f68ecb251e9080 Mon Sep 17 00:00:00 2001
+From: KyongHo <pullip.cho@samsung.com>
+Date: Tue, 29 May 2012 15:06:49 -0700
+Subject: mm: fix faulty initialization in vmalloc_init()
+
+From: KyongHo <pullip.cho@samsung.com>
+
+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: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ mm/vmalloc.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/mm/vmalloc.c
++++ b/mm/vmalloc.c
+@@ -1174,9 +1174,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);
+       }
diff --git a/queue-3.0/mm-vmalloc.c-change-void-into-explict-vm_struct.patch b/queue-3.0/mm-vmalloc.c-change-void-into-explict-vm_struct.patch
new file mode 100644 (file)
index 0000000..10e8b83
--- /dev/null
@@ -0,0 +1,61 @@
+From db1aecafef58b5dda39c4228debe2c845e4a27ab Mon Sep 17 00:00:00 2001
+From: Minchan Kim <minchan@kernel.org>
+Date: Tue, 10 Jan 2012 15:08:39 -0800
+Subject: mm/vmalloc.c: change void* into explict vm_struct*
+
+From: Minchan Kim <minchan@kernel.org>
+
+commit db1aecafef58b5dda39c4228debe2c845e4a27ab upstream.
+
+vmap_area->private is void* but we don't use the field for various purpose
+but use only for vm_struct.  So change it to a vm_struct* with naming to
+improve for readability and type checking.
+
+Signed-off-by: Minchan Kim <minchan@kernel.org>
+Acked-by: David Rientjes <rientjes@google.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ mm/vmalloc.c |    8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+--- a/mm/vmalloc.c
++++ b/mm/vmalloc.c
+@@ -256,7 +256,7 @@ struct vmap_area {
+       struct rb_node rb_node;         /* address sorted rbtree */
+       struct list_head list;          /* address sorted list */
+       struct list_head purge_list;    /* "lazy purge" list */
+-      void *private;
++      struct vm_struct *vm;
+       struct rcu_head rcu_head;
+ };
+@@ -1274,7 +1274,7 @@ static void setup_vmalloc_vm(struct vm_s
+       vm->addr = (void *)va->va_start;
+       vm->size = va->va_end - va->va_start;
+       vm->caller = caller;
+-      va->private = vm;
++      va->vm = vm;
+       va->flags |= VM_VM_AREA;
+ }
+@@ -1397,7 +1397,7 @@ static struct vm_struct *find_vm_area(co
+       va = find_vmap_area((unsigned long)addr);
+       if (va && va->flags & VM_VM_AREA)
+-              return va->private;
++              return va->vm;
+       return NULL;
+ }
+@@ -1416,7 +1416,7 @@ struct vm_struct *remove_vm_area(const v
+       va = find_vmap_area((unsigned long)addr);
+       if (va && va->flags & VM_VM_AREA) {
+-              struct vm_struct *vm = va->private;
++              struct vm_struct *vm = va->vm;
+               if (!(vm->flags & VM_UNLIST)) {
+                       struct vm_struct *tmp, **p;
index c2bf561c44c6afdba55f6ca03a4be4d04eb54af4..4c92d33248cde20428699514b4d604a4f58f37a9 100644 (file)
@@ -15,3 +15,5 @@ iwlwifi-don-t-mess-up-the-scd-when-removing-a-key.patch
 x86-mce-amd-make-apic-lvt-thresholding-interrupt-optional.patch
 fuse-fix-stat-call-on-32-bit-platforms.patch
 e1000-save-skb-counts-in-tx-to-avoid-cache-misses.patch
+mm-vmalloc.c-change-void-into-explict-vm_struct.patch
+mm-fix-faulty-initialization-in-vmalloc_init.patch