2.6.18-rc5-git3: compilation failure on numa-q

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

 



It seems that between 2.6.18-rc5-git2 and -git3 some of our test systems
stopped compiling the kernel; the two I have investigated appear to be
Numa-Q systems, x86 smp.  They are failing as below:

  CC      arch/i386/kernel/asm-offsets.s
In file included from include/linux/spinlock.h:86,
                 from include/linux/capability.h:45,
                 from include/linux/sched.h:44,
                 from include/linux/module.h:9,
                 from include/linux/crypto.h:20,
                 from arch/i386/kernel/asm-offsets.c:7:
include/asm/spinlock.h: In function `__raw_read_lock':
include/asm/spinlock.h:164: error: parse error before ')' token
make[1]: *** [arch/i386/kernel/asm-offsets.s] Error 1
make: *** [prepare0] Error 2

The only change relating to this file appears to be this one:

commit 8c74932779fc6f61b4c30145863a17125c1a296c
Author: Andi Kleen <[email protected]>
Date:   Wed Aug 30 19:37:14 2006 +0200

    [PATCH] i386: Remove alternative_smp

    The .fill causes miscompilations with some binutils version.

    Instead just patch the lock prefix in the lock constructs. That is the
    majority of the cost and should be good enough.

    Cc: Gerd Hoffmann <[email protected]>
    Signed-off-by: Andi Kleen <[email protected]>
    Signed-off-by: Linus Torvalds <[email protected]>

Tried backing this out and the compile failure seems to go away.

Ok, having stared at it for a bit it seems the attached patch fixes it
up.  But as its asm could someone cast an eye over it.

-apw
commit 2b5087b6ff53558d95b3b5c9a6fb1bd41fabbae6
Author: Andy Whitcroft <[email protected]>
Date:   Thu Aug 31 10:58:44 2006 +0000

    fix up rwlocks following alternative_smp removal
    
    We seem to be getting compile errors in reader-write lock support
    on x86 SMP following the removal of the alternative_smp in commit
    8c74932779fc6f61b4c30145863a17125c1a296c:
    
         CC      arch/i386/kernel/asm-offsets.s
       In file included from include/linux/spinlock.h:86,
                        from include/linux/capability.h:45,
                        from include/linux/sched.h:44,
                        from include/linux/module.h:9,
                        from include/linux/crypto.h:20,
                        from arch/i386/kernel/asm-offsets.c:7:
       include/asm/spinlock.h: In function `__raw_read_lock':
       include/asm/spinlock.h:164: error: parse error before ')' token
       make[1]: *** [arch/i386/kernel/asm-offsets.s] Error 1
       make: *** [prepare0] Error 2.
    
    We seem to have lost some ':'s in the conversion, and the UP alternative
    has not been removed in some cases.  I think we want something like the
    below.
    
    Signed-off-by: Andy Whitcroft <[email protected]>

diff --git a/include/asm-i386/rwlock.h b/include/asm-i386/rwlock.h
index 3ac1ba9..2aebb81 100644
--- a/include/asm-i386/rwlock.h
+++ b/include/asm-i386/rwlock.h
@@ -25,7 +25,7 @@ #define __build_read_lock_ptr(rw, helper
 			"jns 1f\n" \
 			"call " helper "\n\t" \
 			"1:\n" \
-			:"a" (rw) : "memory")
+			: : "a" (rw) : "memory")
 
 #define __build_read_lock_const(rw, helper)   \
 	asm volatile(LOCK_PREFIX " ; subl $1,%0\n\t" \
@@ -34,8 +34,8 @@ #define __build_read_lock_const(rw, help
 			"leal %0,%%eax\n\t" \
 			"call " helper "\n\t" \
 			"popl %%eax\n\t" \
-			"1:\n" : \
-			"+m" (*(volatile int *)rw) : : "memory")
+			"1:\n" \
+			: "+m" (*(volatile int *)rw) : : "memory")
 
 #define __build_read_lock(rw, helper)	do { \
 						if (__builtin_constant_p(rw)) \
@@ -48,9 +48,8 @@ #define __build_write_lock_ptr(rw, helpe
 	asm volatile(LOCK_PREFIX " ; subl $" RW_LOCK_BIAS_STR ",(%0)\n\t" \
 			"jz 1f\n" \
 			"call " helper "\n\t" \
-			"1:\n", \
-			"subl $" RW_LOCK_BIAS_STR ",(%0)\n\t", \
-			:"a" (rw) : "memory")
+			"1:\n" \
+			: : "a" (rw) : "memory")
 
 #define __build_write_lock_const(rw, helper) \
 	asm volatile(LOCK_PREFIX " ; subl $" RW_LOCK_BIAS_STR ",%0\n\t" \
@@ -59,9 +58,8 @@ #define __build_write_lock_const(rw, hel
 			"leal %0,%%eax\n\t" \
 			"call " helper "\n\t" \
 			"popl %%eax\n\t" \
-			"1:\n", \
-			"subl $" RW_LOCK_BIAS_STR ",%0\n\t", \
-			"+m" (*(volatile int *)rw) : : "memory")
+			"1:\n" \
+			: "+m" (*(volatile int *)rw) : : "memory")
 
 #define __build_write_lock(rw, helper)	do { \
 						if (__builtin_constant_p(rw)) \

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux