]> git.proxmox.com Git - qemu.git/commitdiff
machine struct - specify max_cpus at the per machine level (Jes Sorensen)
authoraliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162>
Tue, 7 Oct 2008 20:39:39 +0000 (20:39 +0000)
committeraliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162>
Tue, 7 Oct 2008 20:39:39 +0000 (20:39 +0000)
Introduce a max_cpus per-machine variable, allowing individual boards
to limit it's number of CPUs. Check requested number of CPUs in setup
code and exit if it exceeds the supported number for the machine.
This also renders the static MAX_CPUS check obsolete, so remove this
from vl.c.

Signed-off-by: Jes Sorensen <jes@sgi.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5443 c046a42c-6fe2-441c-8c8c-71466251a162

30 files changed:
hw/an5206.c
hw/boards.h
hw/dummy_m68k.c
hw/etraxfs.c
hw/gumstix.c
hw/integratorcp.c
hw/mainstone.c
hw/mcf5208.c
hw/mips_jazz.c
hw/mips_malta.c
hw/mips_mipssim.c
hw/mips_r4k.c
hw/musicpal.c
hw/nseries.c
hw/palm.c
hw/pc.c
hw/ppc405_boards.c
hw/ppc_chrp.c
hw/ppc_oldworld.c
hw/ppc_prep.c
hw/r2d.c
hw/realview.c
hw/shix.c
hw/spitz.c
hw/stellaris.c
hw/sun4m.c
hw/sun4u.c
hw/tosa.c
hw/versatilepb.c
vl.c

index 29812631e71700d8802b83ec39ee00d5f7820aef..862d0cf7289fc527d4fbc02431cba880ab962b91 100644 (file)
@@ -92,4 +92,5 @@ QEMUMachine an5206_machine = {
     .desc = "Arnewsh 5206",
     .init = an5206_init,
     .ram_require = 512,
+    .max_cpus = 1,
 };
index 119c2f60cd169a2fc984fec25f6e972dd6e616dd..d30c0fced9485f93740fd7609945051a80a83ceb 100644 (file)
@@ -18,6 +18,7 @@ typedef struct QEMUMachine {
     ram_addr_t ram_require;
     int nodisk_ok;
     int use_scsi;
+    int max_cpus;
     struct QEMUMachine *next;
 } QEMUMachine;
 
index fc06e9cc88f638d56b38ba92bdbe71eafea8616c..f7a80afcf9a9df3acd3464cfc5536a5b120ff33e 100644 (file)
@@ -66,4 +66,5 @@ QEMUMachine dummy_m68k_machine = {
     .name = "dummy",
     .desc = "Dummy board",
     .init = dummy_m68k_init,
+    .max_cpus = 1,
 };
index 4d3f694eda5822298b0ac1f13866725e08275070..2987c8f717ee2d7cbc2192289aa03000007d9e13 100644 (file)
@@ -145,4 +145,5 @@ QEMUMachine bareetraxfs_machine = {
     .desc = "Bare ETRAX FS board",
     .init = bareetraxfs_init,
     .ram_require = 0x8000000,
+    .max_cpus = 1,
 };
index 29cd69df24fdd941aecd2795c5b8a413ccf08539..f184648e5637f529b242003aa542fb6e25e3458a 100644 (file)
@@ -126,6 +126,7 @@ QEMUMachine connex_machine = {
     .desc = "Gumstix Connex (PXA255)",
     .init = connex_init,
     .ram_require = (0x05000000 + PXA2XX_INTERNAL_SIZE) | RAMSIZE_FIXED,
+    .max_cpus = 1,
 };
 
 QEMUMachine verdex_machine = {
@@ -133,4 +134,5 @@ QEMUMachine verdex_machine = {
     .desc = "Gumstix Verdex (PXA270)",
     .init = verdex_init,
     .ram_require = (0x12000000 + PXA2XX_INTERNAL_SIZE) | RAMSIZE_FIXED,
+    .max_cpus = 1,
 };
index 779d46b70ed7422ce00958dfe9763141c492ab5c..1ae5d2a8335745864cd5dbd61c976c1d47cbb4d5 100644 (file)
@@ -544,4 +544,5 @@ QEMUMachine integratorcp_machine = {
     .desc = "ARM Integrator/CP (ARM926EJ-S)",
     .init = integratorcp_init,
     .ram_require = 0x100000,
+    .max_cpus = 1,
 };
index 52485cecd21e7e3ed37aca2356b53afa9730ff8b..f4feb4fe2ae92a01e7612b80c7d8c2ad67d5593d 100644 (file)
@@ -149,4 +149,5 @@ QEMUMachine mainstone2_machine = {
     .init = mainstone_init,
     .ram_require = (MAINSTONE_RAM + MAINSTONE_ROM + 2 * MAINSTONE_FLASH +
                    PXA2XX_INTERNAL_SIZE) | RAMSIZE_FIXED,
+    .max_cpus = 1,
 };
index 3e0a8117519d2975c47960a34ab97adcaf200e1e..fe3566ee0f6b0e562cb9801debcd070e4a4d9647 100644 (file)
@@ -309,4 +309,5 @@ QEMUMachine mcf5208evb_machine = {
     .desc = "MCF5206EVB",
     .init = mcf5208evb_init,
     .ram_require = 16384,
+    .max_cpus = 1,
 };
index b332a4598e2b2e4d499dbf450afc9b8ddde40cf1..68e63ff436b5518cf340e2b029e84844679c5aff 100644 (file)
@@ -278,6 +278,7 @@ QEMUMachine mips_magnum_machine = {
     .init = mips_magnum_init,
     .ram_require = MAGNUM_BIOS_SIZE + VGA_RAM_SIZE,
     .nodisk_ok = 1,
+    .max_cpus = 1,
 };
 
 QEMUMachine mips_pica61_machine = {
@@ -286,4 +287,5 @@ QEMUMachine mips_pica61_machine = {
     .init = mips_pica61_init,
     .ram_require = MAGNUM_BIOS_SIZE + VGA_RAM_SIZE,
     .nodisk_ok = 1,
+    .max_cpus = 1,
 };
index 629e91470bc425b32fa2f475ca635aa4977a8a24..e1999d52e6af56ed08ff9bdf2228f8d947f9f3f8 100644 (file)
@@ -950,4 +950,5 @@ QEMUMachine mips_malta_machine = {
     .init = mips_malta_init,
     .ram_require = VGA_RAM_SIZE + BIOS_SIZE,
     .nodisk_ok = 1,
+    .max_cpus = 1,
 };
index dc62f696a038fc4760ac4c8b1c3e553cd2c414f7..bd5266ad846a0df77d00b9b80f18d4ca3696f7ff 100644 (file)
@@ -196,4 +196,5 @@ QEMUMachine mips_mipssim_machine = {
     .init = mips_mipssim_init,
     .ram_require = BIOS_SIZE + VGA_RAM_SIZE /* unused */,
     .nodisk_ok = 1,
+    .max_cpus = 1,
 };
index 6551b02e0bbac934fa96da2b8d69c3c946329dec..399f452a8d6f505833fd08ce6b28a0baa7b6ad06 100644 (file)
@@ -287,4 +287,5 @@ QEMUMachine mips_machine = {
     .init = mips_r4k_init,
     .ram_require = VGA_RAM_SIZE + BIOS_SIZE,
     .nodisk_ok = 1,
+    .max_cpus = 1,
 };
index ccea19fe24f8f6a0ec9ac732b1d528afa93f905a..cee34680544a6114e158af02b93619d35e5c95ef 100644 (file)
@@ -1513,4 +1513,5 @@ QEMUMachine musicpal_machine = {
     .desc = "Marvell 88w8618 / MusicPal (ARM926EJ-S)",
     .init = musicpal_init,
     .ram_require = MP_RAM_DEFAULT_SIZE + MP_SRAM_SIZE + MP_FLASH_SIZE_MAX + RAMSIZE_FIXED,
+    .max_cpus = 1,
 };
index ec56fad9526f1f729b2eecc4d788b819b3412a89..3fd8099aae11c201fdd4612796a9ac40c6508496 100644 (file)
@@ -1408,6 +1408,7 @@ QEMUMachine n800_machine = {
     .desc = "Nokia N800 tablet aka. RX-34 (OMAP2420)",
     .init = n800_init,
     .ram_require = (0x08000000 + 0x00010000 + OMAP242X_SRAM_SIZE) | RAMSIZE_FIXED,
+    .max_cpus = 1,
 };
 
 QEMUMachine n810_machine = {
@@ -1415,4 +1416,5 @@ QEMUMachine n810_machine = {
     .desc = "Nokia N810 tablet aka. RX-44 (OMAP2420)",
     .init = n810_init,
     .ram_require = (0x08000000 + 0x00010000 + OMAP242X_SRAM_SIZE) | RAMSIZE_FIXED,
+    .max_cpus = 1,
 };
index 79ea3a77fc2538f741c637dcf0bfa1ea3af0964f..b45cdd645251772cd50a03d59dacc7bcdee5a8ba 100644 (file)
--- a/hw/palm.c
+++ b/hw/palm.c
@@ -286,4 +286,5 @@ QEMUMachine palmte_machine = {
     .desc = "Palm Tungsten|E aka. Cheetah PDA (OMAP310)",
     .init = palmte_init,
     .ram_require = (0x02000000 + 0x00800000 + OMAP15XX_SRAM_SIZE) | RAMSIZE_FIXED,
+    .max_cpus = 1,
 };
diff --git a/hw/pc.c b/hw/pc.c
index e7cba9a6453b65da8137291573af3a3736cab9b7..34683e7920194fffea41136452c167d4efebd1e7 100644 (file)
--- a/hw/pc.c
+++ b/hw/pc.c
@@ -1097,6 +1097,7 @@ QEMUMachine pc_machine = {
     .desc = "Standard PC",
     .init = pc_init_pci,
     .ram_require = VGA_RAM_SIZE + PC_MAX_BIOS_SIZE,
+    .max_cpus = 255,
 };
 
 QEMUMachine isapc_machine = {
@@ -1104,4 +1105,5 @@ QEMUMachine isapc_machine = {
     .desc = "ISA-only PC",
     .init = pc_init_isa,
     .ram_require = VGA_RAM_SIZE + PC_MAX_BIOS_SIZE,
+    .max_cpus = 1,
 };
index c7a69596c7fc5372085c426ed7d22339e1c1bafd..a83f28e9b9b420bc3ce3cfbf4fe88fc0f0c16deb 100644 (file)
@@ -359,6 +359,7 @@ QEMUMachine ref405ep_machine = {
     .desc = "ref405ep",
     .init = ref405ep_init,
     .ram_require = (128 * 1024 * 1024 + 4096 + 512 * 1024 + BIOS_SIZE) | RAMSIZE_FIXED,
+    .max_cpus = 1,
 };
 
 /*****************************************************************************/
index 140541f0b0158896e9b1db2cf08ed8a4fbe33657..ede2924ed76a2b1f869121b3d5b856b0d0c2fa12 100644 (file)
@@ -335,4 +335,5 @@ QEMUMachine core99_machine = {
     .desc = "Mac99 based PowerMAC",
     .init = ppc_core99_init,
     .ram_require = BIOS_SIZE + VGA_RAM_SIZE,
+    .max_cpus = 1,
 };
index 15e8022488b5aa6826cae4c441cea00c8c1e8e80..75faeb3c44249beb9f716d849d0ccad927cf577f 100644 (file)
@@ -370,4 +370,5 @@ QEMUMachine heathrow_machine = {
     .desc = "Heathrow based PowerMAC",
     .init = ppc_heathrow_init,
     .ram_require = BIOS_SIZE + VGA_RAM_SIZE,
+    .max_cpus = 1,
 };
index a955909eea9b0b16bae20ca5f85c391afbd5ee70..944935d2988e855c3af17d900a31946f12cd09e2 100644 (file)
@@ -762,4 +762,5 @@ QEMUMachine prep_machine = {
     .desc = "PowerPC PREP platform",
     .init = ppc_prep_init,
     .ram_require = BIOS_SIZE + VGA_RAM_SIZE,
+    .max_cpus = 1,
 };
index 855aa414ff50c5460a0da78e333bdce075132168..58c93e89932f4b988808356b95fb0a696159e94e 100644 (file)
--- a/hw/r2d.c
+++ b/hw/r2d.c
@@ -168,4 +168,5 @@ QEMUMachine r2d_machine = {
     .desc = "r2d-plus board",
     .init = r2d_init,
     .ram_require = SDRAM_SIZE | RAMSIZE_FIXED,
+    .max_cpus = 1,
 };
index a9d20edc525520656210432e8c3ce1f3508f8c75..14c001ecdd9bac25ae5367ba77216039df32d081 100644 (file)
@@ -202,4 +202,5 @@ QEMUMachine realview_machine = {
     .init = realview_init,
     .ram_require = 0x1000,
     .use_scsi = 1,
+    .max_cpus = 1,
 };
index 140efe90a5fe06a028204ae187e8cc9757c6b95d..3cc41fb830f3993ae6e599dcbe593f8bff9301dd 100644 (file)
--- a/hw/shix.c
+++ b/hw/shix.c
@@ -112,4 +112,5 @@ QEMUMachine shix_machine = {
     .desc = "shix card",
     .init = shix_init,
     .ram_require = (0x00004000 + 0x01000000 + 0x01000000) | RAMSIZE_FIXED,
+    .max_cpus = 1,
 };
index fc7717460ea40a2fd096343315185c052e654b0c..36b490dce8518aa1e17cf6ae1587148a4e58acc8 100644 (file)
@@ -1014,6 +1014,7 @@ QEMUMachine akitapda_machine = {
     .desc = "Akita PDA (PXA270)",
     .init = akita_init,
     .ram_require = SPITZ_RAM + SPITZ_ROM + PXA2XX_INTERNAL_SIZE + RAMSIZE_FIXED,
+    .max_cpus = 1,
 };
 
 QEMUMachine spitzpda_machine = {
@@ -1021,6 +1022,7 @@ QEMUMachine spitzpda_machine = {
     .desc = "Spitz PDA (PXA270)",
     .init = spitz_init,
     .ram_require = SPITZ_RAM + SPITZ_ROM + PXA2XX_INTERNAL_SIZE + RAMSIZE_FIXED,
+    .max_cpus = 1,
 };
 
 QEMUMachine borzoipda_machine = {
@@ -1028,6 +1030,7 @@ QEMUMachine borzoipda_machine = {
     .desc = "Borzoi PDA (PXA270)",
     .init = borzoi_init,
     .ram_require = SPITZ_RAM + SPITZ_ROM + PXA2XX_INTERNAL_SIZE + RAMSIZE_FIXED,
+    .max_cpus = 1,
 };
 
 QEMUMachine terrierpda_machine = {
@@ -1035,4 +1038,5 @@ QEMUMachine terrierpda_machine = {
     .desc = "Terrier PDA (PXA270)",
     .init = terrier_init,
     .ram_require = SPITZ_RAM + SPITZ_ROM + PXA2XX_INTERNAL_SIZE + RAMSIZE_FIXED,
+    .max_cpus = 1,
 };
index 5948079e171fe1bdb7a45f03dd382cd626cc363e..4645bd6fb4ff098a6eed5cf5a8d410fa33d2cf81 100644 (file)
@@ -1417,6 +1417,7 @@ QEMUMachine lm3s811evb_machine = {
     .desc = "Stellaris LM3S811EVB",
     .init = lm3s811evb_init,
     .ram_require = (64 * 1024 + 8 * 1024) | RAMSIZE_FIXED,
+    .max_cpus = 1,
 };
 
 QEMUMachine lm3s6965evb_machine = {
@@ -1424,4 +1425,5 @@ QEMUMachine lm3s6965evb_machine = {
     .desc = "Stellaris LM3S6965EVB",
     .init = lm3s6965evb_init,
     .ram_require = (256 * 1024 + 64 * 1024) | RAMSIZE_FIXED,
+    .max_cpus = 1,
 };
index 079439a46fc594a61d620d0a06b2c1085aed81c9..dd0433afca3876719f007a3af48797173955f8c1 100644 (file)
@@ -1291,6 +1291,7 @@ QEMUMachine ss5_machine = {
     .ram_require = PROM_SIZE_MAX + TCX_SIZE,
     .nodisk_ok = 1,
     .use_scsi = 1,
+    .max_cpus = 16,
 };
 
 QEMUMachine ss10_machine = {
@@ -1300,6 +1301,7 @@ QEMUMachine ss10_machine = {
     .ram_require = PROM_SIZE_MAX + TCX_SIZE,
     .nodisk_ok = 1,
     .use_scsi = 1,
+    .max_cpus = 16,
 };
 
 QEMUMachine ss600mp_machine = {
@@ -1309,6 +1311,7 @@ QEMUMachine ss600mp_machine = {
     .ram_require = PROM_SIZE_MAX + TCX_SIZE,
     .nodisk_ok = 1,
     .use_scsi = 1,
+    .max_cpus = 16,
 };
 
 QEMUMachine ss20_machine = {
@@ -1318,6 +1321,7 @@ QEMUMachine ss20_machine = {
     .ram_require = PROM_SIZE_MAX + TCX_SIZE,
     .nodisk_ok = 1,
     .use_scsi = 1,
+    .max_cpus = 16,
 };
 
 QEMUMachine ss2_machine = {
@@ -1327,6 +1331,7 @@ QEMUMachine ss2_machine = {
     .ram_require = PROM_SIZE_MAX + TCX_SIZE,
     .nodisk_ok = 1,
     .use_scsi = 1,
+    .max_cpus = 16,
 };
 
 QEMUMachine voyager_machine = {
@@ -1336,6 +1341,7 @@ QEMUMachine voyager_machine = {
     .ram_require = PROM_SIZE_MAX + TCX_SIZE,
     .nodisk_ok = 1,
     .use_scsi = 1,
+    .max_cpus = 16,
 };
 
 QEMUMachine ss_lx_machine = {
@@ -1345,6 +1351,7 @@ QEMUMachine ss_lx_machine = {
     .ram_require = PROM_SIZE_MAX + TCX_SIZE,
     .nodisk_ok = 1,
     .use_scsi = 1,
+    .max_cpus = 16,
 };
 
 QEMUMachine ss4_machine = {
@@ -1354,6 +1361,7 @@ QEMUMachine ss4_machine = {
     .ram_require = PROM_SIZE_MAX + TCX_SIZE,
     .nodisk_ok = 1,
     .use_scsi = 1,
+    .max_cpus = 16,
 };
 
 QEMUMachine scls_machine = {
@@ -1363,6 +1371,7 @@ QEMUMachine scls_machine = {
     .ram_require = PROM_SIZE_MAX + TCX_SIZE,
     .nodisk_ok = 1,
     .use_scsi = 1,
+    .max_cpus = 16,
 };
 
 QEMUMachine sbook_machine = {
@@ -1372,6 +1381,7 @@ QEMUMachine sbook_machine = {
     .ram_require = PROM_SIZE_MAX + TCX_SIZE,
     .nodisk_ok = 1,
     .use_scsi = 1,
+    .max_cpus = 16,
 };
 
 static const struct sun4d_hwdef sun4d_hwdefs[] = {
@@ -1620,6 +1630,7 @@ QEMUMachine ss1000_machine = {
     .ram_require = PROM_SIZE_MAX + TCX_SIZE,
     .nodisk_ok = 1,
     .use_scsi = 1,
+    .max_cpus = 16,
 };
 
 QEMUMachine ss2000_machine = {
@@ -1629,4 +1640,5 @@ QEMUMachine ss2000_machine = {
     .ram_require = PROM_SIZE_MAX + TCX_SIZE,
     .nodisk_ok = 1,
     .use_scsi = 1,
+    .max_cpus = 16,
 };
index 87669ea0945babd470f9b7ca4a6bfbba27e45e91..a70ad201ab7a7fe2967d707e43295a624e0780ce 100644 (file)
@@ -589,6 +589,7 @@ QEMUMachine sun4u_machine = {
     .init = sun4u_init,
     .ram_require = PROM_SIZE_MAX + VGA_RAM_SIZE,
     .nodisk_ok = 1,
+    .max_cpus = 16,
 };
 
 QEMUMachine sun4v_machine = {
@@ -597,6 +598,7 @@ QEMUMachine sun4v_machine = {
     .init = sun4v_init,
     .ram_require = PROM_SIZE_MAX + VGA_RAM_SIZE,
     .nodisk_ok = 1,
+    .max_cpus = 16,
 };
 
 QEMUMachine niagara_machine = {
@@ -605,4 +607,5 @@ QEMUMachine niagara_machine = {
     .init = niagara_init,
     .ram_require = PROM_SIZE_MAX + VGA_RAM_SIZE,
     .nodisk_ok = 1,
+    .max_cpus = 16,
 };
index 75df52ec7d28941a29be7c17ab778d9f3f6e2675..e7b2be31e45e6971db539fd7edf9195783cc95f6 100644 (file)
--- a/hw/tosa.c
+++ b/hw/tosa.c
@@ -123,4 +123,5 @@ QEMUMachine tosapda_machine = {
     .desc = "Tosa PDA (PXA255)",
     .init = tosa_init,
     .ram_require = TOSA_RAM + TOSA_ROM + PXA2XX_INTERNAL_SIZE + RAMSIZE_FIXED,
+    .max_cpus = 1,
 };
index f9e9988fc6a71ef784ac2270c5dc10c43ca6316b..c4c867d0f6d3052376596afff5afbe6bf1cb294d 100644 (file)
@@ -320,6 +320,7 @@ QEMUMachine versatilepb_machine = {
     .desc = "ARM Versatile/PB (ARM926EJ-S)",
     .init = vpb_init,
     .use_scsi = 1,
+    .max_cpus = 1,
 };
 
 QEMUMachine versatileab_machine = {
@@ -327,4 +328,5 @@ QEMUMachine versatileab_machine = {
     .desc = "ARM Versatile/AB (ARM926EJ-S)",
     .init = vab_init,
     .use_scsi = 1,
+    .max_cpus = 1,
 };
diff --git a/vl.c b/vl.c
index 439d31778431b2d178cc75b769ff4d990a74ec04..5fe288e08612c113911e9ded463ce0692814b2a1 100644 (file)
--- a/vl.c
+++ b/vl.c
@@ -213,13 +213,6 @@ int usb_enabled = 0;
 static VLANState *first_vlan;
 int smp_cpus = 1;
 const char *vnc_display;
-#if defined(TARGET_SPARC)
-#define MAX_CPUS 16
-#elif defined(TARGET_I386)
-#define MAX_CPUS 255
-#else
-#define MAX_CPUS 1
-#endif
 int acpi_enabled = 1;
 int fd_bootchk = 1;
 int no_reboot = 0;
@@ -9195,7 +9188,7 @@ int main(int argc, char **argv)
                 break;
             case QEMU_OPTION_smp:
                 smp_cpus = atoi(optarg);
-                if (smp_cpus < 1 || smp_cpus > MAX_CPUS) {
+                if (smp_cpus < 1) {
                     fprintf(stderr, "Invalid number of CPUs\n");
                     exit(1);
                 }
@@ -9312,6 +9305,13 @@ int main(int argc, char **argv)
         }
     }
 
+    if (smp_cpus > machine->max_cpus) {
+        fprintf(stderr, "Number of SMP cpus requested (%d), exceeds max cpus "
+                "supported by machine `%s' (%d)\n", smp_cpus,  machine->name,
+                machine->max_cpus);
+        exit(1);
+    }
+
     if (nographic) {
        if (serial_device_index == 0)
            serial_devices[0] = "stdio";