Re: [RT] seqlocks: use of PICK_FUNCTION breaks kernel compile whenCONFIG_GENERIC_TIME is NOT set
From: Daniel Walker
Date: Mon Oct 22 2007 - 14:56:29 EST
On Wed, 2007-10-17 at 11:34 -0400, Steven Rostedt wrote:
>
> Hmm, what about a __seq_irqsave_raw and __seq_nop?
>
> That way it spells out that irqs are NOT touched if it is not a raw lock.
I took out the nop , and just did a save flags which makes sense.. There
is still more cleanup to do in that regard.
Signed-off-by: Daniel Walker <dwalker@xxxxxxxxxx>
---
include/linux/seqlock.h | 26 +++++++++++++++-----------
1 file changed, 15 insertions(+), 11 deletions(-)
Index: linux-2.6.23/include/linux/seqlock.h
===================================================================
--- linux-2.6.23.orig/include/linux/seqlock.h
+++ linux-2.6.23/include/linux/seqlock.h
@@ -92,8 +92,11 @@ static inline void __write_seqlock(seqlo
static __always_inline unsigned long __write_seqlock_irqsave(seqlock_t *sl)
{
+ unsigned long flags;
+
+ local_save_flags(flags);
__write_seqlock(sl);
- return 0;
+ return flags;
}
static inline void __write_sequnlock(seqlock_t *sl)
@@ -280,26 +283,27 @@ do { \
PICK_SEQ_OP(__write_sequnlock_irq_raw, __write_sequnlock, lock)
static __always_inline
-unsigned long __read_seqbegin_irqsave_raw(raw_seqlock_t *sl)
+unsigned long __seq_irqsave_raw(raw_seqlock_t *sl)
{
unsigned long flags;
local_irq_save(flags);
- __read_seqbegin_raw(sl);
return flags;
}
-static __always_inline unsigned long __read_seqbegin_irqsave(seqlock_t *sl)
+static __always_inline unsigned long __seq_irqsave(seqlock_t *sl)
{
- __read_seqbegin(sl);
- return 0;
+ unsigned long flags;
+
+ local_save_flags(flags);
+ return flags;
}
-#define read_seqbegin_irqsave(lock, flags) \
-do { \
- flags = PICK_SEQ_OP_RET(__read_seqbegin_irqsave_raw, \
- __read_seqbegin_irqsave, lock); \
-} while (0)
+#define read_seqbegin_irqsave(lock, flags) \
+({ \
+ flags = PICK_SEQ_OP_RET(__seq_irqsave_raw, __seq_irqsave, lock);\
+ read_seqbegin(lock); \
+})
static __always_inline int
__read_seqretry_irqrestore(seqlock_t *sl, unsigned iv, unsigned long flags)
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/