hc
2024-10-22 8ac6c7a54ed1b98d142dce24b11c6de6a1e239a5
kernel/arch/um/kernel/skas/mmu.c
....@@ -1,7 +1,7 @@
1
+// SPDX-License-Identifier: GPL-2.0
12 /*
23 * Copyright (C) 2015 Thomas Meyer (thomas@m3y3r.de)
34 * Copyright (C) 2002 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
4
- * Licensed under the GPL
55 */
66
77 #include <linux/mm.h>
....@@ -9,7 +9,6 @@
99 #include <linux/slab.h>
1010
1111 #include <asm/pgalloc.h>
12
-#include <asm/pgtable.h>
1312 #include <asm/sections.h>
1413 #include <as-layout.h>
1514 #include <os.h>
....@@ -19,14 +18,20 @@
1918 unsigned long kernel)
2019 {
2120 pgd_t *pgd;
21
+ p4d_t *p4d;
2222 pud_t *pud;
2323 pmd_t *pmd;
2424 pte_t *pte;
2525
2626 pgd = pgd_offset(mm, proc);
27
- pud = pud_alloc(mm, pgd, proc);
28
- if (!pud)
27
+
28
+ p4d = p4d_alloc(mm, pgd, proc);
29
+ if (!p4d)
2930 goto out;
31
+
32
+ pud = pud_alloc(mm, p4d, proc);
33
+ if (!pud)
34
+ goto out_pud;
3035
3136 pmd = pmd_alloc(mm, pud, proc);
3237 if (!pmd)
....@@ -44,6 +49,8 @@
4449 pmd_free(mm, pmd);
4550 out_pmd:
4651 pud_free(mm, pud);
52
+ out_pud:
53
+ p4d_free(mm, p4d);
4754 out:
4855 return -ENOMEM;
4956 }
....@@ -63,12 +70,12 @@
6370 if (current->mm != NULL && current->mm != &init_mm)
6471 from_mm = &current->mm->context;
6572
66
- block_signals();
73
+ block_signals_trace();
6774 if (from_mm)
6875 to_mm->id.u.pid = copy_context_skas0(stack,
6976 from_mm->id.u.pid);
7077 else to_mm->id.u.pid = start_userspace(stack);
71
- unblock_signals();
78
+ unblock_signals_trace();
7279
7380 if (to_mm->id.u.pid < 0) {
7481 ret = to_mm->id.u.pid;
....@@ -107,7 +114,7 @@
107114 mm->context.stub_pages[0] = virt_to_page(__syscall_stub_start);
108115 mm->context.stub_pages[1] = virt_to_page(mm->context.id.stack);
109116
110
- /* dup_mmap already holds mmap_sem */
117
+ /* dup_mmap already holds mmap_lock */
111118 err = install_special_mapping(mm, STUB_START, STUB_END - STUB_START,
112119 VM_READ | VM_MAYREAD | VM_EXEC |
113120 VM_MAYEXEC | VM_DONTCOPY | VM_PFNMAP,
....@@ -119,7 +126,7 @@
119126 return;
120127
121128 out:
122
- force_sigsegv(SIGSEGV, current);
129
+ force_sigsegv(SIGSEGV);
123130 }
124131
125132 void arch_exit_mmap(struct mm_struct *mm)