From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1161034AbbKFMDm (ORCPT ); Fri, 6 Nov 2015 07:03:42 -0500 Received: from mailout4.w1.samsung.com ([210.118.77.14]:51929 "EHLO mailout4.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1161344AbbKFMDi (ORCPT ); Fri, 6 Nov 2015 07:03:38 -0500 X-AuditID: cbfec7f4-f79c56d0000012ee-e4-563c97179255 From: Arseniy Krasnov To: linux@arm.linux.org.uk, mingo@redhat.com, peterz@infradead.org Cc: a.krasnov@samsung.com, v.tyrtov@samsung.com, s.rogachev@samsung.com, linux-kernel@vger.kernel.org, Tarek Dakhran , Sergey Dyasly , Dmitriy Safonov , Ilya Maximets Subject: [PATCH 03/13] hperf_hmp: add sched domains initialization. Date: Fri, 06 Nov 2015 15:02:37 +0300 Message-id: <1446811367-23783-4-git-send-email-a.krasnov@samsung.com> X-Mailer: git-send-email 1.9.1 In-reply-to: <1446811367-23783-1-git-send-email-a.krasnov@samsung.com> References: <1446811367-23783-1-git-send-email-a.krasnov@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrBLMWRmVeSWpSXmKPExsVy+t/xK7ri023CDK5ek7WY91nQ4tPKp2wW V9p/sltc3jWHzeL2ZV6LSwcWMFkc7z3AZDF5tpTFu63XWC3WPz/FaDF1xg92B26PluYeNo/N K7Q8Dr7bw+Txft9VNo++LasYPT5vkgtgi+KySUnNySxLLdK3S+DKmLf1DVvBWbGKWf9PsDQw bhLqYuTgkBAwkbi0nr+LkRPIFJO4cG89WxcjF4eQwFJGif83epkgnHYmic5dT5hBqtgEdCV+ btzCBmKLCDhJ9Dw7ywhiMwtMZpLY8DUNxBYWcJa4N+cuO4jNIqAqcf9gE1gvr4CrxLK+QywQ 2+QkTh6bzApicwq4SXR03QarFwKq6Tj7jmUCI+8CRoZVjKKppckFxUnpuYZ6xYm5xaV56XrJ +bmbGCHh92UH4+JjVocYBTgYlXh4byyxDhNiTSwrrsw9xCjBwawkwivHbBMmxJuSWFmVWpQf X1Sak1p8iFGag0VJnHfurvchQgLpiSWp2ampBalFMFkmDk6pBsagmXf38Re9OxN0Nvm8s/lt rRcTS6MmSLu8Cta+ezn/SfQShqK7s94cYNS6dem5dNzqty5efOZHF7p4iyZanVaYU6JyfsED kf93DGcJBE9sMfqkb71uSlpmwPOMozX6ntMCxLyWeLiwzXBYcN75JVMZu4KN0R9BESXuBddO trA0eq1hmnRi8WIlluKMREMt5qLiRAD4/L01OwIAAA== Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Attaching CPU clusters as 'sched_group' to HMP domains. Each HMP domain has two pointers to A15 and A7 scheduling groups(struct sched_group). Signed-off-by: Tarek Dakhran Signed-off-by: Sergey Dyasly Signed-off-by: Dmitriy Safonov Signed-off-by: Arseniy Krasnov Signed-off-by: Ilya Maximets --- include/linux/sched.h | 4 ++++ kernel/sched/core.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/include/linux/sched.h b/include/linux/sched.h index eb084df..aa72125 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -1057,6 +1057,10 @@ struct sched_domain { u64 max_newidle_lb_cost; unsigned long next_decay_max_lb_cost; +#ifdef CONFIG_HPERF_HMP + struct sched_group *a15_group; + struct sched_group *a7_group; +#endif #ifdef CONFIG_SCHEDSTATS /* load_balance() stats */ unsigned int lb_count[CPU_MAX_IDLE_TYPES]; diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 16092e0..e3a632f 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -90,6 +90,16 @@ #define CREATE_TRACE_POINTS #include +#ifdef CONFIG_HPERF_HMP +/* cpumask for A15 cpus */ +static DECLARE_BITMAP(cpu_fastest_bits, CONFIG_NR_CPUS); +struct cpumask *cpu_fastest_mask = to_cpumask(cpu_fastest_bits); + +/* cpumask for A7 cpus */ +static DECLARE_BITMAP(cpu_slowest_bits, CONFIG_NR_CPUS); +struct cpumask *cpu_slowest_mask = to_cpumask(cpu_slowest_bits); +#endif + DEFINE_MUTEX(sched_domains_mutex); DEFINE_PER_CPU_SHARED_ALIGNED(struct rq, runqueues); @@ -6971,6 +6981,45 @@ static int build_sched_domains(const struct cpumask *cpu_map, sd = *per_cpu_ptr(d.sd, i); cpu_attach_domain(sd, d.rd, i); } + +#ifdef CONFIG_HPERF_HMP + for (i = nr_cpumask_bits - 1; i >= 0; i--) { + if (!cpumask_test_cpu(i, cpu_map)) + continue; + + for (sd = *per_cpu_ptr(d.sd, i); sd; sd = sd->parent) { + struct sched_group *sg; + sd->a7_group = NULL; + sd->a15_group = NULL; + + /* Process only HMP domains */ + if (!(sd->flags & SD_HMP_BALANCE)) + continue; + + /* + * Process sched groups of this domain. + * Attach sg to hmp domains. + */ + sg = sd->groups; + do { + if (!sg->sgc) + goto next_sg; +#ifdef CONFIG_SCHED_DEBUG + printk(KERN_EMERG "Attaching CPUs 0x%08lX to domain %s\n", + sched_group_cpus(sg)->bits[0], sd->name); +#endif + if (cpumask_intersects(sched_group_cpus(sg), + cpu_fastest_mask)) + sd->a15_group = sg; + else + sd->a7_group = sg; +next_sg: + sg = sg->next; + } while (sg != sd->groups); + } + } +#endif /* CONFIG_HPERF_HMP */ + rcu_read_unlock(); ret = 0; -- 1.9.1