From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751385Ab0DFI3Q (ORCPT ); Tue, 6 Apr 2010 04:29:16 -0400 Received: from www.tglx.de ([62.245.132.106]:42394 "EHLO www.tglx.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751036Ab0DFI3N (ORCPT ); Tue, 6 Apr 2010 04:29:13 -0400 Date: Tue, 6 Apr 2010 10:27:58 +0200 (CEST) From: Thomas Gleixner To: Darren Hart cc: linux-kernel@vger.kernel.org, Peter Zijlstra , Ingo Molnar , Eric Dumazet , "Peter W. Morreale" , Rik van Riel , Steven Rostedt , Gregory Haskins , Sven-Thorsten Dietrich , Chris Mason , John Cooper , Chris Wright , Avi Kivity Subject: Re: [PATCH 5/6] futex: handle timeout inside adaptive lock spin In-Reply-To: <1270499039-23728-6-git-send-email-dvhltc@us.ibm.com> Message-ID: References: <1270499039-23728-1-git-send-email-dvhltc@us.ibm.com> <1270499039-23728-6-git-send-email-dvhltc@us.ibm.com> User-Agent: Alpine 2.00 (LFD 1167 2008-08-23) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, 5 Apr 2010, Darren Hart wrote: > Signed-off-by: Darren Hart > --- > kernel/futex.c | 24 +++++++++++++++++++++--- > 1 files changed, 21 insertions(+), 3 deletions(-) > > diff --git a/kernel/futex.c b/kernel/futex.c > index c33ac2a..af61dcd 100644 > --- a/kernel/futex.c > +++ b/kernel/futex.c > @@ -2385,6 +2385,7 @@ out: > /** > * trylock_futex_adaptive() - Try to acquire the futex lock in a busy loop > * @uaddr: the futex user address > + * @timeout: absolute timeout or NULL if none > * > * Try to acquire a futex lock in a loop until the owner changes or the owner > * is descheduled. To lock the futex, set the value to the current TID. > @@ -2394,10 +2395,11 @@ out: > * 1 - Futex lock acquired > * <0 - On error > */ > -static int trylock_futex_adaptive(u32 __user *uaddr) > +static int trylock_futex_adaptive(u32 __user *uaddr, ktime_t *timeout) > { > int ret = 0; > u32 curval; > + ktime_t now; > > for (;;) { > struct thread_info *owner; > @@ -2433,6 +2435,22 @@ static int trylock_futex_adaptive(u32 __user *uaddr) > if (need_resched()) > break; > > + if (timeout) { > + now = ktime_get(); Hmm. Calling that in every iteration might hurt especially on non TSC systems, but well... > +/* FIXME: consider creating ktime_less_than(lhs, rhs) */ No need. The .tv64 comparison works in both cases. :) Thanks, tglx