All of lore.kernel.org
 help / color / mirror / Atom feed
From: Darren Hart <dvhart@linux.intel.com>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Eric Dumazet <eric.dumazet@gmail.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@elte.hu>, John Kacur <jkacur@redhat.com>,
	stable@kernel.org
Subject: Re: [PATCH V5] futex: set FLAGS_HAS_TIMEOUT during futex_wait restart setup
Date: Fri, 15 Apr 2011 07:07:16 -0700	[thread overview]
Message-ID: <4DA85114.3010501@linux.intel.com> (raw)
In-Reply-To: <alpine.LFD.2.00.1104151027260.2744@localhost6.localdomain6>



On 04/15/2011 01:33 AM, Thomas Gleixner wrote:
> On Thu, 14 Apr 2011, Darren Hart wrote:
> 
>> The FLAGS_HAS_TIMEOUT flag was not getting set, causing the restart_block to
>> restart futex_wait() without a timeout after a signal.
>>
>> Commit b41277dc7a18ee332d in 2.6.38 introduced the regression by accidentally
>> removing the the FLAGS_HAS_TIMEOUT assignment from futex_wait() during the setup
>> of the restart block. Restore the originaly behavior.
>>
>> Fixes: https://bugzilla.kernel.org/show_bug.cgi?id=32922
>>
>> V2: Added references to commit message.
>> V3: Set flag during restart block instead of do_futex()
>> V4: Correct stupid order of assignment mistake pointed out by Eric
>> V5: Correct subject to match implementation, correct stable submission
>>
>> Signed-off-by: Darren Hart <dvhart@linux.intel.com>
>> Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
>> Reported-by: Tim Smith <tsmith201104@yahoo.com>
>> Reported-by: Torsten Hilbrich <torsten.hilbrich@secunet.com>
>> Cc: Thomas Gleixner <tglx@linutronix.de>
>> Cc: Peter Zijlstra <peterz@infradead.org>
>> Cc: Ingo Molnar <mingo@elte.hu>
>> Cc: John Kacur <jkacur@redhat.com>
>> Cc: stable@kernel.org
>> ---
>>  kernel/futex.c |    2 +-
>>  1 files changed, 1 insertions(+), 1 deletions(-)
>>
>> diff --git a/kernel/futex.c b/kernel/futex.c
>> index bda4157..abd5324 100644
>> --- a/kernel/futex.c
>> +++ b/kernel/futex.c
>> @@ -1886,7 +1886,7 @@ retry:
>>  	restart->futex.val = val;
>>  	restart->futex.time = abs_time->tv64;
>>  	restart->futex.bitset = bitset;
>> -	restart->futex.flags = flags;
>> +	restart->futex.flags = flags | FLAGS_HAS_TIMEOUT;
> 
> We only get here when a timeout is pending. So why don't we just do
> the obvious:
> 
> --- linux-2.6.orig/kernel/futex.c
> +++ linux-2.6/kernel/futex.c
> @@ -1902,16 +1902,13 @@ out:
>  static long futex_wait_restart(struct restart_block *restart)
>  {
>  	u32 __user *uaddr = restart->futex.uaddr;
> -	ktime_t t, *tp = NULL;
> +	ktime_t t;
>  
> -	if (restart->futex.flags & FLAGS_HAS_TIMEOUT) {
> -		t.tv64 = restart->futex.time;
> -		tp = &t;
> -	}
> +	t.tv64 = restart->futex.time;
>  	restart->fn = do_no_restart_syscall;
>  
>  	return (long)futex_wait(uaddr, restart->futex.flags,
> -				restart->futex.val, tp, restart->futex.bitset);
> +				restart->futex.val, &t, restart->futex.bitset);
>  }

I believe I asked you the same question when I was adding the
FLAGS_HAS_TIMEOUT. :-) The problem is distinguishing between no timeout
and an expired timer. The above always passes a non-null address for
abs_time to futex_wait(), which will then always schedule a timer.

-- 
Darren Hart
Intel Open Source Technology Center
Yocto Project - Linux Kernel

  parent reply	other threads:[~2011-04-15 14:07 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-04-14 22:41 [PATCH V5] futex: set FLAGS_HAS_TIMEOUT during futex_wait restart setup Darren Hart
2011-04-15  8:33 ` Thomas Gleixner
2011-04-15  9:27   ` Eric Dumazet
2011-04-15 14:07   ` Darren Hart [this message]
2011-04-15 14:30     ` Thomas Gleixner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4DA85114.3010501@linux.intel.com \
    --to=dvhart@linux.intel.com \
    --cc=eric.dumazet@gmail.com \
    --cc=jkacur@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=peterz@infradead.org \
    --cc=stable@kernel.org \
    --cc=tglx@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.