[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH 2/4] xen/arch: Switch local_save_flags() to being a static inline helper



... rather than a macro which writes to its parameter by name.  A consequence
of this change is that the local variables in local_*_is_enabled() can be
dropped.

No functional change.

Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
---
CC: Jan Beulich <JBeulich@xxxxxxxx>
CC: Wei Liu <wei.liu2@xxxxxxxxxx>
CC: Roger Pau Monné <roger.pau@xxxxxxxxxx>
CC: Stefano Stabellini <sstabellini@xxxxxxxxxx>
CC: Julien Grall <julien.grall@xxxxxxx>
---
 xen/arch/x86/io_apic.c             |  2 +-
 xen/include/asm-arm/arm32/system.h | 30 +++++++++++++-----------------
 xen/include/asm-arm/arm64/system.h | 32 ++++++++++++--------------------
 xen/include/asm-arm/system.h       |  6 +-----
 xen/include/asm-x86/system.h       | 22 +++++++++++-----------
 5 files changed, 38 insertions(+), 54 deletions(-)

diff --git a/xen/arch/x86/io_apic.c b/xen/arch/x86/io_apic.c
index daa5e9e..aca4f63 100644
--- a/xen/arch/x86/io_apic.c
+++ b/xen/arch/x86/io_apic.c
@@ -1486,7 +1486,7 @@ static int __init timer_irq_works(void)
 
     t1 = ACCESS_ONCE(pit0_ticks);
 
-    local_save_flags(flags);
+    flags = local_save_flags();
     local_irq_enable();
     /* Let ten ticks pass... */
     mdelay((10 * 1000) / HZ);
diff --git a/xen/include/asm-arm/arm32/system.h 
b/xen/include/asm-arm/arm32/system.h
index 58c8fb3..cbfa91d 100644
--- a/xen/include/asm-arm/arm32/system.h
+++ b/xen/include/asm-arm/arm32/system.h
@@ -7,15 +7,19 @@
 #define local_irq_disable() asm volatile ( "cpsid i @ local_irq_disable\n" : : 
: "cc" )
 #define local_irq_enable()  asm volatile ( "cpsie i @ local_irq_enable\n" : : 
: "cc" )
 
-#define local_save_flags(x)                                      \
-({                                                               \
-    BUILD_BUG_ON(sizeof(x) != sizeof(long));                     \
-    asm volatile ( "mrs %0, cpsr     @ local_save_flags\n"       \
-                  : "=r" (x) :: "memory", "cc" );                \
-})
+static inline unsigned long local_save_flags(void)
+{
+    unsigned long flags;
+
+    asm volatile ( "mrs %0, cpsr     @ local_SAVE_flags\n"
+                   : "=r" (flags) :: "memory", "cc" );
+
+    return flags;
+}
+
 #define local_irq_save(x)                                        \
 ({                                                               \
-    local_save_flags(x);                                         \
+    x = local_save_flags();                                      \
     local_irq_disable();                                         \
 })
 #define local_irq_restore(x)                                     \
@@ -30,11 +34,7 @@
 
 static inline bool local_irq_is_enabled(void)
 {
-    unsigned long flags;
-
-    local_save_flags(flags);
-
-    return !(flags & PSR_IRQ_MASK);
+    return !(local_save_flags() & PSR_IRQ_MASK);
 }
 
 #define local_fiq_enable()  __asm__("cpsie f   @ __stf\n" : : : "memory", "cc")
@@ -45,11 +45,7 @@ static inline bool local_irq_is_enabled(void)
 
 static inline bool local_fiq_is_enabled(void)
 {
-    unsigned long flags;
-
-    local_save_flags(flags);
-
-    return !(flags & PSR_FIQ_MASK);
+    return !(local_save_flags() & PSR_FIQ_MASK);
 }
 
 #define CSDB    ".inst  0xe320f014"
