From: Peter Zijlstra <a.p.zijlstra@chello.nl>
To: Igor Mammedov <imammedo@redhat.com>
Cc: linux-kernel@vger.kernel.org, mingo@kernel.org, pjt@google.com,
tglx@linutronix.de, seto.hidetoshi@jp.fujitsu.com,
Jiang Liu <liuj97@gmail.com>
Subject: Re: [PATCH] sched_groups are expected to be circular linked list, make it so right after allocation
Date: Wed, 09 May 2012 13:41:01 +0200 [thread overview]
Message-ID: <1336563661.2527.20.camel@twins> (raw)
In-Reply-To: <1336559908-32533-1-git-send-email-imammedo@redhat.com>
On Wed, 2012-05-09 at 12:38 +0200, Igor Mammedov wrote:
> init_sched_groups_power() that expects sched_groups to be
> circular linked list. However it is not always true, since sched_groups
> preallocated in __sdt_alloc are initialized in build_sched_groups and it
> may exit early
>
> if (cpu != cpumask_first(sched_domain_span(sd)))
> return 0;
>
> without initializing sd->groups->next field.
The only way I can see that happen is if the arch code is lying to us.
We build the sched_domain_span() like:
cpumask_and(sched_domain_span(sd), cpu_map, tl->mask(cpu));
and the above != first_cpumask() can only happen if the topology mask
provided by the architecture includes a cpu that isn't actually there.
(and equally, how did it get in the active_mask if its not there).
Jiang, how did your IA64 arrive in this state?
> Fix bug by initializing next field right after sched_group was allocated.
I'd not call it a bug, the bug is the arch being broken, its a
robustification of the code to better handle broken input.
Ideally we'd also add a WARN someplace to notify us of this situation.
Still, nice catch..
Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
> Signed-off-by: Igor Mammedov <imammedo@redhat.com>
> ---
> kernel/sched/core.c | 2 ++
> 1 files changed, 2 insertions(+), 0 deletions(-)
>
> diff --git a/kernel/sched/core.c b/kernel/sched/core.c
> index 0533a68..e5212ae 100644
> --- a/kernel/sched/core.c
> +++ b/kernel/sched/core.c
> @@ -6382,6 +6382,8 @@ static int __sdt_alloc(const struct cpumask *cpu_map)
> if (!sg)
> return -ENOMEM;
>
> + sg->next = sg;
> +
> *per_cpu_ptr(sdd->sg, j) = sg;
>
> sgp = kzalloc_node(sizeof(struct sched_group_power),
prev parent reply other threads:[~2012-05-09 11:41 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-05-09 10:38 [PATCH] sched_groups are expected to be circular linked list, make it so right after allocation Igor Mammedov
2012-05-09 10:21 ` Jiang Liu
2012-05-09 11:44 ` Igor Mammedov
2012-05-09 11:52 ` Peter Zijlstra
2012-05-09 11:58 ` Igor Mammedov
2012-05-09 12:21 ` Peter Zijlstra
2012-05-09 12:22 ` Peter Zijlstra
2012-05-09 12:35 ` Igor Mammedov
2012-05-09 12:30 ` Peter Zijlstra
2012-05-09 13:27 ` [RFC][PATCH] printk: Add %pb to print bitmaps Peter Zijlstra
2012-05-09 13:29 ` Peter Zijlstra
2012-05-09 13:36 ` Ingo Molnar
2012-05-09 13:44 ` Peter Zijlstra
2012-05-09 13:59 ` Peter Zijlstra
2012-05-09 14:15 ` Ingo Molnar
2012-05-09 14:24 ` Peter Zijlstra
2012-05-09 15:32 ` Peter Zijlstra
2012-05-09 15:41 ` Ingo Molnar
2012-05-09 16:06 ` Peter Zijlstra
2012-05-09 16:39 ` Joe Perches
2012-05-09 17:22 ` Ingo Molnar
2012-05-09 17:24 ` Ingo Molnar
2012-05-09 17:25 ` Peter Zijlstra
2012-05-09 17:31 ` Ingo Molnar
2012-05-09 14:19 ` Joe Perches
2012-05-09 15:34 ` Ingo Molnar
2012-05-09 17:15 ` Linus Torvalds
2012-05-09 17:22 ` Peter Zijlstra
2012-05-09 17:26 ` Ingo Molnar
2012-05-09 17:30 ` Peter Zijlstra
2012-05-09 19:07 ` Andrew Morton
2012-05-09 20:58 ` Peter Zijlstra
2012-05-10 7:45 ` Ingo Molnar
2012-05-10 13:26 ` [PATCH] sched_groups are expected to be circular linked list, make it so right after allocation Igor Mammedov
2012-05-10 13:45 ` Peter Zijlstra
2012-05-10 17:01 ` Igor Mammedov
2012-05-10 17:33 ` Peter Zijlstra
2012-05-09 10:35 ` [tip:sched/urgent] sched: Fix KVM and ia64 boot crash due to sched_groups circular linked list assumption tip-bot for Igor Mammedov
2012-05-09 11:41 ` Peter Zijlstra [this message]
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=1336563661.2527.20.camel@twins \
--to=a.p.zijlstra@chello.nl \
--cc=imammedo@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=liuj97@gmail.com \
--cc=mingo@kernel.org \
--cc=pjt@google.com \
--cc=seto.hidetoshi@jp.fujitsu.com \
--cc=tglx@linutronix.de \
/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.