Re: [RESEND PATCH v12 1/2] sched/deadline: Add support for SD_PREFER_SIBLING on find_later_rq()

From: Steven Rostedt
Date: Mon Jun 18 2018 - 17:36:43 EST


On Mon, 18 Jun 2018 13:58:08 +0900
Byungchul Park <byungchul.park@xxxxxxx> wrote:

> Hello Juri,
>
> I've changed the code a little bit to avoid a compile warning caused by
> 'const' args of find_cpu(). Can I keep your Acked-by?
>
> BEFORE:
> static int find_cpu(const struct cpumask *mask,
> const struct sched_domain *sd,
> const struct sched_domain *prefer)
>
> AFTER:
> static int find_cpu(const struct cpumask *mask,
> struct sched_domain *sd,
> struct sched_domain *prefer)
>

Instead of doing that, why not fix sched_domain_span() to take a
constant. There's no reason that function should be modifying the
sched_domain.

-- Steve

> (I temporarily removed the Acked-by you gave me.)
> Acked-by: Juri Lelli <juri.lelli@xxxxxxx>
>
> -----8<-----
> >From 5a4753e8c15369420a16fa04026f74ae5c9d377c Mon Sep 17 00:00:00 2001
> From: Byungchul Park <byungchul.park@xxxxxxx>
> Date: Mon, 4 Jun 2018 16:46:56 +0900
> Subject: [RESEND PATCH v12 1/2] sched/deadline: Add support for SD_PREFER_SIBLING on
> find_later_rq()
>
> It would be better to try to check other siblings first if
> SD_PREFER_SIBLING is flaged when pushing tasks - migration.
>
> Suggested-by: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
> Signed-off-by: Byungchul Park <byungchul.park@xxxxxxx>
> ---
> kernel/sched/deadline.c | 80 ++++++++++++++++++++++++++++++++++++++++++++-----
> 1 file changed, 73 insertions(+), 7 deletions(-)
>
> diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c
> index 1356afd..6130d40 100644
> --- a/kernel/sched/deadline.c
> +++ b/kernel/sched/deadline.c
> @@ -1853,12 +1853,33 @@ static struct task_struct *pick_earliest_pushable_dl_task(struct rq *rq, int cpu
>
> static DEFINE_PER_CPU(cpumask_var_t, local_cpu_mask_dl);
>
> +/*
> + * Find the first CPU in: mask & sd & ~prefer
> + */
> +static int find_cpu(const struct cpumask *mask,
> + struct sched_domain *sd,
> + struct sched_domain *prefer)
> +{
> + int cpu;
> +
> + for_each_cpu(cpu, mask) {
> + if (!cpumask_test_cpu(cpu, sched_domain_span(sd)))
> + continue;
> + if (prefer && cpumask_test_cpu(cpu, sched_domain_span(prefer)))
> + continue;
> + break;
> + }
> +
> + return cpu;
> +}
> +
>