Merge tag 'powerpc-5.13-6' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux

Pull powerpc fixes from Michael Ellerman:
"Fix initrd corruption caused by our recent change to use relative jump
labels.

Fix a crash using perf record on systems without a hardware PMU
backend.

Rework our 64-bit signal handling slighty to make it more closely
match the old behaviour, after the recent change to use unsafe user
accessors.

Thanks to Anastasia Kovaleva, Athira Rajeev, Christophe Leroy, Daniel
Axtens, Greg Kurz, and Roman Bolshakov"

* tag 'powerpc-5.13-6' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux:
powerpc/perf: Fix crash in perf_instruction_pointer() when ppmu is not set
powerpc: Fix initrd corruption with relative jump labels
powerpc/signal64: Copy siginfo before changing regs->nip
powerpc/mem: Add back missing header to fix 'no previous prototype' error

+7 -7
+1 -1
arch/powerpc/include/asm/jump_label.h
··· 50 1098: nop; \ 51 .pushsection __jump_table, "aw"; \ 52 .long 1098b - ., LABEL - .; \ 53 - FTR_ENTRY_LONG KEY; \ 54 .popsection 55 #endif 56
··· 50 1098: nop; \ 51 .pushsection __jump_table, "aw"; \ 52 .long 1098b - ., LABEL - .; \ 53 + FTR_ENTRY_LONG KEY - .; \ 54 .popsection 55 #endif 56
+4 -5
arch/powerpc/kernel/signal_64.c
··· 902 unsafe_copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set), badframe_block); 903 user_write_access_end(); 904 905 /* Make sure signal handler doesn't get spurious FP exceptions */ 906 tsk->thread.fp_state.fpscr = 0; 907 ··· 918 goto badframe; 919 regs->nip = (unsigned long) &frame->tramp[0]; 920 } 921 - 922 - 923 - /* Save the siginfo outside of the unsafe block. */ 924 - if (copy_siginfo_to_user(&frame->info, &ksig->info)) 925 - goto badframe; 926 927 /* Allocate a dummy caller frame for the signal handler. */ 928 newsp = ((unsigned long)frame) - __SIGNAL_FRAMESIZE;
··· 902 unsafe_copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set), badframe_block); 903 user_write_access_end(); 904 905 + /* Save the siginfo outside of the unsafe block. */ 906 + if (copy_siginfo_to_user(&frame->info, &ksig->info)) 907 + goto badframe; 908 + 909 /* Make sure signal handler doesn't get spurious FP exceptions */ 910 tsk->thread.fp_state.fpscr = 0; 911 ··· 914 goto badframe; 915 regs->nip = (unsigned long) &frame->tramp[0]; 916 } 917 918 /* Allocate a dummy caller frame for the signal handler. */ 919 newsp = ((unsigned long)frame) - __SIGNAL_FRAMESIZE;
+1
arch/powerpc/mm/mem.c
··· 20 #include <asm/machdep.h> 21 #include <asm/rtas.h> 22 #include <asm/kasan.h> 23 #include <asm/svm.h> 24 25 #include <mm/mmu_decl.h>
··· 20 #include <asm/machdep.h> 21 #include <asm/rtas.h> 22 #include <asm/kasan.h> 23 + #include <asm/sparsemem.h> 24 #include <asm/svm.h> 25 26 #include <mm/mmu_decl.h>
+1 -1
arch/powerpc/perf/core-book3s.c
··· 2254 bool use_siar = regs_use_siar(regs); 2255 unsigned long siar = mfspr(SPRN_SIAR); 2256 2257 - if (ppmu->flags & PPMU_P10_DD1) { 2258 if (siar) 2259 return siar; 2260 else
··· 2254 bool use_siar = regs_use_siar(regs); 2255 unsigned long siar = mfspr(SPRN_SIAR); 2256 2257 + if (ppmu && (ppmu->flags & PPMU_P10_DD1)) { 2258 if (siar) 2259 return siar; 2260 else