Was there no response to this or did I just miss it?
- Ben
On Mon, 2008-05-26 at 15:07 -0400, Ben Gamari wrote:
> Hey all,
>
> I've been trying to use perfmon against the linus's tree on Core 2 and
> have been reasonably successful (besides some initial excepted merge
> conflicts in the sparc64 arch). Unfortunately, with debug output enabled
> on a preemptible kernel, much of the useful information produced by
> perfmon gets drowned out by preemptible kernel warnings because
> smp_processor_id() is called in PFM_DBG, i.e.
>
> BUG: using smp_processor_id() in preemptible [00000000] code:
> packing-benchma/23558
> caller is pfm_free_context+0x56/0x96
> Pid: 23558, comm: packing-benchma Not tainted
> 2.6.26-rc3-00627-g70e62a6-dirty #46
>
> Call Trace:
> [<ffffffff8039570b>] debug_smp_processor_id+0xb7/0xc8
> [<ffffffff8038a9d2>] pfm_free_context+0x56/0x96
> [<ffffffff80384a90>] __pfm_close+0x2e8/0x2fd
> [<ffffffff80384b21>] pfm_close+0x7c/0x81
> [<ffffffff802930ca>] __fput+0xac/0x170
> [<ffffffff802931a2>] fput+0x14/0x16
> [<ffffffff802904ae>] filp_close+0x66/0x71
> [<ffffffff8023bf2b>] put_files_struct+0x74/0xc8
> [<ffffffff8023bfc6>] exit_files+0x47/0x50
> [<ffffffff8023d761>] do_exit+0x26a/0x6ac
> [<ffffffff8023dc16>] do_group_exit+0x73/0xa0
> [<ffffffff8023dc55>] sys_exit_group+0x12/0x14
> [<ffffffff8020b43b>] system_call_after_swapgs+0x7b/0x80
>
> While I can see the value in having the processor ID in the debug
> output, having it in every PFM_DBG does seem a bit overkill. Regardless,
> in order to shut up these warnings, I simply surrounded the printk in
> preempt_[disable|enable]() (patch attached). Certainly not a great
> solution but it cleaned up debug output considerably. I'm not sure if
> anyone else has run across this case, but it might be worth considering
> fixing, even just for debug code. Thanks for the great framework,
>
> - Ben
>
>
>
> diff --git a/include/linux/perfmon_kern.h b/include/linux/perfmon_kern.h
> index 52773f1..998be07 100644
> --- a/include/linux/perfmon_kern.h
> +++ b/include/linux/perfmon_kern.h
> @@ -232,9 +232,11 @@ struct pfm_context {
> #define PFM_DBG(f, x...) \
> do { \
> if (unlikely(pfm_controls.debug > 0 && printk_ratelimit())) {
> \
> + preempt_disable(); \
> printk("perfmon: %s.%d: CPU%d [%d]: " f "\n", \
> __func__, __LINE__, \
> smp_processor_id(), current->pid , ## x); \
> + preempt_enable(); \
> } \
> } while (0)
>
> @@ -242,9 +244,11 @@ struct pfm_context {
> do { \
> if (unlikely(pfm_controls.debug_ovfl >0 \
> && printk_ratelimit())) { \
> + preempt_disable(); \
> printk("perfmon: %s.%d: CPU%d [%d]: " f "\n", \
> __func__, __LINE__, \
> smp_processor_id(), current->pid , ## x); \
> + preempt_enable(); \
> } \
> } while (0)
> #else
>
>
>
> -------------------------------------------------------------------------
> This SF.net email is sponsored by: Microsoft
> Defy all challenges. Microsoft(R) Visual Studio 2008.
> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
> _______________________________________________
> perfmon2-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/perfmon2-devel
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
perfmon2-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/perfmon2-devel