[PATCH v2 1/5] refcount, kref: add dec-and-test wrappers for rw_semaphores

2020-05-04 Thread Emanuele Giuseppe Esposito
Similar to the existing functions that take a mutex or spinlock if and only if a reference count is decremented to zero, these new function take an rwsem for writing just before the refcount reaches 0 (and call a user-provided function in the case of kref_put_rwsem). These will be used for stats_f

[PATCH] rw_semaphores, exported symbol non-versioning

2001-04-27 Thread D . W . Howells
This patch (made against linux-2.4.4-pre8) turns off module export versioning on the rwsem symbols called from inline assembly. David diff -uNr linux-2.4.4-pre8/lib/rwsem.c linux-rwsem/lib/rwsem.c --- linux-2.4.4-pre8/lib/rwsem.cFri Apr 27 20:10:11 2001 +++ linux-rwsem/lib/rwsem.c

Re: [PATCH] rw_semaphores, optimisations try #4

2001-04-26 Thread David Howells
Andrea Arcangeli <[EMAIL PROTECTED]> wrote: > It seems more similar to my code btw (you finally killed the useless > chmxchg ;). CMPXCHG ought to make things better by avoiding the XADD(+1)/XADD(-1) loop, however, I tried various combinations and XADD beats CMPXCHG significantly. Here's a quote

Re: [PATCH] rw_semaphores, optimisations try #4

2001-04-25 Thread Andrea Arcangeli
On Wed, Apr 25, 2001 at 09:06:38PM +0100, D . W . Howells wrote: > This patch (made against linux-2.4.4-pre6 + rwsem-opt3) somewhat improves > performance on the i386 XADD optimised implementation: It seems more similar to my code btw (you finally killed the useless chmxchg ;). I only had a sho

[PATCH] rw_semaphores, optimisations try #4

2001-04-25 Thread D . W . Howells
This patch (made against linux-2.4.4-pre6 + rwsem-opt3) somewhat improves performance on the i386 XADD optimised implementation: A patch against -pre6 can be obtained too: ftp://infradead.org/pub/people/dwh/rwsem-pre6-opt4.diff Here's some benchmarks (take with a pinch of salt of cours

Re: [PATCH] rw_semaphores, optimisations try #3

2001-04-24 Thread David Howells
Linus Torvalds <[EMAIL PROTECTED]> wrote: > - nobody will look up the list because we do have the spinlock at this > point, so a destroyed list doesn't actually _matter_ to anybody I suppose that it'll be okay, provided I take care not to access a block for a task I've just woken up. > - list_

