diff options
author | Heiko Carstens <heiko.carstens@de.ibm.com> | 2010-08-09 20:18:28 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-08-09 23:44:54 -0400 |
commit | a1b200e27c0426ea98c1231a2b78c6094eb073e4 (patch) | |
tree | 8091ed3f3451cbc230e9bf72cafc773ee253bbe8 | |
parent | e7d86340793e7162126926ec9d226c68f4e37f94 (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.h | 5 | ||||
-rw-r--r-- | arch/s390/mm/vmem.c | 4 | ||||
-rw-r--r-- | mm/init-mm.c | 6 |
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 | ||
11 | struct mm_struct init_mm = { | 16 | struct 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 | }; |