hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
kernel/arch/powerpc/include/asm/sections.h
....@@ -5,7 +5,21 @@
55
66 #include <linux/elf.h>
77 #include <linux/uaccess.h>
8
+
9
+#define arch_is_kernel_initmem_freed arch_is_kernel_initmem_freed
10
+
811 #include <asm-generic/sections.h>
12
+
13
+extern bool init_mem_is_free;
14
+
15
+static inline int arch_is_kernel_initmem_freed(unsigned long addr)
16
+{
17
+ if (!init_mem_is_free)
18
+ return 0;
19
+
20
+ return addr >= (unsigned long)__init_begin &&
21
+ addr < (unsigned long)__init_end;
22
+}
923
1024 extern char __head_end[];
1125
....@@ -16,6 +30,13 @@
1630
1731 extern char __prom_init_toc_start[];
1832 extern char __prom_init_toc_end[];
33
+
34
+#ifdef CONFIG_PPC_POWERNV
35
+extern char start_real_trampolines[];
36
+extern char end_real_trampolines[];
37
+extern char start_virt_trampolines[];
38
+extern char end_virt_trampolines[];
39
+#endif
1940
2041 static inline int in_kernel_text(unsigned long addr)
2142 {
....@@ -54,17 +75,6 @@
5475 (unsigned long)_stext < end;
5576 }
5677
57
-static inline int overlaps_kvm_tmp(unsigned long start, unsigned long end)
58
-{
59
-#ifdef CONFIG_KVM_GUEST
60
- extern char kvm_tmp[];
61
- return start < (unsigned long)kvm_tmp &&
62
- (unsigned long)&kvm_tmp[1024 * 1024] < end;
63
-#else
64
- return 0;
65
-#endif
66
-}
67
-
6878 #ifdef PPC64_ELF_ABI_v1
6979
7080 #define HAVE_DEREFERENCE_FUNCTION_DESCRIPTOR 1
....@@ -75,7 +85,7 @@
7585 struct ppc64_opd_entry *desc = ptr;
7686 void *p;
7787
78
- if (!probe_kernel_address(&desc->funcaddr, p))
88
+ if (!get_kernel_nofault(p, (void *)&desc->funcaddr))
7989 ptr = p;
8090 return ptr;
8191 }