Skip to contentSkip to conversation

sandbox: change local_irq_save() to macro

PATCH New Masahiro Yamada 3 participants 3 messages Jun 12, 2014 Bitops API

lore
Share & tools
lore
#0 lore raw

PATCH v2 1/1 sandbox: change local_irq_save() to macro

local_irq_save() should be a macro, not a function because local_irq_save() saves flag to the given argument.

GCC is silent about this issue, but Clang warns:

In file included from lib/asm-offsets.c:15:
In file included from include/common.h:20:
In file included from include/linux/bitops.h:110:
arch/sandbox/include/asm/bitops.h:59:17:
warning: variable 'flags' is uninitialized when used here

      [-Wuninitialized]
        local_irq_save(flags);
                       ^~~~~

That change causes another warning:

In file included from include/linux/bitops.h:110:0,

                 from include/common.h:20,
                 from lib/asm-offsets.c:15:

arch/sandbox/include/asm/bitops.h: In function ?test_and_set_bit?:
arch/sandbox/include/asm/bitops.h:56:16: warning: unused variable ?flags? [-Wunused-variable]

So, flags should be set to __always_unused.

Cc Simon Glass <[email protected]>
Cc Jeroen Hofstee <[email protected]>

---

Changes in v2:
- I forgot to "git add arch/sandbox/include/asm/bitops.h" in v1 Resending.

 arch/sandbox/include/asm/bitops.h | 5 +++--
 arch/sandbox/include/asm/system.h | 5 +----
 2 files changed, 4 insertions(+), 6 deletions(-)
arch/sandbox/include/asm/bitops.h +3 -2
index 74219c5..e807c4e 100644
@@ -17,6 +17,7 @@
 #ifndef __ASM_SANDBOX_BITOPS_H
 #define __ASM_SANDBOX_BITOPS_H
 
+#include <linux/compiler.h>
 #include <asm/system.h>
 
 #ifdef __KERNEL__
@@ -53,7 +54,7 @@ static inline int __test_and_set_bit(int nr, void *addr)
 
 static inline int test_and_set_bit(int nr, void *addr)
 {
-	unsigned long flags;
+	unsigned long __always_unused flags;
 	int out;
 
 	local_irq_save(flags);
@@ -75,7 +76,7 @@ static inline int __test_and_clear_bit(int nr, void *addr)
 
 static inline int test_and_clear_bit(int nr, void *addr)
 {
-	unsigned long flags;
+	unsigned long __always_unused flags;
 	int out;
 
 	local_irq_save(flags);
arch/sandbox/include/asm/system.h +1 -4
index 066acc5..02beed3 100644
@@ -8,10 +8,7 @@
 #define __ASM_SANDBOX_SYSTEM_H
 
 /* Define this as nops for sandbox architecture */
-static inline void local_irq_save(unsigned flags __attribute__((unused)))
-{
-}
-
+#define local_irq_save(x)
 #define local_irq_enable()
 #define local_irq_disable()
 #define local_save_flags(x)
Signature · 1 line
1.9.1
#1 lore raw

PATCH v2 1/1 sandbox: change local_irq_save() to macro

Quoted 19 lines · Masahiro Yamada

local_irq_save() should be a macro, not a function because local_irq_save() saves flag to the given argument.

GCC is silent about this issue, but Clang warns:

In file included from lib/asm-offsets.c:15:
In file included from include/common.h:20:
In file included from include/linux/bitops.h:110:
arch/sandbox/include/asm/bitops.h:59:17:
warning: variable 'flags' is uninitialized when used here

      [-Wuninitialized]
        local_irq_save(flags);
                       ^~~~~

That change causes another warning:

In file included from include/linux/bitops.h:110:0,

                 from include/common.h:20,
                 from lib/asm-offsets.c:15:
Quoted 8 lines

arch/sandbox/include/asm/bitops.h: In function ?test_and_set_bit?:
arch/sandbox/include/asm/bitops.h:56:16: warning: unused variable ?flags? [-Wunused-variable]

So, flags should be set to __always_unused.

Cc Simon Glass <[email protected]>
Cc Jeroen Hofstee <[email protected]>
#2 lore raw

PATCH v2 1/1 sandbox: change local_irq_save() to macro

In reply to Masahiro Yamada
Quoted 19 lines · Masahiro Yamada

local_irq_save() should be a macro, not a function because local_irq_save() saves flag to the given argument.

GCC is silent about this issue, but Clang warns:

In file included from lib/asm-offsets.c:15:
In file included from include/common.h:20:
In file included from include/linux/bitops.h:110:
arch/sandbox/include/asm/bitops.h:59:17:
warning: variable 'flags' is uninitialized when used here

      [-Wuninitialized]
        local_irq_save(flags);
                       ^~~~~

That change causes another warning:

In file included from include/linux/bitops.h:110:0,

                 from include/common.h:20,
                 from lib/asm-offsets.c:15:
Quoted 8 lines

arch/sandbox/include/asm/bitops.h: In function ?test_and_set_bit?:
arch/sandbox/include/asm/bitops.h:56:16: warning: unused variable ?flags? [-Wunused-variable]

So, flags should be set to __always_unused.

Cc Simon Glass <[email protected]>
Cc Jeroen Hofstee <[email protected]>

Regards,
Jeroen