All of lore.kernel.org
 help / color / mirror / Atom feed
* [Xenomai-core] [PATCH 1/3] decouple spinlock stats from XENO_OPT_STATS
@ 2006-11-20 23:14 Jan Kiszka
  2006-11-21 16:40 ` Gilles Chanteperdrix
  2006-11-22  7:20 ` Jan Kiszka
  0 siblings, 2 replies; 7+ messages in thread
From: Jan Kiszka @ 2006-11-20 23:14 UTC (permalink / raw)
  To: xenomai-core


[-- Attachment #1.1: Type: text/plain, Size: 441 bytes --]

As recently discussed, the current implicit coupling of spinlock
statistics/debugging with the XENO_OPT_STATS switch is suboptimal. The
reason: on SMP, it adds noticeable overhead to the STATS feature which
may only be used for thread statistics collection (as also advertised in
the kconfig help).

This patch makes the spinlock debugging and lock length collection
feature only depend on XENO_OPT_DEBUG (as a first step).

Jan


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.2: decouple-spinlock-dbg-from-stats.patch --]
[-- Type: text/x-patch; name="decouple-spinlock-dbg-from-stats.patch", Size: 5093 bytes --]

---
 include/asm-generic/system.h |   35 ++++++++++++++++-------------------
 ksrc/nucleus/module.c        |   22 +++++++++++-----------
 2 files changed, 27 insertions(+), 30 deletions(-)

Index: xenomai/include/asm-generic/system.h
===================================================================
--- xenomai.orig/include/asm-generic/system.h
+++ xenomai/include/asm-generic/system.h
@@ -71,9 +71,7 @@ typedef unsigned long spl_t;
 #define spltest()   rthal_local_irq_test()
 #define splget(x)   rthal_local_irq_flags(x)
 
-#if defined(CONFIG_SMP) && \
-    (defined(CONFIG_XENO_OPT_STATS) || defined(CONFIG_XENO_OPT_DEBUG))
-
+#if defined(CONFIG_SMP) && defined(CONFIG_XENO_OPT_DEBUG)
 typedef struct {
 
         unsigned long long spin_time;
@@ -96,25 +94,24 @@ typedef struct {
 
 } xnlock_t;
 
-#define XNARCH_LOCK_UNLOCKED (xnlock_t) {       \
-	{ ~0 },				        \
-        NULL,                                   \
-        NULL,                                   \
-        0,                                      \
-        -1,                                     \
-        0LL,                                    \
-        0LL,                                    \
+#define XNARCH_LOCK_UNLOCKED (xnlock_t) {	\
+	{ ~0 },					\
+	NULL,					\
+	NULL,					\
+	0,					\
+	-1,					\
+	0LL,					\
+	0LL,					\
 }
 
 #define CONFIG_XENO_SPINLOCK_DEBUG  1
 
-#else /* !(CONFIG_XENO_OPT_STATS && CONFIG_SMP) */
+#else /* !(CONFIG_SMP && CONFIG_XENO_OPT_DEBUG) */
 
 typedef struct { atomic_t owner; } xnlock_t;
 
 #define XNARCH_LOCK_UNLOCKED (xnlock_t) { { ~0 } }
-
-#endif /* CONFIG_XENO_OPT_STATS && CONFIG_SMP */
+#endif /* CONFIG_SMP && CONFIG_XENO_OPT_DEBUG */
 
 #define XNARCH_NR_CPUS               RTHAL_NR_CPUS
 
