All of lore.kernel.org
 help / color / mirror / Atom feed
From: Oren Twaig <oren@scalemp.com>
To: Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, "H. Peter Anvin" <hpa@zytor.com>,
	David Rientjes <rientjes@google.com>,
	Yoshihiro YUNOMAE <yoshihiro.yunomae.ez@hitachi.com>,
	Paul Gortmaker <paul.gortmaker@windriver.com>,
	Jan Kiszka <jan.kiszka@siemens.com>,
	Andi Kleen <ak@linux.intel.com>,
	HATAYAMA Daisuke <d.hatayama@jp.fujitsu.com>,
	Richard Weinberger <richard@nod.at>
Cc: x86@kernel.org, linux-kernel@vger.kernel.org,
	Shai Fultheim <shai@scalemp.com>, Oren Twaig <oren@scalemp.com>
Subject: [PATCH] x86, vsmp: Remove is_vsmp_box() from apic_is_clustered_box()
Date: Mon, 23 Jun 2014 08:35:14 +0300	[thread overview]
Message-ID: <53A7BC92.3080307@scalemp.com> (raw)

Remove invalid code which caused TSC to be declared as "unstable" on vSMP
Foundation box even if it was stable and let the kernel decide for itself.

When a vSMP Foundation box is detected, the function apic_cluster_num() counts
the number of APIC clusters found. If more than one found, a multi board
configuration is assumed, and TSC marked as unstable. This behavior is
incorrect as vSMP Foundation may use processors from single node only, attached
to memory of other nodes - and such node may have more than one APIC cluster
(typically any recent intel box has more than single APIC_CLUSTERID(x)).

To fix this, we simply remove the code which detects a vSMP Foundation box and
affects apic_is_clusted_box() return value. This can be done because later the
kernel checks by itself if the TSC is stable using the
check_tsc_sync_[source|target]() functions and marks TSC as unstable if needed.

Signed-off-by: Oren Twaig <oren@scalemp.com>
Acked-by: Shai Fultheim <shai@scalemp.com>
---
 arch/x86/include/asm/apic.h |    8 ------
 arch/x86/kernel/apic/apic.c |   60 +------------------------------------------
 2 files changed, 1 insertion(+), 67 deletions(-)

diff --git a/arch/x86/include/asm/apic.h b/arch/x86/include/asm/apic.h
index 19b0eba..c100694 100644
--- a/arch/x86/include/asm/apic.h
+++ b/arch/x86/include/asm/apic.h
@@ -85,14 +85,6 @@ static inline bool apic_from_smp_config(void)
 #include <asm/paravirt.h>
 #endif
 
-#ifdef CONFIG_X86_64
-extern int is_vsmp_box(void);
-#else
-static inline int is_vsmp_box(void)
-{
-    return 0;
-}
-#endif
 extern int setup_profiling_timer(unsigned int);
 
 static inline void native_apic_mem_write(u32 reg, u32 v)
diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
index ad28db7..2b85bb9 100644
--- a/arch/x86/kernel/apic/apic.c
+++ b/arch/x86/kernel/apic/apic.c
@@ -2451,51 +2451,6 @@ static void apic_pm_activate(void) { }
 
 #ifdef CONFIG_X86_64
 
-static int apic_cluster_num(void)
-{
-    int i, clusters, zeros;
-    unsigned id;
-    u16 *bios_cpu_apicid;
-    DECLARE_BITMAP(clustermap, NUM_APIC_CLUSTERS);
-
-    bios_cpu_apicid = early_per_cpu_ptr(x86_bios_cpu_apicid);
-    bitmap_zero(clustermap, NUM_APIC_CLUSTERS);
-
-    for (i = 0; i < nr_cpu_ids; i++) {
-        /* are we being called early in kernel startup? */
-        if (bios_cpu_apicid) {
-            id = bios_cpu_apicid[i];
-        } else if (i < nr_cpu_ids) {
-            if (cpu_present(i))
-                id = per_cpu(x86_bios_cpu_apicid, i);
-            else
-                continue;
-        } else
-            break;
-
-        if (id != BAD_APICID)
-            __set_bit(APIC_CLUSTERID(id), clustermap);
-    }
-
-    /* Problem:  Partially populated chassis may not have CPUs in some of
-     * the APIC clusters they have been allocated.  Only present CPUs have
-     * x86_bios_cpu_apicid entries, thus causing zeroes in the bitmap.
-     * Since clusters are allocated sequentially, count zeros only if
-     * they are bounded by ones.
-     */
-    clusters = 0;
-    zeros = 0;
-    for (i = 0; i < NUM_APIC_CLUSTERS; i++) {
-        if (test_bit(i, clustermap)) {
-            clusters += 1 + zeros;
-            zeros = 0;
-        } else
-            ++zeros;
-    }
-
-    return clusters;
-}
-
 static int multi_checked;
 static int multi;
 
@@ -2540,20 +2495,7 @@ static void dmi_check_multi(void)
 int apic_is_clustered_box(void)
 {
     dmi_check_multi();
-    if (multi)
-        return 1;
-
-    if (!is_vsmp_box())
-        return 0;
-
-    /*
-     * ScaleMP vSMPowered boxes have one cluster per board and TSCs are
-     * not guaranteed to be synced between boards
-     */
-    if (apic_cluster_num() > 1)
-        return 1;
-
-    return 0;
+    return multi;
 }
 #endif
 


             reply	other threads:[~2014-06-23  5:35 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-23  5:35 Oren Twaig [this message]
2014-06-23 14:18 ` [PATCH] x86, vsmp: Remove is_vsmp_box() from apic_is_clustered_box() Andi Kleen
2014-06-27  5:05 ` Oren Twaig
2014-06-27  5:39   ` H. Peter Anvin
2014-06-29 10:07     ` Oren Twaig

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=53A7BC92.3080307@scalemp.com \
    --to=oren@scalemp.com \
    --cc=ak@linux.intel.com \
    --cc=d.hatayama@jp.fujitsu.com \
    --cc=hpa@zytor.com \
    --cc=jan.kiszka@siemens.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=paul.gortmaker@windriver.com \
    --cc=richard@nod.at \
    --cc=rientjes@google.com \
    --cc=shai@scalemp.com \
    --cc=tglx@linutronix.de \
    --cc=x86@kernel.org \
    --cc=yoshihiro.yunomae.ez@hitachi.com \
    /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.