1. 29 4月, 2009 1 次提交
    • S
      tracing: fix ref count in splice pages · 5beae6ef
      Steven Rostedt 提交于
      The pages allocated for the splice binary buffer did not initialize
      the ref count correctly. This caused pages not to be freed and causes
      a drastic memory leak.
      
      Thanks to logdev I was able to trace the tracer to find where the leak
      was.
      
      [ Impact: stop memory leak when using splice ]
      Signed-off-by: NSteven Rostedt <rostedt@goodmis.org>
      5beae6ef
  2. 28 4月, 2009 1 次提交
    • S
      tracing: convert ftrace_dump spinlocks to raw · cd891ae0
      Steven Rostedt 提交于
      ftrace_dump is used for printing out the contents of the ftrace ring buffer
      to the console on failure. Currently it uses a spinlock to synchronize
      the output from multiple failures on different CPUs. This spin lock
      currently is a normal spinlock and can cause issues with lockdep and
      lock tracing.
      
      This patch converts it to raw since it is for error handling only.
      The lock is local to the ftrace_dump and is not used by any other
      infrastructure.
      
      [ Impact: prevent ftrace_dump from locking up by internal tracing ]
      Signed-off-by: NSteven Rostedt <rostedt@goodmis.org>
      cd891ae0
  3. 26 4月, 2009 1 次提交
    • S
      tracing/events: make modules have their own file_operations structure · 701970b3
      Steven Rostedt 提交于
      For proper module reference counting, the file_operations that modules use
      must have the "owner" field set to the module. Unfortunately, the trace events
      use share file_operations. The same file_operations are used by all both
      kernel core and all modules.
      
      This patch makes the modules allocate their own file_operations and
      copies the functions from the core kernel. This allows those file
      operations to be owned by the module.
      
      Care is taken to free this code on module unload.
      
      Thanks to Greg KH for reminding me that file_operations must be owned
      by the module to have reference counting take place.
      
      [ Impact: fix modular tracepoints / potential crash ]
      Signed-off-by: NSteven Rostedt <rostedt@goodmis.org>
      Acked-by: NGreg Kroah-Hartman <gregkh@suse.de>
      701970b3
  4. 25 4月, 2009 1 次提交
    • S
      tracing/events: reuse trace event ids after overflow · 060fa5c8
      Steven Rostedt 提交于
      With modules being able to add trace events, and the max trace event
      counter is 16 bits (65536) we can overflow the counter easily
      with a simple while loop adding and removing modules that contain
      trace events.
      
      This patch links together the registered trace events and on overflow
      searches for available trace event ids. It will still fail if
      over 65536 events are registered, but considering that a typical
      kernel only has 22000 functions, 65000 events should be sufficient.
      Reported-by: NLi Zefan <lizf@cn.fujitsu.com>
      Signed-off-by: NSteven Rostedt <rostedt@goodmis.org>
      060fa5c8
  5. 24 4月, 2009 9 次提交
    • S
      tracing: remove deprecated TRACE_FORMAT · b8e65554
      Steven Rostedt 提交于
      The TRACE_FORMAT macro has been deprecated by the TRACE_EVENT macro.
      There are no more users. All new users must use the TRACE_EVENT macro.
      
      [ Impact: remove old functionality ]
      
      Cc: Peter Zijlstra <peterz@infradead.org>
      Signed-off-by: NSteven Rostedt <rostedt@goodmis.org>
      b8e65554
    • S
      tracing/irq: convert irq traces to use TRACE_EVENT macro · 160031b5
      Steven Rostedt 提交于
      The TRACE_FORMAT will soon be deprecated. This patch converts it to
      the TRACE_EVENT macro.
      
      Note, this change should also speed up the tracing.
      
      [ Impact: remove a user of deprecated TRACE_FORMAT ]
      
      Cc: Jason Baron <jbaron@redhat.com>
      Signed-off-by: NSteven Rostedt <rostedt@goodmis.org>
      160031b5
    • S
      tracing/lockdep: convert lockdep to use TRACE_EVENT macro · 39517091
      Steven Rostedt 提交于
      The TRACE_FORMAT will soon be deprecated. This patch converts it to
      the TRACE_EVENT macro.
      
      Note, this change should also speed up the tracing.
      
      [ Impact: remove a user of deprecated TRACE_FORMAT ]
      
      Cc: Peter Zijlstra <peterz@infradead.org>
      Signed-off-by: NSteven Rostedt <rostedt@goodmis.org>
      39517091
    • L
      ring_buffer: compressed event header · 334d4169
      Lai Jiangshan 提交于
      RB_MAX_SMALL_DATA = 28bytes is too small for most tracers, it wastes
      an 'u32' to save the actually length for events which data size > 28.
      
      This fix uses compressed event header and enlarges RB_MAX_SMALL_DATA.
      
      [ Impact: saves about 0%-12.5%(depends on tracer) memory in ring_buffer ]
      Signed-off-by: NLai Jiangshan <laijs@cn.fujitsu.com>
      LKML-Reference: <49F13189.3090000@cn.fujitsu.com>
      Signed-off-by: NSteven Rostedt <rostedt@goodmis.org>
      334d4169
    • S
      tracing: fix cut and paste macro error · c2518c43
      Steven Rostedt 提交于
      In case a module uses the TRACE_EVENT macro for creating automated
      events in ftrace, it may choose to use a different file name
      than the defined system name, or choose to use a different path than
      the default "include/trace/events" include path.
      
      If this is done, then before including trace/define_trace.h the
      header would define either "TRACE_INCLUDE_FILE" for the file
      name or "TRACE_INCLUDE_PATH" for the include path.
      
      If it does not define these, then the define_trace.h defines them
      instead. If define trace defines them, then define_trace.h should
      also undefine them before exiting. To do this a macro is used
      to note this:
      
       #ifndef TRACE_INCLUDE_FILE
       # define TRACE_INCLUDE_FILE TRACE_SYSTEM
       # define UNDEF_TRACE_INCLUDE_FILE
       #endif
      
      [...]
      
       #ifdef UNDEF_TRACE_INCLUDE_FILE
       # undef TRACE_INCLUDE_FILE
       # undef UNDEF_TRACE_INCLUDE_FILE
       #endif
      
      The UNDEF_TRACE_INCLUDE_FILE acts as a CPP variable to know to undef
      the TRACE_INCLUDE_FILE before leaving define_trace.h.
      
      Unfortunately, due to cut and paste errors, the macros between
      FILE and PATH got mixed up.
      
      [ Impact: undef TRACE_INCLUDE_FILE and/or TRACE_INCLUDE_PATH when needed ]
      Signed-off-by: NSteven Rostedt <rostedt@goodmis.org>
      c2518c43
    • C
      x86: use native register access for native tlb flushing · d7285c6b
      Chris Wright 提交于
      currently these are paravirtulaized, doesn't appear any callers rely on
      this (no pv_ops backends are using native_tlb and overriding cr3/4
      access).
      
      [ Impact: fix lockdep warning with paravirt and function tracer ]
      Signed-off-by: NChris Wright <chrisw@sous-sol.org>
      LKML-Reference: <20090423172138.GR3036@sequoia.sous-sol.org>
      Signed-off-by: NSteven Rostedt <rostedt@goodmis.org>
      d7285c6b
    • S
      tracing: add size checks for exported ftrace internal structures · 75db37d2
      Steven Rostedt 提交于
      The events exported by TRACE_EVENT are automated and are guaranteed
      to be correct when used.
      
      The internal ftrace structures on the other hand are more manually
      exported. These require the ftrace maintainer to make sure they
      are up to date.
      
      This patch adds a size check to help flag when a type changes in
      an internal ftrace data structure, and the update needs to be reflected
      in the export.
      
      If a export is incorrect, then the only harm is that the user space
      tools will not know how to correctly read the internal structures of
      ftrace.
      
      [ Impact: help prevent inconsistent ftrace format print outs ]
      Signed-off-by: NSteven Rostedt <srostedt@redhat.com>
      75db37d2
    • S
      tracing: increase size of number of possible events · 89ec0dee
      Steven Rostedt 提交于
      With the new event tracing registration, we must increase the number
      of events that can be registered. Currently the type field is only
      one byte, which leaves us only 256 possible events.
      
      Since we do not save the CPU number in the tracer anymore (it is determined
      by the per cpu ring buffer that is used) we have an extra byte to use.
      
      This patch increases the size of type from 1 byte (256 events) to
      2 bytes (65,536 events).
      
      It also adds a WARN_ON_ONCE if we exceed that limit.
      
      [ Impact: allow more than 255 events ]
      Signed-off-by: NSteven Rostedt <srostedt@redhat.com>
      89ec0dee
    • S
      tracing/wakeup: move access to wakeup_cpu into spinlock · 9be24414
      Steven Rostedt 提交于
      The code had the following outside the lock:
      
              if (next != wakeup_task)
                      return;
      
              pc = preempt_count();
      
              /* The task we are waiting for is waking up */
              data = wakeup_trace->data[wakeup_cpu];
      
      On initialization, wakeup_task is NULL and wakeup_cpu -1. This code
      is not under a lock. If wakeup_task is set on another CPU as that
      task is waking up, we can see the wakeup_task before wakeup_cpu is
      set. If we read wakeup_cpu while it is still -1 then we will have
      a bad data pointer.
      
      This patch moves the reading of wakeup_cpu within the protection of
      the spinlock used to protect the writing of wakeup_cpu and wakeup_task.
      
      [ Impact: remove possible race causing invalid pointer dereference ]
      Reported-by: NManeesh Soni <maneesh@in.ibm.com>
      Signed-off-by: NSteven Rostedt <srostedt@redhat.com>
      9be24414
  6. 22 4月, 2009 4 次提交
    • F
      tracing/events: protect __get_str() · 6a74aa40
      Frederic Weisbecker 提交于
      The __get_str() macro is used in a code part then its content should be
      protected with parenthesis.
      
      [ Impact: make macro definition more robust ]
      Reported-by: NSteven Rostedt <rostedt@goodmis.org>
      Signed-off-by: NFrederic Weisbecker <fweisbec@gmail.com>
      6a74aa40
    • F
      tracing/lock: provide lock_acquired event support for dynamic size string · 7e7ca9a2
      Frederic Weisbecker 提交于
      Now that we can support the dynamic sized string, make the lock tracing
      able to use it, making it safe against modules removal and consuming
      the right amount of memory needed for each lock name
      
      Changes in v2:
      adapt to the __ending_string() updates and the opening_string() removal.
      
      [ Impact: protect lock tracer against module removal ]
      Signed-off-by: NFrederic Weisbecker <fweisbec@gmail.com>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      7e7ca9a2
    • F
      tracing/events: provide string with undefined size support · 9cbf1176
      Frederic Weisbecker 提交于
      This patch provides the support for dynamic size strings on
      event tracing.
      
      The key concept is to use a structure with an ending char array field of
      undefined size and use such ability to allocate the minimal size on the
      ring buffer to make one or more string entries fit inside, as opposite
      to a fixed length strings with upper bound.
      
      The strings themselves are represented using fields which have an offset
      value from the beginning of the entry.
      
      This patch provides three new macros:
      
      __string(item, src)
      
      This one declares a string to the structure inside TP_STRUCT__entry.
      You need to provide the name of the string field and the source that will
      be copied inside.
      This will also add the dynamic size of the string needed for the ring
      buffer entry allocation.
      A stack allocated structure is used to temporarily store the offset
      of each strings, avoiding double calls to strlen() on each event
      insertion.
      
      __get_str(field)
      
      This one will give you a pointer to the string you have created. This
      is an abstract helper to resolve the absolute address given the field
      name which is a relative address from the beginning of the trace_structure.
      
      __assign_str(dst, src)
      
      Use this macro to automatically perform the string copy from src to
      dst. src must be a variable to assign and dst is the name of a __string
      field.
      
      Example on how to use it:
      
      TRACE_EVENT(my_event,
      	TP_PROTO(char *src1, char *src2),
      
      	TP_ARGS(src1, src2),
      	TP_STRUCT__entry(
      		__string(str1, src1)
      		__string(str2, src2)
      	),
      	TP_fast_assign(
      		__assign_str(str1, src1);
      		__assign_str(str2, src2);
      	),
      	TP_printk("%s %s", __get_str(src1), __get_str(src2))
      )
      
      Of course you can mix-up any __field or __array inside this
      TRACE_EVENT. The position of the __string or __assign_str
      doesn't matter.
      
      Changes in v2:
      
      Address the suggestion of Steven Rostedt: drop the opening_string() macro
      and redefine __ending_string() to get the size of the string to be copied
      instead of overwritting the whole ring buffer allocation.
      
      Changes in v3:
      
      Address other suggestions of Steven Rostedt and Peter Zijlstra with
      some changes: drop the __ending_string and the need to have only one
      string field.
      Use offsets instead of absolute addresses.
      
      [ Impact: allow more compact memory usage for string tracing ]
      Signed-off-by: NFrederic Weisbecker <fweisbec@gmail.com>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Cc: Li Zefan <lizf@cn.fujitsu.com>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      9cbf1176
    • L
      tracing/events: make struct trace_entry->type to be int type · 7a4f453b
      Li Zefan 提交于
      struct trace_entry->type is unsigned char, while trace event's id is
      int type, thus for a event with id >= 256, it's entry->type is cast
      to (id % 256), and then we can't see the trace output of this event.
      
       # insmod trace-events-sample.ko
       # echo foo_bar > /mnt/tracing/set_event
       # cat /debug/tracing/events/trace-events-sample/foo_bar/id
       256
       # cat /mnt/tracing/trace_pipe
                 <...>-3548  [001]   215.091142: Unknown type 0
                 <...>-3548  [001]   216.089207: Unknown type 0
                 <...>-3548  [001]   217.087271: Unknown type 0
                 <...>-3548  [001]   218.085332: Unknown type 0
      
      [ Impact: fix output for trace events with id >= 256 ]
      Signed-off-by: NLi Zefan <lizf@cn.fujitsu.com>
      Acked-by: NFrederic Weisbecker <fweisbec@gmail.com>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Cc: Tom Zanussi <tzanussi@gmail.com>
      LKML-Reference: <49EEDB0E.5070207@cn.fujitsu.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      7a4f453b
  7. 21 4月, 2009 9 次提交
    • S
      ring-buffer: only warn on wrap if buffer is bigger than two pages · 3554228d
      Steven Rostedt 提交于
      On boot up, to save memory, ftrace allocates the minimum buffer
      which is two pages. Ftrace also goes through a series of tests
      (when configured) on boot up. These tests can fill up a page within
      a single interrupt.
      
      The ring buffer also has a WARN_ON when it detects that the buffer was
      completely filled within a single commit (other commits are allowed to
      be nested).
      
      Combine the small buffer on start up, with the tests that can fill more
      than a single page within an interrupt, this can trigger the WARN_ON.
      
      This patch makes the WARN_ON only happen when the ring buffer consists
      of more than two pages.
      
      [ Impact: prevent false WARN_ON in ftrace startup tests ]
      Reported-by: NIngo Molnar <mingo@elte.hu>
      LKML-Reference: <20090421094616.GA14561@elte.hu>
      Signed-off-by: NSteven Rostedt <rostedt@goodmis.org>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      3554228d
    • L
      tracing/filters: allow user-input to be integer-like string · f66578a7
      Li Zefan 提交于
      Suppose we would like to trace all tasks named '123', but this
      will fail:
      
       # echo 'parent_comm == 123' > events/sched/sched_process_fork/filter
       bash: echo: write error: Invalid argument
      
      Don't guess the type of the filter pred in filter_parse(), but instead
      we check it in __filter_add_pred().
      
      [ Impact: extend allowed filter field string values ]
      Signed-off-by: NLi Zefan <lizf@cn.fujitsu.com>
      Cc: Tom Zanussi <tzanussi@gmail.com>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      LKML-Reference: <49ED8DEB.6000700@cn.fujitsu.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      f66578a7
    • L
      tracing/filters: don't remove old filters when failed to write subsys->filter · e8082f3f
      Li Zefan 提交于
      If writing subsys->filter returns EINVAL or ENOSPC, the original
      filters in subsys/ and subsys/events/ will be removed. This is
      definitely wrong.
      
      [ Impact: fix filter setting semantics on error condition ]
      Signed-off-by: NLi Zefan <lizf@cn.fujitsu.com>
      Cc: Tom Zanussi <tzanussi@gmail.com>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      LKML-Reference: <49ED8DD2.2070700@cn.fujitsu.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      e8082f3f
    • S
      tracing: use nowakeup version of commit for function event trace tests · cb4764a6
      Steven Rostedt 提交于
      The startup tests for the event tracer also runs with the function
      tracer enabled. The "wakeup" version of the trace commit was used
      which can grab spinlocks. If a task was preempted by an NMI
      that called a function being traced, it could deadlock due to the
      function tracer trying to grab the same lock.
      
      Thanks to Frederic Weisbecker for pointing out where the bug was.
      Reported-by: NIngo Molnar <mingo@elte.hu>
      Reported-by: NFrederic Weisbecker <fweisbec@gmail.com>
      Signed-off-by: NSteven Rostedt <rostedt@goodmis.org>
      cb4764a6
    • S
      tracing: use recursive counter over irq level · aa18efb2
      Steven Rostedt 提交于
      Althought using the irq level (hardirq_count, softirq_count and in_nmi)
      was nice to detect bad recursion right away, but since the counters are
      not atomically updated with respect to the interrupts, the function tracer
      might trigger the test from an interrupt handler before the hardirq_count
      is updated. This will trigger a false warning.
      
      This patch converts the recursive detection to a simple counter.
      If the depth is greater than 16 then the recursive detection will trigger.
      16 is more than enough for any nested interrupts.
      
      [ Impact: fix false positive trace recursion detection ]
      Signed-off-by: NSteven Rostedt <rostedt@goodmis.org>
      aa18efb2
    • S
      tracing: remove recursive test from ring_buffer_event_discard · e395898e
      Steven Rostedt 提交于
      The ring_buffer_event_discard is not tied to ring_buffer_lock_reserve.
      It can be called inside or outside the reserve/commit. Even if it
      is called inside the reserve/commit the commit part must also be called.
      
      Only ring_buffer_discard_commit can be used as a replacement for
      ring_buffer_unlock_commit.
      
      This patch removes the trace_recursive_unlock from ring_buffer_event_discard
      since it would be the wrong place to do so.
      
      [Impact: prevent breakage in trace recursive testing ]
      
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      Signed-off-by: NSteven Rostedt <rostedt@goodmis.org>
      e395898e
    • S
      tracing: fix recursive test level calculation · 17487bfe
      Steven Rostedt 提交于
      The recursive tests to detect same level recursion in the ring buffers
      did not account for the hard/softirq_counts to be shifted. Thus the
      numbers could be larger than then mask to be tested.
      
      This patch includes the shift for the calculation of the irq depth.
      
      [ Impact: stop false positives in trace recursion detection ]
      Signed-off-by: NSteven Rostedt <rostedt@goodmis.org>
      17487bfe
    • S
      tracing: remove dangling semicolon · 23de29de
      Steven Rostedt 提交于
      Due to a cut and paste error, the trace_seq_putc had a semicolon
      after the prototype but before the stub function when tracing is
      disabled.
      
      [Impact: fix compile error ]
      Signed-off-by: NSteven Rostedt <rostedt@goodmis.org>
      23de29de
    • S
      tracing/events: call the correct event trace selftest init function · 28d20e2d
      Steven Rostedt 提交于
      The late_initcall calls a helper function instead of the proper
      init event selftest function.
      
      This update may have been lost due to conflicting merges.
      
      [ Impact: fix compiler warning and call extended event trace self tests ]
      Signed-off-by: NSteven Rostedt <rostedt@goodmis.org>
      28d20e2d
  8. 20 4月, 2009 5 次提交
    • S
      tracing: rename EVENT_TRACER config to ENABLE_EVENT_TRACING · a7abe97f
      Steven Rostedt 提交于
      Currently we have two configs: EVENT_TRACING and EVENT_TRACER.
      All tracers enable EVENT_TRACING. The EVENT_TRACER is only a
      convenience to enable the EVENT_TRACING when no other tracers
      are enabled.
      
      The names EVENT_TRACER and EVENT_TRACING are too similar and confusing.
      This patch renames EVENT_TRACER to ENABLE_EVENT_TRACING to be more
      appropriate to what it actually does, as well as add a comment in
      the help menu to explain the option's purpose.
      
      [ Impact: rename config option to reduce confusion ]
      Reported-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NSteven Rostedt <rostedt@goodmis.org>
      a7abe97f
    • S
      tracing: create menuconfig for tracing infrastructure · 4ed9f071
      Steven Rostedt 提交于
      During testing we often use randconfig to test various kernels.
      The current configuration set up does not give an easy way to disable
      all tracing with a single config. The case where randconfig would
      test all tracing disabled is very unlikely.
      
      This patch adds a config option to enable or disable all tracing.
      It is hooked into the tracing menu just like other submenus are done.
      
      [ Impact: allow randconfig to easily produce all traces disabled ]
      Reported-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NSteven Rostedt <rostedt@goodmis.org>
      4ed9f071
    • S
      tracing: change branch profiling to a choice selection · 9ae5b879
      Steven Rostedt 提交于
      This patch makes the branch profiling into a choice selection:
      
        None               - no branch profiling
        likely/unlikely    - only profile likely/unlikely branches
        all                - profile all branches
      
      The all profiler will also enable the likely/unlikely branches.
      
      This does not change the way the profiler works or the dependencies
      between the profilers.
      
      What this patch does, is keep the branch profiling from being selected
      by an allyesconfig make. The branch profiler is very intrusive and
      it is known to break various architecture builds when selected as an
      allyesconfig.
      
      [ Impact: prevent branch profiler from being selected in allyesconfig ]
      Reported-by: NHeiko Carstens <heiko.carstens@de.ibm.com>
      Reported-by: NAl Viro <viro@zeniv.linux.org.uk>
      Reported-by: NStephen Rothwell <sfr@canb.auug.org.au>
      Reported-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NSteven Rostedt <rostedt@goodmis.org>
      9ae5b879
    • F
      tracing/ring-buffer: Add unlock recursion protection on discard · f3b9aae1
      Frederic Weisbecker 提交于
      The pair of helpers trace_recursive_lock() and trace_recursive_unlock()
      have been introduced recently to provide generic tracing recursion
      protection.
      
      They are used in a symetric way:
      
       - trace_recursive_lock() on buffer reserve
       - trace_recursive_unlock() on buffer commit
      
      However sometimes, we don't commit but discard on entry
      to the buffer, ie: in case of filter checking.
      
      Then we must also unlock the recursion protection on discard time,
      otherwise the tracing gets definitely deactivated and a warning
      is raised spuriously, such as:
      
      111.119821] ------------[ cut here ]------------
      [  111.119829] WARNING: at kernel/trace/ring_buffer.c:1498 ring_buffer_lock_reserve+0x1b7/0x1d0()
      [  111.119835] Hardware name: AMILO Li 2727
      [  111.119839] Modules linked in:
      [  111.119846] Pid: 5731, comm: Xorg Tainted: G        W  2.6.30-rc1 #69
      [  111.119851] Call Trace:
      [  111.119863]  [<ffffffff8025ce68>] warn_slowpath+0xd8/0x130
      [  111.119873]  [<ffffffff8028a30f>] ? __lock_acquire+0x19f/0x1ae0
      [  111.119882]  [<ffffffff8028a30f>] ? __lock_acquire+0x19f/0x1ae0
      [  111.119891]  [<ffffffff802199b0>] ? native_sched_clock+0x20/0x70
      [  111.119899]  [<ffffffff80286dee>] ? put_lock_stats+0xe/0x30
      [  111.119906]  [<ffffffff80286eb8>] ? lock_release_holdtime+0xa8/0x150
      [  111.119913]  [<ffffffff802c8ae7>] ring_buffer_lock_reserve+0x1b7/0x1d0
      [  111.119921]  [<ffffffff802cd110>] trace_buffer_lock_reserve+0x30/0x70
      [  111.119930]  [<ffffffff802ce000>] trace_current_buffer_lock_reserve+0x20/0x30
      [  111.119939]  [<ffffffff802474e8>] ftrace_raw_event_sched_switch+0x58/0x100
      [  111.119948]  [<ffffffff808103b7>] __schedule+0x3a7/0x4cd
      [  111.119957]  [<ffffffff80211b56>] ? ftrace_call+0x5/0x2b
      [  111.119964]  [<ffffffff80211b56>] ? ftrace_call+0x5/0x2b
      [  111.119971]  [<ffffffff80810c08>] schedule+0x18/0x40
      [  111.119977]  [<ffffffff80810e09>] preempt_schedule+0x39/0x60
      [  111.119985]  [<ffffffff80813bd3>] _read_unlock+0x53/0x60
      [  111.119993]  [<ffffffff807259d2>] sock_def_readable+0x72/0x80
      [  111.120002]  [<ffffffff807ad5ed>] unix_stream_sendmsg+0x24d/0x3d0
      [  111.120011]  [<ffffffff807219a3>] sock_aio_write+0x143/0x160
      [  111.120019]  [<ffffffff80211b56>] ? ftrace_call+0x5/0x2b
      [  111.120026]  [<ffffffff80721860>] ? sock_aio_write+0x0/0x160
      [  111.120033]  [<ffffffff80721860>] ? sock_aio_write+0x0/0x160
      [  111.120042]  [<ffffffff8031c283>] do_sync_readv_writev+0xf3/0x140
      [  111.120049]  [<ffffffff80211b56>] ? ftrace_call+0x5/0x2b
      [  111.120057]  [<ffffffff80276ff0>] ? autoremove_wake_function+0x0/0x40
      [  111.120067]  [<ffffffff8045d489>] ? cap_file_permission+0x9/0x10
      [  111.120074]  [<ffffffff8045c1e6>] ? security_file_permission+0x16/0x20
      [  111.120082]  [<ffffffff8031cab4>] do_readv_writev+0xd4/0x1f0
      [  111.120089]  [<ffffffff80211b56>] ? ftrace_call+0x5/0x2b
      [  111.120097]  [<ffffffff80211b56>] ? ftrace_call+0x5/0x2b
      [  111.120105]  [<ffffffff8031cc18>] vfs_writev+0x48/0x70
      [  111.120111]  [<ffffffff8031cd65>] sys_writev+0x55/0xc0
      [  111.120119]  [<ffffffff80211e32>] system_call_fastpath+0x16/0x1b
      [  111.120125] ---[ end trace 15605f4e98d5ccb5 ]---
      
      [ Impact: fix spurious warning triggering tracing shutdown ]
      Signed-off-by: NFrederic Weisbecker <fweisbec@gmail.com>
      f3b9aae1
    • F
      tracing/core: Add current context on tracing recursion warning · e057a5e5
      Frederic Weisbecker 提交于
      In case of tracing recursion detection, we only get the stacktrace.
      But the current context may be very useful to debug the issue.
      
      This patch adds the softirq/hardirq/nmi context with the warning
      using lockdep context display to have a familiar output.
      
      v2: Use printk_once()
      v3: drop {hardirq,softirq}_context which depend on lockdep,
          only keep what is part of current->trace_recursion,
          sufficient to debug the warning source.
      
      [ Impact: print context necessary to debug recursion ]
      Signed-off-by: NFrederic Weisbecker <fweisbec@gmail.com>
      e057a5e5
  9. 18 4月, 2009 8 次提交
  10. 17 4月, 2009 1 次提交