public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* 2.6.9-rc1-mm4 sparc reiser4 build broken - undefined atomic_sub_and_test
@ 2004-09-12 10:12 Paul Jackson
  2004-09-12 10:54 ` William Lee Irwin III
  2004-09-12 16:33 ` Alex Zarochentsev
  0 siblings, 2 replies; 24+ messages in thread
From: Paul Jackson @ 2004-09-12 10:12 UTC (permalink / raw)
  To: Hans Reiser; +Cc: linux-kernel, Andrew Morton, William Lee Irwin III

The default config for sparc on 2.6.9-rc1-mm4 doesn't build, using the
crosstools from http://developer.osdl.org/dev/plm/cross_compile.

Hans,

  Andrew counts on us to build for various arch's, especially when
  submitting something non-trivial.  The above crosstools work
  pretty good - give them a try.

The final link fails with:

  fs/built-in.o(.text+0x58618): In function `end_io_handler':
  : undefined reference to `atomic_sub_and_test'
  make[1]: *** [arch/sparc/boot/image] Error 1

The macro 'atomic_sub_and_test' is defined for more or less every other
arch, in various include/asm-*/atomic.h files, but not defined for
sparc.

This macro is used in:

	fs/reiser4/flush_queue.c:
               if (atomic_sub_and_test(bio->bi_vcnt, &fq->nr_submitted))

If I disable the config items:

  CONFIG_REISER4_FS=y
  CONFIG_REISER4_LARGE_KEY=y

then it builds ok (with the bogus #else removed from cachefs.h, as
already reported on lkml).

-- 
                          I won't rest till it's the best ...
                          Programmer, Linux Scalability
                          Paul Jackson <pj@sgi.com> 1.650.933.1373

