public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Re: Change in functionality of futex() system call.
@ 2011-06-09  0:44 George Spelvin
  2011-06-09  3:02 ` Darren Hart
  0 siblings, 1 reply; 62+ messages in thread
From: George Spelvin @ 2011-06-09  0:44 UTC (permalink / raw)
  To: david, dvhart, kyle, luto; +Cc: linux, linux-kernel

I'm not sure if it's best, but the risk of RO waiters interfering could
be solved by giving them a lower prioirty for wakeup and always waking
RW-mapped waiters first.

In most cases, there would only be one type of waiter, so this would
have no effect, but if there were, a RO-mapped reader couldn't "steal"
wakeup from someone who had it RW-mapped.

It might conflict with a fairness goal, but it does solve the problem
without any extension to the API.

^ permalink raw reply	[flat|nested] 62+ messages in thread
* Change in functionality of futex() system call.
@ 2011-06-06 14:28 David Oliver
  2011-06-06 15:23 ` Eric Dumazet
  0 siblings, 1 reply; 62+ messages in thread
From: David Oliver @ 2011-06-06 14:28 UTC (permalink / raw)
  To: linux-kernel; +Cc: Shawn Bohrer, Zachary Vonler

Hello,

The functionality of the futex() system call appears to have changed
between versions 2.6.18 and 2.6.32.28.

Specifically, performing a FUTEX_WAIT on a read-only mapped location
results in an EFAULT. Although other operations, such as FUTEX_WAKE,
are only meaningful for writable locations, FUTEX_WAIT is useful for
processes with read-only access to a memory-mapped file.

The code below illustrates the changed behavior (each of the EXPECT
operations succeed on the older kernel, the ASSERTs pass in each
case), assuming the file /tmp/futex_test exists and contains int(42).

With the older kernel, the syscall() suspends until another process
changes the file and issues a FUTEX_WAKE, whereas the new behavior is
for an EFAULT error, independent of the file contents.

Let me know if you need further clarification.

Cheers!

David Oliver.


#include <errno.h>
#include <fcntl.h>
#include <stdint.h>
typedef uint32_t u32;   // for futex.h
#include <linux/futex.h>
#include <sys/mman.h>
#include <sys/syscall.h>
#include <unistd.h>
#include "gtest/gtest.h" // test framework to illustrate issue.


TEST(Futex, futex_in_read_only_file_is_ok) {
  int fd = open("/tmp/futex_test", O_RDONLY);
  ASSERT_GE(fd, 0);
  int* futex = static_cast<int *>(mmap(0, sizeof(int), PROT_READ,
MAP_SHARED, fd, 0));
  ASSERT_NE((int *)(0), futex);

  int rc = syscall(SYS_futex, futex, FUTEX_WAIT, 42, 0, 0, 0);

  EXPECT_NE(-1, rc);              // fails.
  if (rc == -1) {
      EXPECT_NE(errno, EFAULT);   // fails.
  }
}


---------------------------------------------------------------
This email, along with any attachments, is confidential. If you 
believe you received this message in error, please contact the 
sender immediately and delete all copies of the message.  
Thank you.


^ permalink raw reply	[flat|nested] 62+ messages in thread

end of thread, other threads:[~2011-06-27 16:57 UTC | newest]

Thread overview: 62+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-06-09  0:44 Change in functionality of futex() system call George Spelvin
2011-06-09  3:02 ` Darren Hart
2011-06-09  3:38   ` Andrew Lutomirski
2011-06-09  3:54     ` Eric Dumazet
2011-06-09  4:10       ` Andrew Lutomirski
2011-06-09  5:11         ` Eric Dumazet
2011-06-09 12:12           ` Andrew Lutomirski
2011-06-09  4:43       ` George Spelvin
2011-06-09  5:25         ` Eric Dumazet
2011-06-09  4:44       ` Kyle Moffett
  -- strict thread matches above, loose matches on Subject: below --
2011-06-06 14:28 David Oliver
2011-06-06 15:23 ` Eric Dumazet
2011-06-06 15:56   ` Shawn Bohrer
2011-06-06 16:11   ` Peter Zijlstra
2011-06-06 16:16     ` Peter Zijlstra
2011-06-06 16:22       ` Eric Dumazet
2011-06-06 16:29         ` Peter Zijlstra
2011-06-06 16:42           ` Eric Dumazet
2011-06-06 17:05             ` Peter Zijlstra
2011-06-06 17:11               ` Eric Dumazet
2011-06-06 17:27                 ` Steven Rostedt
2011-06-06 17:56                   ` Darren Hart
2011-06-06 18:23                 ` Peter Zijlstra
2011-06-06 18:27                   ` Eric Dumazet
2011-06-25  0:00                     ` Darren Hart
2011-06-27 16:48                     ` Shawn Bohrer
2011-06-06 17:53             ` Darren Hart
2011-06-06 18:11               ` Eric Dumazet
2011-06-07  3:13                 ` Darren Hart
2011-06-07  3:49                   ` Eric Dumazet
2011-06-07 14:44                   ` Andy Lutomirski
2011-06-07 15:56                     ` Darren Hart
2011-06-07 15:58                     ` Eric Dumazet
2011-06-07 18:43                       ` Andrew Lutomirski
2011-06-07 19:01                         ` Darren Hart
2011-06-07 19:04                           ` Andrew Lutomirski
2011-06-07 19:06                         ` Eric Dumazet
2011-06-07 19:10                         ` David Oliver
2011-06-07 19:19                           ` Andrew Lutomirski
2011-06-07 19:33                             ` David Oliver
2011-06-07 19:53                               ` Andrew Lutomirski
2011-06-07 20:04                                 ` David Oliver
2011-06-07 20:12                                   ` Andrew Lutomirski
2011-06-07 22:26                             ` Kyle Moffett
2011-06-08 15:20                               ` David Oliver
2011-06-08 15:21                                 ` Andrew Lutomirski
2011-06-08 16:21                                 ` Darren Hart
2011-06-09 11:37                                   ` KOSAKI Motohiro
2011-06-09 12:05                                     ` Peter Zijlstra
2011-06-09 17:58                                       ` Peter Zijlstra
2011-06-10  3:30                                         ` KOSAKI Motohiro
2011-06-10  3:26                                       ` KOSAKI Motohiro
2011-06-07 18:30                 ` Joel Becker
2011-06-09 12:05                 ` Peter Zijlstra
2011-06-10 12:10       ` KOSAKI Motohiro
2011-06-10 17:29         ` Darren Hart
2011-06-13  2:11           ` KOSAKI Motohiro
2011-06-13 15:50             ` Darren Hart
2011-06-15 18:50         ` Shawn Bohrer
2011-06-15 18:54           ` Darren Hart
2011-06-17 13:40             ` Shawn Bohrer
2011-06-23  3:23             ` KOSAKI Motohiro

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox