mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-09 04:10:18 +09:00
Merge tag 'v4.9.117' into odroidn2-4.9.y
This is the 4.9.117 stable release
This commit is contained in:
@@ -678,6 +678,8 @@ event_trigger_callback(struct event_command *cmd_ops,
|
||||
goto out_free;
|
||||
|
||||
out_reg:
|
||||
/* Up the trigger_data count to make sure reg doesn't free it on failure */
|
||||
event_trigger_init(trigger_ops, trigger_data);
|
||||
ret = cmd_ops->reg(glob, trigger_ops, trigger_data, file);
|
||||
/*
|
||||
* The above returns on success the # of functions enabled,
|
||||
@@ -685,11 +687,13 @@ event_trigger_callback(struct event_command *cmd_ops,
|
||||
* Consider no functions a failure too.
|
||||
*/
|
||||
if (!ret) {
|
||||
cmd_ops->unreg(glob, trigger_ops, trigger_data, file);
|
||||
ret = -ENOENT;
|
||||
goto out_free;
|
||||
} else if (ret < 0)
|
||||
goto out_free;
|
||||
ret = 0;
|
||||
} else if (ret > 0)
|
||||
ret = 0;
|
||||
|
||||
/* Down the counter of trigger_data or free it if not used anymore */
|
||||
event_trigger_free(trigger_ops, trigger_data);
|
||||
out:
|
||||
return ret;
|
||||
|
||||
@@ -1385,6 +1389,9 @@ int event_enable_trigger_func(struct event_command *cmd_ops,
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Up the trigger_data count to make sure nothing frees it on failure */
|
||||
event_trigger_init(trigger_ops, trigger_data);
|
||||
|
||||
if (trigger) {
|
||||
number = strsep(&trigger, ":");
|
||||
|
||||
@@ -1435,6 +1442,7 @@ int event_enable_trigger_func(struct event_command *cmd_ops,
|
||||
goto out_disable;
|
||||
/* Just return zero, not the number of enabled functions */
|
||||
ret = 0;
|
||||
event_trigger_free(trigger_ops, trigger_data);
|
||||
out:
|
||||
return ret;
|
||||
|
||||
@@ -1445,7 +1453,7 @@ int event_enable_trigger_func(struct event_command *cmd_ops,
|
||||
out_free:
|
||||
if (cmd_ops->set_filter)
|
||||
cmd_ops->set_filter(NULL, trigger_data, NULL);
|
||||
kfree(trigger_data);
|
||||
event_trigger_free(trigger_ops, trigger_data);
|
||||
kfree(enable_data);
|
||||
goto out;
|
||||
}
|
||||
|
||||
@@ -359,11 +359,10 @@ static struct trace_kprobe *find_trace_kprobe(const char *event,
|
||||
static int
|
||||
enable_trace_kprobe(struct trace_kprobe *tk, struct trace_event_file *file)
|
||||
{
|
||||
struct event_file_link *link = NULL;
|
||||
int ret = 0;
|
||||
|
||||
if (file) {
|
||||
struct event_file_link *link;
|
||||
|
||||
link = kmalloc(sizeof(*link), GFP_KERNEL);
|
||||
if (!link) {
|
||||
ret = -ENOMEM;
|
||||
@@ -383,6 +382,18 @@ enable_trace_kprobe(struct trace_kprobe *tk, struct trace_event_file *file)
|
||||
else
|
||||
ret = enable_kprobe(&tk->rp.kp);
|
||||
}
|
||||
|
||||
if (ret) {
|
||||
if (file) {
|
||||
/* Notice the if is true on not WARN() */
|
||||
if (!WARN_ON_ONCE(!link))
|
||||
list_del_rcu(&link->list);
|
||||
kfree(link);
|
||||
tk->tp.flags &= ~TP_FLAG_TRACE;
|
||||
} else {
|
||||
tk->tp.flags &= ~TP_FLAG_PROFILE;
|
||||
}
|
||||
}
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user