diff options
Diffstat (limited to 'kernel/trace/trace_events_hist.c')
| -rw-r--r-- | kernel/trace/trace_events_hist.c | 10 | 
1 files changed, 8 insertions, 2 deletions
| diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c index 5e6a988a8a51..ada87bfb5bb8 100644 --- a/kernel/trace/trace_events_hist.c +++ b/kernel/trace/trace_events_hist.c @@ -2503,6 +2503,8 @@ static struct hist_field *parse_unary(struct hist_trigger_data *hist_data,  		(HIST_FIELD_FL_TIMESTAMP | HIST_FIELD_FL_TIMESTAMP_USECS);  	expr->fn = hist_field_unary_minus;  	expr->operands[0] = operand1; +	expr->size = operand1->size; +	expr->is_signed = operand1->is_signed;  	expr->operator = FIELD_OP_UNARY_MINUS;  	expr->name = expr_str(expr, 0);  	expr->type = kstrdup_const(operand1->type, GFP_KERNEL); @@ -2719,6 +2721,7 @@ static struct hist_field *parse_expr(struct hist_trigger_data *hist_data,  		/* The operand sizes should be the same, so just pick one */  		expr->size = operand1->size; +		expr->is_signed = operand1->is_signed;  		expr->operator = field_op;  		expr->type = kstrdup_const(operand1->type, GFP_KERNEL); @@ -3935,6 +3938,7 @@ static int trace_action_create(struct hist_trigger_data *hist_data,  			var_ref_idx = find_var_ref_idx(hist_data, var_ref);  			if (WARN_ON(var_ref_idx < 0)) { +				kfree(p);  				ret = var_ref_idx;  				goto err;  			} @@ -6163,7 +6167,9 @@ static int event_hist_trigger_parse(struct event_command *cmd_ops,  	lockdep_assert_held(&event_mutex); -	if (glob && strlen(glob)) { +	WARN_ON(!glob); + +	if (strlen(glob)) {  		hist_err_clear();  		last_cmd_set(file, param);  	} @@ -6196,7 +6202,7 @@ static int event_hist_trigger_parse(struct event_command *cmd_ops,  			continue;  		}  		break; -	} while (p); +	} while (1);  	if (!p)  		param = NULL; |