Pull x86 fix from Thomas Gleixner: "A single fix for the handling of unpopulated sub-pmd spaces. The copy & pasta from the corresponding s390 code screwed up the address calculation for marking the sub-pmd ranges via memset by omitting the ALIGN_DOWN() to calculate the proper start address. It's a mystery why this code is not generic and shared because there is nothing architecture specific in there, but that's too intrusive for a backportable fix" * tag 'x86-urgent-2022-05-15' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: x86/mm: Fix marking of unused sub-pmd ranges
Unified · Split
| @@ -902,6 +902,8 @@ static void __meminit vmemmap_use_sub_pmd(unsigned long start, unsigned long end · 901 unmodified lines | ||
| 902 | 902 | |
| 903 | 903 | static void __meminit vmemmap_use_new_sub_pmd(unsigned long start, unsigned long end) |
| 904 | 904 | { |
| 905 | + const unsigned long page = ALIGN_DOWN(start, PMD_SIZE); | |
| 906 | + | |
| 905 | 907 | vmemmap_flush_unused_pmd(); |
| 906 | 908 | |
| 907 | 909 | /* |
| @@ -914,8 +916,7 @@ static void __meminit vmemmap_use_new_sub_pmd(unsigned long start, unsigned long · 6 unmodified lines | ||
| 914 | 916 | * Mark with PAGE_UNUSED the unused parts of the new memmap range |
| 915 | 917 | */ |
| 916 | 918 | if (!IS_ALIGNED(start, PMD_SIZE)) |
| 917 | − memset((void *)start, PAGE_UNUSED, | |
| 918 | − start - ALIGN_DOWN(start, PMD_SIZE)); | |
| 919 | + memset((void *)page, PAGE_UNUSED, start - page); | |
| 919 | 920 | |
| 920 | 921 | /* |
| 921 | 922 | * We want to avoid memset(PAGE_UNUSED) when populating the vmemmap of |