diff options
Diffstat (limited to 'kernel/trace/trace_output.c')
| -rw-r--r-- | kernel/trace/trace_output.c | 446 | 
1 files changed, 191 insertions, 255 deletions
diff --git a/kernel/trace/trace_output.c b/kernel/trace/trace_output.c index c6977d5a9b12..b77b9a697619 100644 --- a/kernel/trace/trace_output.c +++ b/kernel/trace/trace_output.c @@ -25,15 +25,12 @@ enum print_line_t trace_print_bputs_msg_only(struct trace_iterator *iter)  	struct trace_seq *s = &iter->seq;  	struct trace_entry *entry = iter->ent;  	struct bputs_entry *field; -	int ret;  	trace_assign_type(field, entry); -	ret = trace_seq_puts(s, field->str); -	if (!ret) -		return TRACE_TYPE_PARTIAL_LINE; +	trace_seq_puts(s, field->str); -	return TRACE_TYPE_HANDLED; +	return trace_handle_return(s);  }  enum print_line_t trace_print_bprintk_msg_only(struct trace_iterator *iter) @@ -41,15 +38,12 @@ enum print_line_t trace_print_bprintk_msg_only(struct trace_iterator *iter)  	struct trace_seq *s = &iter->seq;  	struct trace_entry *entry = iter->ent;  	struct bprint_entry *field; -	int ret;  	trace_assign_type(field, entry); -	ret = trace_seq_bprintf(s, field->fmt, field->buf); -	if (!ret) -		return TRACE_TYPE_PARTIAL_LINE; +	trace_seq_bprintf(s, field->fmt, field->buf); -	return TRACE_TYPE_HANDLED; +	return trace_handle_return(s);  }  enum print_line_t trace_print_printk_msg_only(struct trace_iterator *iter) @@ -57,15 +51,12 @@ enum print_line_t trace_print_printk_msg_only(struct trace_iterator *iter)  	struct trace_seq *s = &iter->seq;  	struct trace_entry *entry = iter->ent;  	struct print_entry *field; -	int ret;  	trace_assign_type(field, entry); -	ret = trace_seq_puts(s, field->buf); -	if (!ret) -		return TRACE_TYPE_PARTIAL_LINE; +	trace_seq_puts(s, field->buf); -	return TRACE_TYPE_HANDLED; +	return trace_handle_return(s);  }  const char * @@ -124,7 +115,7 @@ ftrace_print_symbols_seq(struct trace_seq *p, unsigned long val,  	if (ret == (const char *)(trace_seq_buffer_ptr(p)))  		trace_seq_printf(p, "0x%lx", val); -		 +  	trace_seq_putc(p, 0);  	return ret; @@ -193,7 +184,6 @@ int ftrace_raw_output_prep(struct trace_iterator *iter,  	struct trace_seq *s = &iter->seq;  	struct trace_seq *p = &iter->tmp_seq;  	struct trace_entry *entry; -	int ret;  	event = container_of(trace_event, struct ftrace_event_call, event);  	entry = iter->ent; @@ -204,11 +194,9 @@ int ftrace_raw_output_prep(struct trace_iterator *iter,  	}  	trace_seq_init(p); -	ret = trace_seq_printf(s, "%s: ", ftrace_event_name(event)); -	if (!ret) -		return TRACE_TYPE_PARTIAL_LINE; +	trace_seq_printf(s, "%s: ", ftrace_event_name(event)); -	return 0; +	return trace_handle_return(s);  }  EXPORT_SYMBOL(ftrace_raw_output_prep); @@ -216,18 +204,11 @@ static int ftrace_output_raw(struct trace_iterator *iter, char *name,  			     char *fmt, va_list ap)  {  	struct trace_seq *s = &iter->seq; -	int ret; - -	ret = trace_seq_printf(s, "%s: ", name); -	if (!ret) -		return TRACE_TYPE_PARTIAL_LINE; - -	ret = trace_seq_vprintf(s, fmt, ap); -	if (!ret) -		return TRACE_TYPE_PARTIAL_LINE; +	trace_seq_printf(s, "%s: ", name); +	trace_seq_vprintf(s, fmt, ap); -	return TRACE_TYPE_HANDLED; +	return trace_handle_return(s);  }  int ftrace_output_call(struct trace_iterator *iter, char *name, char *fmt, ...) @@ -260,7 +241,7 @@ static inline const char *kretprobed(const char *name)  }  #endif /* CONFIG_KRETPROBES */ -static int +static void  seq_print_sym_short(struct trace_seq *s, const char *fmt, unsigned long address)  {  #ifdef CONFIG_KALLSYMS @@ -271,12 +252,11 @@ seq_print_sym_short(struct trace_seq *s, const char *fmt, unsigned long address)  	name = kretprobed(str); -	return trace_seq_printf(s, fmt, name); +	trace_seq_printf(s, fmt, name);  #endif -	return 1;  } -static int +static void  seq_print_sym_offset(struct trace_seq *s, const char *fmt,  		     unsigned long address)  { @@ -287,9 +267,8 @@ seq_print_sym_offset(struct trace_seq *s, const char *fmt,  	sprint_symbol(str, address);  	name = kretprobed(str); -	return trace_seq_printf(s, fmt, name); +	trace_seq_printf(s, fmt, name);  #endif -	return 1;  }  #ifndef CONFIG_64BIT @@ -320,14 +299,14 @@ int seq_print_user_ip(struct trace_seq *s, struct mm_struct *mm,  		if (file) {  			ret = trace_seq_path(s, &file->f_path);  			if (ret) -				ret = trace_seq_printf(s, "[+0x%lx]", -						       ip - vmstart); +				trace_seq_printf(s, "[+0x%lx]", +						 ip - vmstart);  		}  		up_read(&mm->mmap_sem);  	}  	if (ret && ((sym_flags & TRACE_ITER_SYM_ADDR) || !file)) -		ret = trace_seq_printf(s, " <" IP_FMT ">", ip); -	return ret; +		trace_seq_printf(s, " <" IP_FMT ">", ip); +	return !trace_seq_has_overflowed(s);  }  int @@ -335,7 +314,6 @@ seq_print_userip_objs(const struct userstack_entry *entry, struct trace_seq *s,  		      unsigned long sym_flags)  {  	struct mm_struct *mm = NULL; -	int ret = 1;  	unsigned int i;  	if (trace_flags & TRACE_ITER_SYM_USEROBJ) { @@ -354,48 +332,45 @@ seq_print_userip_objs(const struct userstack_entry *entry, struct trace_seq *s,  	for (i = 0; i < FTRACE_STACK_ENTRIES; i++) {  		unsigned long ip = entry->caller[i]; -		if (ip == ULONG_MAX || !ret) +		if (ip == ULONG_MAX || trace_seq_has_overflowed(s))  			break; -		if (ret) -			ret = trace_seq_puts(s, " => "); + +		trace_seq_puts(s, " => "); +  		if (!ip) { -			if (ret) -				ret = trace_seq_puts(s, "??"); -			if (ret) -				ret = trace_seq_putc(s, '\n'); +			trace_seq_puts(s, "??"); +			trace_seq_putc(s, '\n');  			continue;  		} -		if (!ret) -			break; -		if (ret) -			ret = seq_print_user_ip(s, mm, ip, sym_flags); -		ret = trace_seq_putc(s, '\n'); + +		seq_print_user_ip(s, mm, ip, sym_flags); +		trace_seq_putc(s, '\n');  	}  	if (mm)  		mmput(mm); -	return ret; + +	return !trace_seq_has_overflowed(s);  }  int  seq_print_ip_sym(struct trace_seq *s, unsigned long ip, unsigned long sym_flags)  { -	int ret; - -	if (!ip) -		return trace_seq_putc(s, '0'); +	if (!ip) { +		trace_seq_putc(s, '0'); +		goto out; +	}  	if (sym_flags & TRACE_ITER_SYM_OFFSET) -		ret = seq_print_sym_offset(s, "%s", ip); +		seq_print_sym_offset(s, "%s", ip);  	else -		ret = seq_print_sym_short(s, "%s", ip); - -	if (!ret) -		return 0; +		seq_print_sym_short(s, "%s", ip);  	if (sym_flags & TRACE_ITER_SYM_ADDR) -		ret = trace_seq_printf(s, " <" IP_FMT ">", ip); -	return ret; +		trace_seq_printf(s, " <" IP_FMT ">", ip); + + out: +	return !trace_seq_has_overflowed(s);  }  /** @@ -413,7 +388,6 @@ int trace_print_lat_fmt(struct trace_seq *s, struct trace_entry *entry)  	char irqs_off;  	int hardirq;  	int softirq; -	int ret;  	hardirq = entry->flags & TRACE_FLAG_HARDIRQ;  	softirq = entry->flags & TRACE_FLAG_SOFTIRQ; @@ -445,16 +419,15 @@ int trace_print_lat_fmt(struct trace_seq *s, struct trace_entry *entry)  		softirq ? 's' :  		'.'; -	if (!trace_seq_printf(s, "%c%c%c", -			      irqs_off, need_resched, hardsoft_irq)) -		return 0; +	trace_seq_printf(s, "%c%c%c", +			 irqs_off, need_resched, hardsoft_irq);  	if (entry->preempt_count) -		ret = trace_seq_printf(s, "%x", entry->preempt_count); +		trace_seq_printf(s, "%x", entry->preempt_count);  	else -		ret = trace_seq_putc(s, '.'); +		trace_seq_putc(s, '.'); -	return ret; +	return !trace_seq_has_overflowed(s);  }  static int @@ -464,14 +437,38 @@ lat_print_generic(struct trace_seq *s, struct trace_entry *entry, int cpu)  	trace_find_cmdline(entry->pid, comm); -	if (!trace_seq_printf(s, "%8.8s-%-5d %3d", -			      comm, entry->pid, cpu)) -		return 0; +	trace_seq_printf(s, "%8.8s-%-5d %3d", +			 comm, entry->pid, cpu);  	return trace_print_lat_fmt(s, entry);  } -static unsigned long preempt_mark_thresh_us = 100; +#undef MARK +#define MARK(v, s) {.val = v, .sym = s} +/* trace overhead mark */ +static const struct trace_mark { +	unsigned long long	val; /* unit: nsec */ +	char			sym; +} mark[] = { +	MARK(1000000000ULL	, '$'), /* 1 sec */ +	MARK(1000000ULL		, '#'), /* 1000 usecs */ +	MARK(100000ULL		, '!'), /* 100 usecs */ +	MARK(10000ULL		, '+'), /* 10 usecs */ +}; +#undef MARK + +char trace_find_mark(unsigned long long d) +{ +	int i; +	int size = ARRAY_SIZE(mark); + +	for (i = 0; i < size; i++) { +		if (d >= mark[i].val) +			break; +	} + +	return (i == size) ? ' ' : mark[i].sym; +}  static int  lat_print_timestamp(struct trace_iterator *iter, u64 next_ts) @@ -493,24 +490,28 @@ lat_print_timestamp(struct trace_iterator *iter, u64 next_ts)  		unsigned long rel_usec = do_div(rel_ts, USEC_PER_MSEC);  		unsigned long rel_msec = (unsigned long)rel_ts; -		return trace_seq_printf( -				s, "[%08llx] %ld.%03ldms (+%ld.%03ldms): ", -				ns2usecs(iter->ts), -				abs_msec, abs_usec, -				rel_msec, rel_usec); +		trace_seq_printf( +			s, "[%08llx] %ld.%03ldms (+%ld.%03ldms): ", +			ns2usecs(iter->ts), +			abs_msec, abs_usec, +			rel_msec, rel_usec); +  	} else if (verbose && !in_ns) { -		return trace_seq_printf( -				s, "[%016llx] %lld (+%lld): ", -				iter->ts, abs_ts, rel_ts); +		trace_seq_printf( +			s, "[%016llx] %lld (+%lld): ", +			iter->ts, abs_ts, rel_ts); +  	} else if (!verbose && in_ns) { -		return trace_seq_printf( -				s, " %4lldus%c: ", -				abs_ts, -				rel_ts > preempt_mark_thresh_us ? '!' : -				  rel_ts > 1 ? '+' : ' '); +		trace_seq_printf( +			s, " %4lldus%c: ", +			abs_ts, +			trace_find_mark(rel_ts * NSEC_PER_USEC)); +  	} else { /* !verbose && !in_ns */ -		return trace_seq_printf(s, " %4lld: ", abs_ts); +		trace_seq_printf(s, " %4lld: ", abs_ts);  	} + +	return !trace_seq_has_overflowed(s);  }  int trace_print_context(struct trace_iterator *iter) @@ -520,34 +521,29 @@ int trace_print_context(struct trace_iterator *iter)  	unsigned long long t;  	unsigned long secs, usec_rem;  	char comm[TASK_COMM_LEN]; -	int ret;  	trace_find_cmdline(entry->pid, comm); -	ret = trace_seq_printf(s, "%16s-%-5d [%03d] ", +	trace_seq_printf(s, "%16s-%-5d [%03d] ",  			       comm, entry->pid, iter->cpu); -	if (!ret) -		return 0; -	if (trace_flags & TRACE_ITER_IRQ_INFO) { -		ret = trace_print_lat_fmt(s, entry); -		if (!ret) -			return 0; -	} +	if (trace_flags & TRACE_ITER_IRQ_INFO) +		trace_print_lat_fmt(s, entry);  	if (iter->iter_flags & TRACE_FILE_TIME_IN_NS) {  		t = ns2usecs(iter->ts);  		usec_rem = do_div(t, USEC_PER_SEC);  		secs = (unsigned long)t; -		return trace_seq_printf(s, " %5lu.%06lu: ", secs, usec_rem); +		trace_seq_printf(s, " %5lu.%06lu: ", secs, usec_rem);  	} else -		return trace_seq_printf(s, " %12llu: ", iter->ts); +		trace_seq_printf(s, " %12llu: ", iter->ts); + +	return !trace_seq_has_overflowed(s);  }  int trace_print_lat_context(struct trace_iterator *iter)  {  	u64 next_ts; -	int ret;  	/* trace_find_next_entry will reset ent_size */  	int ent_size = iter->ent_size;  	struct trace_seq *s = &iter->seq; @@ -567,18 +563,17 @@ int trace_print_lat_context(struct trace_iterator *iter)  		trace_find_cmdline(entry->pid, comm); -		ret = trace_seq_printf( -				s, "%16s %5d %3d %d %08x %08lx ", -				comm, entry->pid, iter->cpu, entry->flags, -				entry->preempt_count, iter->idx); +		trace_seq_printf( +			s, "%16s %5d %3d %d %08x %08lx ", +			comm, entry->pid, iter->cpu, entry->flags, +			entry->preempt_count, iter->idx);  	} else { -		ret = lat_print_generic(s, entry, iter->cpu); +		lat_print_generic(s, entry, iter->cpu);  	} -	if (ret) -		ret = lat_print_timestamp(iter, next_ts); +	lat_print_timestamp(iter, next_ts); -	return ret; +	return !trace_seq_has_overflowed(s);  }  static const char state_to_char[] = TASK_STATE_TO_CHAR_STR; @@ -692,7 +687,7 @@ int register_ftrace_event(struct trace_event *event)  				goto out;  		} else { -			 +  			event->type = next_event_type++;  			list = &ftrace_event_list;  		} @@ -764,10 +759,9 @@ EXPORT_SYMBOL_GPL(unregister_ftrace_event);  enum print_line_t trace_nop_print(struct trace_iterator *iter, int flags,  				  struct trace_event *event)  { -	if (!trace_seq_printf(&iter->seq, "type: %d\n", iter->ent->type)) -		return TRACE_TYPE_PARTIAL_LINE; +	trace_seq_printf(&iter->seq, "type: %d\n", iter->ent->type); -	return TRACE_TYPE_HANDLED; +	return trace_handle_return(&iter->seq);  }  /* TRACE_FN */ @@ -779,24 +773,16 @@ static enum print_line_t trace_fn_trace(struct trace_iterator *iter, int flags,  	trace_assign_type(field, iter->ent); -	if (!seq_print_ip_sym(s, field->ip, flags)) -		goto partial; +	seq_print_ip_sym(s, field->ip, flags);  	if ((flags & TRACE_ITER_PRINT_PARENT) && field->parent_ip) { -		if (!trace_seq_puts(s, " <-")) -			goto partial; -		if (!seq_print_ip_sym(s, -				      field->parent_ip, -				      flags)) -			goto partial; +		trace_seq_puts(s, " <-"); +		seq_print_ip_sym(s, field->parent_ip, flags);  	} -	if (!trace_seq_putc(s, '\n')) -		goto partial; -	return TRACE_TYPE_HANDLED; +	trace_seq_putc(s, '\n'); - partial: -	return TRACE_TYPE_PARTIAL_LINE; +	return trace_handle_return(s);  }  static enum print_line_t trace_fn_raw(struct trace_iterator *iter, int flags, @@ -806,12 +792,11 @@ static enum print_line_t trace_fn_raw(struct trace_iterator *iter, int flags,  	trace_assign_type(field, iter->ent); -	if (!trace_seq_printf(&iter->seq, "%lx %lx\n", -			      field->ip, -			      field->parent_ip)) -		return TRACE_TYPE_PARTIAL_LINE; +	trace_seq_printf(&iter->seq, "%lx %lx\n", +			 field->ip, +			 field->parent_ip); -	return TRACE_TYPE_HANDLED; +	return trace_handle_return(&iter->seq);  }  static enum print_line_t trace_fn_hex(struct trace_iterator *iter, int flags, @@ -822,10 +807,10 @@ static enum print_line_t trace_fn_hex(struct trace_iterator *iter, int flags,  	trace_assign_type(field, iter->ent); -	SEQ_PUT_HEX_FIELD_RET(s, field->ip); -	SEQ_PUT_HEX_FIELD_RET(s, field->parent_ip); +	SEQ_PUT_HEX_FIELD(s, field->ip); +	SEQ_PUT_HEX_FIELD(s, field->parent_ip); -	return TRACE_TYPE_HANDLED; +	return trace_handle_return(s);  }  static enum print_line_t trace_fn_bin(struct trace_iterator *iter, int flags, @@ -836,10 +821,10 @@ static enum print_line_t trace_fn_bin(struct trace_iterator *iter, int flags,  	trace_assign_type(field, iter->ent); -	SEQ_PUT_FIELD_RET(s, field->ip); -	SEQ_PUT_FIELD_RET(s, field->parent_ip); +	SEQ_PUT_FIELD(s, field->ip); +	SEQ_PUT_FIELD(s, field->parent_ip); -	return TRACE_TYPE_HANDLED; +	return trace_handle_return(s);  }  static struct trace_event_functions trace_fn_funcs = { @@ -868,18 +853,17 @@ static enum print_line_t trace_ctxwake_print(struct trace_iterator *iter,  	T = task_state_char(field->next_state);  	S = task_state_char(field->prev_state);  	trace_find_cmdline(field->next_pid, comm); -	if (!trace_seq_printf(&iter->seq, -			      " %5d:%3d:%c %s [%03d] %5d:%3d:%c %s\n", -			      field->prev_pid, -			      field->prev_prio, -			      S, delim, -			      field->next_cpu, -			      field->next_pid, -			      field->next_prio, -			      T, comm)) -		return TRACE_TYPE_PARTIAL_LINE; - -	return TRACE_TYPE_HANDLED; +	trace_seq_printf(&iter->seq, +			 " %5d:%3d:%c %s [%03d] %5d:%3d:%c %s\n", +			 field->prev_pid, +			 field->prev_prio, +			 S, delim, +			 field->next_cpu, +			 field->next_pid, +			 field->next_prio, +			 T, comm); + +	return trace_handle_return(&iter->seq);  }  static enum print_line_t trace_ctx_print(struct trace_iterator *iter, int flags, @@ -904,17 +888,16 @@ static int trace_ctxwake_raw(struct trace_iterator *iter, char S)  	if (!S)  		S = task_state_char(field->prev_state);  	T = task_state_char(field->next_state); -	if (!trace_seq_printf(&iter->seq, "%d %d %c %d %d %d %c\n", -			      field->prev_pid, -			      field->prev_prio, -			      S, -			      field->next_cpu, -			      field->next_pid, -			      field->next_prio, -			      T)) -		return TRACE_TYPE_PARTIAL_LINE; - -	return TRACE_TYPE_HANDLED; +	trace_seq_printf(&iter->seq, "%d %d %c %d %d %d %c\n", +			 field->prev_pid, +			 field->prev_prio, +			 S, +			 field->next_cpu, +			 field->next_pid, +			 field->next_prio, +			 T); + +	return trace_handle_return(&iter->seq);  }  static enum print_line_t trace_ctx_raw(struct trace_iterator *iter, int flags, @@ -942,15 +925,15 @@ static int trace_ctxwake_hex(struct trace_iterator *iter, char S)  		S = task_state_char(field->prev_state);  	T = task_state_char(field->next_state); -	SEQ_PUT_HEX_FIELD_RET(s, field->prev_pid); -	SEQ_PUT_HEX_FIELD_RET(s, field->prev_prio); -	SEQ_PUT_HEX_FIELD_RET(s, S); -	SEQ_PUT_HEX_FIELD_RET(s, field->next_cpu); -	SEQ_PUT_HEX_FIELD_RET(s, field->next_pid); -	SEQ_PUT_HEX_FIELD_RET(s, field->next_prio); -	SEQ_PUT_HEX_FIELD_RET(s, T); +	SEQ_PUT_HEX_FIELD(s, field->prev_pid); +	SEQ_PUT_HEX_FIELD(s, field->prev_prio); +	SEQ_PUT_HEX_FIELD(s, S); +	SEQ_PUT_HEX_FIELD(s, field->next_cpu); +	SEQ_PUT_HEX_FIELD(s, field->next_pid); +	SEQ_PUT_HEX_FIELD(s, field->next_prio); +	SEQ_PUT_HEX_FIELD(s, T); -	return TRACE_TYPE_HANDLED; +	return trace_handle_return(s);  }  static enum print_line_t trace_ctx_hex(struct trace_iterator *iter, int flags, @@ -973,14 +956,15 @@ static enum print_line_t trace_ctxwake_bin(struct trace_iterator *iter,  	trace_assign_type(field, iter->ent); -	SEQ_PUT_FIELD_RET(s, field->prev_pid); -	SEQ_PUT_FIELD_RET(s, field->prev_prio); -	SEQ_PUT_FIELD_RET(s, field->prev_state); -	SEQ_PUT_FIELD_RET(s, field->next_pid); -	SEQ_PUT_FIELD_RET(s, field->next_prio); -	SEQ_PUT_FIELD_RET(s, field->next_state); +	SEQ_PUT_FIELD(s, field->prev_pid); +	SEQ_PUT_FIELD(s, field->prev_prio); +	SEQ_PUT_FIELD(s, field->prev_state); +	SEQ_PUT_FIELD(s, field->next_cpu); +	SEQ_PUT_FIELD(s, field->next_pid); +	SEQ_PUT_FIELD(s, field->next_prio); +	SEQ_PUT_FIELD(s, field->next_state); -	return TRACE_TYPE_HANDLED; +	return trace_handle_return(s);  }  static struct trace_event_functions trace_ctx_funcs = { @@ -1020,23 +1004,19 @@ static enum print_line_t trace_stack_print(struct trace_iterator *iter,  	trace_assign_type(field, iter->ent);  	end = (unsigned long *)((long)iter->ent + iter->ent_size); -	if (!trace_seq_puts(s, "<stack trace>\n")) -		goto partial; +	trace_seq_puts(s, "<stack trace>\n");  	for (p = field->caller; p && *p != ULONG_MAX && p < end; p++) { -		if (!trace_seq_puts(s, " => ")) -			goto partial; -		if (!seq_print_ip_sym(s, *p, flags)) -			goto partial; -		if (!trace_seq_putc(s, '\n')) -			goto partial; -	} +		if (trace_seq_has_overflowed(s)) +			break; -	return TRACE_TYPE_HANDLED; +		trace_seq_puts(s, " => "); +		seq_print_ip_sym(s, *p, flags); +		trace_seq_putc(s, '\n'); +	} - partial: -	return TRACE_TYPE_PARTIAL_LINE; +	return trace_handle_return(s);  }  static struct trace_event_functions trace_stack_funcs = { @@ -1057,16 +1037,10 @@ static enum print_line_t trace_user_stack_print(struct trace_iterator *iter,  	trace_assign_type(field, iter->ent); -	if (!trace_seq_puts(s, "<user stack trace>\n")) -		goto partial; - -	if (!seq_print_userip_objs(field, s, flags)) -		goto partial; - -	return TRACE_TYPE_HANDLED; +	trace_seq_puts(s, "<user stack trace>\n"); +	seq_print_userip_objs(field, s, flags); - partial: -	return TRACE_TYPE_PARTIAL_LINE; +	return trace_handle_return(s);  }  static struct trace_event_functions trace_user_stack_funcs = { @@ -1089,19 +1063,11 @@ trace_bputs_print(struct trace_iterator *iter, int flags,  	trace_assign_type(field, entry); -	if (!seq_print_ip_sym(s, field->ip, flags)) -		goto partial; +	seq_print_ip_sym(s, field->ip, flags); +	trace_seq_puts(s, ": "); +	trace_seq_puts(s, field->str); -	if (!trace_seq_puts(s, ": ")) -		goto partial; - -	if (!trace_seq_puts(s, field->str)) -		goto partial; - -	return TRACE_TYPE_HANDLED; - - partial: -	return TRACE_TYPE_PARTIAL_LINE; +	return trace_handle_return(s);  } @@ -1114,16 +1080,10 @@ trace_bputs_raw(struct trace_iterator *iter, int flags,  	trace_assign_type(field, iter->ent); -	if (!trace_seq_printf(s, ": %lx : ", field->ip)) -		goto partial; - -	if (!trace_seq_puts(s, field->str)) -		goto partial; +	trace_seq_printf(s, ": %lx : ", field->ip); +	trace_seq_puts(s, field->str); -	return TRACE_TYPE_HANDLED; - - partial: -	return TRACE_TYPE_PARTIAL_LINE; +	return trace_handle_return(s);  }  static struct trace_event_functions trace_bputs_funcs = { @@ -1147,19 +1107,11 @@ trace_bprint_print(struct trace_iterator *iter, int flags,  	trace_assign_type(field, entry); -	if (!seq_print_ip_sym(s, field->ip, flags)) -		goto partial; - -	if (!trace_seq_puts(s, ": ")) -		goto partial; - -	if (!trace_seq_bprintf(s, field->fmt, field->buf)) -		goto partial; +	seq_print_ip_sym(s, field->ip, flags); +	trace_seq_puts(s, ": "); +	trace_seq_bprintf(s, field->fmt, field->buf); -	return TRACE_TYPE_HANDLED; - - partial: -	return TRACE_TYPE_PARTIAL_LINE; +	return trace_handle_return(s);  } @@ -1172,16 +1124,10 @@ trace_bprint_raw(struct trace_iterator *iter, int flags,  	trace_assign_type(field, iter->ent); -	if (!trace_seq_printf(s, ": %lx : ", field->ip)) -		goto partial; - -	if (!trace_seq_bprintf(s, field->fmt, field->buf)) -		goto partial; +	trace_seq_printf(s, ": %lx : ", field->ip); +	trace_seq_bprintf(s, field->fmt, field->buf); -	return TRACE_TYPE_HANDLED; - - partial: -	return TRACE_TYPE_PARTIAL_LINE; +	return trace_handle_return(s);  }  static struct trace_event_functions trace_bprint_funcs = { @@ -1203,16 +1149,10 @@ static enum print_line_t trace_print_print(struct trace_iterator *iter,  	trace_assign_type(field, iter->ent); -	if (!seq_print_ip_sym(s, field->ip, flags)) -		goto partial; - -	if (!trace_seq_printf(s, ": %s", field->buf)) -		goto partial; +	seq_print_ip_sym(s, field->ip, flags); +	trace_seq_printf(s, ": %s", field->buf); -	return TRACE_TYPE_HANDLED; - - partial: -	return TRACE_TYPE_PARTIAL_LINE; +	return trace_handle_return(s);  }  static enum print_line_t trace_print_raw(struct trace_iterator *iter, int flags, @@ -1222,13 +1162,9 @@ static enum print_line_t trace_print_raw(struct trace_iterator *iter, int flags,  	trace_assign_type(field, iter->ent); -	if (!trace_seq_printf(&iter->seq, "# %lx %s", field->ip, field->buf)) -		goto partial; - -	return TRACE_TYPE_HANDLED; +	trace_seq_printf(&iter->seq, "# %lx %s", field->ip, field->buf); - partial: -	return TRACE_TYPE_PARTIAL_LINE; +	return trace_handle_return(&iter->seq);  }  static struct trace_event_functions trace_print_funcs = {  |