diff options
| -rw-r--r-- | mm/sparse.c | 14 |
1 files changed, 1 insertions, 13 deletions
diff --git a/mm/sparse.c b/mm/sparse.c index 42ca0ea9af1b..fac95f2888f2 100644 --- a/mm/sparse.c +++ b/mm/sparse.c | |||
| @@ -77,7 +77,6 @@ static struct mem_section noinline __init_refok *sparse_index_alloc(int nid) | |||
| 77 | 77 | ||
| 78 | static int __meminit sparse_index_init(unsigned long section_nr, int nid) | 78 | static int __meminit sparse_index_init(unsigned long section_nr, int nid) |
| 79 | { | 79 | { |
| 80 | static DEFINE_SPINLOCK(index_init_lock); | ||
| 81 | unsigned long root = SECTION_NR_TO_ROOT(section_nr); | 80 | unsigned long root = SECTION_NR_TO_ROOT(section_nr); |
| 82 | struct mem_section *section; | 81 | struct mem_section *section; |
| 83 | int ret = 0; | 82 | int ret = 0; |
| @@ -88,20 +87,9 @@ static int __meminit sparse_index_init(unsigned long section_nr, int nid) | |||
| 88 | section = sparse_index_alloc(nid); | 87 | section = sparse_index_alloc(nid); |
| 89 | if (!section) | 88 | if (!section) |
| 90 | return -ENOMEM; | 89 | return -ENOMEM; |
| 91 | /* | ||
| 92 | * This lock keeps two different sections from | ||
| 93 | * reallocating for the same index | ||
| 94 | */ | ||
| 95 | spin_lock(&index_init_lock); | ||
| 96 | |||
| 97 | if (mem_section[root]) { | ||
| 98 | ret = -EEXIST; | ||
| 99 | goto out; | ||
| 100 | } | ||
| 101 | 90 | ||
| 102 | mem_section[root] = section; | 91 | mem_section[root] = section; |
| 103 | out: | 92 | |
| 104 | spin_unlock(&index_init_lock); | ||
| 105 | return ret; | 93 | return ret; |
| 106 | } | 94 | } |
| 107 | #else /* !SPARSEMEM_EXTREME */ | 95 | #else /* !SPARSEMEM_EXTREME */ |
