Re: [PATCH 2/2] hw_breakpoint: Use cpu_possible_mask in {reserve,release}_bp_slot()

2013-06-15 Thread Frederic Weisbecker
On Sat, Jun 01, 2013 at 08:21:39PM +0200, Oleg Nesterov wrote:
> fetch_bp_busy_slots() and toggle_bp_slot() use for_each_online_cpu(),
> this is obviously wrong wrt cpu_up() or cpu_down(), we can over/under
> account the per-cpu numbers.
> 
> For example:
> 
>   # echo 0 >> /sys/devices/system/cpu/cpu1/online
>   # perf record -e mem:0x10 -p 1 &
>   # echo 1 >> /sys/devices/system/cpu/cpu1/online
>   # perf record -e mem:0x10,mem:0x10,mem:0x10,mem:0x10 -C1 -a &
>   # taskset -p 0x2 1
> 
> triggers the same WARN_ONCE("Can't find any breakpoint slot") in
> arch_install_hw_breakpoint().
> 
> Signed-off-by: Oleg Nesterov 
> Cc: 

Acked-by: Frederic Weisbecker 
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 2/2] hw_breakpoint: Use cpu_possible_mask in {reserve,release}_bp_slot()

2013-06-15 Thread Frederic Weisbecker
On Sat, Jun 01, 2013 at 08:21:39PM +0200, Oleg Nesterov wrote:
 fetch_bp_busy_slots() and toggle_bp_slot() use for_each_online_cpu(),
 this is obviously wrong wrt cpu_up() or cpu_down(), we can over/under
 account the per-cpu numbers.
 
 For example:
 
   # echo 0  /sys/devices/system/cpu/cpu1/online
   # perf record -e mem:0x10 -p 1 
   # echo 1  /sys/devices/system/cpu/cpu1/online
   # perf record -e mem:0x10,mem:0x10,mem:0x10,mem:0x10 -C1 -a 
   # taskset -p 0x2 1
 
 triggers the same WARN_ONCE(Can't find any breakpoint slot) in
 arch_install_hw_breakpoint().
 
 Signed-off-by: Oleg Nesterov o...@redhat.com
 Cc: sta...@vger.kernel.org

Acked-by: Frederic Weisbecker fweis...@gmail.com
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 2/2] hw_breakpoint: Use cpu_possible_mask in {reserve,release}_bp_slot()

2013-06-01 Thread Oleg Nesterov
fetch_bp_busy_slots() and toggle_bp_slot() use for_each_online_cpu(),
this is obviously wrong wrt cpu_up() or cpu_down(), we can over/under
account the per-cpu numbers.

For example:

# echo 0 >> /sys/devices/system/cpu/cpu1/online
# perf record -e mem:0x10 -p 1 &
# echo 1 >> /sys/devices/system/cpu/cpu1/online
# perf record -e mem:0x10,mem:0x10,mem:0x10,mem:0x10 -C1 -a &
# taskset -p 0x2 1

triggers the same WARN_ONCE("Can't find any breakpoint slot") in
arch_install_hw_breakpoint().

Signed-off-by: Oleg Nesterov 
Cc: 
---
 kernel/events/hw_breakpoint.c |4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/kernel/events/hw_breakpoint.c b/kernel/events/hw_breakpoint.c
index 29d3abe..4407e43 100644
--- a/kernel/events/hw_breakpoint.c
+++ b/kernel/events/hw_breakpoint.c
@@ -149,7 +149,7 @@ fetch_bp_busy_slots(struct bp_busy_slots *slots, struct 
perf_event *bp,
return;
}
 
-   for_each_online_cpu(cpu) {
+   for_each_possible_cpu(cpu) {
unsigned int nr;
 
nr = per_cpu(nr_cpu_bp_pinned[type], cpu);
@@ -235,7 +235,7 @@ toggle_bp_slot(struct perf_event *bp, bool enable, enum 
bp_type_idx type,
if (cpu >= 0) {
toggle_bp_task_slot(bp, cpu, enable, type, weight);
} else {
-   for_each_online_cpu(cpu)
+   for_each_possible_cpu(cpu)
toggle_bp_task_slot(bp, cpu, enable, type, weight);
}
 
-- 
1.5.5.1


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 2/2] hw_breakpoint: Use cpu_possible_mask in {reserve,release}_bp_slot()

2013-06-01 Thread Oleg Nesterov
fetch_bp_busy_slots() and toggle_bp_slot() use for_each_online_cpu(),
this is obviously wrong wrt cpu_up() or cpu_down(), we can over/under
account the per-cpu numbers.

For example:

# echo 0  /sys/devices/system/cpu/cpu1/online
# perf record -e mem:0x10 -p 1 
# echo 1  /sys/devices/system/cpu/cpu1/online
# perf record -e mem:0x10,mem:0x10,mem:0x10,mem:0x10 -C1 -a 
# taskset -p 0x2 1

triggers the same WARN_ONCE(Can't find any breakpoint slot) in
arch_install_hw_breakpoint().

Signed-off-by: Oleg Nesterov o...@redhat.com
Cc: sta...@vger.kernel.org
---
 kernel/events/hw_breakpoint.c |4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/kernel/events/hw_breakpoint.c b/kernel/events/hw_breakpoint.c
index 29d3abe..4407e43 100644
--- a/kernel/events/hw_breakpoint.c
+++ b/kernel/events/hw_breakpoint.c
@@ -149,7 +149,7 @@ fetch_bp_busy_slots(struct bp_busy_slots *slots, struct 
perf_event *bp,
return;
}
 
-   for_each_online_cpu(cpu) {
+   for_each_possible_cpu(cpu) {
unsigned int nr;
 
nr = per_cpu(nr_cpu_bp_pinned[type], cpu);
@@ -235,7 +235,7 @@ toggle_bp_slot(struct perf_event *bp, bool enable, enum 
bp_type_idx type,
if (cpu = 0) {
toggle_bp_task_slot(bp, cpu, enable, type, weight);
} else {
-   for_each_online_cpu(cpu)
+   for_each_possible_cpu(cpu)
toggle_bp_task_slot(bp, cpu, enable, type, weight);
}
 
-- 
1.5.5.1


--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/