1. 18 7月, 2016 1 次提交
  2. 28 6月, 2016 1 次提交
  3. 13 6月, 2016 1 次提交
    • M
      s390/mm: simplify the TLB flushing code · 64f31d58
      Martin Schwidefsky 提交于
      ptep_flush_lazy and pmdp_flush_lazy use mm->context.attach_count to
      decide between a lazy TLB flush vs an immediate TLB flush. The field
      contains two 16-bit counters, the number of CPUs that have the mm
      attached and can create TLB entries for it and the number of CPUs in
      the middle of a page table update.
      
      The __tlb_flush_asce, ptep_flush_direct and pmdp_flush_direct functions
      use the attach counter and a mask check with mm_cpumask(mm) to decide
      between a local flush local of the current CPU and a global flush.
      
      For all these functions the decision between lazy vs immediate and
      local vs global TLB flush can be based on CPU masks. There are two
      masks:  the mm->context.cpu_attach_mask with the CPUs that are actively
      using the mm, and the mm_cpumask(mm) with the CPUs that have used the
      mm since the last full flush. The decision between lazy vs immediate
      flush is based on the mm->context.cpu_attach_mask, to decide between
      local vs global flush the mm_cpumask(mm) is used.
      
      With this patch all checks will use the CPU masks, the old counter
      mm->context.attach_count with its two 16-bit values is turned into a
      single counter mm->context.flush_count that keeps track of the number
      of CPUs with incomplete page table updates. The sole user of this
      counter is finish_arch_post_lock_switch() which waits for the end of
      all page table updates.
      Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
      64f31d58
  4. 06 5月, 2016 1 次提交
  5. 02 3月, 2016 1 次提交
    • T
      arch/hotplug: Call into idle with a proper state · fc6d73d6
      Thomas Gleixner 提交于
      Let the non boot cpus call into idle with the corresponding hotplug state, so
      the hotplug core can handle the further bringup. That's a first step to
      convert the boot side of the hotplugged cpus to do all the synchronization
      with the other side through the state machine. For now it'll only start the
      hotplug thread and kick the full bringup of the cpu.
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      Cc: linux-arch@vger.kernel.org
      Cc: Rik van Riel <riel@redhat.com>
      Cc: Rafael Wysocki <rafael.j.wysocki@intel.com>
      Cc: "Srivatsa S. Bhat" <srivatsa@mit.edu>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Arjan van de Ven <arjan@linux.intel.com>
      Cc: Sebastian Siewior <bigeasy@linutronix.de>
      Cc: Rusty Russell <rusty@rustcorp.com.au>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Cc: Oleg Nesterov <oleg@redhat.com>
      Cc: Tejun Heo <tj@kernel.org>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      Cc: Paul McKenney <paulmck@linux.vnet.ibm.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Paul Turner <pjt@google.com>
      Link: http://lkml.kernel.org/r/20160226182341.614102639@linutronix.deSigned-off-by: NThomas Gleixner <tglx@linutronix.de>
      fc6d73d6
  6. 19 1月, 2016 1 次提交
  7. 11 1月, 2016 1 次提交
  8. 18 12月, 2015 1 次提交
  9. 27 11月, 2015 5 次提交
  10. 14 10月, 2015 3 次提交
  11. 29 7月, 2015 1 次提交
  12. 29 6月, 2015 1 次提交
  13. 25 6月, 2015 3 次提交
    • M
      s390/kdump: fix nosmt kernel parameter · 1592a8e4
      Michael Holzheu 提交于
      It turned out that SIGP set-multi-threading can only be done once.
      Therefore switching to a different MT level after switching to
      sclp.mtid_prev in the dump case fails.
      
      As a symptom specifying the "nosmt" parameter currently fails for
      the kdump kernel and the kernel starts with multi-threading enabled.
      
      So fix this and issue diag 308 subcode 1 call after collecting the
      CPU states for the dump. Also enhance the diag308_reset() function to
      be usable also with enabled lowcore protection and prefix register != 0.
      After the reset it is possible to switch the MT level again. We have
      to do the reset very early in order not to kill the already initialized
      console. Therefore instead of kmalloc() the corresponding memblock
      functions have to be used. To avoid copying the sclp cpu code into
      sclp_early, we now use the simple sigp loop method for CPU detection.
      Signed-off-by: NMichael Holzheu <holzheu@linux.vnet.ibm.com>
      Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
      1592a8e4
    • M
      s390/smp: cleanup core vs. cpu in the SCLP interface · d08d9430
      Martin Schwidefsky 提交于
      The SCLP interface to query, configure and deconfigure CPUs actually
      operates on cores. For a machine without the multi-threading faciltiy
      a CPU and a core are equivalent but starting with System z13 a core
      can have multiple hardware threads, also referred to as logical CPUs.
      
      To avoid confusion replace the word 'cpu' with 'core' in the SCLP
      interface. Also replace MAX_CPU_ADDRESS with SCLP_MAX_CORES.
      The core-id is an 8-bit field, the maximum thread id is in the range
      0-31. The theoretical limit for the CPU address is therefore 8191.
      Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
      d08d9430
    • M
      s390/smp: fix sigp cpu detection loop · e7086eb1
      Martin Schwidefsky 提交于
      On a (theoretical) system where the read-cpu-info SCLP command does
      not work but SMT is enabled, the sigp detection loop may not find
      all configured cores. The maximum CPU address needs to be shifted
      with smp_cpu_mt_shift.
      Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
      e7086eb1
  14. 13 5月, 2015 3 次提交
  15. 13 4月, 2015 1 次提交
  16. 25 3月, 2015 1 次提交
    • H
      s390: remove 31 bit support · 5a79859a
      Heiko Carstens 提交于
      Remove the 31 bit support in order to reduce maintenance cost and
      effectively remove dead code. Since a couple of years there is no
      distribution left that comes with a 31 bit kernel.
      
      The 31 bit kernel also has been broken since more than a year before
      anybody noticed. In addition I added a removal warning to the kernel
      shown at ipl for 5 minutes: a960062e ("s390: add 31 bit warning
      message") which let everybody know about the plan to remove 31 bit
      code. We didn't get any response.
      
      Given that the last 31 bit only machine was introduced in 1999 let's
      remove the code.
      Anybody with 31 bit user space code can still use the compat mode.
      Signed-off-by: NHeiko Carstens <heiko.carstens@de.ibm.com>
      Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
      5a79859a
  17. 12 2月, 2015 1 次提交
  18. 22 1月, 2015 2 次提交
    • P
      s390/smp: remove check for CONFIG_ZFCPDUMP · 032f1be0
      Paul Bolle 提交于
      Commit 725908110a1f ("s390: add SMT support") added a check for
      CONFIG_ZFCPDUMP. But the Kconfig symbol ZFCPDUMP was removed in v3.16
      through commit bf28a597 ("s390/dump: Remove CONFIG_ZFCPDUMP"). So
      this check will always evaluate to false. No one noticed probably
      because the code also checks for CONFIG_CRASH_DUMP which "also enables
      s390 zfcpdump".
      
      Dump the unneeded check.
      Signed-off-by: NPaul Bolle <pebolle@tiscali.nl>
      Signed-off-by: NHeiko Carstens <heiko.carstens@de.ibm.com>
      Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
      032f1be0
    • M
      s390: add SMT support · 10ad34bc
      Martin Schwidefsky 提交于
      The multi-threading facility is introduced with the z13 processor family.
      This patch adds code to detect the multi-threading facility. With the
      facility enabled each core will surface multiple hardware threads to the
      system. Each hardware threads looks like a normal CPU to the operating
      system with all its registers and properties.
      
      The SCLP interface reports the SMT topology indirectly via the maximum
      thread id. Each reported CPU in the result of a read-scp-information
      is a core representing a number of hardware threads.
      
      To reflect the reduced CPU capacity if two hardware threads run on a
      single core the MT utilization counter set is used to normalize the
      raw cputime obtained by the CPU timer deltas. This scaled cputime is
      reported via the taskstats interface. The normal /proc/stat numbers
      are based on the raw cputime and are not affected by the normalization.
      Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
      10ad34bc
  19. 27 10月, 2014 1 次提交
    • H
      s390/ftrace,kprobes: allow to patch first instruction · c933146a
      Heiko Carstens 提交于
      If the function tracer is enabled, allow to set kprobes on the first
      instruction of a function (which is the function trace caller):
      
      If no kprobe is set handling of enabling and disabling function tracing
      of a function simply patches the first instruction. Either it is a nop
      (right now it's an unconditional branch, which skips the mcount block),
      or it's a branch to the ftrace_caller() function.
      
      If a kprobe is being placed on a function tracer calling instruction
      we encode if we actually have a nop or branch in the remaining bytes
      after the breakpoint instruction (illegal opcode).
      This is possible, since the size of the instruction used for the nop
      and branch is six bytes, while the size of the breakpoint is only
      two bytes.
      Therefore the first two bytes contain the illegal opcode and the last
      four bytes contain either "0" for nop or "1" for branch. The kprobes
      code will then execute/simulate the correct instruction.
      
      Instruction patching for kprobes and function tracer is always done
      with stop_machine(). Therefore we don't have any races where an
      instruction is patched concurrently on a different cpu.
      Besides that also the program check handler which executes the function
      trace caller instruction won't be executed concurrently to any
      stop_machine() execution.
      
      This allows to keep full fault based kprobes handling which generates
      correct pt_regs contents automatically.
      Signed-off-by: NHeiko Carstens <heiko.carstens@de.ibm.com>
      Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
      c933146a
  20. 09 10月, 2014 4 次提交
    • M
      s390/kdump: add support for vector extension · a62bc073
      Michael Holzheu 提交于
      With this patch for kdump the s390 vector registers are stored into the
      prepared save areas in the old kernel and into the REGSET_VX_LOW and
      REGSET_VX_HIGH ELF notes for /proc/vmcore in the new kernel.
      
      The NT_S390_VXRS_LOW note contains the lower halves of the first 16 vector
      registers 0-15. The higher halves are stored in the floating point register
      ELF note.  The NT_S390_VXRS_HIGH contains the full vector registers 16-31.
      
      The kernel provides a save area for storing vector register in case of
      machine checks. A pointer to this save are is stored in the CPU lowcore
      at offset 0x11b0. This save area is also used to save the registers for
      kdump. In case of a dumped crashed kdump those areas are used to extract
      the registers of the production system.
      
      The vector registers for remote CPUs are stored using the "store additional
      status at address" SIGP. For the dump CPU the vector registers are stored
      with the VSTM instruction.
      
      With this patch also zfcpdump stores the vector registers.
      Reviewed-by: NHeiko Carstens <heiko.carstens@de.ibm.com>
      Signed-off-by: NMichael Holzheu <holzheu@linux.vnet.ibm.com>
      Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
      a62bc073
    • M
      s390: add support for vector extension · 80703617
      Martin Schwidefsky 提交于
      The vector extension introduces 32 128-bit vector registers and a set of
      instruction to operate on the vector registers.
      
      The kernel can control the use of vector registers for the problem state
      program with a bit in control register 0. Once enabled for a process the
      kernel needs to retain the content of the vector registers on context
      switch. The signal frame is extended to include the vector registers.
      Two new register sets NT_S390_VXRS_LOW and NT_S390_VXRS_HIGH are added
      to the regset interface for the debugger and core dumps.
      Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
      80703617
    • M
      s390/idle: consolidate idle functions and definitions · b5f87f15
      Martin Schwidefsky 提交于
      Move the C functions and definitions related to the idle state handling
      to arch/s390/include/asm/idle.h and arch/s390/kernel/idle.c. The function
      s390_get_idle_time is renamed to arch_cpu_idle_time and vtime_stop_cpu to
      enabled_wait.
      Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
      b5f87f15
    • M
      s390/nohz: use a per-cpu flag for arch_needs_cpu · fe0f4976
      Martin Schwidefsky 提交于
      Move the nohz_delay bit from the s390_idle data structure to the
      per-cpu flags. Clear the nohz delay flag in __cpu_disable and
      remove the cpu hotplug notifier that used to do this.
      Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
      fe0f4976
  21. 25 9月, 2014 1 次提交
  22. 20 5月, 2014 3 次提交
  23. 09 4月, 2014 1 次提交
    • H
      s390/smp: fix smp_stop_cpu() for !CONFIG_SMP · e7c46c66
      Heiko Carstens 提交于
      smp_stop_cpu() should stop the current cpu even for !CONFIG_SMP.
      Otherwise machine_halt() will return and and the machine generates a
      panic instread of simply stopping the current cpu:
      
      Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000000
      
      CPU: 0 PID: 1 Comm: systemd-shutdow Not tainted 3.14.0-01527-g2b6ef16a6bc5 #10
      [...]
      Call Trace:
      ([<0000000000110db0>] show_trace+0xf8/0x158)
       [<0000000000110e7a>] show_stack+0x6a/0xe8
       [<000000000074dba8>] panic+0xe4/0x268
       [<0000000000140570>] do_exit+0xa88/0xb2c
       [<000000000016e12c>] SyS_reboot+0x1f0/0x234
       [<000000000075da70>] sysc_nr_ok+0x22/0x28
       [<000000007d5a09b4>] 0x7d5a09b4
      Signed-off-by: NHeiko Carstens <heiko.carstens@de.ibm.com>
      Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
      e7c46c66
  24. 03 4月, 2014 1 次提交
    • M
      s390/mm,tlb: optimize TLB flushing for zEC12 · 1b948d6c
      Martin Schwidefsky 提交于
      The zEC12 machines introduced the local-clearing control for the IDTE
      and IPTE instruction. If the control is set only the TLB of the local
      CPU is cleared of entries, either all entries of a single address space
      for IDTE, or the entry for a single page-table entry for IPTE.
      Without the local-clearing control the TLB flush is broadcasted to all
      CPUs in the configuration, which is expensive.
      
      The reset of the bit mask of the CPUs that need flushing after a
      non-local IDTE is tricky. As TLB entries for an address space remain
      in the TLB even if the address space is detached a new bit field is
      required to keep track of attached CPUs vs. CPUs in the need of a
      flush. After a non-local flush with IDTE the bit-field of attached CPUs
      is copied to the bit-field of CPUs in need of a flush. The ordering
      of operations on cpu_attach_mask, attach_count and mm_cpumask(mm) is
      such that an underindication in mm_cpumask(mm) is prevented but an
      overindication in mm_cpumask(mm) is possible.
      Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
      1b948d6c