[RESEND,v2] tracing: Rename stacktrace field to common_stacktrace

Message ID 20230523230913.6860e28d@rorschach.local.home
State New
Headers
Series [RESEND,v2] tracing: Rename stacktrace field to common_stacktrace |

Commit Message

Steven Rostedt May 24, 2023, 3:09 a.m. UTC
  From: "Steven Rostedt (Google)" <rostedt@goodmis.org>

The histogram and synthetic events can use a pseudo event called
"stacktrace" that will create a stacktrace at the time of the event and
use it just like it was a normal field. We have other pseudo events such
as "common_cpu" and "common_timestamp". To stay consistent with that,
convert "stacktrace" to "common_stacktrace". As this was used in older
kernels, to keep backward compatibility, this will act just like
"common_cpu" did with "cpu". That is, "cpu" will be the same as
"common_cpu" unless the event has a "cpu" field. In which case, the
event's field is used. The same is true with "stacktrace".

Also update the documentation to reflect this change.

Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
---
Resending to get rid of the junk I left at the top the first time.

Changes since v1: https://lore.kernel.org/linux-trace-kernel/20230523221108.064a5d82@rorschach.local.home/
 - Update the tracefs README to use common_stacktrace instead of
   just stacktrace

 Documentation/trace/histogram.rst | 64 +++++++++++++++----------------
 include/linux/trace_events.h      |  1 +
 kernel/trace/trace.c              |  2 +-
 kernel/trace/trace_events.c       |  2 +
 kernel/trace/trace_events_hist.c  | 16 +++++---
 5 files changed, 46 insertions(+), 39 deletions(-)
  

Comments

Masami Hiramatsu (Google) May 25, 2023, 2:23 a.m. UTC | #1
On Tue, 23 May 2023 23:09:13 -0400
Steven Rostedt <rostedt@goodmis.org> wrote:

> From: "Steven Rostedt (Google)" <rostedt@goodmis.org>
> 
> The histogram and synthetic events can use a pseudo event called
> "stacktrace" that will create a stacktrace at the time of the event and
> use it just like it was a normal field. We have other pseudo events such
> as "common_cpu" and "common_timestamp". To stay consistent with that,
> convert "stacktrace" to "common_stacktrace". As this was used in older
> kernels, to keep backward compatibility, this will act just like
> "common_cpu" did with "cpu". That is, "cpu" will be the same as
> "common_cpu" unless the event has a "cpu" field. In which case, the
> event's field is used. The same is true with "stacktrace".
> 
> Also update the documentation to reflect this change.
> 

Looks good to me.

Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>

Thanks,

> Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
> ---
> Resending to get rid of the junk I left at the top the first time.
> 
> Changes since v1: https://lore.kernel.org/linux-trace-kernel/20230523221108.064a5d82@rorschach.local.home/
>  - Update the tracefs README to use common_stacktrace instead of
>    just stacktrace
> 
>  Documentation/trace/histogram.rst | 64 +++++++++++++++----------------
>  include/linux/trace_events.h      |  1 +
>  kernel/trace/trace.c              |  2 +-
>  kernel/trace/trace_events.c       |  2 +
>  kernel/trace/trace_events_hist.c  | 16 +++++---
>  5 files changed, 46 insertions(+), 39 deletions(-)
> 
> diff --git a/Documentation/trace/histogram.rst b/Documentation/trace/histogram.rst
> index 479c9eac6335..3c9b263de9c2 100644
> --- a/Documentation/trace/histogram.rst
> +++ b/Documentation/trace/histogram.rst
> @@ -35,7 +35,7 @@ Documentation written by Tom Zanussi
>    in place of an explicit value field - this is simply a count of
>    event hits.  If 'values' isn't specified, an implicit 'hitcount'
>    value will be automatically created and used as the only value.
> -  Keys can be any field, or the special string 'stacktrace', which
> +  Keys can be any field, or the special string 'common_stacktrace', which
>    will use the event's kernel stacktrace as the key.  The keywords
>    'keys' or 'key' can be used to specify keys, and the keywords
>    'values', 'vals', or 'val' can be used to specify values.  Compound
> @@ -54,7 +54,7 @@ Documentation written by Tom Zanussi
>    'compatible' if the fields named in the trigger share the same
>    number and type of fields and those fields also have the same names.
>    Note that any two events always share the compatible 'hitcount' and
> -  'stacktrace' fields and can therefore be combined using those
> +  'common_stacktrace' fields and can therefore be combined using those
>    fields, however pointless that may be.
>  
>    'hist' triggers add a 'hist' file to each event's subdirectory.
> @@ -547,9 +547,9 @@ Extended error information
>    the hist trigger display symbolic call_sites, we can have the hist
>    trigger additionally display the complete set of kernel stack traces
>    that led to each call_site.  To do that, we simply use the special
> -  value 'stacktrace' for the key parameter::
> +  value 'common_stacktrace' for the key parameter::
>  
> -    # echo 'hist:keys=stacktrace:values=bytes_req,bytes_alloc:sort=bytes_alloc' > \
> +    # echo 'hist:keys=common_stacktrace:values=bytes_req,bytes_alloc:sort=bytes_alloc' > \
>             /sys/kernel/tracing/events/kmem/kmalloc/trigger
>  
>    The above trigger will use the kernel stack trace in effect when an
> @@ -561,9 +561,9 @@ Extended error information
>    every callpath to a kmalloc for a kernel compile)::
>  
>      # cat /sys/kernel/tracing/events/kmem/kmalloc/hist
> -    # trigger info: hist:keys=stacktrace:vals=bytes_req,bytes_alloc:sort=bytes_alloc:size=2048 [active]
> +    # trigger info: hist:keys=common_stacktrace:vals=bytes_req,bytes_alloc:sort=bytes_alloc:size=2048 [active]
>  
> -    { stacktrace:
> +    { common_stacktrace:
>           __kmalloc_track_caller+0x10b/0x1a0
>           kmemdup+0x20/0x50
>           hidraw_report_event+0x8a/0x120 [hid]
> @@ -581,7 +581,7 @@ Extended error information
>           cpu_startup_entry+0x315/0x3e0
>           rest_init+0x7c/0x80
>      } hitcount:          3  bytes_req:         21  bytes_alloc:         24
> -    { stacktrace:
> +    { common_stacktrace:
>           __kmalloc_track_caller+0x10b/0x1a0
>           kmemdup+0x20/0x50
>           hidraw_report_event+0x8a/0x120 [hid]
> @@ -596,7 +596,7 @@ Extended error information
>           do_IRQ+0x5a/0xf0
>           ret_from_intr+0x0/0x30
>      } hitcount:          3  bytes_req:         21  bytes_alloc:         24
> -    { stacktrace:
> +    { common_stacktrace:
>           kmem_cache_alloc_trace+0xeb/0x150
>           aa_alloc_task_context+0x27/0x40
>           apparmor_cred_prepare+0x1f/0x50
> @@ -608,7 +608,7 @@ Extended error information
>      .
>      .
>      .
> -    { stacktrace:
> +    { common_stacktrace:
>           __kmalloc+0x11b/0x1b0
>           i915_gem_execbuffer2+0x6c/0x2c0 [i915]
>           drm_ioctl+0x349/0x670 [drm]
> @@ -616,7 +616,7 @@ Extended error information
>           SyS_ioctl+0x81/0xa0
>           system_call_fastpath+0x12/0x6a
>      } hitcount:      17726  bytes_req:   13944120  bytes_alloc:   19593808
> -    { stacktrace:
> +    { common_stacktrace:
>           __kmalloc+0x11b/0x1b0
>           load_elf_phdrs+0x76/0xa0
>           load_elf_binary+0x102/0x1650
> @@ -625,7 +625,7 @@ Extended error information
>           SyS_execve+0x3a/0x50
>           return_from_execve+0x0/0x23
>      } hitcount:      33348  bytes_req:   17152128  bytes_alloc:   20226048
> -    { stacktrace:
> +    { common_stacktrace:
>           kmem_cache_alloc_trace+0xeb/0x150
>           apparmor_file_alloc_security+0x27/0x40
>           security_file_alloc+0x16/0x20
> @@ -636,7 +636,7 @@ Extended error information
>           SyS_open+0x1e/0x20
>           system_call_fastpath+0x12/0x6a
>      } hitcount:    4766422  bytes_req:    9532844  bytes_alloc:   38131376
> -    { stacktrace:
> +    { common_stacktrace:
>           __kmalloc+0x11b/0x1b0
>           seq_buf_alloc+0x1b/0x50
>           seq_read+0x2cc/0x370
> @@ -1026,7 +1026,7 @@ Extended error information
>    First we set up an initially paused stacktrace trigger on the
>    netif_receive_skb event::
>  
> -    # echo 'hist:key=stacktrace:vals=len:pause' > \
> +    # echo 'hist:key=common_stacktrace:vals=len:pause' > \
>             /sys/kernel/tracing/events/net/netif_receive_skb/trigger
>  
>    Next, we set up an 'enable_hist' trigger on the sched_process_exec
> @@ -1060,9 +1060,9 @@ Extended error information
>      $ wget https://www.kernel.org/pub/linux/kernel/v3.x/patch-3.19.xz
>  
>      # cat /sys/kernel/tracing/events/net/netif_receive_skb/hist
> -    # trigger info: hist:keys=stacktrace:vals=len:sort=hitcount:size=2048 [paused]
> +    # trigger info: hist:keys=common_stacktrace:vals=len:sort=hitcount:size=2048 [paused]
>  
> -    { stacktrace:
> +    { common_stacktrace:
>           __netif_receive_skb_core+0x46d/0x990
>           __netif_receive_skb+0x18/0x60
>           netif_receive_skb_internal+0x23/0x90
> @@ -1079,7 +1079,7 @@ Extended error information
>           kthread+0xd2/0xf0
>           ret_from_fork+0x42/0x70
>      } hitcount:         85  len:      28884
> -    { stacktrace:
> +    { common_stacktrace:
>           __netif_receive_skb_core+0x46d/0x990
>           __netif_receive_skb+0x18/0x60
>           netif_receive_skb_internal+0x23/0x90
> @@ -1097,7 +1097,7 @@ Extended error information
>           irq_thread+0x11f/0x150
>           kthread+0xd2/0xf0
>      } hitcount:         98  len:     664329
> -    { stacktrace:
> +    { common_stacktrace:
>           __netif_receive_skb_core+0x46d/0x990
>           __netif_receive_skb+0x18/0x60
>           process_backlog+0xa8/0x150
> @@ -1115,7 +1115,7 @@ Extended error information
>           inet_sendmsg+0x64/0xa0
>           sock_sendmsg+0x3d/0x50
>      } hitcount:        115  len:      13030
> -    { stacktrace:
> +    { common_stacktrace:
>           __netif_receive_skb_core+0x46d/0x990
>           __netif_receive_skb+0x18/0x60
>           netif_receive_skb_internal+0x23/0x90
> @@ -1142,14 +1142,14 @@ Extended error information
>    into the histogram.  In order to avoid having to set everything up
>    again, we can just clear the histogram first::
>  
> -    # echo 'hist:key=stacktrace:vals=len:clear' >> \
> +    # echo 'hist:key=common_stacktrace:vals=len:clear' >> \
>             /sys/kernel/tracing/events/net/netif_receive_skb/trigger
>  
>    Just to verify that it is in fact cleared, here's what we now see in
>    the hist file::
>  
>      # cat /sys/kernel/tracing/events/net/netif_receive_skb/hist
> -    # trigger info: hist:keys=stacktrace:vals=len:sort=hitcount:size=2048 [paused]
> +    # trigger info: hist:keys=common_stacktrace:vals=len:sort=hitcount:size=2048 [paused]
>  
>      Totals:
>          Hits: 0
> @@ -1485,12 +1485,12 @@ Extended error information
>  
>    And here's an example that shows how to combine histogram data from
>    any two events even if they don't share any 'compatible' fields
> -  other than 'hitcount' and 'stacktrace'.  These commands create a
> +  other than 'hitcount' and 'common_stacktrace'.  These commands create a
>    couple of triggers named 'bar' using those fields::
>  
> -    # echo 'hist:name=bar:key=stacktrace:val=hitcount' > \
> +    # echo 'hist:name=bar:key=common_stacktrace:val=hitcount' > \
>             /sys/kernel/tracing/events/sched/sched_process_fork/trigger
> -    # echo 'hist:name=bar:key=stacktrace:val=hitcount' > \
> +    # echo 'hist:name=bar:key=common_stacktrace:val=hitcount' > \
>            /sys/kernel/tracing/events/net/netif_rx/trigger
>  
>    And displaying the output of either shows some interesting if
> @@ -1501,16 +1501,16 @@ Extended error information
>  
>      # event histogram
>      #
> -    # trigger info: hist:name=bar:keys=stacktrace:vals=hitcount:sort=hitcount:size=2048 [active]
> +    # trigger info: hist:name=bar:keys=common_stacktrace:vals=hitcount:sort=hitcount:size=2048 [active]
>      #
>  
> -    { stacktrace:
> +    { common_stacktrace:
>               kernel_clone+0x18e/0x330
>               kernel_thread+0x29/0x30
>               kthreadd+0x154/0x1b0
>               ret_from_fork+0x3f/0x70
>      } hitcount:          1
> -    { stacktrace:
> +    { common_stacktrace:
>               netif_rx_internal+0xb2/0xd0
>               netif_rx_ni+0x20/0x70
>               dev_loopback_xmit+0xaa/0xd0
> @@ -1528,7 +1528,7 @@ Extended error information
>               call_cpuidle+0x3b/0x60
>               cpu_startup_entry+0x22d/0x310
>      } hitcount:          1
> -    { stacktrace:
> +    { common_stacktrace:
>               netif_rx_internal+0xb2/0xd0
>               netif_rx_ni+0x20/0x70
>               dev_loopback_xmit+0xaa/0xd0
> @@ -1543,7 +1543,7 @@ Extended error information
>               SyS_sendto+0xe/0x10
>               entry_SYSCALL_64_fastpath+0x12/0x6a
>      } hitcount:          2
> -    { stacktrace:
> +    { common_stacktrace:
>               netif_rx_internal+0xb2/0xd0
>               netif_rx+0x1c/0x60
>               loopback_xmit+0x6c/0xb0
> @@ -1561,7 +1561,7 @@ Extended error information
>               sock_sendmsg+0x38/0x50
>               ___sys_sendmsg+0x14e/0x270
>      } hitcount:         76
> -    { stacktrace:
> +    { common_stacktrace:
>               netif_rx_internal+0xb2/0xd0
>               netif_rx+0x1c/0x60
>               loopback_xmit+0x6c/0xb0
> @@ -1579,7 +1579,7 @@ Extended error information
>               sock_sendmsg+0x38/0x50
>               ___sys_sendmsg+0x269/0x270
>      } hitcount:         77
> -    { stacktrace:
> +    { common_stacktrace:
>               netif_rx_internal+0xb2/0xd0
>               netif_rx+0x1c/0x60
>               loopback_xmit+0x6c/0xb0
> @@ -1597,7 +1597,7 @@ Extended error information
>               sock_sendmsg+0x38/0x50
>               SYSC_sendto+0xef/0x170
>      } hitcount:         88
> -    { stacktrace:
> +    { common_stacktrace:
>               kernel_clone+0x18e/0x330
>               SyS_clone+0x19/0x20
>               entry_SYSCALL_64_fastpath+0x12/0x6a
> @@ -1949,7 +1949,7 @@ uninterruptible state::
>  
>    # cd /sys/kernel/tracing
>    # echo 's:block_lat pid_t pid; u64 delta; unsigned long[] stack;' > dynamic_events
> -  # echo 'hist:keys=next_pid:ts=common_timestamp.usecs,st=stacktrace  if prev_state == 2' >> events/sched/sched_switch/trigger
> +  # echo 'hist:keys=next_pid:ts=common_timestamp.usecs,st=common_stacktrace  if prev_state == 2' >> events/sched/sched_switch/trigger
>    # echo 'hist:keys=prev_pid:delta=common_timestamp.usecs-$ts,s=$st:onmax($delta).trace(block_lat,prev_pid,$delta,$s)' >> events/sched/sched_switch/trigger
>    # echo 1 > events/synthetic/block_lat/enable
>    # cat trace
> diff --git a/include/linux/trace_events.h b/include/linux/trace_events.h
> index 0e373222a6df..7c4a0b72334e 100644
> --- a/include/linux/trace_events.h
> +++ b/include/linux/trace_events.h
> @@ -806,6 +806,7 @@ enum {
>  	FILTER_TRACE_FN,
>  	FILTER_COMM,
>  	FILTER_CPU,
> +	FILTER_STACKTRACE,
>  };
>  
>  extern int trace_event_raw_init(struct trace_event_call *call);
> diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
> index ebc59781456a..81801dc31784 100644
> --- a/kernel/trace/trace.c
> +++ b/kernel/trace/trace.c
> @@ -5752,7 +5752,7 @@ static const char readme_msg[] =
>  	"\t    table using the key(s) and value(s) named, and the value of a\n"
>  	"\t    sum called 'hitcount' is incremented.  Keys and values\n"
>  	"\t    correspond to fields in the event's format description.  Keys\n"
> -	"\t    can be any field, or the special string 'stacktrace'.\n"
> +	"\t    can be any field, or the special string 'common_stacktrace'.\n"
>  	"\t    Compound keys consisting of up to two fields can be specified\n"
>  	"\t    by the 'keys' keyword.  Values must correspond to numeric\n"
>  	"\t    fields.  Sort keys consisting of up to two fields can be\n"
> diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
> index 654ffa40457a..57e539d47989 100644
> --- a/kernel/trace/trace_events.c
> +++ b/kernel/trace/trace_events.c
> @@ -194,6 +194,8 @@ static int trace_define_generic_fields(void)
>  	__generic_field(int, common_cpu, FILTER_CPU);
>  	__generic_field(char *, COMM, FILTER_COMM);
>  	__generic_field(char *, comm, FILTER_COMM);
> +	__generic_field(char *, stacktrace, FILTER_STACKTRACE);
> +	__generic_field(char *, STACKTRACE, FILTER_STACKTRACE);
>  
>  	return ret;
>  }
> diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c
> index 543cb7dc84ad..b97d3ad832f1 100644
> --- a/kernel/trace/trace_events_hist.c
> +++ b/kernel/trace/trace_events_hist.c
> @@ -1364,7 +1364,7 @@ static const char *hist_field_name(struct hist_field *field,
>  		if (field->field)
>  			field_name = field->field->name;
>  		else
> -			field_name = "stacktrace";
> +			field_name = "common_stacktrace";
>  	} else if (field->flags & HIST_FIELD_FL_HITCOUNT)
>  		field_name = "hitcount";
>  
> @@ -2367,7 +2367,7 @@ parse_field(struct hist_trigger_data *hist_data, struct trace_event_file *file,
>  		hist_data->enable_timestamps = true;
>  		if (*flags & HIST_FIELD_FL_TIMESTAMP_USECS)
>  			hist_data->attrs->ts_in_usecs = true;
> -	} else if (strcmp(field_name, "stacktrace") == 0) {
> +	} else if (strcmp(field_name, "common_stacktrace") == 0) {
>  		*flags |= HIST_FIELD_FL_STACKTRACE;
>  	} else if (strcmp(field_name, "common_cpu") == 0)
>  		*flags |= HIST_FIELD_FL_CPU;
> @@ -2378,11 +2378,15 @@ parse_field(struct hist_trigger_data *hist_data, struct trace_event_file *file,
>  		if (!field || !field->size) {
>  			/*
>  			 * For backward compatibility, if field_name
> -			 * was "cpu", then we treat this the same as
> -			 * common_cpu. This also works for "CPU".
> +			 * was "cpu" or "stacktrace", then we treat this
> +			 * the same as common_cpu and common_stacktrace
> +			 * respectively. This also works for "CPU", and
> +			 * "STACKTRACE".
>  			 */
>  			if (field && field->filter_type == FILTER_CPU) {
>  				*flags |= HIST_FIELD_FL_CPU;
> +			} else if (field && field->filter_type == FILTER_STACKTRACE) {
> +				*flags |= HIST_FIELD_FL_STACKTRACE;
>  			} else {
>  				hist_err(tr, HIST_ERR_FIELD_NOT_FOUND,
>  					 errpos(field_name));
> @@ -5394,7 +5398,7 @@ static void hist_trigger_print_key(struct seq_file *m,
>  			if (key_field->field)
>  				seq_printf(m, "%s.stacktrace", key_field->field->name);
>  			else
> -				seq_puts(m, "stacktrace:\n");
> +				seq_puts(m, "common_stacktrace:\n");
>  			hist_trigger_stacktrace_print(m,
>  						      key + key_field->offset,
>  						      HIST_STACKTRACE_DEPTH);
> @@ -5977,7 +5981,7 @@ static int event_hist_trigger_print(struct seq_file *m,
>  			if (field->field)
>  				seq_printf(m, "%s.stacktrace", field->field->name);
>  			else
> -				seq_puts(m, "stacktrace");
> +				seq_puts(m, "common_stacktrace");
>  		} else
>  			hist_field_print(m, field);
>  	}
> -- 
> 2.39.2
>
  

Patch

diff --git a/Documentation/trace/histogram.rst b/Documentation/trace/histogram.rst
index 479c9eac6335..3c9b263de9c2 100644
--- a/Documentation/trace/histogram.rst
+++ b/Documentation/trace/histogram.rst
@@ -35,7 +35,7 @@  Documentation written by Tom Zanussi
   in place of an explicit value field - this is simply a count of
   event hits.  If 'values' isn't specified, an implicit 'hitcount'
   value will be automatically created and used as the only value.
-  Keys can be any field, or the special string 'stacktrace', which
+  Keys can be any field, or the special string 'common_stacktrace', which
   will use the event's kernel stacktrace as the key.  The keywords
   'keys' or 'key' can be used to specify keys, and the keywords
   'values', 'vals', or 'val' can be used to specify values.  Compound
@@ -54,7 +54,7 @@  Documentation written by Tom Zanussi
   'compatible' if the fields named in the trigger share the same
   number and type of fields and those fields also have the same names.
   Note that any two events always share the compatible 'hitcount' and
-  'stacktrace' fields and can therefore be combined using those
+  'common_stacktrace' fields and can therefore be combined using those
   fields, however pointless that may be.
 
   'hist' triggers add a 'hist' file to each event's subdirectory.
@@ -547,9 +547,9 @@  Extended error information
   the hist trigger display symbolic call_sites, we can have the hist
   trigger additionally display the complete set of kernel stack traces
   that led to each call_site.  To do that, we simply use the special
-  value 'stacktrace' for the key parameter::
+  value 'common_stacktrace' for the key parameter::
 
-    # echo 'hist:keys=stacktrace:values=bytes_req,bytes_alloc:sort=bytes_alloc' > \
+    # echo 'hist:keys=common_stacktrace:values=bytes_req,bytes_alloc:sort=bytes_alloc' > \
            /sys/kernel/tracing/events/kmem/kmalloc/trigger
 
   The above trigger will use the kernel stack trace in effect when an
@@ -561,9 +561,9 @@  Extended error information
   every callpath to a kmalloc for a kernel compile)::
 
     # cat /sys/kernel/tracing/events/kmem/kmalloc/hist
-    # trigger info: hist:keys=stacktrace:vals=bytes_req,bytes_alloc:sort=bytes_alloc:size=2048 [active]
+    # trigger info: hist:keys=common_stacktrace:vals=bytes_req,bytes_alloc:sort=bytes_alloc:size=2048 [active]
 
-    { stacktrace:
+    { common_stacktrace:
          __kmalloc_track_caller+0x10b/0x1a0
          kmemdup+0x20/0x50
          hidraw_report_event+0x8a/0x120 [hid]
@@ -581,7 +581,7 @@  Extended error information
          cpu_startup_entry+0x315/0x3e0
          rest_init+0x7c/0x80
     } hitcount:          3  bytes_req:         21  bytes_alloc:         24
-    { stacktrace:
+    { common_stacktrace:
          __kmalloc_track_caller+0x10b/0x1a0
          kmemdup+0x20/0x50
          hidraw_report_event+0x8a/0x120 [hid]
@@ -596,7 +596,7 @@  Extended error information
          do_IRQ+0x5a/0xf0
          ret_from_intr+0x0/0x30
     } hitcount:          3  bytes_req:         21  bytes_alloc:         24
-    { stacktrace:
+    { common_stacktrace:
          kmem_cache_alloc_trace+0xeb/0x150
          aa_alloc_task_context+0x27/0x40
          apparmor_cred_prepare+0x1f/0x50
@@ -608,7 +608,7 @@  Extended error information
     .
     .
     .
-    { stacktrace:
+    { common_stacktrace:
          __kmalloc+0x11b/0x1b0
          i915_gem_execbuffer2+0x6c/0x2c0 [i915]
          drm_ioctl+0x349/0x670 [drm]
@@ -616,7 +616,7 @@  Extended error information
          SyS_ioctl+0x81/0xa0
          system_call_fastpath+0x12/0x6a
     } hitcount:      17726  bytes_req:   13944120  bytes_alloc:   19593808
-    { stacktrace:
+    { common_stacktrace:
          __kmalloc+0x11b/0x1b0
          load_elf_phdrs+0x76/0xa0
          load_elf_binary+0x102/0x1650
@@ -625,7 +625,7 @@  Extended error information
          SyS_execve+0x3a/0x50
          return_from_execve+0x0/0x23
     } hitcount:      33348  bytes_req:   17152128  bytes_alloc:   20226048
-    { stacktrace:
+    { common_stacktrace:
          kmem_cache_alloc_trace+0xeb/0x150
          apparmor_file_alloc_security+0x27/0x40
          security_file_alloc+0x16/0x20
@@ -636,7 +636,7 @@  Extended error information
          SyS_open+0x1e/0x20
          system_call_fastpath+0x12/0x6a
     } hitcount:    4766422  bytes_req:    9532844  bytes_alloc:   38131376
-    { stacktrace:
+    { common_stacktrace:
          __kmalloc+0x11b/0x1b0
          seq_buf_alloc+0x1b/0x50
          seq_read+0x2cc/0x370
@@ -1026,7 +1026,7 @@  Extended error information
   First we set up an initially paused stacktrace trigger on the
   netif_receive_skb event::
 
-    # echo 'hist:key=stacktrace:vals=len:pause' > \
+    # echo 'hist:key=common_stacktrace:vals=len:pause' > \
            /sys/kernel/tracing/events/net/netif_receive_skb/trigger
 
   Next, we set up an 'enable_hist' trigger on the sched_process_exec
@@ -1060,9 +1060,9 @@  Extended error information
     $ wget https://www.kernel.org/pub/linux/kernel/v3.x/patch-3.19.xz
 
     # cat /sys/kernel/tracing/events/net/netif_receive_skb/hist
-    # trigger info: hist:keys=stacktrace:vals=len:sort=hitcount:size=2048 [paused]
+    # trigger info: hist:keys=common_stacktrace:vals=len:sort=hitcount:size=2048 [paused]
 
-    { stacktrace:
+    { common_stacktrace:
          __netif_receive_skb_core+0x46d/0x990
          __netif_receive_skb+0x18/0x60
          netif_receive_skb_internal+0x23/0x90
@@ -1079,7 +1079,7 @@  Extended error information
          kthread+0xd2/0xf0
          ret_from_fork+0x42/0x70
     } hitcount:         85  len:      28884
-    { stacktrace:
+    { common_stacktrace:
          __netif_receive_skb_core+0x46d/0x990
          __netif_receive_skb+0x18/0x60
          netif_receive_skb_internal+0x23/0x90
@@ -1097,7 +1097,7 @@  Extended error information
          irq_thread+0x11f/0x150
          kthread+0xd2/0xf0
     } hitcount:         98  len:     664329
-    { stacktrace:
+    { common_stacktrace:
          __netif_receive_skb_core+0x46d/0x990
          __netif_receive_skb+0x18/0x60
          process_backlog+0xa8/0x150
@@ -1115,7 +1115,7 @@  Extended error information
          inet_sendmsg+0x64/0xa0
          sock_sendmsg+0x3d/0x50
     } hitcount:        115  len:      13030
-    { stacktrace:
+    { common_stacktrace:
          __netif_receive_skb_core+0x46d/0x990
          __netif_receive_skb+0x18/0x60
          netif_receive_skb_internal+0x23/0x90
@@ -1142,14 +1142,14 @@  Extended error information
   into the histogram.  In order to avoid having to set everything up
   again, we can just clear the histogram first::
 
-    # echo 'hist:key=stacktrace:vals=len:clear' >> \
+    # echo 'hist:key=common_stacktrace:vals=len:clear' >> \
            /sys/kernel/tracing/events/net/netif_receive_skb/trigger
 
   Just to verify that it is in fact cleared, here's what we now see in
   the hist file::
 
     # cat /sys/kernel/tracing/events/net/netif_receive_skb/hist
-    # trigger info: hist:keys=stacktrace:vals=len:sort=hitcount:size=2048 [paused]
+    # trigger info: hist:keys=common_stacktrace:vals=len:sort=hitcount:size=2048 [paused]
 
     Totals:
         Hits: 0
@@ -1485,12 +1485,12 @@  Extended error information
 
   And here's an example that shows how to combine histogram data from
   any two events even if they don't share any 'compatible' fields
-  other than 'hitcount' and 'stacktrace'.  These commands create a
+  other than 'hitcount' and 'common_stacktrace'.  These commands create a
   couple of triggers named 'bar' using those fields::
 
-    # echo 'hist:name=bar:key=stacktrace:val=hitcount' > \
+    # echo 'hist:name=bar:key=common_stacktrace:val=hitcount' > \
            /sys/kernel/tracing/events/sched/sched_process_fork/trigger
-    # echo 'hist:name=bar:key=stacktrace:val=hitcount' > \
+    # echo 'hist:name=bar:key=common_stacktrace:val=hitcount' > \
           /sys/kernel/tracing/events/net/netif_rx/trigger
 
   And displaying the output of either shows some interesting if
@@ -1501,16 +1501,16 @@  Extended error information
 
     # event histogram
     #
-    # trigger info: hist:name=bar:keys=stacktrace:vals=hitcount:sort=hitcount:size=2048 [active]
+    # trigger info: hist:name=bar:keys=common_stacktrace:vals=hitcount:sort=hitcount:size=2048 [active]
     #
 
-    { stacktrace:
+    { common_stacktrace:
              kernel_clone+0x18e/0x330
              kernel_thread+0x29/0x30
              kthreadd+0x154/0x1b0
              ret_from_fork+0x3f/0x70
     } hitcount:          1
-    { stacktrace:
+    { common_stacktrace:
              netif_rx_internal+0xb2/0xd0
              netif_rx_ni+0x20/0x70
              dev_loopback_xmit+0xaa/0xd0
@@ -1528,7 +1528,7 @@  Extended error information
              call_cpuidle+0x3b/0x60
              cpu_startup_entry+0x22d/0x310
     } hitcount:          1
-    { stacktrace:
+    { common_stacktrace:
              netif_rx_internal+0xb2/0xd0
              netif_rx_ni+0x20/0x70
              dev_loopback_xmit+0xaa/0xd0
@@ -1543,7 +1543,7 @@  Extended error information
              SyS_sendto+0xe/0x10
              entry_SYSCALL_64_fastpath+0x12/0x6a
     } hitcount:          2
-    { stacktrace:
+    { common_stacktrace:
              netif_rx_internal+0xb2/0xd0
              netif_rx+0x1c/0x60
              loopback_xmit+0x6c/0xb0
@@ -1561,7 +1561,7 @@  Extended error information
              sock_sendmsg+0x38/0x50
              ___sys_sendmsg+0x14e/0x270
     } hitcount:         76
-    { stacktrace:
+    { common_stacktrace:
              netif_rx_internal+0xb2/0xd0
              netif_rx+0x1c/0x60
              loopback_xmit+0x6c/0xb0
@@ -1579,7 +1579,7 @@  Extended error information
              sock_sendmsg+0x38/0x50
              ___sys_sendmsg+0x269/0x270
     } hitcount:         77
-    { stacktrace:
+    { common_stacktrace:
              netif_rx_internal+0xb2/0xd0
              netif_rx+0x1c/0x60
              loopback_xmit+0x6c/0xb0
@@ -1597,7 +1597,7 @@  Extended error information
              sock_sendmsg+0x38/0x50
              SYSC_sendto+0xef/0x170
     } hitcount:         88
-    { stacktrace:
+    { common_stacktrace:
              kernel_clone+0x18e/0x330
              SyS_clone+0x19/0x20
              entry_SYSCALL_64_fastpath+0x12/0x6a
@@ -1949,7 +1949,7 @@  uninterruptible state::
 
   # cd /sys/kernel/tracing
   # echo 's:block_lat pid_t pid; u64 delta; unsigned long[] stack;' > dynamic_events
-  # echo 'hist:keys=next_pid:ts=common_timestamp.usecs,st=stacktrace  if prev_state == 2' >> events/sched/sched_switch/trigger
+  # echo 'hist:keys=next_pid:ts=common_timestamp.usecs,st=common_stacktrace  if prev_state == 2' >> events/sched/sched_switch/trigger
   # echo 'hist:keys=prev_pid:delta=common_timestamp.usecs-$ts,s=$st:onmax($delta).trace(block_lat,prev_pid,$delta,$s)' >> events/sched/sched_switch/trigger
   # echo 1 > events/synthetic/block_lat/enable
   # cat trace
diff --git a/include/linux/trace_events.h b/include/linux/trace_events.h
index 0e373222a6df..7c4a0b72334e 100644
--- a/include/linux/trace_events.h
+++ b/include/linux/trace_events.h
@@ -806,6 +806,7 @@  enum {
 	FILTER_TRACE_FN,
 	FILTER_COMM,
 	FILTER_CPU,
+	FILTER_STACKTRACE,
 };
 
 extern int trace_event_raw_init(struct trace_event_call *call);
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index ebc59781456a..81801dc31784 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -5752,7 +5752,7 @@  static const char readme_msg[] =
 	"\t    table using the key(s) and value(s) named, and the value of a\n"
 	"\t    sum called 'hitcount' is incremented.  Keys and values\n"
 	"\t    correspond to fields in the event's format description.  Keys\n"
-	"\t    can be any field, or the special string 'stacktrace'.\n"
+	"\t    can be any field, or the special string 'common_stacktrace'.\n"
 	"\t    Compound keys consisting of up to two fields can be specified\n"
 	"\t    by the 'keys' keyword.  Values must correspond to numeric\n"
 	"\t    fields.  Sort keys consisting of up to two fields can be\n"
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
index 654ffa40457a..57e539d47989 100644
--- a/kernel/trace/trace_events.c
+++ b/kernel/trace/trace_events.c
@@ -194,6 +194,8 @@  static int trace_define_generic_fields(void)
 	__generic_field(int, common_cpu, FILTER_CPU);
 	__generic_field(char *, COMM, FILTER_COMM);
 	__generic_field(char *, comm, FILTER_COMM);
+	__generic_field(char *, stacktrace, FILTER_STACKTRACE);
+	__generic_field(char *, STACKTRACE, FILTER_STACKTRACE);
 
 	return ret;
 }
diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c
index 543cb7dc84ad..b97d3ad832f1 100644
--- a/kernel/trace/trace_events_hist.c
+++ b/kernel/trace/trace_events_hist.c
@@ -1364,7 +1364,7 @@  static const char *hist_field_name(struct hist_field *field,
 		if (field->field)
 			field_name = field->field->name;
 		else
-			field_name = "stacktrace";
+			field_name = "common_stacktrace";
 	} else if (field->flags & HIST_FIELD_FL_HITCOUNT)
 		field_name = "hitcount";
 
@@ -2367,7 +2367,7 @@  parse_field(struct hist_trigger_data *hist_data, struct trace_event_file *file,
 		hist_data->enable_timestamps = true;
 		if (*flags & HIST_FIELD_FL_TIMESTAMP_USECS)
 			hist_data->attrs->ts_in_usecs = true;
-	} else if (strcmp(field_name, "stacktrace") == 0) {
+	} else if (strcmp(field_name, "common_stacktrace") == 0) {
 		*flags |= HIST_FIELD_FL_STACKTRACE;
 	} else if (strcmp(field_name, "common_cpu") == 0)
 		*flags |= HIST_FIELD_FL_CPU;
@@ -2378,11 +2378,15 @@  parse_field(struct hist_trigger_data *hist_data, struct trace_event_file *file,
 		if (!field || !field->size) {
 			/*
 			 * For backward compatibility, if field_name
-			 * was "cpu", then we treat this the same as
-			 * common_cpu. This also works for "CPU".
+			 * was "cpu" or "stacktrace", then we treat this
+			 * the same as common_cpu and common_stacktrace
+			 * respectively. This also works for "CPU", and
+			 * "STACKTRACE".
 			 */
 			if (field && field->filter_type == FILTER_CPU) {
 				*flags |= HIST_FIELD_FL_CPU;
+			} else if (field && field->filter_type == FILTER_STACKTRACE) {
+				*flags |= HIST_FIELD_FL_STACKTRACE;
 			} else {
 				hist_err(tr, HIST_ERR_FIELD_NOT_FOUND,
 					 errpos(field_name));
@@ -5394,7 +5398,7 @@  static void hist_trigger_print_key(struct seq_file *m,
 			if (key_field->field)
 				seq_printf(m, "%s.stacktrace", key_field->field->name);
 			else
-				seq_puts(m, "stacktrace:\n");
+				seq_puts(m, "common_stacktrace:\n");
 			hist_trigger_stacktrace_print(m,
 						      key + key_field->offset,
 						      HIST_STACKTRACE_DEPTH);
@@ -5977,7 +5981,7 @@  static int event_hist_trigger_print(struct seq_file *m,
 			if (field->field)
 				seq_printf(m, "%s.stacktrace", field->field->name);
 			else
-				seq_puts(m, "stacktrace");
+				seq_puts(m, "common_stacktrace");
 		} else
 			hist_field_print(m, field);
 	}