hc
2024-05-10 23fa18eaa71266feff7ba8d83022d9e1cc83c65a
kernel/arch/powerpc/kernel/vdso.c
....@@ -1,12 +1,8 @@
1
+// SPDX-License-Identifier: GPL-2.0-or-later
12
23 /*
34 * Copyright (C) 2004 Benjamin Herrenschmidt, IBM Corp.
45 * <benh@kernel.crashing.org>
5
- *
6
- * This program is free software; you can redistribute it and/or
7
- * modify it under the terms of the GNU General Public License
8
- * as published by the Free Software Foundation; either version
9
- * 2 of the License, or (at your option) any later version.
106 */
117
128 #include <linux/errno.h>
....@@ -22,7 +18,6 @@
2218 #include <linux/security.h>
2319 #include <linux/memblock.h>
2420
25
-#include <asm/pgtable.h>
2621 #include <asm/processor.h>
2722 #include <asm/mmu.h>
2823 #include <asm/mmu_context.h>
....@@ -98,28 +93,6 @@
9893 CPU_FTR_COHERENT_ICACHE, CPU_FTR_COHERENT_ICACHE,
9994 "__kernel_sync_dicache", "__kernel_sync_dicache_p5"
10095 },
101
-#ifdef CONFIG_PPC32
102
- {
103
- CPU_FTR_USE_RTC, CPU_FTR_USE_RTC,
104
- "__kernel_gettimeofday", NULL
105
- },
106
- {
107
- CPU_FTR_USE_RTC, CPU_FTR_USE_RTC,
108
- "__kernel_clock_gettime", NULL
109
- },
110
- {
111
- CPU_FTR_USE_RTC, CPU_FTR_USE_RTC,
112
- "__kernel_clock_getres", NULL
113
- },
114
- {
115
- CPU_FTR_USE_RTC, CPU_FTR_USE_RTC,
116
- "__kernel_get_tbfreq", NULL
117
- },
118
- {
119
- CPU_FTR_USE_RTC, CPU_FTR_USE_RTC,
120
- "__kernel_time", NULL
121
- },
122
-#endif
12396 };
12497
12598 /*
....@@ -197,7 +170,7 @@
197170 * and end up putting it elsewhere.
198171 * Add enough to the size so that the result can be aligned.
199172 */
200
- if (down_write_killable(&mm->mmap_sem))
173
+ if (mmap_write_lock_killable(mm))
201174 return -EINTR;
202175 vdso_base = get_unmapped_area(NULL, vdso_base,
203176 (vdso_pages << PAGE_SHIFT) +
....@@ -237,11 +210,11 @@
237210 goto fail_mmapsem;
238211 }
239212
240
- up_write(&mm->mmap_sem);
213
+ mmap_write_unlock(mm);
241214 return 0;
242215
243216 fail_mmapsem:
244
- up_write(&mm->mmap_sem);
217
+ mmap_write_unlock(mm);
245218 return rc;
246219 }
247220
....@@ -417,12 +390,7 @@
417390 symname);
418391 return 0;
419392 }
420
-#ifdef VDS64_HAS_DESCRIPTORS
421
- return *((u64 *)(vdso64_kbase + sym->st_value - VDSO64_LBASE)) -
422
- VDSO64_LBASE;
423
-#else
424393 return sym->st_value - VDSO64_LBASE;
425
-#endif
426394 }
427395
428396 static int __init vdso_do_func_patch64(struct lib32_elfinfo *v32,
....@@ -507,7 +475,7 @@
507475 */
508476
509477 #ifdef CONFIG_PPC64
510
- vdso64_rt_sigtramp = find_function64(v64, "__kernel_sigtramp_rt64");
478
+ vdso64_rt_sigtramp = find_function64(v64, "__kernel_start_sigtramp_rt64");
511479 #endif
512480 vdso32_sigtramp = find_function32(v32, "__kernel_sigtramp32");
513481 vdso32_rt_sigtramp = find_function32(v32, "__kernel_sigtramp_rt32");
....@@ -671,15 +639,19 @@
671639 {
672640 unsigned int i;
673641 extern unsigned long *sys_call_table;
642
+#ifdef CONFIG_PPC64
643
+ extern unsigned long *compat_sys_call_table;
644
+#endif
674645 extern unsigned long sys_ni_syscall;
675646
676647
677648 for (i = 0; i < NR_syscalls; i++) {
678649 #ifdef CONFIG_PPC64
679
- if (sys_call_table[i*2] != sys_ni_syscall)
650
+ if (sys_call_table[i] != sys_ni_syscall)
680651 vdso_data->syscall_map_64[i >> 5] |=
681652 0x80000000UL >> (i & 0x1f);
682
- if (sys_call_table[i*2+1] != sys_ni_syscall)
653
+ if (IS_ENABLED(CONFIG_COMPAT) &&
654
+ compat_sys_call_table[i] != sys_ni_syscall)
683655 vdso_data->syscall_map_32[i >> 5] |=
684656 0x80000000UL >> (i & 0x1f);
685657 #else /* CONFIG_PPC64 */
....@@ -751,11 +723,6 @@
751723 */
752724 vdso64_pages = (&vdso64_end - &vdso64_start) >> PAGE_SHIFT;
753725 DBG("vdso64_kbase: %p, 0x%x pages\n", vdso64_kbase, vdso64_pages);
754
-#else
755
- vdso_data->dcache_block_size = L1_CACHE_BYTES;
756
- vdso_data->dcache_log_block_size = L1_CACHE_SHIFT;
757
- vdso_data->icache_block_size = L1_CACHE_BYTES;
758
- vdso_data->icache_log_block_size = L1_CACHE_SHIFT;
759726 #endif /* CONFIG_PPC64 */
760727
761728
....@@ -795,7 +762,6 @@
795762 BUG_ON(vdso32_pagelist == NULL);
796763 for (i = 0; i < vdso32_pages; i++) {
797764 struct page *pg = virt_to_page(vdso32_kbase + i*PAGE_SIZE);
798
- ClearPageReserved(pg);
799765 get_page(pg);
800766 vdso32_pagelist[i] = pg;
801767 }
....@@ -809,7 +775,6 @@
809775 BUG_ON(vdso64_pagelist == NULL);
810776 for (i = 0; i < vdso64_pages; i++) {
811777 struct page *pg = virt_to_page(vdso64_kbase + i*PAGE_SIZE);
812
- ClearPageReserved(pg);
813778 get_page(pg);
814779 vdso64_pagelist[i] = pg;
815780 }