Re: 2.6.9-rc1-mm4 sparc reiser4 build broken - undefined atomic_sub_and_test
From: Alex Zarochentsev
Date: Sun Sep 12 2004 - 14:59:47 EST
On Sun, Sep 12, 2004 at 11:49:48AM -0700, Paul Jackson wrote:
> Alex writes:
> > please try this patch:
> > ...
> > +++ reiser4-linux-2.6/fs/reiser4/flush_queue.c
> > ...
> > +#include <asm/atomic.h>
> This patch doesn't help.
> Both with and without this patch, I observe the following:
> 1) include/asm/atomic.h is listed in fs/reiser4/.flush_queue.o.cmd
> (apparently it is included indirectly, even if not explicitly so)
> 2) The command:
> make fs/reiser4/flush_queue.o
> produces the output:
> fs/reiser4/flush_queue.c: In function `end_io_handler':
> fs/reiser4/flush_queue.c:451: warning: implicit declaration of function `atomic_sub_and_test'
> 3) include/asm/atomic.h (which is include/asm-sparc/atomic.h via the asm symlink)
> does _not_ mention atomic_sub_and_test
> 4) include/asm-sparc64/atomic.h _does_ mention atomic_sub_and_test (and build ok)
> 5) the final kernel link fails with:
> fs/built-in.o(.text+0x58618): In function `end_io_handler':
> : undefined reference to `atomic_sub_and_test'
> make: *** [arch/sparc/boot/image] Error 1
> I also saw an email from Bill Irwin go by, explaining that he did not
> choose to add atomic_sub_and_test to include/asm-sparc/atomic.h, which
> email is consistent with my observation that sparc atomic.h does not
> define atomic_sub_and_test.
> It would seem that your asm-sparc/atomic.h is not the same as mine.
> I believe that mine is the one in 2.6.9-rc1-mm4, which is the same as
> the latest one in Linus' bk tree, since its most recent change of:
> 1.10 04/05/14 19:00:05 akpm@xxxxxxxx[torvalds] +10 -0
> Implement atomic_inc_and_test() on various architectures
> and continuing through now. This atomic.h is 4550 bytes long, with an
> md5sum of:
> 90eb38997e21e579fc1cd1617180d630 include/asm-sparc/atomic.h
> And, to repeat myself, it has no mention of atomic_sub_and_test.
ah, that was atomic24_sub_and_test(), marked as
/* This is the old 24-bit implementation. ... */
I think adding the wrappers for atomic_sub_and_test() wouldn't be wrong:
===== include/asm-sparc/atomic.h 1.10 vs edited =====
--- 1.10/include/asm-sparc/atomic.h Sat May 15 06:00:05 2004
+++ edited/include/asm-sparc/atomic.h Sun Sep 12 23:37:05 2004
@@ -44,8 +44,9 @@
* other cases.
#define atomic_inc_and_test(v) (atomic_inc_return(v) == 0)
#define atomic_dec_and_test(v) (atomic_dec_return(v) == 0)
+#define atomic_add_and_test(i, v) (atomic_add_return(i, v) == 0)
+#define atomic_sub_and_test(i, v) (atomic_sub_return(i, v) == 0)
/* This is the old 24-bit implementation. It's still used internally
* by some sparc-specific code, notably the semaphore implementation.
Interesting that asm-sparc64/atomic.h defines atomic_add/sub_and_test().
> I won't rest till it's the best ...
> Programmer, Linux Scalability
> Paul Jackson <pj@xxxxxxx> 1.650.933.1373
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/