1. 28 Jan, 2018 3 commits
    • Michael Ellerman's avatar
      powerpc/watchdog: regs can't be null in soft_nmi_interrupt() · 3ba45b7e
      Michael Ellerman authored
      soft_nmi_interrupt() is called directly from the asm exception
      handling code, which passes regs as a pointer to the stack. So regs
      can't be NULL, it may be full of junk, but that's a separate problem.
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      3ba45b7e
    • Michael Ellerman's avatar
      powerpc/watchdog: Tweak watchdog printks · d8fa82e0
      Michael Ellerman authored
      Use pr_fmt() in the watchdog code, so we don't have to say "Watchdog"
      so many times.
      
      Rather than "CPU:%d" just spell it "CPU %d", "Hard" doesn't need a
      capital in the middle of a sentence, and "LOCKUP other CPUS" should be
      "LOCKUP on other CPUS".
      
      Also make it clear when a CPU self detects a lockup by spelling it
      out.
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      d8fa82e0
    • Michael Ellerman's avatar
      powerpc/cell: Remove axonram driver · 1d65b1c8
      Michael Ellerman authored
      The QS21/22 IBM Cell blades had a southbridge chip called Axon. This
      could have DDR DIMMs attached to it, though they were not directly
      usable as RAM, instead they could be used as some sort of buffer, if
      applications were written specifically to use the block device
      provided by the driver.
      
      Although the driver supposedly had direct access support, it was
      apparently never tested (see commit 91117a20 ("axonram: Fix bug in
      direct_access")).
      
      These machines have not been available for over 5 years, and were
      never widely in use. It seems highly unlikely anyone is using this
      driver.
      
      In general we're happy to leave old drivers in the tree, but because
      DAX is involved this driver is caught up in the ongoing work in that
      area, but none of the DAX folks are able to test it.
      
      So remove the driver, if any one *is* using it, we'll be happy to put
      it back.
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      1d65b1c8
  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 6 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
    • Mahesh Salgaonkar's avatar
      powerpc/radix: Remove trace_tlbie call from radix__flush_tlb_all · 8d81296c
      Mahesh Salgaonkar authored
      radix__flush_tlb_all() is called only in kexec path in real mode and any
      tracepoints at this stage will make kexec to fail if enabled.
      
      To verify enable tlbie trace before kexec.
      
      $ echo 1 > /sys/kernel/debug/tracing/events/powerpc/tlbie/enable
      == kexec into new kernel and kexec fails.
      
      Fix this by not calling trace_tlbie from radix__flush_tlb_all().
      
      Fixes: 0428491c ("powerpc/mm: Trace tlbie(l) instructions")
      Cc: stable@vger.kernel.org # v4.13+
      Signed-off-by: default avatarMahesh Salgaonkar <mahesh@linux.vnet.ibm.com>
      Acked-by: default avatarBalbir Singh <bsingharora@gmail.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      8d81296c
    • Guilherme G. Piccoli's avatar
      powerpc/powernv: Add ppc_pci_reset_phbs parameter to issue a PHB reset · 45baee14
      Guilherme G. Piccoli authored
      During a kdump kernel boot in PowerPC, we request a reset of the PHBs
      to the FW. It makes sense, since if we are booting a kdump kernel it
      means we had some trouble before and we cannot rely in the adapters'
      health; they could be in a bad state, hence the reset is needed.
      
      But this reset is useful not only in kdump - there are situations,
      specially when debugging drivers, that we could break an adapter in
      a way it requires such reset. One can tell to just go ahead and
      reboot the machine, but happens that many times doing kexec is much
      faster, and so preferable than a full power cycle.
      
      This patch adds the ppc_pci_reset_phbs parameter to perform such reset.
      Signed-off-by: default avatarGuilherme G. Piccoli <gpiccoli@linux.vnet.ibm.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      45baee14
    • David Gibson's avatar
      powerpc/pseries: Don't give a warning when HPT resizing isn't available · 7339390d
      David Gibson authored
      As of 438cc81a "powerpc/pseries: Automatically resize HPT for memory hot
      add/remove" when running on the pseries platform, we always attempt to
      use the PAPR extension to resize the hashed page table (HPT) when we add
      or remove memory.
      
      This is fine, but when the extension is available we'll give a harmless,
      but scary warning.  This patch suppresses the warning in this case.  It
      will still warn if the feature is supposed to be available, but didn't
      work.
      Signed-off-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      7339390d