linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Oleg Nesterov <oleg@redhat.com>
To: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@elte.hu>, Steven Rostedt <rostedt@goodmis.org>,
	Linux-mm <linux-mm@kvack.org>,
	Arnaldo Carvalho de Melo <acme@infradead.org>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Hugh Dickins <hughd@google.com>,
	Christoph Hellwig <hch@infradead.org>,
	Andi Kleen <andi@firstfloor.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Jonathan Corbet <corbet@lwn.net>,
	Andrew Morton <akpm@linux-foundation.org>,
	Jim Keniston <jkenisto@linux.vnet.ibm.com>,
	Roland McGrath <roland@hack.frob.com>,
	Ananth N Mavinakayanahalli <ananth@in.ibm.com>,
	LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v5 3.1.0-rc4-tip 26/26]   uprobes: queue signals while thread is singlestepping.
Date: Tue, 11 Oct 2011 20:56:53 +0200	[thread overview]
Message-ID: <20111011185653.GA10215@redhat.com> (raw)
In-Reply-To: <20111011172603.GD16268@linux.vnet.ibm.com>

On 10/11, Srikar Dronamraju wrote:
>
> * Oleg Nesterov <oleg@redhat.com> [2011-10-10 20:25:35]:
>
> > Yes, I think this is possible, and probably you do not even need
> > set_restore_sigmask().
> >
> > But. There are some problems with this approach too.
> >
> > Firstly, even if you block all signals, there are other reasons for
> > TIF_SIGPENDING which you can't control. For example, the task can be
> > frozen or it can stop in UTASK_SSTEP state. Not good, if we have
> > enough threads, this can lead to the "soft" deadlock. Say, a group
> > stop can never finish because a thread sleeps in xol_wait_event()
> > "forever".
> >
>
> My idea was to block signals just across singlestep only. I.e
> we dont block signals while we contend for the slot.

Yes, yes, I see. But, once again, this can only protect from kill().

The task can stop even if you block all signals, another thread
can initiate the group stop and set JOBCTL_STOP_PENDING + TIF_SIGPENDING.
And note that it can stop _before_ it returns to user mode to step
over the xol insn.

In theory the tasks like this can consume all slots, and if we have
yet another thread waiting in xol_wait_event(), we deadlock. Although
in this case SIGCONT helps, but this group stop can never finish.

> > Another problem is that it is not possible to block the "implicit"
> > SIGKILL sent by exec/exit_group/etc. This mean the task can exit
> > without sstep_complete/xol_free_insn_slot/etc. Mostly this is fine,
> > we have free_uprobe_utask()->xol_free_insn_slot(). But in theory
> > this can deadlock afaics. Suppose that the coredumping is in progress,
> > the killed UTASK_SSTEP task hangs in exit_mm() waiting for other
> > threads. If we have enough threads like this, we can deadlock with
> > another thread sleeping in xol_wait_event().
>
> Shouldnt the behaviour be the same as threads that did a
> select,sigsuspend?

Hmm. I don't understand... Could you explain?

Firstly, select/sigsuspend can't block SIGKILL, but this doesn't matter.
My point was, the task can exit in UTASK_SSTEP state, and without
xol_free_insn_slot(). And this (in theory) can lead to the "real"
deadlock.

> > However the first problem looks nasty, even if it is not very serious.
> > And, otoh, it doesn't look right to block SIGKILL, the task can loop
> > forever executing the xol insn (see below).
> >
> >
> >
> > What do you think about the patch below? On top of 25/26, uncompiled,
> > untested. With this patch the task simply refuses to react to
> > TIF_SIGPENDING until sstep_complete().
> >
>
> Your patch looks very simple and clean.
> Will test this patch and revert.

Great. I'll think a bit more and send you the "final" version tomorrow.
Assuming we can change sstep_complete() as we discussed, it doesn't need
fatal_signal_pending().

HOWEVER. There is yet another problem. Another thread can, say, unmap()
xol_vma. In this case we should ensure that the task can't fault in an
endless loop.

