Merge branch 'efi-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
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
This commit is contained in:
commit
709b8f67d7
@ -917,11 +917,11 @@ static void populate_pte(struct cpa_data *cpa,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int populate_pmd(struct cpa_data *cpa,
|
static long populate_pmd(struct cpa_data *cpa,
|
||||||
unsigned long start, unsigned long end,
|
unsigned long start, unsigned long end,
|
||||||
unsigned num_pages, pud_t *pud, pgprot_t pgprot)
|
unsigned num_pages, pud_t *pud, pgprot_t pgprot)
|
||||||
{
|
{
|
||||||
unsigned int cur_pages = 0;
|
long cur_pages = 0;
|
||||||
pmd_t *pmd;
|
pmd_t *pmd;
|
||||||
pgprot_t pmd_pgprot;
|
pgprot_t pmd_pgprot;
|
||||||
|
|
||||||
@ -991,12 +991,12 @@ static int populate_pmd(struct cpa_data *cpa,
|
|||||||
return num_pages;
|
return num_pages;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int populate_pud(struct cpa_data *cpa, unsigned long start, pgd_t *pgd,
|
static long populate_pud(struct cpa_data *cpa, unsigned long start, pgd_t *pgd,
|
||||||
pgprot_t pgprot)
|
pgprot_t pgprot)
|
||||||
{
|
{
|
||||||
pud_t *pud;
|
pud_t *pud;
|
||||||
unsigned long end;
|
unsigned long end;
|
||||||
int cur_pages = 0;
|
long cur_pages = 0;
|
||||||
pgprot_t pud_pgprot;
|
pgprot_t pud_pgprot;
|
||||||
|
|
||||||
end = start + (cpa->numpages << PAGE_SHIFT);
|
end = start + (cpa->numpages << PAGE_SHIFT);
|
||||||
@ -1052,7 +1052,7 @@ static int populate_pud(struct cpa_data *cpa, unsigned long start, pgd_t *pgd,
|
|||||||
|
|
||||||
/* Map trailing leftover */
|
/* Map trailing leftover */
|
||||||
if (start < end) {
|
if (start < end) {
|
||||||
int tmp;
|
long tmp;
|
||||||
|
|
||||||
pud = pud_offset(pgd, start);
|
pud = pud_offset(pgd, start);
|
||||||
if (pud_none(*pud))
|
if (pud_none(*pud))
|
||||||
@ -1078,7 +1078,7 @@ static int populate_pgd(struct cpa_data *cpa, unsigned long addr)
|
|||||||
pgprot_t pgprot = __pgprot(_KERNPG_TABLE);
|
pgprot_t pgprot = __pgprot(_KERNPG_TABLE);
|
||||||
pud_t *pud = NULL; /* shut up gcc */
|
pud_t *pud = NULL; /* shut up gcc */
|
||||||
pgd_t *pgd_entry;
|
pgd_t *pgd_entry;
|
||||||
int ret;
|
long ret;
|
||||||
|
|
||||||
pgd_entry = cpa->pgd + pgd_index(addr);
|
pgd_entry = cpa->pgd + pgd_index(addr);
|
||||||
|
|
||||||
@ -1327,7 +1327,8 @@ static int cpa_process_alias(struct cpa_data *cpa)
|
|||||||
|
|
||||||
static int __change_page_attr_set_clr(struct cpa_data *cpa, int checkalias)
|
static int __change_page_attr_set_clr(struct cpa_data *cpa, int checkalias)
|
||||||
{
|
{
|
||||||
int ret, numpages = cpa->numpages;
|
unsigned long numpages = cpa->numpages;
|
||||||
|
int ret;
|
||||||
|
|
||||||
while (numpages) {
|
while (numpages) {
|
||||||
/*
|
/*
|
||||||
|
@ -245,7 +245,7 @@ int __init efi_setup_page_tables(unsigned long pa_memmap, unsigned num_pages)
|
|||||||
* text and allocate a new stack because we can't rely on the
|
* text and allocate a new stack because we can't rely on the
|
||||||
* stack pointer being < 4GB.
|
* stack pointer being < 4GB.
|
||||||
*/
|
*/
|
||||||
if (!IS_ENABLED(CONFIG_EFI_MIXED))
|
if (!IS_ENABLED(CONFIG_EFI_MIXED) || efi_is_native())
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user