From: Jiri Slaby <jirislaby@gmail.com>
To: mingo@redhat.com
Cc: x86@kernel.org, linux-kernel@vger.kernel.org,
Jiri Slaby <jirislaby@gmail.com>,
Thomas Gleixner <tglx@linutronix.de>,
"H. Peter Anvin" <hpa@zytor.com>
Subject: [PATCH v2 3/4] x86_32: apic/es7000_32, fix cpu_mask_to_apicid
Date: Thu, 26 Feb 2009 22:50:44 +0100 [thread overview]
Message-ID: <1235685044-7463-1-git-send-email-jirislaby@gmail.com> (raw)
In-Reply-To: <1235684732-5991-3-git-send-email-jirislaby@gmail.com>
Perform same-cluster checking even for masks with all (nr_cpu_ids)
bits set and report BAD_APICID on failure.
While at it, convert it to for_each_cpu.
[v2]
- remove omitted apicid initial assignment
Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
---
arch/x86/kernel/apic/es7000_32.c | 30 ++++++++++--------------------
1 files changed, 10 insertions(+), 20 deletions(-)
diff --git a/arch/x86/kernel/apic/es7000_32.c b/arch/x86/kernel/apic/es7000_32.c
index 6c15126..d2ab096 100644
--- a/arch/x86/kernel/apic/es7000_32.c
+++ b/arch/x86/kernel/apic/es7000_32.c
@@ -567,32 +567,22 @@ static int es7000_check_phys_apicid_present(int cpu_physical_apicid)
static unsigned int es7000_cpu_mask_to_apicid(const cpumask_t *cpumask)
{
- unsigned int cpu, num_bits_set, cpus_found = 0;
- int apicid;
+ unsigned int round = 0;
+ int cpu, uninitialized_var(apicid);
- num_bits_set = cpumask_weight(cpumask);
- /* Return id to all */
- if (num_bits_set == nr_cpu_ids)
- return es7000_cpu_to_logical_apicid(0);
/*
- * The cpus in the mask must all be on the apic cluster. If are not
- * on the same apicid cluster return default value of target_cpus():
+ * The cpus in the mask must all be on the apic cluster.
*/
- cpu = cpumask_first(cpumask);
- apicid = es7000_cpu_to_logical_apicid(cpu);
- while (cpus_found < num_bits_set) {
- if (cpumask_test_cpu(cpu, cpumask)) {
- int new_apicid = es7000_cpu_to_logical_apicid(cpu);
+ for_each_cpu(cpu, cpumask) {
+ int new_apicid = es7000_cpu_to_logical_apicid(cpu);
- if (APIC_CLUSTER(apicid) != APIC_CLUSTER(new_apicid)) {
- WARN(1, "Not a valid mask!");
+ if (round && APIC_CLUSTER(apicid) != APIC_CLUSTER(new_apicid)) {
+ WARN(1, "Not a valid mask!");
- return es7000_cpu_to_logical_apicid(0);
- }
- apicid = new_apicid;
- cpus_found++;
+ return BAD_APICID;
}
- cpu++;
+ apicid = new_apicid;
+ round++;
}
return apicid;
}
--
1.6.1.3
next prev parent reply other threads:[~2009-02-26 21:52 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-24 17:38 [PATCH 1/2] x86_32: summit_32, use BAD_APICID jirislaby
2009-02-24 17:38 ` [PATCH 2/2] x86_32: summit_32, de-inline functions jirislaby
2009-02-24 17:55 ` [PATCH 1/2] x86_32: summit_32, use BAD_APICID Ingo Molnar
2009-02-24 20:41 ` [PATCH v2 " Jiri Slaby
2009-02-24 20:41 ` [PATCH v2 2/2] x86_32: summit_32, de-inline functions Jiri Slaby
2009-02-25 11:00 ` [PATCH v2 1/2] x86_32: summit_32, use BAD_APICID Jiri Slaby
2009-02-25 11:10 ` Ingo Molnar
2009-02-26 21:45 ` [PATCH 1/4] x86_32: apic/bigsmp_32, de-inline functions Jiri Slaby
2009-02-26 21:45 ` [PATCH 2/4] x86_32: apic/es7000_32, cpu_mask_to_apicid cleanup Jiri Slaby
2009-02-26 21:45 ` [PATCH 3/4] x86_32: apic/es7000_32, fix cpu_mask_to_apicid Jiri Slaby
2009-02-26 21:45 ` [PATCH 4/4] x86_32: apic/summit_32, " Jiri Slaby
2009-02-26 21:50 ` Jiri Slaby [this message]
2009-02-26 22:00 ` [PATCH v2 1/2] x86_32: summit_32, use BAD_APICID Jiri Slaby
2009-02-28 8:21 ` Ingo Molnar
2009-03-02 9:53 ` [PATCH 1/4] x86_32: apic/bigsmp_32, de-inline functions Jiri Slaby
2009-03-02 9:53 ` [PATCH 2/4] x86_32: apic/es7000_32, cpu_mask_to_apicid cleanup Jiri Slaby
2009-03-02 9:53 ` [PATCH 3/4] x86_32: apic/es7000_32, fix cpu_mask_to_apicid Jiri Slaby
2009-03-02 9:53 ` [PATCH 4/4] x86_32: apic/summit_32, " Jiri Slaby
2009-03-08 17:00 ` [PATCH v2 1/2] x86_32: summit_32, use BAD_APICID Jiri Slaby
2009-03-11 8:45 ` cpu_mask_to_apicid: Not a valid mask! [was: x86_32: summit_32, use BAD_APICID] Jiri Slaby
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=1235685044-7463-1-git-send-email-jirislaby@gmail.com \
--to=jirislaby@gmail.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=tglx@linutronix.de \
--cc=x86@kernel.org \
/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.