@@ -253,7 +250,7 @@ static inline int __xnlock_get (xnlock_t
 #else /* !CONFIG_XENO_SPINLOCK_DEBUG */
 static inline int __xnlock_get (xnlock_t *lock)
 {
-#endif /* !CONFIG_XENO_SPINLOCK_DEBUG */
+#endif /* CONFIG_XENO_SPINLOCK_DEBUG */
     rthal_declare_cpuid;
     int recursing;
 
@@ -304,7 +301,7 @@ static inline void xnlock_put (xnlock_t 
     rthal_load_cpuid();
     if (likely(atomic_read(&lock->owner) == cpuid)) {
 
-#ifdef CONFIG_XENO_OPT_STATS
+#ifdef CONFIG_XENO_SPINLOCK_DEBUG
 	    extern xnlockinfo_t xnlock_stats[];
 
 	    unsigned long long lock_time = rthal_rdtsc() - lock->lock_date;
@@ -316,7 +313,7 @@ static inline void xnlock_put (xnlock_t 
 		    xnlock_stats[cpuid].function = lock->function;
 		    xnlock_stats[cpuid].line = lock->line;
 	    }
-#endif /* CONFIG_XENO_OPT_STATS */
+#endif /* CONFIG_XENO_SPINLOCK_DEBUG */
 	    atomic_set(&lock->owner, ~0);
     }
 #ifdef CONFIG_XENO_SPINLOCK_DEBUG
@@ -343,7 +340,7 @@ static inline spl_t __xnlock_get_irqsave
 #else /* !CONFIG_XENO_SPINLOCK_DEBUG */
 static inline spl_t __xnlock_get_irqsave (xnlock_t *lock)
 {
-#endif /* !CONFIG_XENO_SPINLOCK_DEBUG */
+#endif /* CONFIG_XENO_SPINLOCK_DEBUG */
     unsigned long flags;
 
     rthal_local_irq_save(flags);
@@ -354,7 +351,7 @@ static inline spl_t __xnlock_get_irqsave
 #else /* !CONFIG_XENO_SPINLOCK_DEBUG */
     if (__xnlock_get(lock))
 	    flags |= 2;
-#endif /* !CONFIG_XENO_SPINLOCK_DEBUG */
+#endif /* CONFIG_XENO_SPINLOCK_DEBUG */
 	
     return flags;
 }
Index: xenomai/ksrc/nucleus/module.c
===================================================================
--- xenomai.orig/ksrc/nucleus/module.c
+++ xenomai/ksrc/nucleus/module.c
@@ -472,7 +472,9 @@ static struct file_operations stat_seq_o
 	.release = seq_release_private,
 };
 
-#ifdef CONFIG_SMP
+#endif /* CONFIG_XENO_OPT_STATS */
+
+#ifdef CONFIG_XENO_SPINLOCK_DEBUG
 
 xnlockinfo_t xnlock_stats[RTHAL_NR_CPUS];
 
@@ -520,9 +522,7 @@ static int lock_read_proc(char *page,
 
 EXPORT_SYMBOL(xnlock_stats);
 
-#endif /* CONFIG_SMP */
-
-#endif /* CONFIG_XENO_OPT_STATS */
+#endif /* CONFIG_XENO_SPINLOCK_DEBUG */
 
 static int latency_read_proc(char *page,
 			     char **start,
@@ -741,12 +741,12 @@ void xnpod_init_proc(void)
 
 #ifdef CONFIG_XENO_OPT_STATS
 	add_proc_fops("stat", &stat_seq_operations, 0, rthal_proc_root);
-#ifdef CONFIG_SMP
-	add_proc_leaf("lock", &lock_read_proc, NULL, NULL, rthal_proc_root);
-#endif /* CONFIG_SMP */
-
 #endif /* CONFIG_XENO_OPT_STATS */
 
+#ifdef CONFIG_XENO_SPINLOCK_DEBUG
+	add_proc_leaf("lock", &lock_read_proc, NULL, NULL, rthal_proc_root);
+#endif /* CONFIG_XENO_SPINLOCK_DEBUG */
+
 	add_proc_leaf("latency",
 		      &latency_read_proc,
 		      &latency_write_proc, NULL, rthal_proc_root);
@@ -786,10 +786,10 @@ void xnpod_delete_proc(void)
 	remove_proc_entry("sched", rthal_proc_root);
 #ifdef CONFIG_XENO_OPT_STATS
 	remove_proc_entry("stat", rthal_proc_root);
-#ifdef CONFIG_SMP
-	remove_proc_entry("lock", rthal_proc_root);
-#endif /* CONFIG_SMP */
 #endif /* CONFIG_XENO_OPT_STATS */
+#ifdef CONFIG_XENO_SPINLOCK_DEBUG
+	remove_proc_entry("lock", rthal_proc_root);
+#endif /* CONFIG_XENO_SPINLOCK_DEBUG */
 }
 
 #ifdef CONFIG_XENO_OPT_PERVASIVE


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 250 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2006-12-04  9:20 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-11-20 23:14 [Xenomai-core] [PATCH 1/3] decouple spinlock stats from XENO_OPT_STATS Jan Kiszka
2006-11-21 16:40 ` Gilles Chanteperdrix
2006-11-21 17:09   ` Jan Kiszka
2006-11-21 17:28     ` Philippe Gerum
2006-11-22  7:20 ` Jan Kiszka
2006-12-02 18:29   ` Philippe Gerum
2006-12-04  9:20     ` Gilles Chanteperdrix

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.