Messages in this thread Patch in this message | | | Date | Tue, 27 Apr 2004 21:55:14 +0400 | From | Ivan Kokshaysky <> | Subject | Re: status of Linux on Alpha? |
| |
On Tue, Apr 27, 2004 at 06:51:24PM +0200, Marc Giger wrote: > What's the current status of the problem?
Hopefully resolved - thanks to Dru <andru@treshna.com>, who provided an easy way to reproduce the problem.
What we have in lib/rwsem.c:__rwsem_do_wake(): int woken, loop; ^^^ and several lines below: loop = woken; woken *= RWSEM_ACTIVE_BIAS-RWSEM_WAITING_BIAS; woken -= RWSEM_ACTIVE_BIAS;
However, rw_semaphore->count is 64-bit on Alpha, so RWSEM_WAITING_BIAS has been defined as -0x0000000100000000L. Obviously, this blows up in the write contention case.
Ivan.
--- linux.orig/lib/rwsem.c Mon Apr 26 20:11:36 2004 +++ linux/lib/rwsem.c Tue Apr 27 20:04:14 2004 @@ -40,8 +40,7 @@ static inline struct rw_semaphore *__rws { struct rwsem_waiter *waiter; struct list_head *next; - signed long oldcount; - int woken, loop; + signed long oldcount, woken, loop; rwsemtrace(sem,"Entering __rwsem_do_wake"); - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |