OSDN Git Service

Merge tag 'asm-generic-5.18' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd...
[uclinux-h8/linux.git] / kernel / events / core.c
index 11ca730..cfde994 100644 (file)
@@ -839,7 +839,7 @@ static DEFINE_PER_CPU(struct list_head, cgrp_cpuctx_list);
  */
 static void perf_cgroup_switch(struct task_struct *task, int mode)
 {
-       struct perf_cpu_context *cpuctx;
+       struct perf_cpu_context *cpuctx, *tmp;
        struct list_head *list;
        unsigned long flags;
 
@@ -850,7 +850,7 @@ static void perf_cgroup_switch(struct task_struct *task, int mode)
        local_irq_save(flags);
 
        list = this_cpu_ptr(&cgrp_cpuctx_list);
-       list_for_each_entry(cpuctx, list, cgrp_cpuctx_entry) {
+       list_for_each_entry_safe(cpuctx, tmp, list, cgrp_cpuctx_entry) {
                WARN_ON_ONCE(cpuctx->ctx.nr_cgroups == 0);
 
                perf_ctx_lock(cpuctx, cpuctx->task_ctx);
@@ -10528,8 +10528,6 @@ perf_event_parse_addr_filter(struct perf_event *event, char *fstr,
                 */
                if (state == IF_STATE_END) {
                        ret = -EINVAL;
-                       if (kernel && event->attr.exclude_kernel)
-                               goto fail;
 
                        /*
                         * ACTION "filter" must have a non-zero length region
@@ -10571,8 +10569,11 @@ perf_event_parse_addr_filter(struct perf_event *event, char *fstr,
                        }
 
                        /* ready to consume more filters */
+                       kfree(filename);
+                       filename = NULL;
                        state = IF_STATE_ACTION;
                        filter = NULL;
+                       kernel = 0;
                }
        }