lkml.org 
[lkml]   [1999]   [Nov]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH] i386 rw semaphore + use for mmap_sem
"Benjamin C.R. LaHaise" wrote:
>
> On Sun, 21 Nov 1999, Manfred Spraul wrote:
>
> > And I don't understand your "first" handing:
> > > down_write_failed()
> > > [...]
> > > if (first) {
> > > atomic_add(RWSEM_BIAS, &sem->count);
> > > sem->writer = 0;
> > > }
>
> Okay, basically the first writer who comes along and has to wait is the
> only one who is allowed to maintain the BIAS (otherwise when a reader does
> a read_up, he won't see the result of zero indicating a wake up needs to
> be done).
>
Thanks for the explanation.

But I think the inline part of up_write() is wrong:
I think __rwsem_wake is always called:

lock is free: sem->val = RWSEM_BIAS
down_write()
sem->val is now 0.
up_write():
"addl BIAS,&sem->val" new value: 0x0100 0000
"jge slow_part"

jge means jump if SignFlag == OverflowFlag.

add from 0 to 0x01000 0000 means SF =0, OF = 0.
--> the jump is always taken.

I guess you need "jump if the old value was below zero"
this would be "jump if sign or carry", but this instruction doesn't
exist.

--
Manfred


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 13:55    [W:0.047 / U:0.196 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site