Skip to contentSkip to conversation

i386/x86_64 mpparse.c: kill maxcpus

PATCH In review Adrian Bunk 2 participants 7 messages Mar 20, 2005 – Mar 21, 2005

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 i386/x86_64 mpparse.c: kill maxcpus

Do we really need a global variable that does only hold the value of NR_CPUS?

---

 arch/i386/kernel/mpparse.c     |    7 +++----
 arch/i386/mach-visws/mpparse.c |    6 ++----
 arch/x86_64/kernel/mpparse.c   |    7 +++----
 3 files changed, 8 insertions(+), 12 deletions(-)
arch/i386/kernel/mpparse.c renamed from arch/i386/kernel/mpparse.c.old +3 -4
@@ -37,7 +37,6 @@
 
 /* Have we found an MP table */
 int smp_found_config;
-unsigned int __initdata maxcpus = NR_CPUS;
 
 /*
  * Various Linux-internal data structures created from the
@@ -189,9 +188,9 @@
 		return;
 	}
 
-	if (num_processors >= maxcpus) {
-		printk(KERN_WARNING "WARNING: maxcpus limit of %i reached."
-			" Processor ignored.\n", maxcpus); 
+	if (num_processors >= NR_CPUS) {
+		printk(KERN_WARNING "WARNING: NR_CPUS limit of %i reached."
+			" Processor ignored.\n", NR_CPUS); 
 		return;
 	}
 	num_processors++;
arch/i386/mach-visws/mpparse.c renamed from arch/i386/mach-visws/mpparse.c.old +2 -4
@@ -28,8 +28,6 @@
 /* Bitmask of physically existing CPUs */
 physid_mask_t phys_cpu_present_map;
 
-unsigned int __initdata maxcpus = NR_CPUS;
-
 /*
  * The Visual Workstation is Intel MP compliant in the hardware
  * sense, but it doesn't have a BIOS(-configuration table).
@@ -90,8 +88,8 @@
 		ncpus = CO_CPU_MAX;
 	}
 
-	if (ncpus > maxcpus)
-		ncpus = maxcpus;
+	if (ncpus > NR_CPUS)
+		ncpus = NR_CPUS;
 
 	smp_found_config = 1;
 	while (ncpus--)
arch/x86_64/kernel/mpparse.c renamed from arch/x86_64/kernel/mpparse.c.old +3 -4
@@ -33,7 +33,6 @@
 
 /* Have we found an MP table */
 int smp_found_config;
-unsigned int __initdata maxcpus = NR_CPUS;
 
 int acpi_found_madt;
 
@@ -126,9 +125,9 @@
 			" Processor ignored.\n", NR_CPUS);
 		return;
 	}
