1. 21 6月, 2021 18 次提交
  2. 20 6月, 2021 17 次提交
  3. 17 6月, 2021 3 次提交
    • M
      Merge branch 'topic/ppc-kvm' into next · 3c536423
      Michael Ellerman 提交于
      Merge some powerpc KVM patches from our topic branch.
      
      In particular this brings in Nick's big series rewriting parts of the
      guest entry/exit path in C.
      
      Conflicts:
      	arch/powerpc/kernel/security.c
      	arch/powerpc/kvm/book3s_hv_rmhandlers.S
      3c536423
    • A
      powerpc/mm/book3s64: Fix possible build error · 07d8ad6f
      Aneesh Kumar K.V 提交于
      Update _tlbiel_pid() such that we can avoid build errors like below when
      using this function in other places.
      
      arch/powerpc/mm/book3s64/radix_tlb.c: In function ‘__radix__flush_tlb_range_psize’:
      arch/powerpc/mm/book3s64/radix_tlb.c:114:2: warning: ‘asm’ operand 3 probably does not match constraints
        114 |  asm volatile(PPC_TLBIEL(%0, %4, %3, %2, %1)
            |  ^~~
      arch/powerpc/mm/book3s64/radix_tlb.c:114:2: error: impossible constraint in ‘asm’
      make[4]: *** [scripts/Makefile.build:271: arch/powerpc/mm/book3s64/radix_tlb.o] Error 1
      m
      
      With this fix, we can also drop the __always_inline in __radix_flush_tlb_range_psize
      which was added by commit e12d6d7d ("powerpc/mm/radix: mark __radix__flush_tlb_range_psize() as __always_inline")
      Signed-off-by: NAneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
      Reviewed-by: NChristophe Leroy <christophe.leroy@csgroup.eu>
      Acked-by: NMichael Ellerman <mpe@ellerman.id.au>
      Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20210610083639.387365-1-aneesh.kumar@linux.ibm.com
      07d8ad6f
    • M
      powerpc/signal64: Don't read sigaction arguments back from user memory · a3309226
      Michael Ellerman 提交于
      When delivering a signal to a sigaction style handler (SA_SIGINFO), we
      pass pointers to the siginfo and ucontext via r4 and r5.
      
      Currently we populate the values in those registers by reading the
      pointers out of the sigframe in user memory, even though the values in
      user memory were written by the kernel just prior:
      
        unsafe_put_user(&frame->info, &frame->pinfo, badframe_block);
        unsafe_put_user(&frame->uc, &frame->puc, badframe_block);
        ...
        if (ksig->ka.sa.sa_flags & SA_SIGINFO) {
        	err |= get_user(regs->gpr[4], (unsigned long __user *)&frame->pinfo);
        	err |= get_user(regs->gpr[5], (unsigned long __user *)&frame->puc);
      
      ie. we write &frame->info into frame->pinfo, and then read frame->pinfo
      back into r4, and similarly for &frame->uc.
      
      The code has always been like this, since linux-fullhistory commit
      d4f2d95eca2c ("Forward port of 2.4 ppc64 signal changes.").
      
      There's no reason for us to read the values back from user memory,
      rather than just setting the value in the gpr[4/5] directly. In fact
      reading the value back from user memory opens up the possibility of
      another user thread changing the values before we read them back.
      Although any process doing that would be racing against the kernel
      delivering the signal, and would risk corrupting the stack, so that
      would be a userspace bug.
      
      Note that this is 64-bit only code, so there's no subtlety with the size
      of pointers differing between kernel and user. Also the frame variable
      is not modified to point elsewhere during the function.
      
      In the past reading the values back from user memory was not costly, but
      now that we have KUAP on some CPUs it is, so we'd rather avoid it for
      that reason too.
      
      So change the code to just set the values directly, using the same
      values we have written to the sigframe previously in the function.
      
      Note also that this matches what our 32-bit signal code does.
      
      Using a version of will-it-scale's signal1_threads that sets SA_SIGINFO,
      this results in a ~4% increase in signals per second on a Power9, from
      229,777 to 239,766.
      Reviewed-by: NNicholas Piggin <npiggin@gmail.com>
      Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20210610072949.3198522-1-mpe@ellerman.id.au
      a3309226
  4. 16 6月, 2021 2 次提交