perf, x86: Extract DS alloc/free functions
authorPeter Zijlstra <a.p.zijlstra@chello.nl>
Tue, 19 Oct 2010 12:37:23 +0000 (14:37 +0200)
committerIngo Molnar <mingo@elte.hu>
Fri, 22 Oct 2010 12:18:25 +0000 (14:18 +0200)
Again, mostly a cleanup to unclutter the reserve_ds_buffer() code.

Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Acked-by: Stephane Eranian <eranian@google.com>
LKML-Reference: <20101019134808.304495776@chello.nl>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/kernel/cpu/perf_event_intel_ds.c

index 14d98bd52055cb9cb3d7c5f8950d3c0fcd98b045..3c86f4d2f02dbc8fbb804161d9e26534282c6dfa 100644 (file)
@@ -148,6 +148,30 @@ static void release_bts_buffer(int cpu)
        ds->bts_buffer_base = 0;
 }
 
+static int alloc_ds_buffer(int cpu)
+{
+       struct debug_store *ds;
+
+       ds = kzalloc(sizeof(*ds), GFP_KERNEL);
+       if (unlikely(!ds))
+               return -ENOMEM;
+
+       per_cpu(cpu_hw_events, cpu).ds = ds;
+
+       return 0;
+}
+
+static void release_ds_buffer(int cpu)
+{
+       struct debug_store *ds = per_cpu(cpu_hw_events, cpu).ds;
+
+       if (!ds)
+               return;
+
+       per_cpu(cpu_hw_events, cpu).ds = NULL;
+       kfree(ds);
+}
+
 static void release_ds_buffers(void)
 {
        int cpu;
@@ -160,16 +184,9 @@ static void release_ds_buffers(void)
                fini_debug_store_on_cpu(cpu);
 
        for_each_possible_cpu(cpu) {
-               struct debug_store *ds = per_cpu(cpu_hw_events, cpu).ds;
-
-               if (!ds)
-                       continue;
-
                release_pebs_buffer(cpu);
                release_bts_buffer(cpu);
-
-               per_cpu(cpu_hw_events, cpu).ds = NULL;
-               kfree(ds);
+               release_ds_buffer(cpu);
        }
        put_online_cpus();
 }
@@ -184,13 +201,8 @@ static int reserve_ds_buffers(void)
        get_online_cpus();
 
        for_each_possible_cpu(cpu) {
-               struct debug_store *ds;
-
-               err = -ENOMEM;
-               ds = kzalloc(sizeof(*ds), GFP_KERNEL);
-               if (unlikely(!ds))
+               if (alloc_ds_buffer(cpu))
                        break;
-               per_cpu(cpu_hw_events, cpu).ds = ds;
 
                if (alloc_bts_buffer(cpu))
                        break;