All of lore.kernel.org
 help / color / mirror / Atom feed
From: Thomas Gleixner <tglx@linutronix.de>
To: Oleg Nesterov <oleg@redhat.com>
Cc: Andy Lutomirski <luto@amacapital.net>,
	Roman Pen <roman.penyaev@profitbricks.com>,
	Andy Lutomirski <luto@kernel.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>, Tejun Heo <tj@kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	Chunming Zhou <David1.Zhou@amd.com>,
	Alex Deucher <alexander.deucher@amd.com>
Subject: Re: [PATCH 2/2] kthread: don't use to_live_kthread() in kthread_park() and kthread_unpark()
Date: Wed, 9 Nov 2016 09:45:08 +0100 (CET)	[thread overview]
Message-ID: <alpine.DEB.2.20.1611090908270.3501@nanos> (raw)
In-Reply-To: <20161031200823.GC19430@redhat.com>

On Mon, 31 Oct 2016, Oleg Nesterov wrote:
> I think we need to unexport kthread_park/unpark, and either make it return
> "void" or actually fix the race with kthred_stop/exit. This patch just adds
> WARN_ON(PF_EXITING) for now.

I'll have a look.
 
> The usage of kthread_park() in cpuhp code (cpu.c, smpboot.c, stop_machine.c)
> is fine. It can never see an exiting/exited kthread, smpboot_destroy_threads()
> clears *ht->store, smpboot_park_thread() checks it is not NULL under the same
> smpboot_threads_lock. cpuhp_threads and cpu_stop_threads never exit, so other
> callers are fine too.
> 
> But it has two more users:
> 
> - watchdog_park_threads() and it does not look nice. The code is actually
>   correct, get_online_cpus() ensures that kthread_park() can't race with
>   itself (note that kthread_park() can't handle this race correctly), but
>   imo it should not use kthread_park() directly.

Should we provide an interface through the smpboot thread infrastructure for
this?

> - drivers/gpu/drm/amd/scheduler/gpu_scheduler.c and I think it should not
>   use kthread_park() too.
> 
>   But this patch should not break this code. kthread_park() must not be
>   called after amd_sched_fini() which does kthread_stop(), otherwise even
>   to_live_kthread() is not safe because task_struct can be already freed
>   and sched->thread can point to nowhere.

Right. That's why the smpboot thread code holds a task ref which is only
released after the thread has been stopped.

I can see why that gpu driver wants to use the park mechanism and I guess
there are other legitimate use cases as well. I prefer to implement a
park/unpark variant which is safe to use on arbitrary kthreads over forcing
driver writers to come up with even more broken open coded implementations
of that.

> Signed-off-by: Oleg Nesterov <oleg@redhat.com>

Reviewed-by: Thomas Gleixner <tglx@linutronix.de>

  reply	other threads:[~2016-11-09  8:47 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-10-25 11:05 [PATCH v3 1/1] kthread: allocate kthread structure using kmalloc Roman Pen
2016-10-25 14:03 ` Oleg Nesterov
2016-10-25 15:43   ` Oleg Nesterov
2016-10-25 16:08     ` Roman Penyaev
2016-10-25 16:17       ` Oleg Nesterov
2016-10-25 16:52     ` Andy Lutomirski
2016-10-26 14:14       ` Oleg Nesterov
2016-10-26 14:57         ` Thomas Gleixner
2016-10-26 15:51           ` Oleg Nesterov
2016-10-26 18:31             ` Thomas Gleixner
2016-10-28 16:11               ` [PATCH 0/2] kthread: make struct kthread kmalloc'ed Oleg Nesterov
2016-10-28 16:11                 ` [PATCH 1/2] " Oleg Nesterov
2016-10-28 18:48                   ` Thomas Gleixner
2016-10-28 16:12                 ` [PATCH 2/2] Revert "kthread: Pin the stack via try_get_task_stack()/put_task_stack() in to_live_kthread() function" Oleg Nesterov
2016-10-28 18:49                   ` Thomas Gleixner
2016-10-28 18:44                 ` [PATCH 0/2] kthread: make struct kthread kmalloc'ed Thomas Gleixner
2016-10-31 20:07                 ` [PATCH 0/2] kthread: kill to_live_kthread() Oleg Nesterov
2016-10-31 20:07                   ` [PATCH 1/2] kthread: don't use to_live_kthread() in kthread_stop() Oleg Nesterov
2016-11-09  7:58                     ` Thomas Gleixner
2016-10-31 20:08                   ` [PATCH 2/2] kthread: don't use to_live_kthread() in kthread_park() and kthread_unpark() Oleg Nesterov
2016-11-09  8:45                     ` Thomas Gleixner [this message]
2016-11-09 17:27                       ` Oleg Nesterov
2016-11-10 17:19                         ` [PATCH 0/1] kthread: don't abuse kthread_create_on_cpu() in __kthread_create_worker() Oleg Nesterov
2016-11-10 17:20                           ` [PATCH 1/1] " Oleg Nesterov
2016-11-14 11:12                             ` Petr Mladek
2016-11-14 11:09                           ` [PATCH 0/1] " Petr Mladek
2016-11-07 18:23                   ` [PATCH 0/2] kthread: kill to_live_kthread() Andy Lutomirski
2016-10-26 16:13         ` [PATCH v3 1/1] kthread: allocate kthread structure using kmalloc Oleg Nesterov
2016-10-27  2:56         ` Josh Poimboeuf
2016-10-27 13:10           ` Oleg Nesterov
2016-10-25 15:46   ` Roman Penyaev

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=alpine.DEB.2.20.1611090908270.3501@nanos \
    --to=tglx@linutronix.de \
    --cc=David1.Zhou@amd.com \
    --cc=alexander.deucher@amd.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luto@amacapital.net \
    --cc=luto@kernel.org \
    --cc=mingo@redhat.com \
    --cc=oleg@redhat.com \
    --cc=peterz@infradead.org \
    --cc=roman.penyaev@profitbricks.com \
    --cc=tj@kernel.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 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.