All of lore.kernel.org
 help / color / mirror / Atom feed
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 4/4] x86_32: apic/summit_32, fix cpu_mask_to_apicid
Date: Mon,  2 Mar 2009 10:53:58 +0100	[thread overview]
Message-ID: <1235987638-23685-4-git-send-email-jirislaby@gmail.com> (raw)
In-Reply-To: <1235987638-23685-3-git-send-email-jirislaby@gmail.com>

Perform same-cluster checking even for masks with all (nr_cpu_ids)
bits set and report correct apicid on success instead.

While at it, convert it to for_each_cpu and newer cpumask api.

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/summit_32.c |   30 +++++++++---------------------
 1 files changed, 9 insertions(+), 21 deletions(-)

diff --git a/arch/x86/kernel/apic/summit_32.c b/arch/x86/kernel/apic/summit_32.c
index 0a1135c..beda620 100644
--- a/arch/x86/kernel/apic/summit_32.c
+++ b/arch/x86/kernel/apic/summit_32.c
@@ -291,33 +291,21 @@ static int summit_check_phys_apicid_present(int boot_cpu_physical_apicid)
 
 static unsigned int summit_cpu_mask_to_apicid(const cpumask_t *cpumask)
 {
-	int cpus_found = 0;
-	int num_bits_set;
-	int apicid;
-	int cpu;
+	unsigned int round = 0;
+	int cpu, apicid = 0;
 
-	num_bits_set = cpus_weight(*cpumask);
-	if (num_bits_set >= nr_cpu_ids)
-		return BAD_APICID;
 	/*
 	 * The cpus in the mask must all be on the apic cluster.
 	 */
-	cpu = first_cpu(*cpumask);
-	apicid = summit_cpu_to_logical_apicid(cpu);
-
-	while (cpus_found < num_bits_set) {
-		if (cpu_isset(cpu, *cpumask)) {
-			int new_apicid = summit_cpu_to_logical_apicid(cpu);
+	for_each_cpu(cpu, cpumask) {
+		int new_apicid = summit_cpu_to_logical_apicid(cpu);
 
-			if (APIC_CLUSTER(apicid) != APIC_CLUSTER(new_apicid)) {
-				printk("%s: Not a valid mask!\n", __func__);
-
-				return BAD_APICID;
-			}
-			apicid = apicid | new_apicid;
-			cpus_found++;
+		if (round && APIC_CLUSTER(apicid) != APIC_CLUSTER(new_apicid)) {
+			printk("%s: Not a valid mask!\n", __func__);
+			return BAD_APICID;
 		}
-		cpu++;
+		apicid |= new_apicid;
+		round++;
 	}
 	return apicid;
 }
-- 
1.6.1.3


  reply	other threads:[~2009-03-02  9:55 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               ` [PATCH v2 3/4] x86_32: apic/es7000_32, " Jiri Slaby
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                   ` Jiri Slaby [this message]
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=1235987638-23685-4-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.