Commit e75a43c7 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull tracing fixes from Steven Rostedt:

 - Fix inverted check of registering the stats for branch tracing

   When calling register_stat_tracer() which returns zero on success and
   negative on error, the callers were checking the return of zero as an
   error and printing a warning message. Because this was just a normal
   printk() message and not a WARN(), it wasn't caught in any testing.

   Fix the check to print the warning message when an error actually
   happens.

 - Fix a typo in a comment in tracepoint.h

 - Limit the size of event probes to 3K in size

   It is possible to create a dynamic event probe via the tracefs system
   that is greater than the max size of an event that the ring buffer
   can hold. This basically causes the event to become useless.

   Limit the size of an event probe to be 3K as that should be large
   enough to handle any dynamic events being created, and fits within
   the PAGE_SIZE sub-buffers of the ring buffer.

* tag 'trace-v7.1-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace:
  tracing/probes: Limit size of event probe to 3K
  tracepoint: Fix typo in tracepoint.h comment
  tracing: branch: Fix inverted check on stat tracer registration
parents 57b8e2d6 b2aa3b4d
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -202,7 +202,7 @@ static inline struct tracepoint *tracepoint_ptr_deref(tracepoint_ptr_t *p)
#define TP_CONDITION(args...)	args

/*
 * Individual subsystem my have a separate configuration to
 * Individual subsystem may have a separate configuration to
 * enable their tracepoints. By default, this file will create
 * the tracepoints if CONFIG_TRACEPOINTS is defined. If a subsystem
 * wants to be able to disable its tracepoints from being created
+4 −4
Original line number Diff line number Diff line
@@ -373,10 +373,10 @@ __init static int init_annotated_branch_stats(void)
	int ret;

	ret = register_stat_tracer(&annotated_branch_stats);
	if (!ret) {
	if (ret) {
		printk(KERN_WARNING "Warning: could not register "
				    "annotated branches stats\n");
		return 1;
		return ret;
	}
	return 0;
}
@@ -438,10 +438,10 @@ __init static int all_annotated_branch_stats(void)
	int ret;

	ret = register_stat_tracer(&all_branch_stats);
	if (!ret) {
	if (ret) {
		printk(KERN_WARNING "Warning: could not register "
				    "all branches stats\n");
		return 1;
		return ret;
	}
	return 0;
}
+6 −0
Original line number Diff line number Diff line
@@ -1523,6 +1523,12 @@ static int traceprobe_parse_probe_arg_body(const char *argv, ssize_t *size,
	parg->offset = *size;
	*size += parg->type->size * (parg->count ?: 1);

	if (*size > MAX_PROBE_EVENT_SIZE) {
		ret = -E2BIG;
		trace_probe_log_err(ctx->offset, EVENT_TOO_BIG);
		goto fail;
	}

	if (parg->count) {
		len = strlen(parg->type->fmttype) + 6;
		parg->fmt = kmalloc(len, GFP_KERNEL);
+3 −1
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@
#define MAX_BTF_ARGS_LEN	128
#define MAX_DENTRY_ARGS_LEN	256
#define MAX_STRING_SIZE		PATH_MAX
#define MAX_PROBE_EVENT_SIZE	3072

/* Reserved field names */
#define FIELD_STRING_IP		"__probe_ip"
@@ -561,7 +562,8 @@ extern int traceprobe_define_arg_fields(struct trace_event_call *event_call,
	C(BAD_TYPE4STR,		"This type does not fit for string."),\
	C(NEED_STRING_TYPE,	"$comm and immediate-string only accepts string type"),\
	C(TOO_MANY_ARGS,	"Too many arguments are specified"),	\
	C(TOO_MANY_EARGS,	"Too many entry arguments specified"),
	C(TOO_MANY_EARGS,	"Too many entry arguments specified"),	\
	C(EVENT_TOO_BIG,	"Event too big (too many fields?)"),

#undef C
#define C(a, b)		TP_ERR_##a