From: Mike Travis <travis@sgi.com>
To: Ingo Molnar <mingo@elte.hu>, Andrew Morton <akpm@linux-foundation.org>
Cc: davej@codemonkey.org.uk, David Miller <davem@davemloft.net>,
Eric Dumazet <dada1@cosmosbay.com>,
"Eric W. Biederman" <ebiederm@xmission.com>,
Jack Steiner <steiner@sgi.com>,
Jeremy Fitzhardinge <jeremy@goop.org>, Jes Sorensen <jes@sgi.com>,
"H. Peter Anvin" <hpa@zytor.com>,
Thomas Gleixner <tglx@linutronix.de>,
linux-kernel@vger.kernel.org
Subject: [RFC 05/13] cpumask: add get_cpumask_var debug operations
Date: Sat, 06 Sep 2008 16:50:41 -0700 [thread overview]
Message-ID: <20080906235037.608279000@polaris-admin.engr.sgi.com> (raw)
In-Reply-To: <20080906235036.891970000@polaris-admin.engr.sgi.com>
[-- Attachment #1: get_cpumask_var-debug --]
[-- Type: text/plain, Size: 2459 bytes --]
* Adds debugging to the get_cpumask_var operations. It uses a primitive
per_cpu lock variable and will only discover nested get_cpumask_var
operations on the same variable.
Applies to linux-2.6.tip/master.
Signed-off-by: Mike Travis <travis@sgi.com>
---
arch/x86/Kconfig.debug | 12 ++++++++++++
include/linux/cpumask_ptr.h | 34 ++++++++++++++++++++++++++++++++++
2 files changed, 46 insertions(+)
--- linux-2.6.tip.orig/arch/x86/Kconfig.debug
+++ linux-2.6.tip/arch/x86/Kconfig.debug
@@ -92,6 +92,18 @@ config DEBUG_PER_CPU_MAPS
Say N if unsure.
+config DEBUG_PER_CPUMASK_VAR
+ bool "Debug per_cpumask variables"
+ depends on DEBUG_KERNEL
+ depends on X86_SMP
+ default n
+ help
+ Say Y to verify that the per_cpumask variables being accessed
+ are available. Adds a fair amount of code to kernel memory
+ and decreases performance.
+
+ Say N if unsure.
+
config X86_PTDUMP
bool "Export kernel pagetable layout to userspace via debugfs"
depends on DEBUG_KERNEL
--- linux-2.6.tip.orig/include/linux/cpumask_ptr.h
+++ linux-2.6.tip/include/linux/cpumask_ptr.h
@@ -53,11 +53,45 @@ static inline void free_cpumask_ptr(cpum
{
kfree(*p);
}
+
+#ifndef CONFIG_DEBUG_CPUMASK_VAR
#define DEFINE_PER_CPUMASK(v) DEFINE_PER_CPU(cpumask_t, v)
#define DECLARE_PER_CPUMASK(v) DECLARE_PER_CPU(cpumask_t, v)
#define get_cpumask_var(p, v) _get_cpumask_ptr(&(p), &get_cpu_var(v))
#define put_cpumask_var(p, v) put_cpu_var(v)
+#else /* CONFIG_DEBUG_CPUMASK_VAR */
+#define DEFINE_PER_CPUMASK(v) DEFINE_PER_CPU(cpumask_t, v); \
+ DEFINE_PER_CPU(char, lock_##v)
+#define DECLARE_PER_CPUMASK(v) DECLARE_PER_CPU(cpumask_t, v); \
+ DECLARE_PER_CPU(char, lock_##v)
+
+#define get_cpumask_var(p, v) { \
+ char *lock = &get_cpu_var(lock_##v); \
+ if (*lock) { \
+ printk(KERN_NOTICE "get_cpumask_var(" v "): " \
+ "already locked!\n"); \
+ dump_stack(); \
+ BUG(); \
+ } \
+ *lock = 1; \
+ _get_cpumask_ptr(&(p), &get_cpu_var(v)) \
+ put_cpu_var(lock_##v); \
+}
+
+#define put_cpumask_var(p, v) { \
+ char *lock = &get_cpu_var(lock_##v); \
+ if (!*lock) { \
+ printk(KERN_NOTICE "put_cpumask_var(" v "): " \
+ "not locked!\n"); \
+ dump_stack(); \
+ } \
+ *lock = 0; \
+ put_cpu_var(lock_##v); \
+ put_cpu_var(v); \
+}
+#endif /* CONFIG_DEBUG_CPUMASK_VAR */
+
#endif /* NR_CPUS > BITS_PER_LONG */
#endif /* __LINUX_CPUMASK_PTR_H */
--
next prev parent reply other threads:[~2008-09-06 23:52 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-09-06 23:50 [RFC 00/13] smp: reduce stack requirements for genapic send_IPI_mask functions Mike Travis
2008-09-06 23:50 ` [RFC 01/13] smp: modify send_IPI_mask interface to accept cpumask_t pointers Mike Travis
2008-09-06 23:50 ` [RFC 02/13] cpumask: add for_each_online_cpu_mask_nr function Mike Travis
2008-09-06 23:50 ` [RFC 03/13] xen: use new " Mike Travis
2008-09-06 23:50 ` [RFC 04/13] cpumask: add cpumask_ptr operations Mike Travis
2008-09-06 23:50 ` Mike Travis [this message]
2008-09-06 23:50 ` [RFC 06/13] genapic: use get_cpumask_var operations for allbutself cpumask_ts Mike Travis
2008-09-06 23:50 ` [RFC 07/13] sched: Reduce stack size requirements in kernel/sched.c Mike Travis
2008-09-07 10:24 ` Peter Zijlstra
2008-09-07 11:00 ` Andrew Morton
2008-09-07 13:05 ` Peter Zijlstra
2008-09-08 14:56 ` Mike Travis
2008-09-07 20:28 ` Peter Zijlstra
2008-09-08 14:54 ` Mike Travis
2008-09-08 15:05 ` Peter Zijlstra
2008-09-08 18:38 ` Ingo Molnar
2008-09-10 22:47 ` [RFC] CPUMASK: proposal for replacing cpumask_t Mike Travis
2008-09-10 22:53 ` Andi Kleen
2008-09-10 23:33 ` Mike Travis
2008-09-11 5:21 ` Andi Kleen
2008-09-11 9:00 ` Peter Zijlstra
2008-09-11 15:04 ` Mike Travis
2008-09-12 4:55 ` Rusty Russell
2008-09-12 14:28 ` Mike Travis
2008-09-12 22:02 ` Rusty Russell
2008-09-12 22:50 ` Mike Travis
2008-09-12 22:58 ` H. Peter Anvin
2008-09-06 23:50 ` [RFC 08/13] cpufreq: Reduce stack size requirements in acpi-cpufreq.c Mike Travis
2008-09-06 23:50 ` [RFC 09/13] genapic: reduce stack pressuge in io_apic.c step 1 temp cpumask_ts Mike Travis
2008-09-08 11:01 ` Andi Kleen
2008-09-08 16:03 ` Mike Travis
2008-09-06 23:50 ` [RFC 10/13] genapic: reduce stack pressuge in io_apic.c step 2 internal abi Mike Travis
2008-09-06 23:50 ` [RFC 11/13] genapic: reduce stack pressuge in io_apic.c step 3 target_cpus Mike Travis
2008-09-07 7:55 ` Bert Wesarg
2008-09-07 9:13 ` Ingo Molnar
2008-09-08 15:01 ` Mike Travis
2008-09-08 15:29 ` Mike Travis
2008-09-06 23:50 ` [RFC 12/13] genapic: reduce stack pressuge in io_apic.c step 4 vector allocation Mike Travis
2008-09-06 23:50 ` [RFC 13/13] genapic: reduce stack pressuge in io_apic.c step 5 cpu_mask_to_apicid Mike Travis
2008-09-07 7:36 ` [RFC 00/13] smp: reduce stack requirements for genapic send_IPI_mask functions Ingo Molnar
2008-09-08 15:17 ` Mike Travis
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20080906235037.608279000@polaris-admin.engr.sgi.com \
--to=travis@sgi.com \
--cc=akpm@linux-foundation.org \
--cc=dada1@cosmosbay.com \
--cc=davej@codemonkey.org.uk \
--cc=davem@davemloft.net \
--cc=ebiederm@xmission.com \
--cc=hpa@zytor.com \
--cc=jeremy@goop.org \
--cc=jes@sgi.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=steiner@sgi.com \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®