All of lore.kernel.org
 help / color / mirror / Atom feed
From: Wanpeng Li <kernellwp@gmail.com>
To: Juri Lelli <juri.lelli@arm.com>, peterz@infradead.org
Cc: mingo@redhat.com, juri.lelli@gmail.com, raistlin@linux.it,
	michael@amarulasolutions.com, fchecconi@gmail.com,
	daniel.wagner@bmw-carit.de, vincent@legout.info,
	luca.abeni@unitn.it, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 1/3] sched/deadline: clear dl_entity params when setscheduling to different class
Date: Wed, 08 Oct 2014 20:32:11 +0800	[thread overview]
Message-ID: <54352ECB.5030507@gmail.com> (raw)
In-Reply-To: <1411118561-26323-2-git-send-email-juri.lelli@arm.com>

Hi Juri,

于 9/19/14, 5:22 PM, Juri Lelli 写道:
> When a task is using SCHED_DEADLINE and the user setschedules it to a different
> class its sched_dl_entity static parameters are not cleaned up. This causes a
> bug if the user sets it back to SCHED_DEADLINE with the same parameters again.
> The problem resides in the check we perform at the very beginning of
> dl_overflow():
>
> 	if (new_bw == p->dl.dl_bw)
> 		return 0;
>
> This condition is met in the case depicted above, so the function returns and
> dl_b->total_bw is not updated (the p->dl.dl_bw is not added to it). After this,

As you know there is no static parameter clear before this patch, so if 
p->dl.dl_bw will decrease from dl_b->total_bw when the user setschedules 
to a different class instead of dl?

Regards,
Wanpeng Li

