* [perf] 3215929f8f: n f[d 29 [ 4:22:177.]092021] EIP is at SyS_perf_event_open+0x757/0xb86
@ 2015-09-17 5:28 kernel test robot
2015-09-17 8:53 ` Peter Zijlstra
0 siblings, 1 reply; 4+ messages in thread
From: kernel test robot @ 2015-09-17 5:28 UTC (permalink / raw)
To: lkp
[-- Attachment #1: Type: text/plain, Size: 1685 bytes --]
FYI, we noticed the below changes on
git://internal_merge_and_test_tree devel-catchup-201509131855
commit 3215929f8ff55da910c26971d4286abff53ea6e2 ("perf: Restructure perf syscall point of no return")
[m ai2n]1 S.089628] BUG: unable to handle kernel NULL pointer dereference at 00000198
et[so ck op t(21011 .1 090827] IP: [<c2b2e592>] SyS_perf_event_open+0x757/0xb86
] Setso[ck op t( 21.092021] CPU: 0 PID: 668 Comm: trinity-main Not tainted 4.2.0-02761-g3215929 #2
[ 21.092021] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.7.5-20140531_083030-gandalf 04/01/2014
1 [7 8b 60 0020 14). o092021] task: cfc523c0 ti: d039c000 task.ti: d039c000
[ 21.092021] EIP: 0060:[<c2b2e592>] EFLAGS: 00010246 CPU: 0
n f[d 29 [ 4:22:177.]092021] EIP is at SyS_perf_event_open+0x757/0xb86
[ 21.092021] EAX: c38e33c4 EBX: 00000000 ECX: 00000000 EDX: 00000000
[ 21.092021] ESI: cfc523c0 EDI: 00000000 EBP: d039dfac ESP: d039df00
[ ma in ] 2Se1ts.oc092021] DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068
[ 21.092021] CR0: 8005003b CR2: 00000198 CR3: 109cb140 CR4: 000006b0
kop[t( 1 21 82b6100.0092021] Stack:
[0ma0in0] 0Se0ts0oc0k0 0000001do pt0(10070 80 80b6000000
d 34 [2[6: 2: 39 21.092021] Call Trace:
[m ai n]2 S1et.so092021] [<c33451c1>] syscall_call+0x7/0x7
[ 21.092021] [<c3340000>] ? preempt_schedule_irq+0x4d/0xea
sockop[t( 10 c 21.092021] EIP: [<c2b2e592>] SyS_perf_event_open+0x757/0xb86 SS:ESP 0068:d039df00
9 [8b 60 00 0 24)1 o.n 092021] CR2: 0000000000000198
fd 44 [26:1:232]
[ 21.114479] ---[ end trace c29b51e2a14544eb ]---
[ ma in ] 2Se1ts.oc115072] Kernel panic - not syncing: Fatal exception
Thanks,
Ying Huang
[-- Attachment #2: dmesg.xz --]
[-- Type: application/x-xz, Size: 15408 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [perf] 3215929f8f: n f[d 29 [ 4:22:177.]092021] EIP is at SyS_perf_event_open+0x757/0xb86
2015-09-17 5:28 [perf] 3215929f8f: n f[d 29 [ 4:22:177.]092021] EIP is at SyS_perf_event_open+0x757/0xb86 kernel test robot
@ 2015-09-17 8:53 ` Peter Zijlstra
2015-09-17 9:06 ` Fengguang Wu
0 siblings, 1 reply; 4+ messages in thread
From: Peter Zijlstra @ 2015-09-17 8:53 UTC (permalink / raw)
To: lkp
[-- Attachment #1: Type: text/plain, Size: 473 bytes --]
On Thu, Sep 17, 2015 at 01:28:18PM +0800, kernel test robot wrote:
> FYI, we noticed the below changes on
>
> git://internal_merge_and_test_tree devel-catchup-201509131855
> commit 3215929f8ff55da910c26971d4286abff53ea6e2 ("perf: Restructure perf syscall point of no return")
How can I get the actual patch? I don't have this commit. (It could be a
previous version, I had a bug like that, but not having the actual patch
I cannot check if its the same or not).
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [perf] 3215929f8f: n f[d 29 [ 4:22:177.]092021] EIP is at SyS_perf_event_open+0x757/0xb86
2015-09-17 8:53 ` Peter Zijlstra
@ 2015-09-17 9:06 ` Fengguang Wu
2015-09-17 9:09 ` Peter Zijlstra
0 siblings, 1 reply; 4+ messages in thread
From: Fengguang Wu @ 2015-09-17 9:06 UTC (permalink / raw)
To: lkp
[-- Attachment #1: Type: text/plain, Size: 4061 bytes --]
Hi Peter,
On Thu, Sep 17, 2015 at 10:53:36AM +0200, Peter Zijlstra wrote:
> On Thu, Sep 17, 2015 at 01:28:18PM +0800, kernel test robot wrote:
> > FYI, we noticed the below changes on
> >
> > git://internal_merge_and_test_tree devel-catchup-201509131855
> > commit 3215929f8ff55da910c26971d4286abff53ea6e2 ("perf: Restructure perf syscall point of no return")
>
> How can I get the actual patch? I don't have this commit. (It could be a
> previous version, I had a bug like that, but not having the actual patch
> I cannot check if its the same or not).
Here is the patch:
>From 3215929f8ff55da910c26971d4286abff53ea6e2 Mon Sep 17 00:00:00 2001
From: Peter Zijlstra <peterz@infradead.org>
Date: Wed, 9 Sep 2015 19:06:33 +0200
Subject: [PATCH] perf: Restructure perf syscall point of no return
The exclusive_event_installable() stuff only works because its
exclusive with the grouping bits.
Rework the code such that there is a sane place to error out before we
go do things we cannot undo.
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-kernel(a)vger.kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
kernel/events/core.c | 52 +++++++++++++++++++++++++++++++++-------------------
1 file changed, 33 insertions(+), 19 deletions(-)
diff --git a/kernel/events/core.c b/kernel/events/core.c
index ae16867..cc06c7c 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -8242,15 +8242,31 @@ SYSCALL_DEFINE5(perf_event_open,
goto err_context;
}
- if (move_group) {
- gctx = group_leader->ctx;
+ gctx = group_leader->ctx;
+ if (move_group)
+ mutex_lock_double(&gctx->mutex, &ctx->mutex);
+ else
+ mutex_lock(&ctx->mutex);
+
+ /*
+ * Must be under the same ctx::mutex as perf_install_in_context(),
+ * because we need to serialize with concurrent event creation.
+ */
+ if (!exclusive_event_installable(event, ctx)) {
+ /* exclusive and group stuff are assumed mutually exclusive */
+ WARN_ON_ONCE(move_group);
+
+ err = -EBUSY;
+ goto err_locked;
+ }
+ WARN_ON_ONCE(ctx->parent_ctx);
+
+ if (move_group) {
/*
* See perf_event_ctx_lock() for comments on the details
* of swizzling perf_event::ctx.
*/
- mutex_lock_double(&gctx->mutex, &ctx->mutex);
-
perf_remove_from_context(group_leader, false);
list_for_each_entry(sibling, &group_leader->sibling_list,
@@ -8258,13 +8274,7 @@ SYSCALL_DEFINE5(perf_event_open,
perf_remove_from_context(sibling, false);
put_ctx(gctx);
}
- } else {
- mutex_lock(&ctx->mutex);
- }
-
- WARN_ON_ONCE(ctx->parent_ctx);
- if (move_group) {
/*
* Wait for everybody to stop referencing the events through
* the old lists, before installing it on new lists.
@@ -8296,22 +8306,20 @@ SYSCALL_DEFINE5(perf_event_open,
perf_event__state_init(group_leader);
perf_install_in_context(ctx, group_leader, group_leader->cpu);
get_ctx(ctx);
- }
- if (!exclusive_event_installable(event, ctx)) {
- err = -EBUSY;
- mutex_unlock(&ctx->mutex);
- fput(event_file);
- goto err_context;
+ /*
+ * Now that all events are installed in @ctx, nothing
+ * references @gctx anymore, so drop the last reference we have
+ * on it.
+ */
+ put_ctx(gctx);
}
perf_install_in_context(ctx, event, event->cpu);
perf_unpin_context(ctx);
- if (move_group) {
+ if (move_group)
mutex_unlock(&gctx->mutex);
- put_ctx(gctx);
- }
mutex_unlock(&ctx->mutex);
put_online_cpus();
@@ -8338,6 +8346,12 @@ SYSCALL_DEFINE5(perf_event_open,
fd_install(event_fd, event_file);
return event_fd;
+err_locked:
+ if (move_group)
+ mutex_unlock(&gctx->mutex);
+ mutex_unlock(&ctx->mutex);
+/* err_file: */
+ fput(event_file);
err_context:
perf_unpin_context(ctx);
put_ctx(ctx);
--
2.1.4
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [perf] 3215929f8f: n f[d 29 [ 4:22:177.]092021] EIP is at SyS_perf_event_open+0x757/0xb86
2015-09-17 9:06 ` Fengguang Wu
@ 2015-09-17 9:09 ` Peter Zijlstra
0 siblings, 0 replies; 4+ messages in thread
From: Peter Zijlstra @ 2015-09-17 9:09 UTC (permalink / raw)
To: lkp
[-- Attachment #1: Type: text/plain, Size: 713 bytes --]
On Thu, Sep 17, 2015 at 05:06:39PM +0800, Fengguang Wu wrote:
> > How can I get the actual patch? I don't have this commit. (It could be a
> > previous version, I had a bug like that, but not having the actual patch
> > I cannot check if its the same or not).
>
> Here is the patch:
Thanks!
> + gctx = group_leader->ctx;
> + if (move_group)
> + mutex_lock_double(&gctx->mutex, &ctx->mutex);
> + else
> + mutex_lock(&ctx->mutex);
Yep, this is the buggy one. The current one looks like:
if (move_group) {
gctx = group_leader->ctx;
+ mutex_lock_double(&gctx->mutex, &ctx->mutex);
+ } else {
+ mutex_lock(&ctx->mutex);
+ }
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2015-09-17 9:09 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-09-17 5:28 [perf] 3215929f8f: n f[d 29 [ 4:22:177.]092021] EIP is at SyS_perf_event_open+0x757/0xb86 kernel test robot
2015-09-17 8:53 ` Peter Zijlstra
2015-09-17 9:06 ` Fengguang Wu
2015-09-17 9:09 ` Peter Zijlstra
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.