Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'x86_urgent_for_v6.8_rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull x86 fix from Borislav Petkov:

- Use a GB page for identity mapping only when memory of this size is
requested so that mapping of reserved regions is prevented which
would otherwise lead to system crashes on UV machines

* tag 'x86_urgent_for_v6.8_rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
x86/mm/ident_map: Use gbpages only where full GB page should be mapped.

+18 -5
+18 -5
arch/x86/mm/ident_map.c
··· 26 26 for (; addr < end; addr = next) { 27 27 pud_t *pud = pud_page + pud_index(addr); 28 28 pmd_t *pmd; 29 + bool use_gbpage; 29 30 30 31 next = (addr & PUD_MASK) + PUD_SIZE; 31 32 if (next > end) 32 33 next = end; 33 34 34 - if (info->direct_gbpages) { 35 + /* if this is already a gbpage, this portion is already mapped */ 36 + if (pud_large(*pud)) 37 + continue; 38 + 39 + /* Is using a gbpage allowed? */ 40 + use_gbpage = info->direct_gbpages; 41 + 42 + /* Don't use gbpage if it maps more than the requested region. */ 43 + /* at the begining: */ 44 + use_gbpage &= ((addr & ~PUD_MASK) == 0); 45 + /* ... or at the end: */ 46 + use_gbpage &= ((next & ~PUD_MASK) == 0); 47 + 48 + /* Never overwrite existing mappings */ 49 + use_gbpage &= !pud_present(*pud); 50 + 51 + if (use_gbpage) { 35 52 pud_t pudval; 36 53 37 - if (pud_present(*pud)) 38 - continue; 39 - 40 - addr &= PUD_MASK; 41 54 pudval = __pud((addr - info->offset) | info->page_flag); 42 55 set_pud(pud, pudval); 43 56 continue;