Web lists-archives.org

Re: oprofile BUG() in current kernel.




Gianni Tedesco a écrit :


Nope, exact same bad paging request in kernel mode... probably the bug
is something deep in oprofile then?
Hum... Are you using oprofile as a module or statically included in kernel ?

Current module loader only allocates percpu room by examining ".data.percpu" section and should be augmented to also look at ".data.percpu.shared_aligned" Or, change DEFINE_PER_CPU_SHARED_ALIGNED() for modules (to use ".data.percpu" only)

Anyway, with the per_cpu conversion of cpu_buffer, we dont need to request cache_line alignment anymore

[PATCH] oprofile: Dont request cache line alignment for cpu_buffer

Alignment was previously requested because cpu_buffer was an [NR_CPUS] array, to avoid cache line sharing between CPUS.

After commit 608dfddd845da5ab6accef70154c8910529699f7 ( oprofile: change cpu_buffer from array to per_cpu variable ), we dont need to force an alignement anymore since cpu_buffer sits in per_cpu zone.

Signed-off-by: Eric Dumazet <dada1@xxxxxxxxxxxxx>


diff --git a/drivers/oprofile/cpu_buffer.c b/drivers/oprofile/cpu_buffer.c
index efcbf4b..2450b3a 100644
--- a/drivers/oprofile/cpu_buffer.c
+++ b/drivers/oprofile/cpu_buffer.c
@@ -27,7 +27,7 @@
 #include "buffer_sync.h"
 #include "oprof.h"
 
-DEFINE_PER_CPU_SHARED_ALIGNED(struct oprofile_cpu_buffer, cpu_buffer);
+DEFINE_PER_CPU(struct oprofile_cpu_buffer, cpu_buffer);
 
 static void wq_sync_buffer(struct work_struct *work);
 
diff --git a/drivers/oprofile/cpu_buffer.h b/drivers/oprofile/cpu_buffer.h
index 1358817..c3e366b 100644
--- a/drivers/oprofile/cpu_buffer.h
+++ b/drivers/oprofile/cpu_buffer.h
@@ -46,7 +46,7 @@ struct oprofile_cpu_buffer {
 	unsigned long sample_invalid_eip;
 	int cpu;
 	struct delayed_work work;
-} ____cacheline_aligned;
+};
 
 DECLARE_PER_CPU(struct oprofile_cpu_buffer, cpu_buffer);