> > And, unless I missed something, this makes
> > free_uprobe_utask()->xol_free_insn_slot() unnecessary.
>
> What if a fatal (SIGKILL) signal was delivered only to that thread

this is not possible, in this case all threads are killed. But,

> or a fatal signal for a thread-group but more
> than one thread-group share the mm?

Yes, this is possible.

Sorry for confusion. Yes, if we have the fatal_signal_pending() check
in sstep_complete(), then we do need
free_uprobe_utask()->xol_free_insn_slot(). But this check was added
only to illustrate another problem with the self-repeating insns.

And. With "HOWEVER" above, we probably need this xol_free anyway.

> you have already commented why blocking signals is a problem, but I
> still thought I will post the patch that I had to let you know what I
> was thinking before I saw your patch.
>
> While task is processing a singlestep due to uprobes breakpoint hit,
> block signals from the time it enables singlestep to the time it disables
> singlestep.

OK, it is too late for me today, I'll take a look tomorrow.

This approach has some advantages too, perhaps we should make something
"in between".

Oleg.

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

  reply	other threads:[~2011-10-11 19:01 UTC|newest]

Thread overview: 160+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-09-20 11:59 [PATCH v5 3.1.0-rc4-tip 0/26] Uprobes patchset with perf probe support Srikar Dronamraju
2011-09-20 11:59 ` [PATCH v5 3.1.0-rc4-tip 1/26] uprobes: Auxillary routines to insert, find, delete uprobes Srikar Dronamraju
2011-09-20 15:42   ` Stefan Hajnoczi
2011-09-26 11:18     ` Peter Zijlstra
2011-09-26 11:59       ` Srikar Dronamraju
2011-09-26 11:18   ` Peter Zijlstra
2011-09-26 12:02     ` Srikar Dronamraju
2011-09-26 13:35   ` Peter Zijlstra
2011-09-26 16:19     ` Srikar Dronamraju
2011-09-20 12:00 ` [PATCH v5 3.1.0-rc4-tip 2/26] Uprobes: Allow multiple consumers for an uprobe Srikar Dronamraju
2011-09-26 12:29   ` Peter Zijlstra
2011-09-20 12:00 ` [PATCH v5 3.1.0-rc4-tip 3/26] Uprobes: register/unregister probes Srikar Dronamraju
2011-09-20 16:50   ` Stefan Hajnoczi
2011-09-21  4:07     ` Srikar Dronamraju
2011-09-26 13:15   ` Peter Zijlstra
2011-09-26 13:23     ` Srikar Dronamraju
2011-10-03 12:46   ` Oleg Nesterov
2011-10-05 17:04     ` Srikar Dronamraju
2011-10-05 18:50       ` Oleg Nesterov
2011-10-06  6:51         ` Srikar Dronamraju
2011-10-07 17:03           ` Oleg Nesterov
2011-09-20 12:00 ` [PATCH v5 3.1.0-rc4-tip 4/26] uprobes: Define hooks for mmap/munmap Srikar Dronamraju
2011-09-20 17:03   ` Stefan Hajnoczi
2011-09-21  4:03     ` Srikar Dronamraju
2011-09-26 13:53   ` Peter Zijlstra
2011-09-26 15:44     ` Srikar Dronamraju
2011-09-27 11:37       ` Peter Zijlstra
2011-09-27 13:08         ` Srikar Dronamraju
2011-09-27 11:41       ` Peter Zijlstra
2011-09-27 12:59         ` Srikar Dronamraju
2011-09-27 11:42       ` Peter Zijlstra
2011-10-03 13:37   ` Oleg Nesterov
2011-10-06 11:05     ` Srikar Dronamraju
2011-10-07 17:36       ` Oleg Nesterov
2011-10-10 12:31         ` Srikar Dronamraju
2011-09-20 12:00 ` [PATCH v5 3.1.0-rc4-tip 5/26] Uprobes: copy of the original instruction Srikar Dronamraju
2011-10-03 16:29   ` Oleg Nesterov
2011-10-05 10:52     ` Srikar Dronamraju
2011-10-05 15:11       ` Oleg Nesterov
2011-10-05 16:09     ` Srikar Dronamraju
2011-10-05 17:53       ` Oleg Nesterov
2011-09-20 12:01 ` [PATCH v5 3.1.0-rc4-tip 6/26] Uprobes: define fixups Srikar Dronamraju
2011-09-20 12:01 ` [PATCH v5 3.1.0-rc4-tip 7/26] Uprobes: uprobes arch info Srikar Dronamraju
2011-09-20 12:01 ` [PATCH v5 3.1.0-rc4-tip 8/26] x86: analyze instruction and determine fixups Srikar Dronamraju
2011-09-20 17:13   ` Stefan Hajnoczi
2011-09-20 18:12     ` Christoph Hellwig
2011-09-20 20:53       ` Stefan Hajnoczi
2011-09-23 11:53         ` Masami Hiramatsu
2011-09-23 16:51           ` Stefan Hajnoczi
2011-09-26 19:59             ` Josh Stone
2011-09-27  1:32               ` Masami Hiramatsu
2011-09-27  2:59                 ` Josh Stone
2011-09-27  7:08               ` Stefan Hajnoczi
2011-09-22  1:05   ` Josh Stone
2011-10-05 15:48   ` Oleg Nesterov
2011-10-05 16:12     ` Srikar Dronamraju
2011-09-20 12:01 ` [PATCH v5 3.1.0-rc4-tip 9/26] Uprobes: Background page replacement Srikar Dronamraju
2011-10-05 16:19   ` Oleg Nesterov
2011-10-06  6:53     ` Srikar Dronamraju
2011-09-20 12:01 ` [PATCH v5 3.1.0-rc4-tip 10/26] x86: Set instruction pointer Srikar Dronamraju
2011-10-05 16:29   ` Oleg Nesterov
2011-09-20 12:02 ` [PATCH v5 3.1.0-rc4-tip 11/26] x86: Introduce TIF_UPROBE FLAG Srikar Dronamraju
2011-09-20 12:02 ` [PATCH v5 3.1.0-rc4-tip 12/26] Uprobes: Handle breakpoint and Singlestep Srikar Dronamraju
2011-09-26 13:59   ` Peter Zijlstra
2011-09-26 16:01     ` Srikar Dronamraju
2011-09-26 16:25       ` Peter Zijlstra
2011-10-05 17:48         ` Oleg Nesterov
2011-09-26 14:02   ` Peter Zijlstra
2011-10-07 18:28   ` Oleg Nesterov
2011-10-09 13:31     ` Oleg Nesterov
2011-09-20 12:02 ` [PATCH v5 3.1.0-rc4-tip 13/26] x86: define a x86 specific exception notifier Srikar Dronamraju
2011-09-26 14:19   ` Peter Zijlstra
2011-09-26 15:52     ` Srikar Dronamraju
2011-09-27 11:46       ` Peter Zijlstra
2011-10-07 18:31   ` Oleg Nesterov
2011-09-20 12:02 ` [PATCH v5 3.1.0-rc4-tip 14/26] uprobe: register " Srikar Dronamraju
2011-09-20 12:03 ` [PATCH v5 3.1.0-rc4-tip 15/26] x86: Define x86_64 specific uprobe_task_arch_info structure Srikar Dronamraju
2011-09-20 12:03 ` [PATCH v5 3.1.0-rc4-tip 16/26] uprobes: Introduce " Srikar Dronamraju
2011-09-20 12:03 ` [PATCH v5 3.1.0-rc4-tip 17/26] x86: arch specific hooks for pre/post singlestep handling Srikar Dronamraju
2011-09-26 14:23   ` Peter Zijlstra
2011-09-26 16:34     ` Srikar Dronamraju
2011-09-27 11:44       ` Peter Zijlstra
2011-09-20 12:03 ` [PATCH v5 3.1.0-rc4-tip 18/26] uprobes: slot allocation Srikar Dronamraju
2011-09-27 11:49   ` Peter Zijlstra
2011-09-27 12:32     ` Srikar Dronamraju
2011-09-27 12:59       ` Peter Zijlstra
2011-09-27 12:18   ` Peter Zijlstra
2011-09-27 12:45     ` Srikar Dronamraju
2011-09-27 12:36   ` Peter Zijlstra
2011-09-27 12:37   ` Peter Zijlstra
2011-09-27 12:50     ` Srikar Dronamraju
2011-09-27 12:50   ` Peter Zijlstra
2011-09-27 12:55   ` Peter Zijlstra
2011-10-07 18:37   ` Oleg Nesterov
2011-10-09 11:47     ` Srikar Dronamraju
2011-09-20 12:03 ` [PATCH v5 3.1.0-rc4-tip 19/26] tracing: Extract out common code for kprobes/uprobes traceevents Srikar Dronamraju
2011-09-28  5:04   ` Masami Hiramatsu
2011-09-20 12:04 ` [PATCH v5 3.1.0-rc4-tip 20/26] tracing: uprobes trace_event interface Srikar Dronamraju
2011-09-20 12:04 ` [PATCH v5 3.1.0-rc4-tip 21/26] tracing: uprobes Documentation Srikar Dronamraju
2011-09-20 12:04 ` [PATCH v5 3.1.0-rc4-tip 22/26] perf: rename target_module to target Srikar Dronamraju
2011-09-20 12:04 ` [PATCH v5 3.1.0-rc4-tip 23/26] perf: perf interface for uprobes Srikar Dronamraju
2011-09-20 12:04 ` [PATCH v5 3.1.0-rc4-tip 24/26] perf: show possible probes in a given executable file or library Srikar Dronamraju
2011-09-20 12:05 ` [PATCH v5 3.1.0-rc4-tip 25/26] perf: Documentation for perf uprobes Srikar Dronamraju
2011-09-28  9:20   ` Masami Hiramatsu
2011-09-20 12:05 ` [PATCH v5 3.1.0-rc4-tip 26/26] uprobes: queue signals while thread is singlestepping Srikar Dronamraju
2011-09-27 13:03   ` Peter Zijlstra
2011-09-27 13:12     ` Srikar Dronamraju
2011-10-05 18:01       ` Oleg Nesterov
2011-10-06  5:47         ` Srikar Dronamraju
2011-10-07 16:58           ` Oleg Nesterov
2011-10-10 12:25             ` Srikar Dronamraju
2011-10-10 18:25               ` Oleg Nesterov
2011-10-11 17:24                 ` Oleg Nesterov
2011-10-11 17:38                   ` Srikar Dronamraju
2011-10-11 17:26                 ` Srikar Dronamraju
2011-10-11 18:56                   ` Oleg Nesterov [this message]
2011-10-12 12:01                     ` Srikar Dronamraju
2011-10-12 19:34                       ` Oleg Nesterov
2011-10-12 19:59                   ` Oleg Nesterov
2011-09-20 13:34 ` [PATCH v5 3.1.0-rc4-tip 0/26] Uprobes patchset with perf probe support Christoph Hellwig
2011-09-20 14:12   ` Srikar Dronamraju
2011-09-20 14:28     ` Christoph Hellwig
2011-09-20 15:19       ` Srikar Dronamraju
2011-10-15 19:00 ` [PATCH 0/X] (Was: Uprobes patchset with perf probe support) Oleg Nesterov
2011-10-15 19:00   ` [PATCH 1/X] uprobes: write_opcode: the new page needs PG_uptodate Oleg Nesterov
2011-10-17 10:59     ` Srikar Dronamraju
2011-10-15 19:00   ` [PATCH 2/X] uprobes: write_opcode() needs put_page(new_page) unconditionally Oleg Nesterov
2011-10-18 16:47     ` Srikar Dronamraju
2011-10-15 19:01   ` [PATCH 3/X] uprobes: xol_add_vma: fix ->uprobes_xol_area initialization Oleg Nesterov
2011-10-15 19:01   ` [PATCH 4/X] uprobes: xol_add_vma: misc cleanups Oleg Nesterov
2011-10-15 19:01   ` [PATCH 5/X] uprobes: xol_alloc_area() needs memory barriers Oleg Nesterov
2011-10-16 16:13   ` [PATCH 6/X] uprobes: reimplement xol_add_vma() via install_special_mapping() Oleg Nesterov
2011-10-17 10:50     ` Srikar Dronamraju
2011-10-17 13:34       ` Stephen Smalley
2011-10-17 18:55         ` Oleg Nesterov
2011-10-16 16:14   ` [PATCH 7/X] uprobes: xol_add_vma: simply use TASK_SIZE as a hint Oleg Nesterov
2011-10-19 21:51   ` [PATCH 8-14/X] (Was: Uprobes patchset with perf probe support) Oleg Nesterov
2011-10-19 21:52     ` [PATCH 8/X] uprobes: kill sstep_complete() Oleg Nesterov
2011-10-19 21:52     ` [PATCH 9/X] uprobes: introduce UTASK_SSTEP_ACK state Oleg Nesterov
2011-10-19 21:52     ` [PATCH 10/X] uprobes: introduce uprobe_deny_signal() Oleg Nesterov
2011-10-19 21:53     ` [PATCH 11/X] uprobes: x86: introduce xol_was_trapped() Oleg Nesterov
2011-10-24 14:55       ` Srikar Dronamraju
2011-10-24 16:07         ` Oleg Nesterov
2011-10-19 21:53     ` [PATCH 12/X] uprobes: x86: introduce abort_xol() Oleg Nesterov
2011-10-21 14:42       ` Srikar Dronamraju
2011-10-21 16:22         ` Oleg Nesterov
2011-10-21 16:26         ` Ananth N Mavinakayanahalli
2011-10-21 16:42           ` Oleg Nesterov
2011-10-21 17:59             ` test-case (Was: [PATCH 12/X] uprobes: x86: introduce abort_xol()) Oleg Nesterov
2011-10-25 14:06               ` Srikar Dronamraju
2011-10-25 15:49                 ` Oleg Nesterov
2011-10-22  7:09             ` [PATCH 12/X] uprobes: x86: introduce abort_xol() Ananth N Mavinakayanahalli
2011-10-19 21:53     ` [PATCH 13/X] uprobes: introduce UTASK_SSTEP_TRAPPED logic Oleg Nesterov
2011-10-22  7:20       ` Ananth N Mavinakayanahalli
2011-10-24 14:41         ` Oleg Nesterov
2011-10-24 15:16           ` Ananth N Mavinakayanahalli
2011-10-24 16:13             ` Oleg Nesterov
2011-10-25  6:01               ` Ananth N Mavinakayanahalli
2011-10-25 14:30                 ` Oleg Nesterov
2011-10-19 21:54     ` [PATCH 14/X] uprobes: uprobe_deny_signal: check __fatal_signal_pending() Oleg Nesterov

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=20111011185653.GA10215@redhat.com \
    --to=oleg@redhat.com \
    --cc=acme@infradead.org \
    --cc=akpm@linux-foundation.org \
    --cc=ananth@in.ibm.com \
    --cc=andi@firstfloor.org \
    --cc=corbet@lwn.net \
    --cc=hch@infradead.org \
    --cc=hughd@google.com \
    --cc=jkenisto@linux.vnet.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=masami.hiramatsu.pt@hitachi.com \
    --cc=mingo@elte.hu \
    --cc=peterz@infradead.org \
    --cc=roland@hack.frob.com \
    --cc=rostedt@goodmis.org \
    --cc=srikar@linux.vnet.ibm.com \
    --cc=tglx@linutronix.de \
    --cc=torvalds@linux-foundation.org \
    /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;
as well as URLs for NNTP newsgroup(s).