| .. | .. |
|---|
| 21 | 21 | |
|---|
| 22 | 22 | static int __init cmma(char *str) |
|---|
| 23 | 23 | { |
|---|
| 24 | | - char *parm; |
|---|
| 24 | + bool enabled; |
|---|
| 25 | 25 | |
|---|
| 26 | | - parm = strstrip(str); |
|---|
| 27 | | - if (strcmp(parm, "yes") == 0 || strcmp(parm, "on") == 0) { |
|---|
| 28 | | - cmma_flag = 1; |
|---|
| 29 | | - return 1; |
|---|
| 30 | | - } |
|---|
| 31 | | - cmma_flag = 0; |
|---|
| 32 | | - if (strcmp(parm, "no") == 0 || strcmp(parm, "off") == 0) |
|---|
| 33 | | - return 1; |
|---|
| 34 | | - return 0; |
|---|
| 26 | + if (!kstrtobool(str, &enabled)) |
|---|
| 27 | + cmma_flag = enabled; |
|---|
| 28 | + return 1; |
|---|
| 35 | 29 | } |
|---|
| 36 | 30 | __setup("cmma=", cmma); |
|---|
| 37 | 31 | |
|---|
| .. | .. |
|---|
| 189 | 183 | |
|---|
| 190 | 184 | void __init cmma_init_nodat(void) |
|---|
| 191 | 185 | { |
|---|
| 192 | | - struct memblock_region *reg; |
|---|
| 193 | 186 | struct page *page; |
|---|
| 194 | 187 | unsigned long start, end, ix; |
|---|
| 188 | + int i; |
|---|
| 195 | 189 | |
|---|
| 196 | 190 | if (cmma_flag < 2) |
|---|
| 197 | 191 | return; |
|---|
| .. | .. |
|---|
| 199 | 193 | mark_kernel_pgd(); |
|---|
| 200 | 194 | |
|---|
| 201 | 195 | /* Set all kernel pages not used for page tables to stable/no-dat */ |
|---|
| 202 | | - for_each_memblock(memory, reg) { |
|---|
| 203 | | - start = memblock_region_memory_base_pfn(reg); |
|---|
| 204 | | - end = memblock_region_memory_end_pfn(reg); |
|---|
| 196 | + for_each_mem_pfn_range(i, MAX_NUMNODES, &start, &end, NULL) { |
|---|
| 205 | 197 | page = pfn_to_page(start); |
|---|
| 206 | 198 | for (ix = start; ix < end; ix++, page++) { |
|---|
| 207 | 199 | if (__test_and_clear_bit(PG_arch_1, &page->flags)) |
|---|