diff --git a/xen/include/asm-arm/arm64/system.h 
b/xen/include/asm-arm/arm64/system.h
index d17fc9d..89c5b64 100644
--- a/xen/include/asm-arm/arm64/system.h
+++ b/xen/include/asm-arm/arm64/system.h
@@ -19,19 +19,19 @@
 #define local_abort_disable() asm volatile ( "msr daifset, #4\n" ::: "memory" )
 #define local_abort_enable()  asm volatile ( "msr daifclr, #4\n" ::: "memory" )
 
-#define local_save_flags(x)                                      \
-({                                                               \
-    BUILD_BUG_ON(sizeof(x) != sizeof(long));                     \
-    asm volatile(                                                \
-        "mrs    %0, daif    // local_save_flags\n"               \
-                : "=r" (x)                                       \
-                :                                                \
-                : "memory");                                     \
-})
+static inline unsigned long local_save_flags(void)
+{
+    unsigned long flags;
+
+    asm volatile ( "mrs    %0, daif    // local_SAVE_flags\n"
+                   : "=r" (flags) :: "memory");
+
+    return flags;
+}
 
 #define local_irq_save(x)                                        \
 ({                                                               \
-    local_save_flags(x);                                         \
+    x = local_save_flags();                                      \
     local_irq_disable();                                         \
 })
 #define local_irq_restore(x)                                     \
@@ -46,20 +46,12 @@
 
 static inline bool local_irq_is_enabled(void)
 {
-    unsigned long flags;
-
-    local_save_flags(flags);
-
-    return !(flags & PSR_IRQ_MASK);
+    return !(local_save_flags() & PSR_IRQ_MASK);
 }
 
 static inline bool local_fiq_is_enabled(void)
 {
-    unsigned long flags;
-
-    local_save_flags(flags);
-
-    return !(flags & PSR_FIQ_MASK);
+    return !(local_save_flags() & PSR_FIQ_MASK);
 }
 
 #define csdb()  asm volatile ( "hint #20" : : : "memory" )
diff --git a/xen/include/asm-arm/system.h b/xen/include/asm-arm/system.h
index bc51300..6566528 100644
--- a/xen/include/asm-arm/system.h
+++ b/xen/include/asm-arm/system.h
@@ -53,11 +53,7 @@
 
 static inline bool local_abort_is_enabled(void)
 {
-    unsigned long flags;
-
-    local_save_flags(flags);
-
-    return !(flags & PSR_ABT_MASK);
+    return !(local_save_flags() & PSR_ABT_MASK);
 }
 
 #define arch_fetch_and_add(x, v) __sync_fetch_and_add(x, v)
diff --git a/xen/include/asm-x86/system.h b/xen/include/asm-x86/system.h
index 4b7056d..faf2efe 100644
--- a/xen/include/asm-x86/system.h
+++ b/xen/include/asm-x86/system.h
@@ -253,14 +253,18 @@ static inline unsigned long 
array_index_mask_nospec(unsigned long index,
 /* used when interrupts are already enabled or to shutdown the processor */
 #define halt()          asm volatile ( "hlt" : : : "memory" )
 
-#define local_save_flags(x)                                      \
-({                                                               \
-    BUILD_BUG_ON(sizeof(x) != sizeof(long));                     \
-    asm volatile ( "pushf" __OS " ; pop" __OS " %0" : "=g" (x)); \
-})
+static inline unsigned long local_save_flags(void)
+{
+    unsigned long flags;
+
+    asm volatile ( "pushf; pop %0;" : "=g" (flags) );
+
+    return flags;
+}
+
 #define local_irq_save(x)                                        \
 ({                                                               \
-    local_save_flags(x);                                         \
+    x = local_save_flags();                                      \
     local_irq_disable();                                         \
 })
 #define local_irq_restore(x)                                     \
@@ -276,11 +280,7 @@ static inline unsigned long 
array_index_mask_nospec(unsigned long index,
 
 static inline bool local_irq_is_enabled(void)
 {
-    unsigned long flags;
-
-    local_save_flags(flags);
-
-    return flags & X86_EFLAGS_IF;
+    return local_save_flags() & X86_EFLAGS_IF;
 }
 
 #define BROKEN_ACPI_Sx          0x0001
-- 
2.1.4


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.