Commit d5be4469 authored by Huacai Chen's avatar Huacai Chen
Browse files

LoongArch: Set correct protection_map[] for VM_NONE/VM_SHARED



For 32BIT platform _PAGE_PROTNONE is 0, so set a VMA to be VM_NONE or
VM_SHARED will make pages non-present, then cause Oops with kernel page
fault.

Fix it by set correct protection_map[] for VM_NONE/VM_SHARED, replacing
_PAGE_PROTNONE with _PAGE_PRESENT.

Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
parent 807e5d38
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -160,8 +160,8 @@ void cpu_cache_init(void)

static const pgprot_t protection_map[16] = {
	[VM_NONE]					= __pgprot(_CACHE_CC | _PAGE_USER |
								   _PAGE_PROTNONE | _PAGE_NO_EXEC |
								   _PAGE_NO_READ),
								   _PAGE_NO_EXEC | _PAGE_NO_READ |
								   (_PAGE_PROTNONE ? : _PAGE_PRESENT)),
	[VM_READ]					= __pgprot(_CACHE_CC | _PAGE_VALID |
								   _PAGE_USER | _PAGE_PRESENT |
								   _PAGE_NO_EXEC),
@@ -180,8 +180,8 @@ static const pgprot_t protection_map[16] = {
	[VM_EXEC | VM_WRITE | VM_READ]			= __pgprot(_CACHE_CC | _PAGE_VALID |
								   _PAGE_USER | _PAGE_PRESENT),
	[VM_SHARED]					= __pgprot(_CACHE_CC | _PAGE_USER |
								   _PAGE_PROTNONE | _PAGE_NO_EXEC |
								   _PAGE_NO_READ),
								   _PAGE_NO_EXEC | _PAGE_NO_READ |
								   (_PAGE_PROTNONE ? : _PAGE_PRESENT)),
	[VM_SHARED | VM_READ]				= __pgprot(_CACHE_CC | _PAGE_VALID |
								   _PAGE_USER | _PAGE_PRESENT |
								   _PAGE_NO_EXEC),