Re: Bogus "APIC: NR_CPUS/possible_cpus limit of 4 reached" messages

From: Thomas Gleixner
Date: Fri Oct 07 2016 - 10:00:20 EST


On Fri, 7 Oct 2016, Markus Trippelsdorf wrote:
> On 2016.10.06 at 13:52 +0200, Markus Trippelsdorf wrote:
> > On 2016.10.06 at 12:48 +0100, One Thousand Gnomes wrote:
> > > On Thu, 6 Oct 2016 13:27:37 +0200
> > > Markus Trippelsdorf <markus@xxxxxxxxxxxxxxx> wrote:
> > >
> > > > On current trunk I get during boot:
> > > >
> > > > [ 0.000000] APIC: NR_CPUS/possible_cpus limit of 4 reached. Processor 4/0x84 ignored.
> > > > [ 0.000000] APIC: NR_CPUS/possible_cpus limit of 4 reached. Processor 5/0x85 ignored.
> > > >
> > > > I don't think these messages make much sense on a 4-core machine.
> > > >
> > >
> > > Four cores with or without hyperthreading ?
> >
> > Without. This is a rather old AMD machine (AMD Phenom II X4 955).

That's due to the recent cpuid -> nodeid changes. The patch below should
fix it.

Thanks,

tglx

diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
index f266b8a92a9e..88c657b057e2 100644
--- a/arch/x86/kernel/apic/apic.c
+++ b/arch/x86/kernel/apic/apic.c
@@ -2128,9 +2128,11 @@ int __generic_processor_info(int apicid, int version, bool enabled)
if (num_processors >= nr_cpu_ids) {
int thiscpu = max + disabled_cpus;

- pr_warning(
- "APIC: NR_CPUS/possible_cpus limit of %i reached."
- " Processor %d/0x%x ignored.\n", max, thiscpu, apicid);
+ if (enabled) {
+ pr_warning("APIC: NR_CPUS/possible_cpus limit of %i "
+ "reached. Processor %d/0x%x ignored.\n",
+ max, thiscpu, apicid);
+ }

disabled_cpus++;
return -EINVAL;