powerpc: Don't ignore errors from set_memory_{n}p() in __kernel_map_pages()
set_memory_p() and set_memory_np() can fail. As mentioned in linux/mm.h: /* * To support DEBUG_PAGEALLOC architecture must ensure that * __kernel_map_pages() never fails */ So panic in case set_memory_p() or set_memory_np() fail in __kernel_map_pages(). Link: https://github.com/KSPP/linux/issues/7 Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://msgid.link/20ef75884aa6a636e8298736f3d1056b0793d3d9.1708078640.git.christophe.leroy@csgroup.eu
This commit is contained in:
parent
3c8016e681
commit
9cbacb834b
@ -2172,7 +2172,7 @@ static void kernel_unmap_linear_page(unsigned long vaddr, unsigned long lmi)
|
||||
mmu_kernel_ssize, 0);
|
||||
}
|
||||
|
||||
void hash__kernel_map_pages(struct page *page, int numpages, int enable)
|
||||
int hash__kernel_map_pages(struct page *page, int numpages, int enable)
|
||||
{
|
||||
unsigned long flags, vaddr, lmi;
|
||||
int i;
|
||||
@ -2189,6 +2189,7 @@ void hash__kernel_map_pages(struct page *page, int numpages, int enable)
|
||||
kernel_unmap_linear_page(vaddr, lmi);
|
||||
}
|
||||
local_irq_restore(flags);
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_DEBUG_PAGEALLOC || CONFIG_KFENCE */
|
||||
|
||||
|
@ -187,4 +187,4 @@ int create_section_mapping(unsigned long start, unsigned long end,
|
||||
int nid, pgprot_t prot);
|
||||
#endif
|
||||
|
||||
void hash__kernel_map_pages(struct page *page, int numpages, int enable);
|
||||
int hash__kernel_map_pages(struct page *page, int numpages, int enable);
|
||||
|
@ -107,17 +107,21 @@ int change_memory_attr(unsigned long addr, int numpages, long action)
|
||||
#ifdef CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC
|
||||
void __kernel_map_pages(struct page *page, int numpages, int enable)
|
||||
{
|
||||
int err;
|
||||
unsigned long addr = (unsigned long)page_address(page);
|
||||
|
||||
if (PageHighMem(page))
|
||||
return;
|
||||
|
||||
if (IS_ENABLED(CONFIG_PPC_BOOK3S_64) && !radix_enabled())
|
||||
hash__kernel_map_pages(page, numpages, enable);
|
||||
err = hash__kernel_map_pages(page, numpages, enable);
|
||||
else if (enable)
|
||||
set_memory_p(addr, numpages);
|
||||
err = set_memory_p(addr, numpages);
|
||||
else
|
||||
set_memory_np(addr, numpages);
|
||||
err = set_memory_np(addr, numpages);
|
||||
|
||||
if (err)
|
||||
panic("%s: changing memory protections failed\n", __func__);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user