Re: rwsem benchmark [was Re: [PATCH] rw_semaphores, optimisationstry #3]

2001-04-24 Thread Linus Torvalds
On Tue, 24 Apr 2001, Andrea Arcangeli wrote: > > > > Again it's not a performance issue, the "+a" (sem) is a correctness issue > > > because the slow path will clobber it. > > > > There must be a performance issue too, otherwise our read up/down fastpaths > > are the same. Which clearly they're

Re: [PATCH] rw_semaphores, optimisations try #3

2001-04-24 Thread Linus Torvalds
On Tue, 24 Apr 2001, David Howells wrote: > > Yes but the "struct rwsem_waiter" batch would have to be entirely deleted from > the list before any of them are woken, otherwise the waking processes may > destroy their "rwsem_waiter" blocks before they are dequeued (this destruction > is not guard

Re: rwsem benchmark [was Re: [PATCH] rw_semaphores, optimisations try #3]

2001-04-24 Thread Andrea Arcangeli
On Tue, Apr 24, 2001 at 02:07:47PM +0100, David Howells wrote: > It was my implementation that triggered it (I haven't tried it with yours), > but the bug occurred because the SUBL happened to make the change outside of > the spinlocked region in the slowpath at the same time as the wakeup routine

Re: rwsem benchmark [was Re: [PATCH] rw_semaphores, optimisations try #3]

2001-04-24 Thread David Howells
> so you reproduced a deadlock with my patch applied, or you are saying > you discovered that case with one of you testcases? It was my implementation that triggered it (I haven't tried it with yours), but the bug occurred because the SUBL happened to make the change outside of the spinlocked reg

Re: rwsem benchmark [was Re: [PATCH] rw_semaphores, optimisations try #3]

2001-04-24 Thread Andrea Arcangeli
On Tue, Apr 24, 2001 at 02:19:28PM +0200, Andrea Arcangeli wrote: > I'm starting the benchmarks of the C version and I will post a number update > and a new patch in a few minutes. (sorry for the below wrap around, just grow your terminal to read it stright) aa RW

Re: rwsem benchmark [was Re: [PATCH] rw_semaphores, optimisations try #3]

2001-04-24 Thread Andrea Arcangeli
There is a bug in both the C version and asm version of my rwsem and it is the slow path where I forgotten to drop the _irq part from the spinlock calls ;) Silly bug. (I inherit it also in the asm fast path version because I started hacking the same C slow path) I catched it now because it locks

Re: rwsem benchmark [was Re: [PATCH] rw_semaphores, optimisations try #3]

2001-04-24 Thread Andrea Arcangeli
On Tue, Apr 24, 2001 at 11:33:13AM +0100, David Howells wrote: > *grin* Fun ain't it... Try it on a dual athlon or P4 and the answer may come > out differently. compile with -mathlon and the compiler then should generate (%%eax) if that's faster even if the sem is a constant, that's a compiler is

Re: rwsem benchmark [was Re: [PATCH] rw_semaphores, optimisations try #3]

2001-04-24 Thread Andrea Arcangeli
On Tue, Apr 24, 2001 at 11:25:23AM +0100, David Howells wrote: > > I'd love to hear this sequence. Certainly regression testing never generated > > this sequence yet but yes that doesn't mean anything. Note that your slow > > path is very different than mine. > > One of my testcases fell over on

Re: rwsem benchmark [was Re: [PATCH] rw_semaphores, optimisations try #3]

2001-04-24 Thread David Howells
> I see what you meant here and no, I'm not lucky, I thought about that. gcc x > 2.95.* seems smart enough to produce (%%eax) that you hardcoded when the > sem is not a constant (I'm not clobbering another register, if it does it's > stupid and I consider this a compiler mistake). It is a compil

Re: rwsem benchmark [was Re: [PATCH] rw_semaphores, optimisations try #3]

2001-04-24 Thread David Howells
> I'd love to hear this sequence. Certainly regression testing never generated > this sequence yet but yes that doesn't mean anything. Note that your slow > path is very different than mine. One of my testcases fell over on it... > I don't feel the need of any xchg to enforce additional serializ

Re: rwsem benchmark [was Re: [PATCH] rw_semaphores, optimisations try #3]

2001-04-24 Thread Andrea Arcangeli
On Tue, Apr 24, 2001 at 09:56:11AM +0100, David Howells wrote: > | +: "+m" (sem->count), "+a" (sem) ^^ I think you were comenting on the +m not +a ok > > >From what I've been told,

Re: [PATCH] rw_semaphores, optimisations try #3

2001-04-24 Thread David Howells
Linus Torvalds <[EMAIL PROTECTED]> wrote: > Note that the generic list structure already has support for "batching". > It only does it for multiple adds right now (see the "list_splice" > merging code), but there is nothing to stop people from doing it for > multiple deletions too. The code is som

Re: rwsem benchmark [was Re: [PATCH] rw_semaphores, optimisations try #3]

2001-04-24 Thread David Howells
> Ok I finished now my asm optimized rwsemaphores and I improved a little my > spinlock based one but without touching the icache usage. And I can break it. There's a very good reason the I changed __up_write() to use CMPXCHG instead of SUBL. I found a sequence of operations that locked up on thi

rwsem benchmark [was Re: [PATCH] rw_semaphores, optimisations try #3]

2001-04-23 Thread Andrea Arcangeli
On Mon, Apr 23, 2001 at 11:34:35PM +0200, Andrea Arcangeli wrote: > On Mon, Apr 23, 2001 at 09:35:34PM +0100, D . W . Howells wrote: > > This patch (made against linux-2.4.4-pre6) makes a number of changes to the > > rwsem implementation: > > > > (1) Everything in try #2 > > > > plus > > > >

Re: [PATCH] rw_semaphores, optimisations try #3

2001-04-23 Thread Linus Torvalds
On Mon, 23 Apr 2001, D.W.Howells wrote: > > Linus, you suggested that the generic list handling stuff would be faster (2 > unconditional stores) than mine (1 unconditional store and 1 conditional > store and branch to jump round it). You are both right and wrong. The generic > code does two stor

Re: [PATCH] rw_semaphores, optimisations try #3

2001-04-23 Thread Andrea Arcangeli
On Mon, Apr 23, 2001 at 09:35:34PM +0100, D . W . Howells wrote: > This patch (made against linux-2.4.4-pre6) makes a number of changes to the > rwsem implementation: > > (1) Everything in try #2 > > plus > > (2) Changes proposed by Linus for the generic semaphore code. > > (3) Ideas from A

[PATCH] rw_semaphores, optimisations try #3

2001-04-23 Thread D . W . Howells
This patch (made against linux-2.4.4-pre6) makes a number of changes to the rwsem implementation: (1) Everything in try #2 plus (2) Changes proposed by Linus for the generic semaphore code. (3) Ideas from Andrea and how he implemented his semaphores. Linus, you suggested that the generic l

Re: [PATCH] rw_semaphores, optimisations

2001-04-22 Thread Andrea Arcangeli
On Mon, Apr 23, 2001 at 03:04:41AM +0200, Andrea Arcangeli wrote: > that is supposed to be a performance optimization, I do the same too in my code. ah no I see what you mean, yes you are hurted by that. I'm waiting your #try 3 against pre6, by that time I hope to be able to make a run of the ben

Re: [PATCH] rw_semaphores, optimisations

2001-04-22 Thread Andrea Arcangeli
On Sun, Apr 22, 2001 at 11:52:29PM +0100, D . W . Howells wrote: > Hello Andrea, > > Interesting benchmarks... did you compile the test programs with "make > SCHED=yes" by any chance? Also what other software are you running? No I never tried the SCHED=yes. However in my modification of the rws

Re: [PATCH] rw_semaphores, optimisations

2001-04-22 Thread D . W . Howells
Hello Andrea, Interesting benchmarks... did you compile the test programs with "make SCHED=yes" by any chance? Also what other software are you running? The reason I ask is that running a full blown KDE setup running in the background, I get the following numbers on the rwsem-ro test (XADD opt

Re: [PATCH] rw_semaphores, optimisations

2001-04-22 Thread Andrea Arcangeli
On Sun, Apr 22, 2001 at 09:07:03PM +0200, Andrea Arcangeli wrote: > On Sun, Apr 22, 2001 at 01:27:20AM +0100, D . W . Howells wrote: btw, I noticed I answered your previous email but for my benchmarks I really used your latest #try2 posted today at 13 (not last night a 1am), just to avoid mistake

Re: [PATCH] rw_semaphores, optimisations

2001-04-22 Thread Andrea Arcangeli
On Sun, Apr 22, 2001 at 01:27:20AM +0100, D . W . Howells wrote: > This patch (made against linux-2.4.4-pre6) makes a number of changes to the > rwsem implementation: > > (1) Fixes a subtle contention bug between up_write and the down_* functions. > > (2) Optimises the i386 fastpath implementa

Re: [PATCH] generic rw_semaphores, compile warnings patch

2001-04-20 Thread Ivan Kokshaysky
On Fri, Apr 20, 2001 at 08:50:38AM +0100, David Howells wrote: > There's also a missing "struct rw_semaphore;" declaration in linux/rwsem.h. It > needs to go in the gap below "#include ". Otherwise the > declarations for the contention handling functions will give warnings about > the struct being

Re: [PATCH] generic rw_semaphores, compile warnings patch

2001-04-20 Thread David S. Miller
David Howells writes: > There's also a missing "struct rw_semaphore;" declaration in linux/rwsem.h. It > needs to go in the gap below "#include ". Otherwise the > declarations for the contention handling functions will give warnings about > the struct being declared in the parameter list. In

Re: [PATCH] generic rw_semaphores, compile warnings patch

2001-04-20 Thread David Howells
David S. Miller <[EMAIL PROTECTED]> wrote: > D.W.Howells writes: > > This patch (made against linux-2.4.4-pre4) gets rid of some warnings obtained > > when using the generic rwsem implementation. > > Have a look at pre5, this is already fixed. Not entirely so... There's also a missing "struct

Re: [PATCH] generic rw_semaphores, compile warnings patch

2001-04-19 Thread David S. Miller
D.W.Howells writes: > This patch (made against linux-2.4.4-pre4) gets rid of some warnings obtained > when using the generic rwsem implementation. Have a look at pre5, this is already fixed. Later, David S. Miller [EMAIL PROTECTED] - To unsubscribe from this list: send the line "unsubscribe

[PATCH] generic rw_semaphores, compile warnings patch

2001-04-19 Thread D . W . Howells
This patch (made against linux-2.4.4-pre4) gets rid of some warnings obtained when using the generic rwsem implementation. David diff -uNr linux-2.4.4-pre4/include/linux/rwsem.h linux/include/linux/rwsem.h --- linux-2.4.4-pre4/include/linux/rwsem.h Thu Apr 19 22:07:49 2001 +++ linux/incl

Re: rw_semaphores

2001-04-16 Thread yodaiken
On Mon, Apr 16, 2001 at 10:05:57AM -0700, Linus Torvalds wrote: > > > On Mon, 16 Apr 2001 [EMAIL PROTECTED] wrote: > > > > I'm trying to imagine a case where 32,000 sharing a semaphore was anything but a > > major failure and I can't. To me: the result of an attempt by the 32,768th locker > > sh

Re: rw_semaphores

2001-04-16 Thread Andrew Morton
[EMAIL PROTECTED] wrote: > > On Tue, Apr 10, 2001 at 08:47:34AM +0100, David Howells wrote: > > > > Since you're willing to use CMPXCHG in your suggested implementation, would it > > make it make life easier if you were willing to use XADD too? > > > > Plus, are you really willing to limit the nu

Re: rw_semaphores

2001-04-16 Thread Linus Torvalds
On Mon, 16 Apr 2001 [EMAIL PROTECTED] wrote: > > I'm trying to imagine a case where 32,000 sharing a semaphore was anything but a > major failure and I can't. To me: the result of an attempt by the 32,768th locker > should be a kernel panic. Is there a reasonable scenario where this is wrong? H

Re: rw_semaphores

2001-04-16 Thread Alan Cox
> I'm trying to imagine a case where 32,000 sharing a semaphore was anything but a > major failure and I can't. To me: the result of an attempt by the 32,768th locker > should be a kernel panic. Is there a reasonable scenario where this is wrong? 32000 threads all trying to lock the same piece o

Re: rw_semaphores

2001-04-16 Thread yodaiken
On Tue, Apr 10, 2001 at 08:47:34AM +0100, David Howells wrote: > > Since you're willing to use CMPXCHG in your suggested implementation, would it > make it make life easier if you were willing to use XADD too? > > Plus, are you really willing to limit the number of readers or writers to be > 327

Re: [PATCH] 4th try: i386 rw_semaphores fix

2001-04-12 Thread D . W . Howells
gt; If they can live with a spinlock in the fastpath, then > the code at http://www.uow.edu.au/~andrewm/linux/rw_semaphore.tar.gz > is bog-simple and works. Sorry to pre-empt you, but have you seen my "advanced" patch? I sent it to the list in an email with the subject: [

Re: [PATCH] 4th try: i386 rw_semaphores fix

2001-04-12 Thread Andrew Morton
David Howells wrote: > > Here's the RW semaphore patch attempt #4. This fixes the bugs that Andrew > Morton's test cases showed up. > It still doesn't compile with gcc-2.91.66 because of the "#define rwsemdebug(FMT, ...)" thing. What can we do about this? I cooked up a few more tests, genera

[PATCH] i386 rw_semaphores, general abstraction patch

2001-04-12 Thread David Howells
This patch (made against linux-2.4.4-pre2) takes Anton Blanchard's suggestions and abstracts out the rwsem implementation somewhat. This makes the following general files: include/linux/rwsem.h - general RW semaphore wrapper include/linux/rwsem-spinlock.h - rwsem inline

Re: [PATCH] 2nd try: i386 rw_semaphores fix

2001-04-12 Thread Jamie Lokier
Linus Torvalds wrote: > > > On Wed, 11 Apr 2001, Bernd Schmidt wrote: > See? Do you see why a "memory" clobber is _not_ comparable to a "ax" > clobber? And why that non-comparability makes a memory clobber equivalent > to a read-modify-write cycle? I had to think about this, so I'll explain it

Re: [PATCH] 3rd try: i386 rw_semaphores fix

2001-04-11 Thread Anton Blanchard
Hi, > Here's the RW semaphore patch #3. This time with more asm constraints added. Personally I care about sparc and ppc64 and as such would like to see the slow paths end up in lib/rwsem.c protected by #ifndef __HAVE_ARCH_RWSEM or something like that. If we couldn't get rwsems to work on x86,

Re: [PATCH] i386 rw_semaphores fix

2001-04-11 Thread Alan Cox
> > Be careful there. CMOV is an optional instruction. gcc is arguably wrong > > in using cmov in '686' mode. Building libs with cmov makes sense though > > especially for the PIV with its ridiculously long pipeline > > It is just a matter how you define "686 mode", otherwise the very concept > i

Re: [PATCH] i386 rw_semaphores fix

2001-04-11 Thread Alan Cox
> Yes, the big 686 optimization is CMOV, and that one is > ultra-pervasive. Be careful there. CMOV is an optional instruction. gcc is arguably wrong in using cmov in '686' mode. Building libs with cmov makes sense though especially for the PIV with its ridiculously long pipeline > - To unsubs

Re: [PATCH] i386 rw_semaphores fix

2001-04-11 Thread H. Peter Anvin
Alan Cox wrote: > > > Yes, the big 686 optimization is CMOV, and that one is > > ultra-pervasive. > > Be careful there. CMOV is an optional instruction. gcc is arguably wrong > in using cmov in '686' mode. Building libs with cmov makes sense though > especially for the PIV with its ridiculously

[PATCH] 4th try: i386 rw_semaphores fix

2001-04-11 Thread David Howells
Here's the RW semaphore patch attempt #4. This fixes the bugs that Andrew Morton's test cases showed up. It simplifies the __wake_up_ctx_common() function and adds an iterative clause to the end of rwsem_wake(). David diff -uNr linux-2.4.3/arch/i386/config.in linux-rwsem/arch/i386/config.in --

Re: [PATCH] i386 rw_semaphores fix

2001-04-11 Thread David Howells
> You need sterner testing stuff :) I hit the BUG at the end of rwsem_wake() > in about a second running rwsem-4. Removed the BUG and everything stops > in D state. > > Grab rwsem-4 from > > http://www.uow.edu.au/~andrewm/linux/rwsem.tar.gz > > It's very simple. But running fully in-k

Re: [PATCH] i386 rw_semaphores fix

2001-04-11 Thread Linus Torvalds
On Wed, 11 Apr 2001, David Howells wrote: > > > These numbers are infinity :) > > I know, but I think Linus may be happy with the resolution for the moment. It > can be extended later by siphoning off excess quantities of waiters into a > separate counter (as is done now) and by making the acces

Re: [PATCH] 2nd try: i386 rw_semaphores fix

2001-04-11 Thread Linus Torvalds
On Wed, 11 Apr 2001, Bernd Schmidt wrote: > > > > The example in there compiles out-of-the box and is much easier to > > experiment on than the whole kernel :-) > > That example seems to fail because a "memory" clobber only tells the compiler > that memory is written, not that it is read. The a

Re: [PATCH] i386 rw_semaphores fix

2001-04-11 Thread H. Peter Anvin
Followup to: <[EMAIL PROTECTED]> By author:Alan Cox <[EMAIL PROTECTED]> In newsgroup: linux.dev.kernel > > > > Yes, and with CMPXCHG handler in the kernel it wouldn't be needed > > (the other 686 optimizations like memcpy also work on 386) > > They would still be needed. The 686 built gli

Re: [PATCH] i386 rw_semaphores fix

2001-04-11 Thread H. Peter Anvin
Followup to: <[EMAIL PROTECTED]> By author:Linus Torvalds <[EMAIL PROTECTED]> In newsgroup: linux.dev.kernel > > Note that the "fixup" approach is not necessarily very painful at all, > from a performance standpoint (either on 386 or on newer CPU's). It's not > really that hard to just repla

Re: [PATCH] i386 rw_semaphores fix

2001-04-11 Thread David Howells
Andrew Morton wrote: > I think that's a very good approach. Sure, it's suboptimal when there > are three or more waiters (and they're the right type and order). But > that never happens. Nice design idea. Cheers. > These numbers are infinity :) I know, but I think Linus may be happy with the

Re: [PATCH] i386 rw_semaphores fix

2001-04-11 Thread Andrew Morton
David Howells wrote: > > Here's a patch that fixes RW semaphores on the i386 architecture. It is very > simple in the way it works. > > The lock counter is dealt with as two semi-independent words: the LSW is the > number of active (granted) locks, and the MSW, if negated, is the number of > act

[PATCH] 3rd try: i386 rw_semaphores fix

2001-04-11 Thread David Howells
Here's the RW semaphore patch #3. This time with more asm constraints added. David diff -uNr linux-2.4.3/arch/i386/config.in linux-rwsem/arch/i386/config.in --- linux-2.4.3/arch/i386/config.in Thu Apr 5 14:44:04 2001 +++ linux-rwsem/arch/i386/config.in Wed Apr 11 08:38:04 2001 @@ -47,

Re: [PATCH] 2nd try: i386 rw_semaphores fix

2001-04-11 Thread Bernd Schmidt
On Wed, 11 Apr 2001, Andreas Franck wrote: > Hello David, > > > I've been discussing it with some other kernel and GCC people, and they > > think > > that only "memory" is required. > > Hmm.. I just looked at my GCC problem report from December, perhaps you're > interested, too: > > http://gcc.gn

Re: [PATCH] 2nd try: i386 rw_semaphores fix

2001-04-11 Thread Andreas Franck
Hello David, > I've been discussing it with some other kernel and GCC people, and they > think > that only "memory" is required. Hmm.. I just looked at my GCC problem report from December, perhaps you're interested, too: http://gcc.gnu.org/ml/gcc-bugs/2000-12/msg00554.html The example in there

Re: [PATCH] 2nd try: i386 rw_semaphores fix

2001-04-11 Thread David Howells
I've been discussing it with some other kernel and GCC people, and they think that only "memory" is required. > What are the reasons against mentioning sem->count directly as a "=m" > reference? This makes the whole thing less fragile and no more dependent > on the memory layout of the structure

Re: [PATCH] 2nd try: i386 rw_semaphores fix

2001-04-11 Thread Andreas Franck
Hello David and people, > I've just consulted with one of the gcc people we have here, and he says > that > the '"memory"' constraint should do the trick. > > Do I take it that that is actually insufficient? I don't remember exactly, it's been a while, but I think it was not sufficient when I c

Re: [PATCH] 2nd try: i386 rw_semaphores fix

2001-04-11 Thread David Howells
> I'd like you to look over it. It seems newer GCC's (snapshots and the > upcoming 3.0) will be more strict when modifying some values through > assembler-passed pointers - in this case, the passed semaphore structure got > freed too early, causing massive stack corruption on early bootup. > > The

[PATCH] 2nd try: i386 rw_semaphores fix

2001-04-11 Thread David Howells
Here's the RW semaphore patch again (rwsem2.diff) with a fallback to spinlocks if XADD/CMPXCHG aren't available. I've put the two implementations in separate headers as suggested. David diff -uNr linux-2.4.3/arch/i386/config.in linux/arch/i386/config.in --- linux-2.4.3/arch/i386/config.in

Re: [PATCH] i386 rw_semaphores fix

2001-04-11 Thread Maciej W. Rozycki
On Wed, 11 Apr 2001, David Howells wrote: > Can CONFIG_X86_XADD be equated to CONFIG_X86_CMPXCHG? Yes. Modulo very early i486s which used incorrect opcodes for cmpxchg. They can probably be safely ignored. -- + Maciej W. Rozycki, Technical University of Gdansk, Poland + +---

Re: [PATCH] i386 rw_semaphores fix

2001-04-11 Thread Alan Cox
> It's currently done this way, ld-linux.so looks in a special "686" path when > the ELF vector mentions it, otherwise normal path. There is a special 686 > version of glibc and linuxthread. Just it's a very complicated and disk > space chewing solution for a simple problem (some distributions ar

Re: [PATCH] i386 rw_semaphores fix

2001-04-11 Thread Alan Cox
> My reasoning is that who uses a 386 is not interested in speed, so a little > bit more slowness is not that bad. > > You realize that the alternative for distributions is to drop 386 support > completely? Rubbish. Mandrake and Red Hat have been shipping multiple kernel images, multiple gzips a

Re: [PATCH] i386 rw_semaphores fix

2001-04-11 Thread Alan Cox
> > 386 could use a simpler setup and is non SMP > > The idea was to have a `generic' kernel that works on all architectures. > If you drop 386 support much is better already. Having the 386 non SMP only means you dont have to worry about this. We dont currently support an SMP kernel that boots

Re: [PATCH] i386 rw_semaphores fix

2001-04-11 Thread David Howells
Can CONFIG_X86_XADD be equated to CONFIG_X86_CMPXCHG? David - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

Re: [PATCH] i386 rw_semaphores fix

2001-04-10 Thread Andi Kleen
On Tue, Apr 10, 2001 at 06:12:12PM -0700, Linus Torvalds wrote: > > > On Wed, 11 Apr 2001, Andi Kleen wrote: > > > > Fixup for user space is probably not that nice (CMPXCHG is used there by > > linuxthreads) > > In user space I'm not convinced that you couldn't do the same thing > equally well

Re: [PATCH] i386 rw_semaphores fix

2001-04-10 Thread Linus Torvalds
On Wed, 11 Apr 2001, Andi Kleen wrote: > > Fixup for user space is probably not that nice (CMPXCHG is used there by > linuxthreads) In user space I'm not convinced that you couldn't do the same thing equally well by just having the proper dynamically linked library. You'd not get in-lined lock

Re: [PATCH] i386 rw_semaphores fix

2001-04-10 Thread Andi Kleen
On Tue, Apr 10, 2001 at 05:55:09PM -0700, Linus Torvalds wrote: > Note that the "fixup" approach is not necessarily very painful at all, > from a performance standpoint (either on 386 or on newer CPU's). It's not > really that hard to just replace the instruction in the "undefined > instruction"

Re: [PATCH] i386 rw_semaphores fix

2001-04-10 Thread Andi Kleen
On Wed, Apr 11, 2001 at 02:56:32AM +0200, David Weinehall wrote: > My reasoning is that the choice of computer is a direct function of > your financial situation. I can get hold of a lot of 386's/486's, but > however old a Pentium may be, people are still reluctant to give away > those. Doing the

Re: [PATCH] i386 rw_semaphores fix

2001-04-10 Thread David Weinehall
On Wed, Apr 11, 2001 at 02:20:28AM +0200, Andi Kleen wrote: > On Wed, Apr 11, 2001 at 02:13:18AM +0200, David Weinehall wrote: > > > > > > Yes, and with CMPXCHG handler in the kernel it wouldn't be needed > > > (the other 686 optimizations like memcpy also work on 386) > > > > But the code wou

Re: [PATCH] i386 rw_semaphores fix

2001-04-10 Thread Linus Torvalds
On Wed, 11 Apr 2001, David Weinehall wrote: > > > > Yes, and with CMPXCHG handler in the kernel it wouldn't be needed > > (the other 686 optimizations like memcpy also work on 386) > > But the code would be much slower, and it's on 386's and similarly > slow beasts you need every cycle you can g

Re: [PATCH] i386 rw_semaphores fix

2001-04-10 Thread Tim Wright
Sequent Symmetry machinses supported SMP on i486 and even i386 going back to the original 16MHz 386 processors. You could put up to 30 in a system. I do not, however, envisage anyone porting Linux to these any time soon. The hardware is just too "unusual" for it to be feasible. The later Symmetry

Re: [PATCH] i386 rw_semaphores fix

2001-04-10 Thread Andi Kleen
On Wed, Apr 11, 2001 at 02:13:18AM +0200, David Weinehall wrote: > > > > Yes, and with CMPXCHG handler in the kernel it wouldn't be needed > > (the other 686 optimizations like memcpy also work on 386) > > But the code would be much slower, and it's on 386's and similarly > slow beasts you nee

Re: [PATCH] i386 rw_semaphores fix

2001-04-10 Thread David Weinehall
On Wed, Apr 11, 2001 at 02:00:58AM +0200, Andi Kleen wrote: > On Tue, Apr 10, 2001 at 11:00:31PM +0100, Alan Cox wrote: > > > I guess 386 could live with an exception handler that emulates it. > > > > 386 could use a simpler setup and is non SMP > > The idea was to have a `generic' kernel that w

Re: [PATCH] i386 rw_semaphores fix

2001-04-10 Thread Andi Kleen
On Tue, Apr 10, 2001 at 11:00:31PM +0100, Alan Cox wrote: > > I guess 386 could live with an exception handler that emulates it. > > 386 could use a simpler setup and is non SMP The idea was to have a `generic' kernel that works on all architectures. If you drop 386 support much is better alread

Re: [PATCH] i386 rw_semaphores fix

2001-04-10 Thread Alan Cox
> I guess 386 could live with an exception handler that emulates it. 386 could use a simpler setup and is non SMP > (BTW an generic exception handler for CMPXCHG would also be very useful > for glibc -- currently it has special checking code for 386 in its mutexes) > The 386 are so slow that no

Re: x86 cpu configuration (was: Re: [PATCH] i386 rw_semaphores fix)

2001-04-10 Thread Alan Cox
> The current way of doing things on x86 -- essentially selecting a > minimal level of CPU support -- is nice for vendors like Mandrake who That isnt how the current x86 one works. It just sort of looks like that for a common subset. - To unsubscribe from this list: send the line "unsubscribe li

Re: [PATCH] i386 rw_semaphores fix

2001-04-10 Thread Alan Cox
> That's no problem if we make this SMP-specific - I doubt anybody actually > uses SMP on i486's even if the machines exist, as I think they all had They do. There are two (total world wide) 486 SMP users I know about and they mostly do it to be awkward ;) > special glue logic that Linux would h

Re: [PATCH] i386 rw_semaphores fix

2001-04-10 Thread Linus Torvalds
On Tue, 10 Apr 2001, Andi Kleen wrote: > > I guess 386 could live with an exception handler that emulates it. That approach is fine, although I'd personally prefer to take the exception just once and just rewrite the instuction as a "call". The places that need xadd would have to follow some st

Re: [PATCH] i386 rw_semaphores fix

2001-04-10 Thread Andi Kleen
On Tue, Apr 10, 2001 at 12:42:07PM -0700, Linus Torvalds wrote: > > > On Tue, 10 Apr 2001, David Howells wrote: > > > > Here's a patch that fixes RW semaphores on the i386 architecture. It is very > > simple in the way it works. > > XADD only works on Pentium+. My Intel manual says it 486+: `

x86 cpu configuration (was: Re: [PATCH] i386 rw_semaphores fix)

2001-04-10 Thread Jeff Garzik
Linus Torvalds wrote: > That's no problem if we make this SMP-specific - I doubt anybody actually > uses SMP on i486's even if the machines exist, as I think they all had > special glue logic that Linux would have trouble with anyway. But the > advantages of being able to use one generic kernel th

Re: [PATCH] i386 rw_semaphores fix

2001-04-10 Thread Linus Torvalds
On Tue, 10 Apr 2001, David Howells wrote: > > Here's a patch that fixes RW semaphores on the i386 architecture. It is very > simple in the way it works. XADD only works on Pentium+. That's no problem if we make this SMP-specific - I doubt anybody actually uses SMP on i486's even if the machine

[PATCH] i386 rw_semaphores fix

2001-04-10 Thread David Howells
Here's a patch that fixes RW semaphores on the i386 architecture. It is very simple in the way it works. The lock counter is dealt with as two semi-independent words: the LSW is the number of active (granted) locks, and the MSW, if negated, is the number of active writers (0 or 1) plus the number

Re: rw_semaphores

2001-04-10 Thread David Howells
Since you're willing to use CMPXCHG in your suggested implementation, would it make it make life easier if you were willing to use XADD too? Plus, are you really willing to limit the number of readers or writers to be 32767? If so, I think I can suggest a way that limits it to ~65535 apiece inst

Re: rw_semaphores

2001-04-09 Thread Tachino Nobuhiro
At Mon, 9 Apr 2001 22:43:53 -0700 (PDT), Linus Torvalds wrote: > The ordering is certainly possible, but if it happens, > __down_read_failed() won't actually sleep, because it will notice that the > value is positive and just return immediately. So it will do some > unnecessary work (add itself

Re: rw_semaphores

2001-04-09 Thread Linus Torvalds
On Tue, 10 Apr 2001, Tachino Nobuhiro wrote: > > I am not familiar with semaphore or x86, so this may not be correct, > but if the following sequence is possible, the writer can call wake_up() > before the reader calls add_wait_queue() and reader may sleep forever. > Is it possible? The order

Re: rw_semaphores

2001-04-09 Thread Tachino Nobuhiro
Hello, At Sun, 8 Apr 2001 20:08:13 -0700 (PDT), Linus Torvalds wrote: > > Can anybody shoot any holes in this? I haven't actually tested it, but > race conditions in locking primitives are slippery things, and I'd much > rather have an algorithm we can _think_ about and prove to be working. And

Re: rw_semaphores

2001-04-09 Thread Ben LaHaise
On Sun, 8 Apr 2001, Linus Torvalds wrote: > > The "down_writer_failed()" case was wrong: Which is exactly the same problem in the original code. How about the following patch against the original code? I hadn't sent it yet as the test code isn't finished (hence, it's untested), but given that

Re: rw_semaphores

2001-04-08 Thread Linus Torvalds
The "down_writer_failed()" case was wrong: On Sun, 8 Apr 2001, Linus Torvalds wrote: > > __down_write_failed(sem) > { > > /* >* Ignore other pending writers: but if there is >* are pending readers or a w

Re: rw_semaphores

2001-04-08 Thread Linus Torvalds
On Sun, 8 Apr 2001, Andrew Morton wrote: > > One issue with the current implementation is the (necessary) > design where one reader (or writer) is sleeping in > down_x_failed_biased(), with its bias in place, whereas > all other sleepers are sleeping in down_x_failed(), with > their bias not in

Re: [PATCH] trylock for rw_semaphores: 2.4.1

2001-02-20 Thread Brian J. Watson
Ben LaHaise wrote: > How about the following instead? Warning: compiled, not tested. > > -ben > > +/* returns 1 if it successfully obtained the semaphore for write */ > +static inline int down_write_trylock(struct rw_semaphore *sem) > +{ > + int old = RW_LOCK_BIAS, new = 0

Re: [PATCH] trylock for rw_semaphores: 2.4.1

2001-02-19 Thread Ben LaHaise
On Mon, 19 Feb 2001, Brian J. Watson wrote: > Here is an x86 implementation of down_read_trylock() and down_write_trylock() > for read/write semaphores. As with down_trylock() for exclusive semaphores, they > don't block if they fail to get the lock. They just return 1, as opposed to 0 in > the s

[PATCH] trylock for rw_semaphores: 2.4.1

2001-02-19 Thread Brian J. Watson
Here is an x86 implementation of down_read_trylock() and down_write_trylock() for read/write semaphores. As with down_trylock() for exclusive semaphores, they don't block if they fail to get the lock. They just return 1, as opposed to 0 in the success case. The algorithm should be robust. It shou