> admission control is broken.
>
> This patch fixes the thing, properly clearing static parameters for a task
> that ceases to use SCHED_DEADLINE.
>
> Reported-by: Daniele Alessandrelli <daniele.alessandrelli@gmail.com>
> Reported-by: Daniel Wagner <daniel.wagner@bmw-carit.de>
> Reported-by: Vincent Legout <vincent@legout.info>
> Tested-by: Luca Abeni <luca.abeni@unitn.it>
> Signed-off-by: Juri Lelli <juri.lelli@arm.com>
> Cc: Ingo Molnar <mingo@redhat.com>
> Cc: Peter Zijlstra <peterz@infradead.org>
> Cc: Juri Lelli <juri.lelli@gmail.com>
> Cc: Dario Faggioli <raistlin@linux.it>
> Cc: Michael Trimarchi <michael@amarulasolutions.com>
> Cc: Fabio Checconi <fchecconi@gmail.com>
> Cc: linux-kernel@vger.kernel.org
> ---
>   kernel/sched/core.c     | 19 +++++++++++++++----
>   kernel/sched/deadline.c |  2 ++
>   kernel/sched/sched.h    |  3 +++
>   3 files changed, 20 insertions(+), 4 deletions(-)
>
> diff --git a/kernel/sched/core.c b/kernel/sched/core.c
> index ec1a286..581a429 100644
> --- a/kernel/sched/core.c
> +++ b/kernel/sched/core.c
> @@ -1776,6 +1776,20 @@ int wake_up_state(struct task_struct *p, unsigned int state)
>   }
>   
>   /*
> + * This function clears the sched_dl_entity static params.
> + */
> +void __dl_clear_params(struct task_struct *p)
> +{
> +	struct sched_dl_entity *dl_se = &p->dl;
> +
> +	dl_se->dl_runtime = 0;
> +	dl_se->dl_deadline = 0;
> +	dl_se->dl_period = 0;
> +	dl_se->flags = 0;
> +	dl_se->dl_bw = 0;
> +}
> +
> +/*
>    * Perform scheduler related setup for a newly forked process p.
>    * p is forked by current.
>    *
> @@ -1799,10 +1813,7 @@ static void __sched_fork(unsigned long clone_flags, struct task_struct *p)
>   
>   	RB_CLEAR_NODE(&p->dl.rb_node);
>   	hrtimer_init(&p->dl.dl_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
> -	p->dl.dl_runtime = p->dl.runtime = 0;
> -	p->dl.dl_deadline = p->dl.deadline = 0;
> -	p->dl.dl_period = 0;
> -	p->dl.flags = 0;
> +	__dl_clear_params(p);
>   
>   	INIT_LIST_HEAD(&p->rt.run_list);
>   
> diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c
> index 255ce13..4a51b14 100644
> --- a/kernel/sched/deadline.c
> +++ b/kernel/sched/deadline.c
> @@ -1569,6 +1569,8 @@ static void switched_from_dl(struct rq *rq, struct task_struct *p)
>   	if (hrtimer_active(&p->dl.dl_timer) && !dl_policy(p->policy))
>   		hrtimer_try_to_cancel(&p->dl.dl_timer);
>   
> +	__dl_clear_params(p);
> +
>   #ifdef CONFIG_SMP
>   	/*
>   	 * Since this might be the only -deadline task on the rq,
> diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
> index 579712f..4890484 100644
> --- a/kernel/sched/sched.h
> +++ b/kernel/sched/sched.h
> @@ -126,6 +126,9 @@ struct rt_bandwidth {
>   	u64			rt_runtime;
>   	struct hrtimer		rt_period_timer;
>   };
> +
> +void __dl_clear_params(struct task_struct *p);
> +
>   /*
>    * To keep the bandwidth of -deadline tasks and groups under control
>    * we need some place where:


  parent reply	other threads:[~2014-10-08 12:32 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-19  9:22 [PATCH 0/3] SCHED_DEADLINE fix AC and SMP scheduling Juri Lelli
2014-09-19  9:22 ` [PATCH 1/3] sched/deadline: clear dl_entity params when setscheduling to different class Juri Lelli
2014-09-19 11:44   ` Daniel Wagner
2014-09-19 12:43     ` Juri Lelli
2014-09-22 18:50   ` Vincent Legout
2014-09-24 14:54   ` [tip:sched/core] sched/deadline: Clear " tip-bot for Juri Lelli
2014-10-08 12:32   ` Wanpeng Li [this message]
2014-10-21 12:15     ` [PATCH 1/3] sched/deadline: clear " Wanpeng Li
2014-10-21 13:15       ` Juri Lelli
2014-09-19  9:22 ` [PATCH 2/3] sched/deadline: fix bandwidth check/update when migrating tasks between exclusive cpusets Juri Lelli
2014-09-19 11:47   ` Daniel Wagner
2014-09-19 11:47     ` Daniel Wagner
     [not found]     ` <541C17D6.5020608-98C5kh4wR6ohFhg+JK9F0w@public.gmane.org>
2014-09-19 12:46       ` Juri Lelli
2014-09-19 12:46         ` Juri Lelli
     [not found]   ` <1411118561-26323-3-git-send-email-juri.lelli-5wv7dgnIgG8@public.gmane.org>
2014-09-19 21:25     ` Peter Zijlstra
2014-09-19 21:25       ` Peter Zijlstra
     [not found]       ` <20140919212547.GG2832-IIpfhp3q70wB9AHHLWeGtNQXobZC6xk2@public.gmane.org>
2014-09-23  8:12         ` Juri Lelli
2014-09-23  8:12           ` Juri Lelli
2014-10-07  8:59         ` Juri Lelli
2014-10-07  8:59           ` Juri Lelli
     [not found]           ` <5433AB8A.7050908-5wv7dgnIgG8@public.gmane.org>
2014-10-07 12:31             ` Peter Zijlstra
2014-10-07 12:31               ` Peter Zijlstra
     [not found]               ` <20141007123109.GG19379-ndre7Fmf5hadTX5a5knrm8zTDFooKrT+cvkQGrU6aU0@public.gmane.org>
2014-10-07 13:12                 ` Juri Lelli
2014-10-07 13:12                   ` Juri Lelli
2014-10-28 11:07                   ` [tip:sched/core] sched/deadline: Ensure that updates to exclusive cpusets don't break AC tip-bot for Juri Lelli
2014-09-22 19:24   ` [PATCH 2/3] sched/deadline: fix bandwidth check/update when migrating tasks between exclusive cpusets Vincent Legout
2014-09-23  8:09     ` Juri Lelli
     [not found]       ` <54212AB7.3070406-5wv7dgnIgG8@public.gmane.org>
2014-09-23 13:08         ` Daniel Wagner
2014-09-23 13:08           ` Daniel Wagner
2014-10-28 11:07   ` [tip:sched/core] sched/deadline: Fix bandwidth check/ update " tip-bot for Juri Lelli
2014-09-19  9:22 ` [PATCH 3/3] sched/deadline: fix inter- exclusive cpusets migrations Juri Lelli
2014-09-24 14:55   ` [tip:sched/core] sched/deadline: Fix " tip-bot for Juri Lelli

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=54352ECB.5030507@gmail.com \
    --to=kernellwp@gmail.com \
    --cc=daniel.wagner@bmw-carit.de \
    --cc=fchecconi@gmail.com \
    --cc=juri.lelli@arm.com \
    --cc=juri.lelli@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luca.abeni@unitn.it \
    --cc=michael@amarulasolutions.com \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=raistlin@linux.it \
    --cc=vincent@legout.info \
    /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.