^ permalink raw reply	[flat|nested] 24+ messages in thread
* Re: 2.6.9-rc1-mm4 sparc reiser4 build broken - undefined    atomic_sub_and_test
@ 2004-09-13 17:14 Martin Schwidefsky
  2004-09-13 17:26 ` Roman Zippel
  0 siblings, 1 reply; 24+ messages in thread
From: Martin Schwidefsky @ 2004-09-13 17:14 UTC (permalink / raw)
  To: hugh; +Cc: zippel, zam, pj, wli, reiser, linux-kernel, akpm

> > > But Bill already said he doesn't want it, [...]
> > > 
> > > -		 		 if (atomic_sub_and_test(bio->bi_vcnt, &fq->nr_submitted))
> > > +		 		 if (atomic_sub_return(bio->bi_vcnt, &fq->nr_submitted) == 0)
> > 
> > And that is more portable how?
> 
> It's more portable in that all but s390 already provide it
> (and I expect Martin will be happy to add it).

Well, adding the missing s390 atomic operations is easy (see patch).
But I really doubt that it will make a measurable difference in
performance on ANY architecture. You could do this with a
(atomic_add_return(-x, &v) == 0) ...

blue skies,
  Martin.

---

From: Martin Schwidefsky <schwidefsky@de.ibm.com>

Add atomic[64]_add_and_test, atomic[64]_sub_return and
atomic[64]_sub_and_test primitives.

Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>

diffstat:
 include/asm-s390/atomic.h |   24 ++++++++++++++++++++++++
 1 files changed, 24 insertions(+)

diff -urN linux-2.6/include/asm-s390/atomic.h linux-2.6-s390/include/asm-s390/atomic.h
--- linux-2.6/include/asm-s390/atomic.h	2004-08-14 12:54:48.000000000 +0200
+++ linux-2.6-s390/include/asm-s390/atomic.h	2004-09-13 19:04:13.000000000 +0200
@@ -53,6 +53,10 @@
 {
 	return __CS_LOOP(v, i, "ar");
 }
+static __inline__ int atomic_add_and_test(int i, atomic_t * v)
+{
+	return __CS_LOOP(v, i, "ar") == 0;
+}
 static __inline__ int atomic_add_negative(int i, atomic_t * v)
 {
 	return __CS_LOOP(v, i, "ar") < 0;
@@ -61,6 +65,14 @@
 {
 	       __CS_LOOP(v, i, "sr");
 }
+static __inline__ int atomic_sub_return(int i, atomic_t * v)
+{
+	return __CS_LOOP(v, i, "sr");
+}
+static __inline__ int atomic_sub_and_test(int i, atomic_t * v)
+{
+	return __CS_LOOP(v, i, "sr") == 0;
+}
 static __inline__ void atomic_inc(volatile atomic_t * v)
 {
 	       __CS_LOOP(v, 1, "ar");
@@ -127,6 +139,10 @@
 {
 	return __CSG_LOOP(v, i, "agr");
 }
+static __inline__ long long atomic64_add_and_test(int i, atomic64_t * v)
+{
+	return __CSG_LOOP(v, i, "agr") == 0;
+}
 static __inline__ long long atomic64_add_negative(int i, atomic64_t * v)
 {
 	return __CSG_LOOP(v, i, "agr") < 0;
@@ -135,6 +151,14 @@
 {
 	       __CSG_LOOP(v, i, "sgr");
 }
+static __inline__ long long atomic64_sub_return(int i, atomic64_t * v)
+{
+	return __CSG_LOOP(v, i, "sgr");
+}
+static __inline__ long long atomic64_sub_and_test(int i, atomic64_t * v)
+{
+	return __CSG_LOOP(v, i, "agr") == 0;
+}
 static __inline__ void atomic64_inc(volatile atomic64_t * v)
 {
 	       __CSG_LOOP(v, 1, "agr");

^ permalink raw reply	[flat|nested] 24+ messages in thread
[parent not found: <OF6D4E73AE.1DB1AD2F-ON42256F0F.003132FF-42256F0F.00321365@de.ibm.com>]

end of thread, other threads:[~2004-09-14 15:39 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-09-12 10:12 2.6.9-rc1-mm4 sparc reiser4 build broken - undefined atomic_sub_and_test Paul Jackson
2004-09-12 10:54 ` William Lee Irwin III
2004-09-12 16:33 ` Alex Zarochentsev
2004-09-12 18:49   ` Paul Jackson
2004-09-12 19:48     ` Alex Zarochentsev
2004-09-13 12:42       ` Hugh Dickins
2004-09-13 13:25         ` Roman Zippel
2004-09-13 13:51           ` Hugh Dickins
2004-09-13 14:10             ` Roman Zippel
2004-09-13 14:58               ` Hugh Dickins
2004-09-13 16:03                 ` Roman Zippel
2004-09-13 16:20                   ` Hugh Dickins
2004-09-13 20:03                   ` Tonnerre
2004-09-13 20:18                     ` Roman Zippel
2004-09-13 20:18                     ` 2.6.9-rc1-mm4 sparc reiser4 build broken - undefined atomic_s ub_and_test Hugh Dickins
2004-09-13 17:19                 ` 2.6.9-rc1-mm4 sparc reiser4 build broken - undefined atomic_sub_and_test Alex Zarochentsev
2004-09-14  2:06                   ` William Lee Irwin III
2004-09-14  9:00                     ` Roman Zippel
2004-09-14  9:10                       ` William Lee Irwin III
2004-09-14  9:15                         ` [sparc32] add atomic_sub_and_test() to make reiser4 code microoptimized for x86 compile on sparc32 William Lee Irwin III
2004-09-14 15:38                           ` William Lee Irwin III
  -- strict thread matches above, loose matches on Subject: below --
2004-09-13 17:14 2.6.9-rc1-mm4 sparc reiser4 build broken - undefined atomic_sub_and_test Martin Schwidefsky
2004-09-13 17:26 ` Roman Zippel
     [not found] <OF6D4E73AE.1DB1AD2F-ON42256F0F.003132FF-42256F0F.00321365@de.ibm.com>
2004-09-14  9:40 ` Roman Zippel

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox