Pull EFI fixes from Thomas Gleixner: "Two fixes for EFI/PAT: - a 32bit overflow bug in the PAT code which was unearthed by the large EFI mappings - prevent a boot hang on large systems when EFI mixed mode is enabled but not used" * 'efi-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: x86/efi: Only map RAM into EFI page tables if in mixed-mode x86/mm/pat: Prevent hang during boot when mapping pages
Unified · Split
| @@ -917,11 +917,11 @@ static void populate_pte(struct cpa_data *cpa, · 916 unmodified lines | |||
| 917 | } | 917 | } |
| 918 | } | 918 | } |
| 919 | 919 | ||
| 920 | static int populate_pmd(struct cpa_data *cpa, | 920 | static long populate_pmd(struct cpa_data *cpa, |
| 921 | unsigned long start, unsigned long end, | 921 | unsigned long start, unsigned long end, |
| 922 | unsigned num_pages, pud_t *pud, pgprot_t pgprot) | 922 | unsigned num_pages, pud_t *pud, pgprot_t pgprot) |
| 923 | { | 923 | { |
| 924 | unsigned int cur_pages = 0; | 924 | long cur_pages = 0; |
| 925 | pmd_t *pmd; | 925 | pmd_t *pmd; |
| 926 | pgprot_t pmd_pgprot; | 926 | pgprot_t pmd_pgprot; |
| 927 | 927 | ||
| @@ -991,12 +991,12 @@ static int populate_pmd(struct cpa_data *cpa, · 63 unmodified lines | |||
| 991 | return num_pages; | 991 | return num_pages; |
| 992 | } | 992 | } |
| 993 | 993 | ||
| 994 | static int populate_pud(struct cpa_data *cpa, unsigned long start, pgd_t *pgd, | 994 | static long populate_pud(struct cpa_data *cpa, unsigned long start, pgd_t *pgd, |
| 995 | pgprot_t pgprot) | 995 | pgprot_t pgprot) |
| 996 | { | 996 | { |
| 997 | pud_t *pud; | 997 | pud_t *pud; |
| 998 | unsigned long end; | 998 | unsigned long end; |
| 999 | int cur_pages = 0; | 999 | long cur_pages = 0; |
| 1000 | pgprot_t pud_pgprot; | 1000 | pgprot_t pud_pgprot; |
| 1001 | 1001 | ||
| 1002 | end = start + (cpa->numpages << PAGE_SHIFT); | 1002 | end = start + (cpa->numpages << PAGE_SHIFT); |
| @@ -1052,7 +1052,7 @@ static int populate_pud(struct cpa_data *cpa, unsigned long start, pgd_t *pgd, · 49 unmodified lines | |||
| 1052 | 1052 | ||
| 1053 | /* Map trailing leftover */ | 1053 | /* Map trailing leftover */ |
| 1054 | if (start < end) { | 1054 | if (start < end) { |
| 1055 | int tmp; | 1055 | long tmp; |
| 1056 | 1056 | ||
| 1057 | pud = pud_offset(pgd, start); | 1057 | pud = pud_offset(pgd, start); |
| 1058 | if (pud_none(*pud)) | 1058 | if (pud_none(*pud)) |
| @@ -1078,7 +1078,7 @@ static int populate_pgd(struct cpa_data *cpa, unsigned long addr) · 19 unmodified lines | |||
| 1078 | pgprot_t pgprot = __pgprot(_KERNPG_TABLE); | 1078 | pgprot_t pgprot = __pgprot(_KERNPG_TABLE); |
| 1079 | pud_t *pud = NULL; /* shut up gcc */ | 1079 | pud_t *pud = NULL; /* shut up gcc */ |
| 1080 | pgd_t *pgd_entry; | 1080 | pgd_t *pgd_entry; |
| 1081 | int ret; | 1081 | long ret; |
| 1082 | 1082 | ||
| 1083 | pgd_entry = cpa->pgd + pgd_index(addr); | 1083 | pgd_entry = cpa->pgd + pgd_index(addr); |
| 1084 | 1084 | ||
| @@ -1327,7 +1327,8 @@ static int cpa_process_alias(struct cpa_data *cpa) · 242 unmodified lines | |||
| 1327 | 1327 | ||
| 1328 | static int __change_page_attr_set_clr(struct cpa_data *cpa, int checkalias) | 1328 | static int __change_page_attr_set_clr(struct cpa_data *cpa, int checkalias) |
| 1329 | { | 1329 | { |
| 1330 | int ret, numpages = cpa->numpages; | 1330 | unsigned long numpages = cpa->numpages; |
| 1331 | int ret; | ||
| 1331 | 1332 | ||
| 1332 | while (numpages) { | 1333 | while (numpages) { |
| 1333 | /* | 1334 | /* |
| @@ -245,7 +245,7 @@ int __init efi_setup_page_tables(unsigned long pa_memmap, unsigned num_pages) · 244 unmodified lines | |||
| 245 | * text and allocate a new stack because we can't rely on the | 245 | * text and allocate a new stack because we can't rely on the |
| 246 | * stack pointer being < 4GB. | 246 | * stack pointer being < 4GB. |
| 247 | */ | 247 | */ |
| 248 | if (!IS_ENABLED(CONFIG_EFI_MIXED)) | 248 | if (!IS_ENABLED(CONFIG_EFI_MIXED) || efi_is_native()) |
| 249 | return 0; | 249 | return 0; |
| 250 | 250 | ||
| 251 | /* | 251 | /* |