aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHeiko Carstens <heiko.carstens@de.ibm.com>2010-08-09 20:18:28 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2010-08-09 23:44:54 -0400
commita1b200e27c0426ea98c1231a2b78c6094eb073e4 (patch)
tree8091ed3f3451cbc230e9bf72cafc773ee253bbe8
parente7d86340793e7162126926ec9d226c68f4e37f94 (diff)
mm: provide init_mm mm_context initializer
Provide an INIT_MM_CONTEXT intializer macro which can be used to statically initialize mm_struct:mm_context of init_mm. This way we can get rid of code which will do the initialization at run time (on s390). In addition the current code can be found at a place where it is not expected. So let's have a common initializer which architectures can use if needed. This is based on a patch from Suzuki Poulose. Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> Cc: Suzuki Poulose <suzuki@in.ibm.com> Cc: Alexey Dobriyan <adobriyan@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--arch/s390/include/asm/mmu.h5
-rw-r--r--arch/s390/mm/vmem.c4
-rw-r--r--mm/init-mm.c6
3 files changed, 11 insertions, 4 deletions
diff --git a/arch/s390/include/asm/mmu.h b/arch/s390/include/asm/mmu.h
index 03be99919d62..99e3409102b9 100644
--- a/arch/s390/include/asm/mmu.h
+++ b/arch/s390/include/asm/mmu.h
@@ -13,4 +13,9 @@ typedef struct {
13 int alloc_pgste; /* cloned contexts will have extended page tables */ 13 int alloc_pgste; /* cloned contexts will have extended page tables */
14} mm_context_t; 14} mm_context_t;
15 15
16#define INIT_MM_CONTEXT(name) \
17 .context.list_lock = __SPIN_LOCK_UNLOCKED(name.context.list_lock), \
18 .context.crst_list = LIST_HEAD_INIT(name.context.crst_list), \
19 .context.pgtable_list = LIST_HEAD_INIT(name.context.pgtable_list),
20
16#endif 21#endif
diff --git a/arch/s390/mm/vmem.c b/arch/s390/mm/vmem.c
index 90165e7ca04e..34c43f23b28c 100644
--- a/arch/s390/mm/vmem.c
+++ b/arch/s390/mm/vmem.c
@@ -332,10 +332,6 @@ void __init vmem_map_init(void)
332 unsigned long start, end; 332 unsigned long start, end;
333 int i; 333 int i;
334 334
335 spin_lock_init(&init_mm.context.list_lock);
336 INIT_LIST_HEAD(&init_mm.context.crst_list);
337 INIT_LIST_HEAD(&init_mm.context.pgtable_list);
338 init_mm.context.noexec = 0;
339 ro_start = ((unsigned long)&_stext) & PAGE_MASK; 335 ro_start = ((unsigned long)&_stext) & PAGE_MASK;
340 ro_end = PFN_ALIGN((unsigned long)&_eshared); 336 ro_end = PFN_ALIGN((unsigned long)&_eshared);
341 for (i = 0; i < MEMORY_CHUNKS && memory_chunk[i].size > 0; i++) { 337 for (i = 0; i < MEMORY_CHUNKS && memory_chunk[i].size > 0; i++) {
diff --git a/mm/init-mm.c b/mm/init-mm.c
index 57aba0da9668..1d29cdfe8ebb 100644
--- a/mm/init-mm.c
+++ b/mm/init-mm.c
@@ -7,6 +7,11 @@
7 7
8#include <asm/atomic.h> 8#include <asm/atomic.h>
9#include <asm/pgtable.h> 9#include <asm/pgtable.h>
10#include <asm/mmu.h>
11
12#ifndef INIT_MM_CONTEXT
13#define INIT_MM_CONTEXT(name)
14#endif
10 15
11struct mm_struct init_mm = { 16struct mm_struct init_mm = {
12 .mm_rb = RB_ROOT, 17 .mm_rb = RB_ROOT,
@@ -17,4 +22,5 @@ struct mm_struct init_mm = {
17 .page_table_lock = __SPIN_LOCK_UNLOCKED(init_mm.page_table_lock), 22 .page_table_lock = __SPIN_LOCK_UNLOCKED(init_mm.page_table_lock),
18 .mmlist = LIST_HEAD_INIT(init_mm.mmlist), 23 .mmlist = LIST_HEAD_INIT(init_mm.mmlist),
19 .cpu_vm_mask = CPU_MASK_ALL, 24 .cpu_vm_mask = CPU_MASK_ALL,
25 INIT_MM_CONTEXT(init_mm)
20}; 26};