1. 09 10月, 2014 1 次提交
  2. 09 9月, 2014 3 次提交
    • H
      s390/ftrace: optimize mcount code · 3d1e220d
      Heiko Carstens 提交于
      Reduce the number of executed instructions within the mcount block if
      function tracing is enabled. We achieve that by using a non-standard
      C function call ABI. Since the called function is also written in
      assembler this is not a problem.
      This also allows to replace the unconditional store at the beginning
      of the mcount block with a larl instruction, which doesn't touch
      memory.
      
      In theory we could also patch the first instruction of the mcount block
      to enable and disable function tracing. However this would break kprobes.
      This could be fixed with implementing the "kprobes_on_ftrace" feature;
      however keeping the odd jprobes working seems not to be possible without
      a lot of code churn. Therefore keep the code easy and simply accept one
      wasted 1-cycle "larl" instruction per function prologue.
      Signed-off-by: NHeiko Carstens <heiko.carstens@de.ibm.com>
      Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
      3d1e220d
    • H
      s390/ftrace: add HAVE_DYNAMIC_FTRACE_WITH_REGS support · 10dec7db
      Heiko Carstens 提交于
      This code is based on a patch from Vojtech Pavlik.
      http://marc.info/?l=linux-s390&m=140438885114413&w=2
      
      The actual implementation now differs significantly:
      Instead of adding a second function "ftrace_regs_caller" which would be nearly
      identical to the existing ftrace_caller function, the current ftrace_caller
      function is now an alias to ftrace_regs_caller and always passes the needed
      pt_regs structure and function_trace_op parameters unconditionally.
      
      Besides that also use asm offsets to correctly allocate and access the new
      struct pt_regs on the stack.
      
      While at it we can make use of new instruction to get rid of some indirect
      loads if compiled for new machines.
      
      The passed struct pt_regs can be changed by the called function and it's new
      contents will replace the current contents.
      
      Note: to change the return address the embedded psw member of the pt_regs
      structure must be changed. The psw member is right now incomplete, since
      the mask part is missing. For all current use cases this should be sufficent.
      Providing and restoring a sane mask would mean we need to add an epsw/lpswe
      pair to the mcount code. Only these two instruction would cost us ~120 cycles
      which currently seems not necessary.
      
      Cc: Vojtech Pavlik <vojtech@suse.cz>
      Cc: Jiri Kosina <jkosina@suse.cz>
      Cc: Jiri Slaby <jslaby@suse.cz>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Signed-off-by: NHeiko Carstens <heiko.carstens@de.ibm.com>
      Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
      10dec7db
    • H
      s390/ftrace: optimize function graph caller code · 2481a87b
      Heiko Carstens 提交于
      When the function graph tracer is disabled we can skip three additional
      instructions. So let's just do this.
      
      So if function tracing is enabled but function graph tracing is
      runtime disabled, we get away with a single unconditional branch.
      Signed-off-by: NHeiko Carstens <heiko.carstens@de.ibm.com>
      Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
      2481a87b
  3. 15 5月, 2013 1 次提交
    • H
      s390/ftrace: fix mcount adjustment · aca91209
      Heiko Carstens 提交于
      Tony Jones reported that the ftrace self tests on s390 do not work:
      
      <6>Testing dynamic ftrace ops #1: (0 0 0 0 0) FAILED!
      <6>Testing tracer irqsoff:
      <3>failed to start irqsoff tracer
      <4>.. no entries found ..FAILED!
      <6>Testing tracer wakeup:
      <3>failed to start wakeup tracer
      <4>.. no entries found ..FAILED!
      <6>Testing tracer function_graph:
      <4>Failed to init function_graph tracer, init returned -19
      <4>FAILED!
      
      This happens because we forgot to adjust the instruction pointer that gets
      passed to the ftrace trace function by MCOUNT_INSN_SIZE.
      
      In addition change MCOUNT_INSN_SIZE to the correct value on 31 bit.
      It only worked so far because the to be patched instruction was identical.
      Reported-by: NTony Jones <tonyj@suse.com>
      Signed-off-by: NHeiko Carstens <heiko.carstens@de.ibm.com>
      Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
      aca91209
  4. 17 5月, 2011 2 次提交
  5. 05 1月, 2011 1 次提交
  6. 12 6月, 2009 2 次提交
  7. 25 12月, 2008 1 次提交