Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'parisc-for-6.8-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux

Pull parisc architecture fixes from Helge Deller:
"Fixes CPU hotplug, the parisc stack unwinder and two possible build
errors in kprobes and ftrace area:

- Fix CPU hotplug

- Fix unaligned accesses and faults in stack unwinder

- Fix potential build errors by always including asm-generic/kprobes.h

- Fix build bug by add missing CONFIG_DYNAMIC_FTRACE check"

* tag 'parisc-for-6.8-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux:
parisc: Fix stack unwinder
parisc/kprobes: always include asm-generic/kprobes.h
parisc/ftrace: add missing CONFIG_DYNAMIC_FTRACE check
Revert "parisc: Only list existing CPUs in cpu_possible_mask"

+9 -18
+2 -1
arch/parisc/include/asm/kprobes.h
··· 10 10 #ifndef _PARISC_KPROBES_H 11 11 #define _PARISC_KPROBES_H 12 12 13 + #include <asm-generic/kprobes.h> 14 + 13 15 #ifdef CONFIG_KPROBES 14 16 15 - #include <asm-generic/kprobes.h> 16 17 #include <linux/types.h> 17 18 #include <linux/ptrace.h> 18 19 #include <linux/notifier.h>
+1 -1
arch/parisc/kernel/ftrace.c
··· 78 78 #endif 79 79 } 80 80 81 - #ifdef CONFIG_FUNCTION_GRAPH_TRACER 81 + #if defined(CONFIG_DYNAMIC_FTRACE) && defined(CONFIG_FUNCTION_GRAPH_TRACER) 82 82 int ftrace_enable_ftrace_graph_caller(void) 83 83 { 84 84 static_key_enable(&ftrace_graph_enable.key);
-8
arch/parisc/kernel/processor.c
··· 172 172 p->cpu_num = cpu_info.cpu_num; 173 173 p->cpu_loc = cpu_info.cpu_loc; 174 174 175 - set_cpu_possible(cpuid, true); 176 175 store_cpu_topology(cpuid); 177 176 178 177 #ifdef CONFIG_SMP ··· 473 474 */ 474 475 void __init processor_init(void) 475 476 { 476 - unsigned int cpu; 477 - 478 477 reset_cpu_topology(); 479 - 480 - /* reset possible mask. We will mark those which are possible. */ 481 - for_each_possible_cpu(cpu) 482 - set_cpu_possible(cpu, false); 483 - 484 478 register_parisc_driver(&cpu_driver); 485 479 }
+6 -8
arch/parisc/kernel/unwind.c
··· 228 228 #ifdef CONFIG_IRQSTACKS 229 229 extern void * const _call_on_stack; 230 230 #endif /* CONFIG_IRQSTACKS */ 231 - void *ptr; 232 231 233 - ptr = dereference_kernel_function_descriptor(&handle_interruption); 234 - if (pc_is_kernel_fn(pc, ptr)) { 232 + if (pc_is_kernel_fn(pc, handle_interruption)) { 235 233 struct pt_regs *regs = (struct pt_regs *)(info->sp - frame_size - PT_SZ_ALGN); 236 234 dbg("Unwinding through handle_interruption()\n"); 237 235 info->prev_sp = regs->gr[30]; ··· 237 239 return 1; 238 240 } 239 241 240 - if (pc_is_kernel_fn(pc, ret_from_kernel_thread) || 241 - pc_is_kernel_fn(pc, syscall_exit)) { 242 + if (pc == (unsigned long)&ret_from_kernel_thread || 243 + pc == (unsigned long)&syscall_exit) { 242 244 info->prev_sp = info->prev_ip = 0; 243 245 return 1; 244 246 } 245 247 246 - if (pc_is_kernel_fn(pc, intr_return)) { 248 + if (pc == (unsigned long)&intr_return) { 247 249 struct pt_regs *regs; 248 250 249 251 dbg("Found intr_return()\n"); ··· 255 257 } 256 258 257 259 if (pc_is_kernel_fn(pc, _switch_to) || 258 - pc_is_kernel_fn(pc, _switch_to_ret)) { 260 + pc == (unsigned long)&_switch_to_ret) { 259 261 info->prev_sp = info->sp - CALLEE_SAVE_FRAME_SIZE; 260 262 info->prev_ip = *(unsigned long *)(info->prev_sp - RP_OFFSET); 261 263 return 1; 262 264 } 263 265 264 266 #ifdef CONFIG_IRQSTACKS 265 - if (pc_is_kernel_fn(pc, _call_on_stack)) { 267 + if (pc == (unsigned long)&_call_on_stack) { 266 268 info->prev_sp = *(unsigned long *)(info->sp - FRAME_SIZE - REG_SZ); 267 269 info->prev_ip = *(unsigned long *)(info->sp - FRAME_SIZE - RP_OFFSET); 268 270 return 1;