Linux s390 Architecture development
 help / color / mirror / Atom feed
From: Martin Schwidefsky <schwidefsky@de.ibm.com>
To: Roland McGrath <roland@redhat.com>
Cc: Oleg Nesterov <oleg@redhat.com>,
	caiqian@redhat.com, Heiko Carstens <heiko.carstens@de.ibm.com>,
	Jan Kratochvil <jkratoch@redhat.com>,
	linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org,
	utrace-devel@redhat.com
Subject: Re: s390 && user_enable_single_step() (Was: odd utrace testing results on s390x)
Date: Tue, 5 Jan 2010 10:50:30 +0100	[thread overview]
Message-ID: <20100105105030.66bb8a0a@mschwide.boeblingen.de.ibm.com> (raw)
In-Reply-To: <20100104211147.4CC94D532@magilla.sf.frob.com>

On Mon,  4 Jan 2010 13:11:47 -0800 (PST)
Roland McGrath <roland@redhat.com> wrote:

> > This probably means that copy_process()->user_disable_single_step()
> > is not enough to clear the "this task wants single-stepping" copied
> > from parent.
> 
> I would suspect s390's TIF_SINGLE_STEP flag here.  That flag means "a
> single-step trap occurred".  This is what causes do_single_step to be
> called before returning to user mode, rather than the machine trap doing it
> directly as is done in the other arch implementations.

Just my thinking as well.

> If I'm right, then "this task wants single-stepping" is not the problem,
> and that really is fully cleared.  In fact, looking at s390's copy_thread
> (arch/s390/kernel/process.c) it clears out all the state that is actually
> touched by user_enable_single_step and user_disable_single_step.  So for
> s390 the new fork.c call is actually superfluous AFAICT.

        /* Don't copy debug registers */
        memset(&p->thread.per_info, 0, sizeof(p->thread.per_info));

Yep, the call from fork.c is indeed superfluous.

> The problem is that the copied parent state includes the "this task has a
> pending single-step to report" flag.  IMHO it clearly makes sense for
> s390's copy_thread to clear this flag in a new task, which it does not do now.
> 
> An alternative to that would be just to make its user_disable_single_step
> clear the flag.  That could in theory also have an effect on e.g. the
> (authentic) pending step report of a tracee that was stopped with
> TIF_SINGLE_STEP set when its tracer detached.  This might be considered a
> good thing, but since every other arch posts the SIGTRAP immediately they
> all have the equivalent issue and s390 doesn't need to be any "better" than
> they are before we have a generic resolution to the whole subject of
> tracer-induced signals (which we won't get into now).  I'm not even sure
> from my insufficient reading of the s390 assembly code whether this path is
> even possible, i.e. do_signal called before do_single_step.

do_signal is called before do_single_step. The order of checks of the
TIF_ bits is 1) machine checks, 2) need resched, 3) signal pending, 4)
notify resume, 5) restarting system call, 6) single step.
But why is that important ? If the TIF_SINGLE_STEP bit is set the order
of do_signal vs. do_single_step does not seem to be important to me.
There will be a SIGTRAP if TIF_SINGLE_STEP is set, no ?

But I agree, it is probably better to make all arches look the same in
regard to that pending step report. 

> Martin, I suggest having copy_thread clear TIF_SINGLE_STEP.
> That bit is always task-private state that should not be copied.

Then let us do this.
 
> Btw, given the complexity of FixPerRegisters (and its new additional cost
> on task==current), you might want to make user_*_single_step bail out if
> per_info.single_step is already set/clear on entry.

The LCTLG of multiple control registers is rather expensive. Does it
happen often that user_*_single_step is called without need? For gdb is
doesn't matter, the cost to switch between tracer and tracee is already
large, the cycles added to FixPerRegisters won't matter much. For
utrace things might be different.

-- 
blue skies,
   Martin.

"Reality continues to ruin my life." - Calvin.

  reply	other threads:[~2010-01-05  9:50 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1503844142.2061111261478093776.JavaMail.root@zmail06.collab.prod.int.phx2.redhat.com>
     [not found] ` <1257887498.2061171261478252049.JavaMail.root@zmail06.collab.prod.int.phx2.redhat.com>
2010-01-04 15:52   ` s390 && user_enable_single_step() (Was: odd utrace testing results on s390x) Oleg Nesterov
2010-01-04 16:16     ` Martin Schwidefsky
2010-01-04 18:14       ` Oleg Nesterov
2010-01-04 19:30         ` Oleg Nesterov
2010-01-04 21:11         ` Roland McGrath
2010-01-05  9:50           ` Martin Schwidefsky [this message]
2010-01-05 15:36             ` Oleg Nesterov
2010-01-05 15:46               ` Martin Schwidefsky
2010-01-05 15:59                 ` Oleg Nesterov
2010-01-05 17:03                   ` Oleg Nesterov
2010-01-05 19:58                     ` Oleg Nesterov
2010-01-06 14:59                       ` Heiko Carstens
2010-01-06 20:17                       ` Oleg Nesterov
2010-01-06 21:13                         ` Roland McGrath
2010-01-07  9:18                           ` Martin Schwidefsky
2010-01-07 17:54                             ` Oleg Nesterov
2010-01-07 21:48                               ` Roland McGrath
2010-01-21 20:51                                 ` Oleg Nesterov
2010-01-26 13:13                                   ` Martin Schwidefsky
2010-01-07 21:46                             ` Roland McGrath
2010-01-08  8:30                               ` Martin Schwidefsky
2010-01-08 10:25                                 ` Roland McGrath
2010-01-05 15:47               ` Oleg Nesterov
2010-01-05 15:50                 ` Martin Schwidefsky
2010-01-06 21:08               ` Roland McGrath
2010-01-07  9:16                 ` Martin Schwidefsky
2010-01-07 18:16                   ` Oleg Nesterov
2010-01-07 21:44                     ` Roland McGrath
2010-01-08  8:34                     ` Martin Schwidefsky
2010-01-07 21:41                   ` Roland McGrath
2010-01-07 18:11                 ` Oleg Nesterov
2010-01-06 20:23             ` Oleg Nesterov
2010-01-06 20:56             ` Roland McGrath
2010-01-07  9:00               ` Martin Schwidefsky
2010-01-07 21:32                 ` Roland McGrath
2010-01-21 20:32                 ` Oleg Nesterov
2010-01-05  9:26         ` Martin Schwidefsky
2010-01-06 21:15           ` Roland McGrath
2010-01-04 20:46       ` Roland McGrath

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=20100105105030.66bb8a0a@mschwide.boeblingen.de.ibm.com \
    --to=schwidefsky@de.ibm.com \
    --cc=caiqian@redhat.com \
    --cc=heiko.carstens@de.ibm.com \
    --cc=jkratoch@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=oleg@redhat.com \
    --cc=roland@redhat.com \
    --cc=utrace-devel@redhat.com \
    /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