.. | .. |
---|
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)) |
---|