public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Oleg Nesterov <oleg@redhat.com>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
	Frederic Weisbecker <fweisbec@gmail.com>,
	LKML <linux-kernel@vger.kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Ingo Molnar <mingo@kernel.org>,
	Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
Subject: Re: [PATCH RESEND 2/2] tracing: syscall_regfunc() should not skip kernel threads
Date: Thu, 10 Apr 2014 21:38:20 +0200	[thread overview]
Message-ID: <20140410193820.GA15624@redhat.com> (raw)
In-Reply-To: <20140410151340.7d24aafd@gandalf.local.home>

On 04/10, Steven Rostedt wrote:
>
> On Thu, 10 Apr 2014 20:14:17 +0200
> Oleg Nesterov <oleg@redhat.com> wrote:
> 
> 
> > And I forgot to mention, given that the kernel_thread() callback should
> > call do_exit() itself, then this part of cc3b13c11c567c69a63
> > 
> > 	one case when a kernel thread can reach the
> > 	usual syscall exit tracing path: when we create a kernel thread, the
> > 	child comes to ret_from_fork
> > 
> > is no longer relevant? A PF_KTHREAD child should never return from the
> > callback and thus it should never do "jmp syscall_exit" ?
> > 
> 
> Are you sure.

Not.

> On set up of the kthread, create_kthread() calls
> kernel_thread() with "kthread()" as its first parameter.
> 
> kernel_thread() then calls do_fork() passing the "kthread" function as
> the stack_start parameter, which if you follow where that goes, it gets
> to copy_thread() in process_[63][42].c which assigns sp (the function)
> to the bx register for the PF_KTHREAD case. But more importantly, it
> sets up the stack to have ip pointing to ret_from_kernel_thread (32 bit
> version).
> 
> The jmp syscall_exit when it goes to return to "userspace" will in
> actuality return to ret_from_kernel_thread (32 bit). Which this does:
> 
> 	call *PT_EBX(%esp)
> 
> which calls your handler. But then again, this calls syscall_exit when
> done, which probably will never be hit as kthread() calls do_exit()
> itself. Perhaps if something goes wrong, syscall_exit can handle any
> faults that can happen?
> 
> For 64 bit, the check for kernel thread is in ret_from_fork itself.
> which does the call *%rbx, but again, if it fails, it then calls
> int_ret_from_sys_call, which it may also handle faults.

See my previous email.

I _think_ that the kernel thread can only return from "call *%rbx" if
it is no longer a kernel thread, iow, do_execve() was called.

Oleg.


  reply	other threads:[~2014-04-10 19:38 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-04-09 16:11 [PATCH 0/5] core: Convert thread iteration to use for_each[_process]_thread APIs, 1st pile Frederic Weisbecker
2014-04-09 16:11 ` [PATCH 1/5] sched: Convert thread_group_cputime() to use for_each_thread() Frederic Weisbecker
2014-04-09 17:12   ` Oleg Nesterov
2014-04-09 17:16   ` Peter Zijlstra
2014-04-09 17:32     ` Oleg Nesterov
2014-04-09 18:30       ` Peter Zijlstra
2014-04-09 19:46         ` Oleg Nesterov
2014-04-09 19:49           ` Peter Zijlstra
2014-04-10 16:19             ` Peter Zijlstra
2014-04-10 16:32               ` Peter Zijlstra
2014-04-10 17:29               ` Oleg Nesterov
2014-04-10 17:36                 ` Peter Zijlstra
2014-04-10 17:42                   ` Peter Zijlstra
2014-04-10 19:15                   ` Oleg Nesterov
2014-04-10 20:55                     ` Peter Zijlstra
2014-04-10  7:56           ` Ingo Molnar
2014-04-09 16:11 ` [PATCH 2/5] tracepoint: Convert process iteration to use for_each_process_thread() Frederic Weisbecker
2014-04-09 16:28   ` Mathieu Desnoyers
2014-04-09 16:40     ` Frederic Weisbecker
2014-04-09 16:42     ` Steven Rostedt
2014-04-09 17:05       ` [PATCH 0/2] Was: " Oleg Nesterov
2014-04-09 17:05         ` [PATCH RESEND 1/2] tracing: syscall_*regfunc() can race with copy_process() Oleg Nesterov
2014-04-10 13:04           ` Steven Rostedt
2014-04-10 13:33             ` Oleg Nesterov
2014-04-10 13:06           ` Steven Rostedt
2014-04-10 13:34             ` Oleg Nesterov
2014-04-11 15:22               ` Steven Rostedt
2014-04-11 15:58                 ` Oleg Nesterov
2014-04-13 18:58                   ` [PATCH v2 0/3] tracing: syscall_*regfunc() fixes Oleg Nesterov
2014-04-13 18:58                     ` [PATCH v2 1/3] tracing: fix syscall_*regfunc() vs copy_process() race Oleg Nesterov
2014-04-14 23:57                       ` Frederic Weisbecker
2014-04-13 18:59                     ` [PATCH v2 2/3] tracing: change syscall_*regfunc() to check PF_KTHREAD and use for_each_process_thread() Oleg Nesterov
2014-04-13 18:59                     ` [PATCH v2 3/3] tracing: syscall_regfunc() should not skip kernel threads Oleg Nesterov
2014-04-14 23:46                     ` [PATCH v2 0/3] tracing: syscall_*regfunc() fixes Frederic Weisbecker
2014-06-18 14:23                     ` Steven Rostedt
2014-06-18 15:36                       ` Oleg Nesterov
2014-04-09 17:06         ` [PATCH RESEND 2/2] tracing: syscall_regfunc() should not skip kernel threads Oleg Nesterov
2014-04-10 13:28           ` Steven Rostedt
2014-04-10 13:38             ` Oleg Nesterov
2014-04-10 14:28               ` Steven Rostedt
2014-04-10 14:46                 ` Oleg Nesterov
2014-04-10 15:08                   ` Steven Rostedt
2014-04-10 17:57                     ` Oleg Nesterov
2014-04-10 18:14                       ` Oleg Nesterov
2014-04-10 19:00                         ` Oleg Nesterov
2014-04-10 19:13                         ` Steven Rostedt
2014-04-10 19:38                           ` Oleg Nesterov [this message]
2014-04-10 19:55                             ` Steven Rostedt
2014-04-11 12:03                               ` Oleg Nesterov
2014-04-11 12:37                                 ` Steven Rostedt
2014-04-10 13:03         ` [PATCH 0/2] Was: Convert process iteration to use for_each_process_thread() Steven Rostedt
2014-04-09 16:11 ` [PATCH 3/5] hung_task: " Frederic Weisbecker
2014-04-09 17:23   ` Oleg Nesterov
2014-04-09 16:11 ` [PATCH 4/5] procfs: Convert process iteration to use for_each_thread() Frederic Weisbecker
2014-04-09 16:11 ` [PATCH 5/5] sched: Convert tasks iteration to use for_each_process_thread() Frederic Weisbecker

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=20140410193820.GA15624@redhat.com \
    --to=oleg@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=brueckner@linux.vnet.ibm.com \
    --cc=fweisbec@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=mingo@kernel.org \
    --cc=rostedt@goodmis.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