On Monday 16 November 2015 19:05:05 Olof's autobuilder wrote:
> 
> Errors:
> 
>         arm64.allmodconfig:
> arch/arm64/include/asm/barrier.h:71:3: error: read-only variable '___p1' used 
> as 'asm' output
> arch/arm64/include/asm/barrier.h:75:3: error: read-only variable '___p1' used 
> as 'asm' output
> arch/arm64/include/asm/barrier.h:79:3: error: read-only variable '___p1' used 
> as 'asm' output
> arch/arm64/include/asm/barrier.h:83:3: error: read-only variable '___p1' used 
> as 'asm' output
> arch/arm64/include/asm/barrier.h:71:3: error: read-only variable '___p1' used 
> as 'asm' output
> arch/arm64/include/asm/barrier.h:75:3: error: read-only variable '___p1' used 
> as 'asm' output
> arch/arm64/include/asm/barrier.h:79:3: error: read-only variable '___p1' used 
> as 'asm' output
> arch/arm64/include/asm/barrier.h:83:3: error: read-only variable '___p1' used 
> as 'asm' output
> arch/arm64/include/asm/barrier.h:71:3: error: read-only variable '___p1' used 
> as 'asm' output

The patch below seems to fix it. Please review/apply.

8<----
Subject: ARM64: make smp_load_acquire() work with const arguments

smp_load_acquire() uses typeof() to declare a local variable for temporarily
storing the output of the memory access. This fails when the argument is
constant, because the assembler complains about using a constant register
as output:

 arch/arm64/include/asm/barrier.h:71:3: error: read-only variable '___p1' used 
as 'asm' output

This changes the implementation to use an 'unsigned long' for the temporary 
value
and only cast it to the original type in the end.

Signed-off-by: Arnd Bergmann <a...@arndb.de>

diff --git a/arch/arm64/include/asm/barrier.h b/arch/arm64/include/asm/barrier.h
index 624f9679f4b0..05fa329467f6 100644
--- a/arch/arm64/include/asm/barrier.h
+++ b/arch/arm64/include/asm/barrier.h
@@ -64,7 +64,7 @@ do {                                                          
        \
 
 #define smp_load_acquire(p)                                            \
 ({                                                                     \
-       typeof(*p) ___p1;                                               \
+       unsigned long ___p1;                                            \
        compiletime_assert_atomic_type(*p);                             \
        switch (sizeof(*p)) {                                           \
        case 1:                                                         \
@@ -84,7 +84,7 @@ do {                                                          
        \
                        : "=r" (___p1) : "Q" (*p) : "memory");          \
                break;                                                  \
        }                                                               \
-       ___p1;                                                          \
+       (typeof(*p))___p1;                                                      
        \
 })
 
 #define read_barrier_depends()         do { } while(0)

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to