Commit 4b239f458 ("x86-64, mm: Put early page table high") causes a S4 regression since 2.6.39, namely the machine reboots occasionally at S4 resume. It doesn't happen always, overall rate is about 1/20. But, like other bugs, once when this happens, it continues to happen. This patch fixes the problem by essentially reverting the memory assignment in the older way.
Unified · Split
| @@ -63,9 +63,8 @@ static void __init find_early_table_space(unsigned long end, int use_pse, · 62 unmodified lines | |||
| 63 | #ifdef CONFIG_X86_32 | 63 | #ifdef CONFIG_X86_32 |
| 64 | /* for fixmap */ | 64 | /* for fixmap */ |
| 65 | tables += roundup(__end_of_fixed_addresses * sizeof(pte_t), PAGE_SIZE); | 65 | tables += roundup(__end_of_fixed_addresses * sizeof(pte_t), PAGE_SIZE); |
| 66 | |||
| 67 | good_end = max_pfn_mapped << PAGE_SHIFT; | ||
| 68 | #endif | 66 | #endif |
| 67 | good_end = max_pfn_mapped << PAGE_SHIFT; | ||
| 69 | 68 | ||
| 70 | base = memblock_find_in_range(start, good_end, tables, PAGE_SIZE); | 69 | base = memblock_find_in_range(start, good_end, tables, PAGE_SIZE); |
| 71 | if (base == MEMBLOCK_ERROR) | 70 | if (base == MEMBLOCK_ERROR) |