1. 28 Jan, 2018 6 commits
  2. 27 Jan, 2018 18 commits
  3. 24 Jan, 2018 11 commits
  4. 23 Jan, 2018 1 commit
    • Nicholas Piggin's avatar
      powerpc/64s: Improve RFI L1-D cache flush fallback · bdcb1aef
      Nicholas Piggin authored
      The fallback RFI flush is used when firmware does not provide a way
      to flush the cache. It's a "displacement flush" that evicts useful
      data by displacing it with an uninteresting buffer.
      
      The flush has to take care to work with implementation specific cache
      replacment policies, so the recipe has been in flux. The initial
      slow but conservative approach is to touch all lines of a congruence
      class, with dependencies between each load. It has since been
      determined that a linear pattern of loads without dependencies is
      sufficient, and is significantly faster.
      
      Measuring the speed of a null syscall with RFI fallback flush enabled
      gives the relative improvement:
      
      P8 - 1.83x
      P9 - 1.75x
      
      The flush also becomes simpler and more adaptable to different cache
      geometries.
      Signed-off-by: default avatarNicholas Piggin <npiggin@gmail.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      bdcb1aef
  5. 22 Jan, 2018 1 commit
    • Nicholas Piggin's avatar
      powerpc/pseries, ps3: panic flush kernel messages before halting system · 35adacd6
      Nicholas Piggin authored
      Platforms with a panic handler that halts the system can have problems
      getting kernel messages out, because the panic notifiers are called
      before kernel/panic.c does its flushing of printk buffers an console
      etc.
      
      This was attempted to be solved with commit a3b2cb30 ("powerpc: Do
      not call ppc_md.panic in fadump panic notifier"), but that wasn't the
      right approach and caused other problems, and was reverted by commit
      ab9dbf77.
      
      Instead, the powernv shutdown paths have already had a similar
      problem, fixed by taking the message flushing sequence from
      kernel/panic.c. That's a little bit ugly, but while we have the code
      duplicated, it will work for this case as well. So have ppc panic
      handlers do the same flushing before they terminate.
      
      Without this patch, a qemu pseries_le_defconfig guest stops silently
      when issued the nmi command when xmon is off and no crash dumpers
      enabled. Afterwards, an oops is printed by each CPU as expected.
      
      Fixes: ab9dbf77 ("Revert "powerpc: Do not call ppc_md.panic in fadump panic notifier"")
      Signed-off-by: default avatarNicholas Piggin <npiggin@gmail.com>
      Reviewed-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      35adacd6
  6. 21 Jan, 2018 3 commits
    • Gustavo Romero's avatar
      powerpc/selftests: Check endianness on trap in TM · a08082f8
      Gustavo Romero authored
      Add a selftest to check if endianness is flipped inadvertently to BE
      (MSR.LE set to zero) on BE and LE machines when a trap is caught in
      transactional mode and load_fp and load_vec are zero, i.e. when MSR.FP
      and MSR.VEC are zeroed (disabled).
      Signed-off-by: default avatarGustavo Romero <gromero@linux.vnet.ibm.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      a08082f8
    • Gustavo Romero's avatar
      powerpc/tm: Fix endianness flip on trap · 1c200e63
      Gustavo Romero authored
      Currently it's possible that a thread on PPC64 LE has its endianness
      flipped inadvertently to Big-Endian resulting in a crash once the process
      is back from the signal handler.
      
      If giveup_all() is called when regs->msr has the bits MSR.FP and MSR.VEC
      disabled (and hence MSR.VSX disabled too) it returns without calling
      check_if_tm_restore_required() which copies regs->msr to ckpt_regs->msr if
      the process caught a signal whilst in transactional mode. Then once in
      setup_tm_sigcontexts() MSR from ckpt_regs.msr is used, but since
      check_if_tm_restore_required() was not called previuosly, gp_regs[PT_MSR]
      gets a copy of invalid MSR bits as MSR in ckpt_regs was not updated from
      regs->msr and so is zeroed. Later when leaving the signal handler once in
      sys_rt_sigreturn() the TS bits of gp_regs[PT_MSR] are checked to determine
      if restore_tm_sigcontexts() must be called to pull in the correct MSR state
      into the user context. Because TS bits are zeroed
      restore_tm_sigcontexts() is never called and MSR restored from the user
      context on returning from the signal handler has the MSR.LE (the endianness
      bit) forced to zero (Big-Endian). That leads, for instance, to 'nop' being
      treated as an illegal instruction in the following sequence:
      
      	tbegin.
      	beq	1f
      	trap
      	tend.
      1:	nop
      
      on PPC64 LE machines and the process dies just after returning from the
      signal handler.
      
      PPC64 BE is also affected but in a subtle way since forcing Big-Endian on
      a BE machine does not change the endianness.
      
      This commit fixes the issue described above by ensuring that once in
      setup_tm_sigcontexts() the MSR used is from regs->msr instead of from
      ckpt_regs->msr and by ensuring that we pull in only the MSR.FP, MSR.VEC,
      and MSR.VSX bits from ckpt_regs->msr.
      
      The fix was tested both on LE and BE machines and no regression regarding
      the powerpc/tm selftests was observed.
      Signed-off-by: default avatarGustavo Romero <gromero@linux.vnet.ibm.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      1c200e63
    • Anton Blanchard's avatar
      powerpc: Expose TSCR via sysfs · b6d34eb4
      Anton Blanchard authored
      The thread switch control register (TSCR) is a per core register
      that configures how the CPU shares resources between SMT threads.
      
      Exposing it via sysfs allows us to tune it at run time.
      Signed-off-by: default avatarAnton Blanchard <anton@samba.org>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      b6d34eb4