]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
Merge tag 'powerpc-6.13-1' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc...
authorLinus Torvalds <torvalds@linux-foundation.org>
Sat, 23 Nov 2024 18:44:31 +0000 (10:44 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 23 Nov 2024 18:44:31 +0000 (10:44 -0800)
Pull powerpc updates from Michael Ellerman:

 - Rework kfence support for the HPT MMU to work on systems with >= 16TB
   of RAM.

 - Remove the powerpc "maple" platform, used by the "Yellow Dog
   Powerstation".

 - Add support for DYNAMIC_FTRACE_WITH_CALL_OPS,
   DYNAMIC_FTRACE_WITH_DIRECT_CALLS & BPF Trampolines.

 - Add support for running KVM nested guests on Power11.

 - Other small features, cleanups and fixes.

Thanks to Amit Machhiwal, Arnd Bergmann, Christophe Leroy, Costa
Shulyupin, David Hunter, David Wang, Disha Goel, Gautam Menghani, Geert
Uytterhoeven, Hari Bathini, Julia Lawall, Kajol Jain, Keith Packard,
Lukas Bulwahn, Madhavan Srinivasan, Markus Elfring, Michal Suchanek,
Ming Lei, Mukesh Kumar Chaurasiya, Nathan Chancellor, Naveen N Rao,
Nicholas Piggin, Nysal Jan K.A, Paulo Miguel Almeida, Pavithra Prakash,
Ritesh Harjani (IBM), Rob Herring (Arm), Sachin P Bappalige, Shen
Lichuan, Simon Horman, Sourabh Jain, Thomas Weißschuh, Thorsten Blum,
Thorsten Leemhuis, Venkat Rao Bagalkote, Zhang Zekun, and zhang jiao.

* tag 'powerpc-6.13-1' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux: (89 commits)
  EDAC/powerpc: Remove PPC_MAPLE drivers
  powerpc/perf: Add per-task/process monitoring to vpa_pmu driver
  powerpc/kvm: Add vpa latency counters to kvm_vcpu_arch
  docs: ABI: sysfs-bus-event_source-devices-vpa-pmu: Document sysfs event format entries for vpa_pmu
  powerpc/perf: Add perf interface to expose vpa counters
  MAINTAINERS: powerpc: Mark Maddy as "M"
  powerpc/Makefile: Allow overriding CPP
  powerpc-km82xx.c: replace of_node_put() with __free
  ps3: Correct some typos in comments
  powerpc/kexec: Fix return of uninitialized variable
  macintosh: Use common error handling code in via_pmu_led_init()
  powerpc/powermac: Use of_property_match_string() in pmac_has_backlight_type()
  powerpc: remove dead config options for MPC85xx platform support
  powerpc/xive: Use cpumask_intersects()
  selftests/powerpc: Remove the path after initialization.
  powerpc/xmon: symbol lookup length fixed
  powerpc/ep8248e: Use %pa to format resource_size_t
  powerpc/ps3: Reorganize kerneldoc parameter names
  KVM: PPC: Book3S HV: Fix kmv -> kvm typo
  powerpc/sstep: make emulate_vsx_load and emulate_vsx_store static
  ...

19 files changed:
1  2 
MAINTAINERS
arch/Kconfig
arch/powerpc/Kconfig
arch/powerpc/include/asm/ftrace.h
arch/powerpc/include/asm/vdso_datapage.h
arch/powerpc/kernel/kprobes.c
arch/powerpc/kernel/module_64.c
arch/powerpc/kernel/prom.c
arch/powerpc/kernel/setup-common.c
arch/powerpc/kernel/setup_64.c
arch/powerpc/kernel/trace/ftrace.c
arch/powerpc/kernel/trace/ftrace_64_pg.c
arch/powerpc/kernel/vdso.c
arch/powerpc/kvm/book3s_hv.c
arch/powerpc/mm/book3s64/hash_utils.c
arch/powerpc/net/bpf_jit_comp.c
arch/powerpc/platforms/pseries/svm.c
arch/powerpc/xmon/xmon.c
drivers/cpufreq/Makefile

diff --cc MAINTAINERS
Simple merge
diff --cc arch/Kconfig
Simple merge
Simple merge
index 0edfb874eb02baa15eb8a9b9a20b24f8cc1ac961,5eb7631355a16b66c5ee5260ff001087650e4ef4..db481b336bca44774ab45ab5fd298e576ddcdcde
@@@ -110,8 -134,36 +113,36 @@@ static inline u8 this_cpu_get_ftrace_en
  
  #ifdef CONFIG_FUNCTION_TRACER
  extern unsigned int ftrace_tramp_text[], ftrace_tramp_init[];
+ #ifdef CONFIG_PPC_FTRACE_OUT_OF_LINE
+ struct ftrace_ool_stub {
+ #ifdef CONFIG_DYNAMIC_FTRACE_WITH_CALL_OPS
+       struct ftrace_ops *ftrace_op;
+ #endif
+       u32     insn[4];
+ } __aligned(sizeof(unsigned long));
+ extern struct ftrace_ool_stub ftrace_ool_stub_text_end[], ftrace_ool_stub_text[],
+                             ftrace_ool_stub_inittext[];
+ extern unsigned int ftrace_ool_stub_text_end_count, ftrace_ool_stub_text_count,
+                   ftrace_ool_stub_inittext_count;
+ #endif
  void ftrace_free_init_tramp(void);
  unsigned long ftrace_call_adjust(unsigned long addr);
 -      struct pt_regs *regs = &fregs->regs;
+ #ifdef CONFIG_DYNAMIC_FTRACE_WITH_DIRECT_CALLS
+ /*
+  * When an ftrace registered caller is tracing a function that is also set by a
+  * register_ftrace_direct() call, it needs to be differentiated in the
+  * ftrace_caller trampoline so that the direct call can be invoked after the
+  * other ftrace ops. To do this, place the direct caller in the orig_gpr3 field
+  * of pt_regs. This tells ftrace_caller that there's a direct caller.
+  */
+ static inline void arch_ftrace_set_direct_caller(struct ftrace_regs *fregs, unsigned long addr)
+ {
++      struct pt_regs *regs = &arch_ftrace_regs(fregs)->regs;
+       regs->orig_gpr3 = addr;
+ }
+ #endif /* CONFIG_DYNAMIC_FTRACE_WITH_DIRECT_CALLS */
  #else
  static inline void ftrace_free_init_tramp(void) { }
  static inline unsigned long ftrace_call_adjust(unsigned long addr) { return addr; }
index a9686310be2cb8c8229d67fed31f332d04919557,33069afccb3c6d520ab04b48114d9ac1d8772d45..a202f5b63479533a7f45a74df015feb59f3d7c87
@@@ -34,12 -89,16 +35,13 @@@ struct vdso_arch_data 
  
  #else /* CONFIG_PPC64 */
  
 -/*
 - * And here is the simpler 32 bits version
 - */
  struct vdso_arch_data {
 -      __u64 tb_ticks_per_sec;         /* Timebase tics / sec          0x38 */
 +      __u64 tb_ticks_per_sec;         /* Timebase tics / sec */
        __u32 syscall_map[SYSCALL_MAP_SIZE]; /* Map of syscalls */
        __u32 compat_syscall_map[0];    /* No compat syscalls on PPC32 */
-       struct vdso_data data[CS_BASES];
        struct vdso_rng_data rng_data;
+       struct vdso_data data[CS_BASES] __aligned(1 << CONFIG_PAGE_SHIFT);
  };
  
  #endif /* CONFIG_PPC64 */
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index ad8dc4ccdaab9e1a83104dd92ce9ac389d8c129c,d8938fdf1936252bf3d6cd8d5461d4d6ab458410..25429905ae90f31d4932d4e8d5506d6bb636f576
@@@ -4898,21 -4950,8 +4950,20 @@@ int kvmhv_run_single_vcpu(struct kvm_vc
                                                           BOOK3S_INTERRUPT_EXTERNAL, 0);
                        else
                                lpcr |= LPCR_MER;
 +              } else {
 +                      /*
 +                       * L1's copy of L2's LPCR (vcpu->arch.vcore->lpcr) can get its MER bit
 +                       * unexpectedly set - for e.g. during NMI handling when all register
 +                       * states are synchronized from L0 to L1. L1 needs to inform L0 about
 +                       * MER=1 only when there are pending external interrupts.
 +                       * In the above if check, MER bit is set if there are pending
 +                       * external interrupts. Hence, explicity mask off MER bit
 +                       * here as otherwise it may generate spurious interrupts in L2 KVM
 +                       * causing an endless loop, which results in L2 guest getting hung.
 +                       */
 +                      lpcr &= ~LPCR_MER;
                }
        } else if (vcpu->arch.pending_exceptions ||
-                  vcpu->arch.doorbell_request ||
                   xive_interrupt_pending(vcpu)) {
                vcpu->arch.ret = RESUME_HOST;
                goto out;
Simple merge
Simple merge
index 384c9dc1899abd34448535bda4e2697cd39132d5,10b8eb6bff393e3a81fe54de3dd7ec3f7705a4de..c5d0f92c7969996d49ebbac5fb2f22c69feb4f38
@@@ -8,8 -8,8 +8,9 @@@
  
  #include <linux/mm.h>
  #include <linux/memblock.h>
 +#include <linux/mem_encrypt.h>
  #include <linux/cc_platform.h>
+ #include <linux/mem_encrypt.h>
  #include <asm/machdep.h>
  #include <asm/svm.h>
  #include <asm/swiotlb.h>
Simple merge
Simple merge