[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20188.1273666229@redhat.com>
Date: Wed, 12 May 2010 13:10:29 +0100
From: David Howells <dhowells@...hat.com>
To: Michel Lespinasse <walken@...gle.com>
Cc: dhowells@...hat.com,
Linus Torvalds <torvalds@...ux-foundation.org>,
Ingo Molnar <mingo@...e.hu>,
Thomas Gleixner <tglx@...utronix.de>,
LKML <linux-kernel@...r.kernel.org>,
Andrew Morton <akpm@...ux-foundation.org>,
Mike Waychison <mikew@...gle.com>,
Suleiman Souhlal <suleiman@...gle.com>,
Ying Han <yinghan@...gle.com>
Subject: Re: [PATCH 05/12] x86 rwsem: take advantage of new RWSEM_WAITING_BIAS semantics
Michel Lespinasse <walken@...gle.com> wrote:
> static inline void __up_write(struct rw_semaphore *sem)
> {
> ...
> LOCK_PREFIX " xadd %1,(%2)\n\t"
> - /* tries to transition
> - 0xffff0001 -> 0x00000000 */
> - " jz 1f\n"
> + /* substracts 0xffff0001, returns the old value */
> + " cmp %4,%1\n\t"
> + /* are there waiting threads and no active threads ? */
> + " jne 1f\n"
> " call call_rwsem_wake\n"
It looks like you're betting on there being fast-path contention. If the
common case is no fast-path contention, then you'd be better off putting the
comparison out of line in the medium-path and retaining the JZ instruction.
The same goes for __up_read(): you could retain the JNS there and put the
comparison out of line into the medium-path.
Doing this also saves you some code space.
David
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists