From: Oleg Nesterov <oleg@redhat.com>
To: Darren Hart <darren@dvhart.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
Thomas Gleixner <tglx@linutronix.de>,
Jerome Marchand <jmarchan@redhat.com>,
Larry Woodman <lwoodman@redhat.com>,
Mateusz Guzik <mguzik@redhat.com>,
LKML <linux-kernel@vger.kernel.org>,
dvhart@infradead.org
Subject: Re: [PATCH 0/1] futex: check PF_KTHREAD rather than !p->mm to filter out kthreads
Date: Tue, 10 Feb 2015 12:14:11 +0100 [thread overview]
Message-ID: <20150210111411.GA25614@redhat.com> (raw)
In-Reply-To: <CAGChsmOLYCDfjQQquZ_jd5gX+zUKxoojK0cr5AvedUgNL=pNMQ@mail.gmail.com>
Hi Darren,
On 02/09, Darren Hart wrote:
>
> I will prepare the test that Peter suggested so we have something to
> test with now as well as run for regressions over time.
Just in case, I already wrote the stupid test-case:
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <sys/syscall.h>
#include <sys/wait.h>
#include <sys/mman.h>
#include <assert.h>
#define FUTEX_LOCK_PI 6
struct robust_list {
struct robust_list *next;
};
struct robust_list_head {
struct robust_list list;
long futex_offset;
struct robust_list *list_op_pending;
};
int main(void)
{
int *mutex = mmap(NULL, 4, PROT_READ|PROT_WRITE,
MAP_ANONYMOUS|MAP_SHARED, -1,0);
assert((void *)mutex != MAP_FAILED);
for (;;) {
int err, pid = fork();
if (!pid) {
struct robust_list_head head;
head.list.next = &head.list;
head.futex_offset = 0;
head.list_op_pending = (void *)mutex + 1;
assert(syscall(__NR_set_robust_list, &head, sizeof(head)) == 0);
kill(getpid(), SIGSTOP);
_exit(0);
}
assert(waitpid(-1, NULL, WSTOPPED) == pid);
*mutex = pid;
kill(pid, SIGKILL);
err = syscall(__NR_futex, mutex, FUTEX_LOCK_PI, 0,0,0);
assert(wait(NULL) == pid);
if (err) {
printf("err=%d %m\n", err);
kill(0, SIGKILL);
}
}
return 0;
}
it needs ~20 secs to fail on my machine. Probably it can be improved.
> Hrm, if we cleared the TID mask, and the pi chain is empty, can we not
> clear the waiters?
In this case the waiter should take care, I guess.
OK. I'll try to make at least the 1st fix today (EXITING -> EXITPIDONE
livelock).
Oleg.
next prev parent reply other threads:[~2015-02-10 11:15 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-02-02 14:05 [PATCH 0/1] futex: check PF_KTHREAD rather than !p->mm to filter out kthreads Oleg Nesterov
2015-02-02 14:05 ` [PATCH 1/1] " Oleg Nesterov
2015-02-04 10:48 ` Peter Zijlstra
2015-02-14 18:01 ` Davidlohr Bueso
2015-02-14 20:57 ` Oleg Nesterov
2015-02-14 21:15 ` Davidlohr Bueso
2015-02-14 21:54 ` Oleg Nesterov
2015-02-18 17:11 ` [tip:locking/core] locking/futex: Check " tip-bot for Oleg Nesterov
2015-02-02 15:11 ` [PATCH 0/1] futex: check " Peter Zijlstra
2015-02-02 15:13 ` Peter Zijlstra
2015-02-02 15:14 ` Peter Zijlstra
2015-02-02 16:20 ` Oleg Nesterov
2015-02-03 20:09 ` Oleg Nesterov
2015-02-04 11:12 ` Peter Zijlstra
2015-02-04 20:25 ` Oleg Nesterov
2015-02-05 16:27 ` Peter Zijlstra
2015-02-05 18:10 ` Oleg Nesterov
2015-02-06 10:46 ` Peter Zijlstra
2015-02-06 17:04 ` Oleg Nesterov
2015-02-09 20:38 ` Darren Hart
2015-02-10 11:14 ` Oleg Nesterov [this message]
2015-02-16 20:13 ` [PATCH 0/1] futex: don't spin waiting for PF_EXITING -> PF_EXITPIDONE transition Oleg Nesterov
2015-02-16 20:13 ` [PATCH 1/1] " Oleg Nesterov
2015-02-27 9:52 ` Peter Zijlstra
2015-02-27 11:54 ` Peter Zijlstra
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=20150210111411.GA25614@redhat.com \
--to=oleg@redhat.com \
--cc=darren@dvhart.com \
--cc=dvhart@infradead.org \
--cc=jmarchan@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lwoodman@redhat.com \
--cc=mguzik@redhat.com \
--cc=peterz@infradead.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox