summaryrefslogtreecommitdiffstats
path: root/kernel/hw_breakpoint.c
diff options
context:
space:
mode:
authorMark Brown <broonie@opensource.wolfsonmicro.com>2010-01-25 14:52:48 +0000
committerMark Brown <broonie@opensource.wolfsonmicro.com>2010-01-25 14:52:48 +0000
commitf1487fcbe47cd2bc0c71e8598bf9eb6a82dec544 (patch)
tree4c7abed6047538c13dd024a8ecffd15f31b4609a /kernel/hw_breakpoint.c
parent84549d239ab9bb2e3a85c6efcf0e6478a38b4260 (diff)
parent40aa7030e5213a43e9e0554fd7f95534ea310bf3 (diff)
downloadkernel-crypto-f1487fcbe47cd2bc0c71e8598bf9eb6a82dec544.tar.gz
kernel-crypto-f1487fcbe47cd2bc0c71e8598bf9eb6a82dec544.tar.xz
kernel-crypto-f1487fcbe47cd2bc0c71e8598bf9eb6a82dec544.zip
Merge branch 'for-2.6.33' into for-2.6.34
Diffstat (limited to 'kernel/hw_breakpoint.c')
-rw-r--r--kernel/hw_breakpoint.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/kernel/hw_breakpoint.c b/kernel/hw_breakpoint.c
index dbcbf6a33a0..50dbd599958 100644
--- a/kernel/hw_breakpoint.c
+++ b/kernel/hw_breakpoint.c
@@ -40,6 +40,7 @@
#include <linux/percpu.h>
#include <linux/sched.h>
#include <linux/init.h>
+#include <linux/cpu.h>
#include <linux/smp.h>
#include <linux/hw_breakpoint.h>
@@ -388,7 +389,8 @@ register_wide_hw_breakpoint(struct perf_event_attr *attr,
if (!cpu_events)
return ERR_PTR(-ENOMEM);
- for_each_possible_cpu(cpu) {
+ get_online_cpus();
+ for_each_online_cpu(cpu) {
pevent = per_cpu_ptr(cpu_events, cpu);
bp = perf_event_create_kernel_counter(attr, cpu, -1, triggered);
@@ -399,18 +401,20 @@ register_wide_hw_breakpoint(struct perf_event_attr *attr,
goto fail;
}
}
+ put_online_cpus();
return cpu_events;
fail:
- for_each_possible_cpu(cpu) {
+ for_each_online_cpu(cpu) {
pevent = per_cpu_ptr(cpu_events, cpu);
if (IS_ERR(*pevent))
break;
unregister_hw_breakpoint(*pevent);
}
+ put_online_cpus();
+
free_percpu(cpu_events);
- /* return the error if any */
return ERR_PTR(err);
}
EXPORT_SYMBOL_GPL(register_wide_hw_breakpoint);