Re: [RT] seqlocks: use of PICK_FUNCTION breaks kernel compile when CONFIG_GENERIC_TIME is NOT set

Previous thread: [FB] au1100fb: Fix modpost warnings. by Ralf Baechle on Wednesday, October 17, 2007 - 10:33 am. (1 message)

Next thread: [PATCH 2.6.23] SysRq: print hotkey info while pressing undef key, try 2 by Yi Yang on Wednesday, October 17, 2007 - 11:22 am. (8 messages)
To: Daniel Walker <dwalker@...>
Cc: Remy Bohmer <linux@...>, Ingo Molnar <mingo@...>, LKML <linux-kernel@...>, RT <linux-rt-users@...>, Thomas Gleixner <tglx@...>
Date: Wednesday, October 17, 2007 - 11:10 am

Thanks, it may have been a while before I see this (/me has been nose

Yes, definitely the raw and unraw functions should be called
local_irqsave_raw or something else that makes this obvious to what it
is doing.

-- Steve

-

To: Steven Rostedt <rostedt@...>
Cc: Remy Bohmer <linux@...>, Ingo Molnar <mingo@...>, LKML <linux-kernel@...>, RT <linux-rt-users@...>, Thomas Gleixner <tglx@...>
Date: Wednesday, October 17, 2007 - 11:24 am

Hmm.. I'm not sure what else to name them .. Since it's in the seqlock.h
I don't think it should be called anything "local_irq*" .. It could be
seq_irqsave_{raw} .

Daniel

-

To: Daniel Walker <dwalker@...>
Cc: Remy Bohmer <linux@...>, Ingo Molnar <mingo@...>, LKML <linux-kernel@...>, RT <linux-rt-users@...>, Thomas Gleixner <tglx@...>
Date: Wednesday, October 17, 2007 - 11:34 am

--

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.

-- Steve

-

To: Steven Rostedt <rostedt@...>
Cc: Remy Bohmer <linux@...>, Ingo Molnar <mingo@...>, LKML <linux-kernel@...>, RT <linux-rt-users@...>, Thomas Gleixner <tglx@...>
Date: Monday, October 22, 2007 - 2:53 pm

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@mvista.com>

---
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)

-

Previous thread: [FB] au1100fb: Fix modpost warnings. by Ralf Baechle on Wednesday, October 17, 2007 - 10:33 am. (1 message)

Next thread: [PATCH 2.6.23] SysRq: print hotkey info while pressing undef key, try 2 by Yi Yang on Wednesday, October 17, 2007 - 11:22 am. (8 messages)