linux-rt-users.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
To: Scott Wood <swood@redhat.com>
Cc: Thomas Gleixner <tglx@linutronix.de>,
	Steven Rostedt <rostedt@goodmis.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Juri Lelli <juri.lelli@redhat.com>,
	Daniel Bristot de Oliveira <bristot@redhat.com>,
	Clark Williams <williams@redhat.com>,
	linux-kernel@vger.kernel.org, linux-rt-users@vger.kernel.org
Subject: Re: [PATCH RT 8/8] sched: Lazy migrate_disable processing
Date: Tue, 17 Sep 2019 18:50:27 +0200	[thread overview]
Message-ID: <20190917165026.pv3neijrpxrszdzo@linutronix.de> (raw)
In-Reply-To: <20190727055638.20443-9-swood@redhat.com>

On 2019-07-27 00:56:38 [-0500], Scott Wood wrote:
> diff --git a/kernel/cpu.c b/kernel/cpu.c
> index 885a195dfbe0..0096acf1a692 100644
> --- a/kernel/cpu.c
> +++ b/kernel/cpu.c
> @@ -939,17 +893,34 @@ static int takedown_cpu(unsigned int cpu)
>  	 */
>  	irq_lock_sparse();
>  
> -#ifdef CONFIG_PREEMPT_RT_FULL
> -	__write_rt_lock(cpuhp_pin);
> +#ifdef CONFIG_PREEMPT_RT_BASE
> +	WARN_ON_ONCE(takedown_cpu_task);
> +	takedown_cpu_task = current;
> +
> +again:
> +	for (;;) {
> +		int nr_pinned;
> +
> +		set_current_state(TASK_UNINTERRUPTIBLE);
> +		nr_pinned = cpu_nr_pinned(cpu);
> +		if (nr_pinned == 0)
> +			break;
> +		schedule();
> +	}

we used to have cpuhp_pin which ensured that once we own the write lock
there will be no more tasks that can enter a migrate_disable() section
on this CPU. It has been placed fairly late to ensure that nothing new
comes in as part of the shutdown process and that it flushes everything
out that is still in a migrate_disable() section.
Now you claim that once the counter reached zero it never increments
again. I would be happier if there was an explicit check for that :)
There is no back off and flush mechanism which means on a busy CPU (as
in heavily lock contended by multiple tasks) this will wait until the
CPU gets idle again.

> +	set_current_state(TASK_RUNNING);
>  #endif

Sebastian

  reply	other threads:[~2019-09-17 16:50 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-07-27  5:56 [RT PATCH 0/8] migrate disable fixes and performance Scott Wood
2019-07-27  5:56 ` [PATCH RT 1/8] sched: migrate_enable: Use sleeping_lock to indicate involuntary sleep Scott Wood
2019-07-29 13:26   ` Steven Rostedt
2019-07-27  5:56 ` [PATCH RT 2/8] sched: __set_cpus_allowed_ptr: Check cpus_mask, not cpus_ptr Scott Wood
2019-09-17 14:57   ` Sebastian Andrzej Siewior
2019-09-17 15:23     ` Scott Wood
2019-07-27  5:56 ` [PATCH RT 3/8] sched: Remove dead __migrate_disabled() check Scott Wood
2019-07-27  5:56 ` [PATCH RT 4/8] sched: migrate disable: Protect cpus_ptr with lock Scott Wood
2019-09-26 16:39   ` Sebastian Andrzej Siewior
2019-09-26 16:52     ` Scott Wood
2019-09-27 12:19       ` Sebastian Andrzej Siewior
2019-09-27 20:02         ` Scott Wood
2019-07-27  5:56 ` [PATCH RT 5/8] sched/deadline: Reclaim cpuset bandwidth in .migrate_task_rq() Scott Wood
2019-09-17 15:10   ` Sebastian Andrzej Siewior
2019-09-27  8:11   ` Juri Lelli
2019-09-27 16:40     ` Scott Wood
2019-09-30  7:12       ` Juri Lelli
2019-09-30 16:24         ` Scott Wood
2019-10-01  8:52           ` Juri Lelli
2019-10-09  6:25             ` Scott Wood
2019-10-09  7:27               ` Juri Lelli
2019-10-09 19:12                 ` Scott Wood
2019-10-10  8:18                   ` Juri Lelli
2019-07-27  5:56 ` [PATCH RT 6/8] sched: migrate_enable: Set state to TASK_RUNNING Scott Wood
2019-09-17 15:31   ` Sebastian Andrzej Siewior
2019-09-17 17:54     ` Scott Wood
2019-07-27  5:56 ` [PATCH RT 7/8] sched: migrate_enable: Use select_fallback_rq() Scott Wood
2019-09-17 16:00   ` Sebastian Andrzej Siewior
2019-09-24 18:05     ` Scott Wood
2019-07-27  5:56 ` [PATCH RT 8/8] sched: Lazy migrate_disable processing Scott Wood
2019-09-17 16:50   ` Sebastian Andrzej Siewior [this message]
2019-09-17 17:06     ` Scott Wood

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=20190917165026.pv3neijrpxrszdzo@linutronix.de \
    --to=bigeasy@linutronix.de \
    --cc=bristot@redhat.com \
    --cc=juri.lelli@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rt-users@vger.kernel.org \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=swood@redhat.com \
    --cc=tglx@linutronix.de \
    --cc=williams@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;
as well as URLs for NNTP newsgroup(s).