-	if (num_processors >= maxcpus) {
-		printk(KERN_WARNING "WARNING: maxcpus limit of %i reached."
-			" Processor ignored.\n", maxcpus);
+	if (num_processors >= NR_CPUS) {
+		printk(KERN_WARNING "WARNING: NR_CPUS limit of %i reached."
+			" Processor ignored.\n", NR_CPUS);
 		return;
 	}
 
#1 lore raw
Quoted 2 lines · Adrian Bunk

Do we really need a global variable that does only hold the value of NR_CPUS?

Yes.

NR_CPUS = compile time
maxcpus = boot command line at runtime.

Dave

#2 lore raw
Quoted 8 lines · Dave Jones
Quoted 2 lines · Adrian Bunk

Do we really need a global variable that does only hold the value of NR_CPUS?

Yes.

NR_CPUS = compile time
maxcpus = boot command line at runtime.

If this is how is was expected to work - it isn't exactly what is currently implemented.

The function maxcpus in init/main.c sets a static variable max_cpus - not the global variable maxcpus in the mpparse.c files.

How should it be?

Should max_cpus in init/main.c become global and replace the maxcpus from the mpparse.c files?

Quoted 1 line

Dave

cu
Adrian

Signature · 4 lines
       "Is there not promise of rain?" Ling Tan asked suddenly out
        of the darkness. There had been need of rain for many days.
       "Only a promise," Lao Er said.
                                       Pearl S. Buck - Dragon Seed
#3 lore raw
Quoted 5 lines · Adrian Bunk
Quoted 4 lines · Dave Jones
Quoted 2 lines · Adrian Bunk

Do we really need a global variable that does only hold the value of NR_CPUS?

Quoted 7 lines
Quoted 4 lines

Yes.

NR_CPUS = compile time
maxcpus = boot command line at runtime.

If this is how is was expected to work - it isn't exactly what is currently implemented.

It's ugly, as its setting the same thing in two different places, but I don't see any obvious reason why it won't work.

Quoted 2 lines

The function maxcpus in init/main.c sets a static variable max_cpus - not the global variable maxcpus in the mpparse.c files.

Both variables are used differently. The arch specific var is only used for HT descrimination. The init/main.c one is used for smp bringup.

Quoted 4 lines

How should it be?

Should max_cpus in init/main.c become global and replace the maxcpus from the mpparse.c files?

I'd just leave it as it is, as it seems to be working right now.

Dave

#4 lore raw
Quoted 11 lines · Dave Jones
Quoted 10 lines · Adrian Bunk
Quoted 8 lines · Dave Jones
Quoted 2 lines · Adrian Bunk

Do we really need a global variable that does only hold the value of NR_CPUS?

Yes.

NR_CPUS = compile time
maxcpus = boot command line at runtime.

Quoted 6 lines
Quoted 2 lines

If this is how is was expected to work - it isn't exactly what is currently implemented.

It's ugly, as its setting the same thing in two different places, but I don't see any obvious reason why it won't work.
...

I might be too dumb, but where are the mpparse.c maxcpus variables ever set to any value different from NR_CPUS?

Quoted 1 line

Dave

cu
Adrian

Signature · 4 lines
       "Is there not promise of rain?" Ling Tan asked suddenly out
        of the darkness. There had been need of rain for many days.
       "Only a promise," Lao Er said.
                                       Pearl S. Buck - Dragon Seed
#5 lore raw
Quoted 15 lines · Adrian Bunk
Quoted 14 lines · Dave Jones
Quoted 12 lines · Adrian Bunk
Quoted 8 lines · Dave Jones
Quoted 2 lines · Adrian Bunk

Do we really need a global variable that does only hold the value of NR_CPUS?

Yes.

NR_CPUS = compile time
maxcpus = boot command line at runtime.

If this is how is was expected to work - it isn't exactly what is currently implemented.

Quoted 6 lines
Quoted 3 lines

It's ugly, as its setting the same thing in two different places, but I don't see any obvious reason why it won't work.
...

I might be too dumb, but where are the mpparse.c maxcpus variables ever set to any value different from NR_CPUS?

arch/x86_64/kernel/setup.c:parse_cmdline_early()

	...
        else if (!memcmp(from, "maxcpus=", 8)) {
            extern unsigned int maxcpus;

            maxcpus = simple_strtoul(from + 8, NULL, 0);
        }
	...


		Dave
#6 lore raw
Quoted 25 lines · Dave Jones
Quoted 15 lines · Adrian Bunk
Quoted 14 lines · Dave Jones
Quoted 12 lines · Adrian Bunk
Quoted 8 lines · Dave Jones
Quoted 2 lines · Adrian Bunk

Do we really need a global variable that does only hold the value of NR_CPUS?

Yes.

NR_CPUS = compile time
maxcpus = boot command line at runtime.

If this is how is was expected to work - it isn't exactly what is currently implemented.

Quoted 6 lines
Quoted 3 lines

It's ugly, as its setting the same thing in two different places, but I don't see any obvious reason why it won't work.
...

I might be too dumb, but where are the mpparse.c maxcpus variables ever set to any value different from NR_CPUS?

arch/x86_64/kernel/setup.c:parse_cmdline_early()

Quoted 7 lines
	...
        else if (!memcmp(from, "maxcpus=", 8)) {
            extern unsigned int maxcpus;

            maxcpus = simple_strtoul(from + 8, NULL, 0);
        }
	...

Ah, thanks.

I didn't see this extern declaration.
(and my test compiles were with SMP=n...)

Quoted 1 line

Dave

cu
Adrian

Signature · 4 lines
       "Is there not promise of rain?" Ling Tan asked suddenly out
        of the darkness. There had been need of rain for many days.
       "Only a promise," Lao Er said.
                                       Pearl S. Buck - Dragon Seed