From: Ido Yariv <ido@wizery.com>
To: "H. Peter Anvin" <hpa@zytor.com>
Cc: Ingo Molnar <mingo@kernel.org>,
linux-kernel@vger.kernel.org, Ingo Molnar <mingo@redhat.com>,
Thomas Gleixner <tglx@linutronix.de>,
Shai Fultheim <shai@scalemp.com>
Subject: Re: [PATCH v4] vsmp: Fix number of CPUs when vsmp is disabled
Date: Fri, 11 May 2012 22:26:31 +0300 [thread overview]
Message-ID: <20120511192631.GA13342@NoteStation.colubris.lan> (raw)
In-Reply-To: <4FAA938A.1030003@zytor.com>
Hi,
On Wed, May 09, 2012 at 08:55:54AM -0700, H. Peter Anvin wrote:
> On 05/09/2012 08:44 AM, Ingo Molnar wrote:
> >
> > * Ido Yariv <ido@wizery.com> wrote:
> >
> >> +static void __init vsmp_cap_cpus(void)
> >> +{
> >> + void __iomem *address;
> >> + unsigned int cfg, topology, node_shift, maxcpus;
> >> +
> >> +#ifdef CONFIG_X86_VSMP
> >> + /* VSMP is enabled, no need to cap cpus */
> >> + return;
> >> +#elif defined(CONFIG_SMP)
> >> + /*
> >> + * CONFIG_X86_VSMP is not configured, so limit the number CPUs to the
> >
> > I suspect this will throw compiler warnings in the
> > CONFIG_X86_VSMP && !CONFIG_SMP case.
> >
>
> What on Earth is the point of allowing that combination? Why not make
> X86_VSMP depend on SMP and reduce the testing matrix?
CONFIG_X86_VSMP shouldn't be used without CONFIG_SMP, so we can safely
add this dependency.
Ingo's suggestion will still fix unreferenced variables warnings, so how
about the following patch?
Thanks,
Ido.
>From 6fa023be44749092088618379f13d7a3e086d692 Mon Sep 17 00:00:00 2001
From: Shai Fultheim <shai@scalemp.com>
Date: Mon, 16 Apr 2012 10:39:35 +0300
Subject: [PATCH v5] vsmp: Fix number of CPUs when vsmp is disabled
In case CONFIG_X86_VSMP is not set, limit the number of CPUs to the
number of CPUs of the first board.
Also make CONFIG_X86_VSMP depend on CONFIG_SMP, as there's little
point in having a vsmp machine with a single CPU.
Signed-off-by: Shai Fultheim <shai@scalemp.com>
[ido@wizery.com: rebased, fixed minor coding-style issues]
Signed-off-by: Ido Yariv <ido@wizery.com>
---
arch/x86/Kconfig | 1 +
arch/x86/kernel/vsmp_64.c | 40 ++++++++++++++++++++++++++++++++++++++++
2 files changed, 41 insertions(+), 0 deletions(-)
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index c9866b0..b1e98c9 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -374,6 +374,7 @@ config X86_VSMP
select PARAVIRT
depends on X86_64 && PCI
depends on X86_EXTENDED_PLATFORM
+ depends on SMP
---help---
Support for ScaleMP vSMP systems. Say 'Y' here if this kernel is
supposed to run on these EM64T-based machines. Only choose this option
diff --git a/arch/x86/kernel/vsmp_64.c b/arch/x86/kernel/vsmp_64.c
index a1d804b..8eeb55a 100644
--- a/arch/x86/kernel/vsmp_64.c
+++ b/arch/x86/kernel/vsmp_64.c
@@ -15,6 +15,7 @@
#include <linux/init.h>
#include <linux/pci_ids.h>
#include <linux/pci_regs.h>
+#include <linux/smp.h>
#include <asm/apic.h>
#include <asm/pci-direct.h>
@@ -22,6 +23,8 @@
#include <asm/paravirt.h>
#include <asm/setup.h>
+#define TOPOLOGY_REGISTER_OFFSET 0x10
+
#if defined CONFIG_PCI && defined CONFIG_PARAVIRT
/*
* Interrupt control on vSMPowered systems:
@@ -149,12 +152,49 @@ int is_vsmp_box(void)
return 0;
}
#endif
+
+static void __init vsmp_cap_cpus(void)
+{
+#if !defined(CONFIG_X86_VSMP) && defined(CONFIG_SMP)
+ void __iomem *address;
+ unsigned int cfg, topology, node_shift, maxcpus;
+
+ /*
+ * CONFIG_X86_VSMP is not configured, so limit the number CPUs to the
+ * ones present in the first board, unless explicitly overridden by
+ * setup_max_cpus
+ */
+ if (setup_max_cpus != NR_CPUS)
+ return;
+
+ /* Read the vSMP Foundation topology register */
+ cfg = read_pci_config(0, 0x1f, 0, PCI_BASE_ADDRESS_0);
+ address = early_ioremap(cfg + TOPOLOGY_REGISTER_OFFSET, 4);
+ if (WARN_ON(!address))
+ return;
+
+ topology = readl(address);
+ node_shift = (topology >> 16) & 0x7;
+ if (!node_shift)
+ /* The value 0 should be decoded as 8 */
+ node_shift = 8;
+ maxcpus = (topology & ((1 << node_shift) - 1)) + 1;
+
+ pr_info("vSMP CTL: Capping CPUs to %d (CONFIG_X86_VSMP is unset)\n",
+ maxcpus);
+ setup_max_cpus = maxcpus;
+ early_iounmap(address, 4);
+#endif
+}
+
void __init vsmp_init(void)
{
detect_vsmp_box();
if (!is_vsmp_box())
return;
+ vsmp_cap_cpus();
+
set_vsmp_pv_ops();
return;
}
--
1.7.6.5
next prev parent reply other threads:[~2012-05-11 19:26 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-04-06 12:39 [PATCH 1/2] vsmp: Fix number of CPUs when vsmp is disabled Ido Yariv
2012-04-06 12:39 ` [PATCH 2/2] vsmp: Ignore IOAPIC IRQ affinity if possible Ido Yariv
2012-04-16 7:39 ` [PATCH v2 1/2] vsmp: Fix number of CPUs when vsmp is disabled Ido Yariv
2012-04-16 7:39 ` [PATCH v2 2/2] vsmp: Ignore IOAPIC IRQ affinity if possible Ido Yariv
2012-05-07 13:19 ` Ingo Molnar
2012-05-08 0:53 ` Shai Fultheim (Shai@ScaleMP.com)
2012-05-09 9:18 ` Ingo Molnar
2012-05-09 21:21 ` Ido Yariv
2012-06-02 22:11 ` [PATCH 1/2] x86: Introduce apic post-initialization callback Ido Yariv
2012-06-02 22:11 ` [PATCH v3 2/2] vsmp: Ignore IOAPIC IRQ affinity if possible Ido Yariv
2012-06-06 15:02 ` [tip:x86/platform] x86/vsmp: " tip-bot for Ravikiran Thirumalai
2012-06-08 8:52 ` Ingo Molnar
2012-06-08 15:43 ` Ido Yariv
2012-06-11 8:58 ` Ingo Molnar
2012-06-11 19:41 ` Ido Yariv
2012-06-14 10:51 ` Ingo Molnar
2012-06-14 15:43 ` [PATCH] x86/vsmp: Fix linker error when CONFIG_PROC_FS is not set Ido Yariv
2012-06-15 14:22 ` [tip:x86/platform] " tip-bot for Ido Yariv
2012-06-06 15:01 ` [tip:x86/platform] x86/platform: Introduce APIC post-initialization callback tip-bot for Ido Yariv
2012-06-14 17:34 ` H. Peter Anvin
2012-06-15 14:33 ` Ido Yariv
2012-04-28 21:33 ` [PATCH v2 1/2] vsmp: Fix number of CPUs when vsmp is disabled Ido Yariv
2012-04-29 3:05 ` Shai Fultheim (Shai@ScaleMP.com)
2012-05-07 13:24 ` Ingo Molnar
2012-05-08 7:34 ` [PATCH v3] " Ido Yariv
2012-05-08 10:05 ` [tip:x86/platform] " tip-bot for Shai Fultheim
2012-05-08 12:25 ` Ingo Molnar
2012-05-09 8:03 ` Ido Yariv
2012-05-09 8:22 ` Ido Yariv
2012-05-09 8:28 ` [PATCH v4] " Ido Yariv
2012-05-09 15:44 ` Ingo Molnar
2012-05-09 15:55 ` H. Peter Anvin
2012-05-11 19:26 ` Ido Yariv [this message]
2012-05-12 1:20 ` Shai Fultheim (Shai@ScaleMP.com)
2012-05-09 9:12 ` [tip:x86/platform] " Ingo Molnar
2012-05-09 15:27 ` Shai Fultheim (Shai@ScaleMP.com)
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=20120511192631.GA13342@NoteStation.colubris.lan \
--to=ido@wizery.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=mingo@redhat.com \
--cc=shai@scalemp.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.