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:
.desc = "Arnewsh 5206",
.init = an5206_init,
.ram_require = 512,
.desc = "Arnewsh 5206",
.init = an5206_init,
.ram_require = 512,
ram_addr_t ram_require;
int nodisk_ok;
int use_scsi;
ram_addr_t ram_require;
int nodisk_ok;
int use_scsi;
struct QEMUMachine *next;
} QEMUMachine;
struct QEMUMachine *next;
} QEMUMachine;
.name = "dummy",
.desc = "Dummy board",
.init = dummy_m68k_init,
.name = "dummy",
.desc = "Dummy board",
.init = dummy_m68k_init,
.desc = "Bare ETRAX FS board",
.init = bareetraxfs_init,
.ram_require = 0x8000000,
.desc = "Bare ETRAX FS board",
.init = bareetraxfs_init,
.ram_require = 0x8000000,
.desc = "Gumstix Connex (PXA255)",
.init = connex_init,
.ram_require = (0x05000000 + PXA2XX_INTERNAL_SIZE) | RAMSIZE_FIXED,
.desc = "Gumstix Connex (PXA255)",
.init = connex_init,
.ram_require = (0x05000000 + PXA2XX_INTERNAL_SIZE) | RAMSIZE_FIXED,
};
QEMUMachine verdex_machine = {
};
QEMUMachine verdex_machine = {
.desc = "Gumstix Verdex (PXA270)",
.init = verdex_init,
.ram_require = (0x12000000 + PXA2XX_INTERNAL_SIZE) | RAMSIZE_FIXED,
.desc = "Gumstix Verdex (PXA270)",
.init = verdex_init,
.ram_require = (0x12000000 + PXA2XX_INTERNAL_SIZE) | RAMSIZE_FIXED,
.desc = "ARM Integrator/CP (ARM926EJ-S)",
.init = integratorcp_init,
.ram_require = 0x100000,
.desc = "ARM Integrator/CP (ARM926EJ-S)",
.init = integratorcp_init,
.ram_require = 0x100000,
.init = mainstone_init,
.ram_require = (MAINSTONE_RAM + MAINSTONE_ROM + 2 * MAINSTONE_FLASH +
PXA2XX_INTERNAL_SIZE) | RAMSIZE_FIXED,
.init = mainstone_init,
.ram_require = (MAINSTONE_RAM + MAINSTONE_ROM + 2 * MAINSTONE_FLASH +
PXA2XX_INTERNAL_SIZE) | RAMSIZE_FIXED,
.desc = "MCF5206EVB",
.init = mcf5208evb_init,
.ram_require = 16384,
.desc = "MCF5206EVB",
.init = mcf5208evb_init,
.ram_require = 16384,
.init = mips_magnum_init,
.ram_require = MAGNUM_BIOS_SIZE + VGA_RAM_SIZE,
.nodisk_ok = 1,
.init = mips_magnum_init,
.ram_require = MAGNUM_BIOS_SIZE + VGA_RAM_SIZE,
.nodisk_ok = 1,
};
QEMUMachine mips_pica61_machine = {
};
QEMUMachine mips_pica61_machine = {
.init = mips_pica61_init,
.ram_require = MAGNUM_BIOS_SIZE + VGA_RAM_SIZE,
.nodisk_ok = 1,
.init = mips_pica61_init,
.ram_require = MAGNUM_BIOS_SIZE + VGA_RAM_SIZE,
.nodisk_ok = 1,
.init = mips_malta_init,
.ram_require = VGA_RAM_SIZE + BIOS_SIZE,
.nodisk_ok = 1,
.init = mips_malta_init,
.ram_require = VGA_RAM_SIZE + BIOS_SIZE,
.nodisk_ok = 1,
.init = mips_mipssim_init,
.ram_require = BIOS_SIZE + VGA_RAM_SIZE /* unused */,
.nodisk_ok = 1,
.init = mips_mipssim_init,
.ram_require = BIOS_SIZE + VGA_RAM_SIZE /* unused */,
.nodisk_ok = 1,
.init = mips_r4k_init,
.ram_require = VGA_RAM_SIZE + BIOS_SIZE,
.nodisk_ok = 1,
.init = mips_r4k_init,
.ram_require = VGA_RAM_SIZE + BIOS_SIZE,
.nodisk_ok = 1,
.desc = "Marvell 88w8618 / MusicPal (ARM926EJ-S)",
.init = musicpal_init,
.ram_require = MP_RAM_DEFAULT_SIZE + MP_SRAM_SIZE + MP_FLASH_SIZE_MAX + RAMSIZE_FIXED,
.desc = "Marvell 88w8618 / MusicPal (ARM926EJ-S)",
.init = musicpal_init,
.ram_require = MP_RAM_DEFAULT_SIZE + MP_SRAM_SIZE + MP_FLASH_SIZE_MAX + RAMSIZE_FIXED,
.desc = "Nokia N800 tablet aka. RX-34 (OMAP2420)",
.init = n800_init,
.ram_require = (0x08000000 + 0x00010000 + OMAP242X_SRAM_SIZE) | RAMSIZE_FIXED,
.desc = "Nokia N800 tablet aka. RX-34 (OMAP2420)",
.init = n800_init,
.ram_require = (0x08000000 + 0x00010000 + OMAP242X_SRAM_SIZE) | RAMSIZE_FIXED,
};
QEMUMachine n810_machine = {
};
QEMUMachine n810_machine = {
.desc = "Nokia N810 tablet aka. RX-44 (OMAP2420)",
.init = n810_init,
.ram_require = (0x08000000 + 0x00010000 + OMAP242X_SRAM_SIZE) | RAMSIZE_FIXED,
.desc = "Nokia N810 tablet aka. RX-44 (OMAP2420)",
.init = n810_init,
.ram_require = (0x08000000 + 0x00010000 + OMAP242X_SRAM_SIZE) | RAMSIZE_FIXED,
.desc = "Palm Tungsten|E aka. Cheetah PDA (OMAP310)",
.init = palmte_init,
.ram_require = (0x02000000 + 0x00800000 + OMAP15XX_SRAM_SIZE) | RAMSIZE_FIXED,
.desc = "Palm Tungsten|E aka. Cheetah PDA (OMAP310)",
.init = palmte_init,
.ram_require = (0x02000000 + 0x00800000 + OMAP15XX_SRAM_SIZE) | RAMSIZE_FIXED,
.desc = "Standard PC",
.init = pc_init_pci,
.ram_require = VGA_RAM_SIZE + PC_MAX_BIOS_SIZE,
.desc = "Standard PC",
.init = pc_init_pci,
.ram_require = VGA_RAM_SIZE + PC_MAX_BIOS_SIZE,
};
QEMUMachine isapc_machine = {
};
QEMUMachine isapc_machine = {
.desc = "ISA-only PC",
.init = pc_init_isa,
.ram_require = VGA_RAM_SIZE + PC_MAX_BIOS_SIZE,
.desc = "ISA-only PC",
.init = pc_init_isa,
.ram_require = VGA_RAM_SIZE + PC_MAX_BIOS_SIZE,
.desc = "ref405ep",
.init = ref405ep_init,
.ram_require = (128 * 1024 * 1024 + 4096 + 512 * 1024 + BIOS_SIZE) | RAMSIZE_FIXED,
.desc = "ref405ep",
.init = ref405ep_init,
.ram_require = (128 * 1024 * 1024 + 4096 + 512 * 1024 + BIOS_SIZE) | RAMSIZE_FIXED,
};
/*****************************************************************************/
};
/*****************************************************************************/
.desc = "Mac99 based PowerMAC",
.init = ppc_core99_init,
.ram_require = BIOS_SIZE + VGA_RAM_SIZE,
.desc = "Mac99 based PowerMAC",
.init = ppc_core99_init,
.ram_require = BIOS_SIZE + VGA_RAM_SIZE,
.desc = "Heathrow based PowerMAC",
.init = ppc_heathrow_init,
.ram_require = BIOS_SIZE + VGA_RAM_SIZE,
.desc = "Heathrow based PowerMAC",
.init = ppc_heathrow_init,
.ram_require = BIOS_SIZE + VGA_RAM_SIZE,
.desc = "PowerPC PREP platform",
.init = ppc_prep_init,
.ram_require = BIOS_SIZE + VGA_RAM_SIZE,
.desc = "PowerPC PREP platform",
.init = ppc_prep_init,
.ram_require = BIOS_SIZE + VGA_RAM_SIZE,
.desc = "r2d-plus board",
.init = r2d_init,
.ram_require = SDRAM_SIZE | RAMSIZE_FIXED,
.desc = "r2d-plus board",
.init = r2d_init,
.ram_require = SDRAM_SIZE | RAMSIZE_FIXED,
.init = realview_init,
.ram_require = 0x1000,
.use_scsi = 1,
.init = realview_init,
.ram_require = 0x1000,
.use_scsi = 1,
.desc = "shix card",
.init = shix_init,
.ram_require = (0x00004000 + 0x01000000 + 0x01000000) | RAMSIZE_FIXED,
.desc = "shix card",
.init = shix_init,
.ram_require = (0x00004000 + 0x01000000 + 0x01000000) | RAMSIZE_FIXED,
.desc = "Akita PDA (PXA270)",
.init = akita_init,
.ram_require = SPITZ_RAM + SPITZ_ROM + PXA2XX_INTERNAL_SIZE + RAMSIZE_FIXED,
.desc = "Akita PDA (PXA270)",
.init = akita_init,
.ram_require = SPITZ_RAM + SPITZ_ROM + PXA2XX_INTERNAL_SIZE + RAMSIZE_FIXED,
};
QEMUMachine spitzpda_machine = {
};
QEMUMachine spitzpda_machine = {
.desc = "Spitz PDA (PXA270)",
.init = spitz_init,
.ram_require = SPITZ_RAM + SPITZ_ROM + PXA2XX_INTERNAL_SIZE + RAMSIZE_FIXED,
.desc = "Spitz PDA (PXA270)",
.init = spitz_init,
.ram_require = SPITZ_RAM + SPITZ_ROM + PXA2XX_INTERNAL_SIZE + RAMSIZE_FIXED,
};
QEMUMachine borzoipda_machine = {
};
QEMUMachine borzoipda_machine = {
.desc = "Borzoi PDA (PXA270)",
.init = borzoi_init,
.ram_require = SPITZ_RAM + SPITZ_ROM + PXA2XX_INTERNAL_SIZE + RAMSIZE_FIXED,
.desc = "Borzoi PDA (PXA270)",
.init = borzoi_init,
.ram_require = SPITZ_RAM + SPITZ_ROM + PXA2XX_INTERNAL_SIZE + RAMSIZE_FIXED,
};
QEMUMachine terrierpda_machine = {
};
QEMUMachine terrierpda_machine = {
.desc = "Terrier PDA (PXA270)",
.init = terrier_init,
.ram_require = SPITZ_RAM + SPITZ_ROM + PXA2XX_INTERNAL_SIZE + RAMSIZE_FIXED,
.desc = "Terrier PDA (PXA270)",
.init = terrier_init,
.ram_require = SPITZ_RAM + SPITZ_ROM + PXA2XX_INTERNAL_SIZE + RAMSIZE_FIXED,
.desc = "Stellaris LM3S811EVB",
.init = lm3s811evb_init,
.ram_require = (64 * 1024 + 8 * 1024) | RAMSIZE_FIXED,
.desc = "Stellaris LM3S811EVB",
.init = lm3s811evb_init,
.ram_require = (64 * 1024 + 8 * 1024) | RAMSIZE_FIXED,
};
QEMUMachine lm3s6965evb_machine = {
};
QEMUMachine lm3s6965evb_machine = {
.desc = "Stellaris LM3S6965EVB",
.init = lm3s6965evb_init,
.ram_require = (256 * 1024 + 64 * 1024) | RAMSIZE_FIXED,
.desc = "Stellaris LM3S6965EVB",
.init = lm3s6965evb_init,
.ram_require = (256 * 1024 + 64 * 1024) | RAMSIZE_FIXED,
.ram_require = PROM_SIZE_MAX + TCX_SIZE,
.nodisk_ok = 1,
.use_scsi = 1,
.ram_require = PROM_SIZE_MAX + TCX_SIZE,
.nodisk_ok = 1,
.use_scsi = 1,
};
QEMUMachine ss10_machine = {
};
QEMUMachine ss10_machine = {
.ram_require = PROM_SIZE_MAX + TCX_SIZE,
.nodisk_ok = 1,
.use_scsi = 1,
.ram_require = PROM_SIZE_MAX + TCX_SIZE,
.nodisk_ok = 1,
.use_scsi = 1,
};
QEMUMachine ss600mp_machine = {
};
QEMUMachine ss600mp_machine = {
.ram_require = PROM_SIZE_MAX + TCX_SIZE,
.nodisk_ok = 1,
.use_scsi = 1,
.ram_require = PROM_SIZE_MAX + TCX_SIZE,
.nodisk_ok = 1,
.use_scsi = 1,
};
QEMUMachine ss20_machine = {
};
QEMUMachine ss20_machine = {
.ram_require = PROM_SIZE_MAX + TCX_SIZE,
.nodisk_ok = 1,
.use_scsi = 1,
.ram_require = PROM_SIZE_MAX + TCX_SIZE,
.nodisk_ok = 1,
.use_scsi = 1,
};
QEMUMachine ss2_machine = {
};
QEMUMachine ss2_machine = {
.ram_require = PROM_SIZE_MAX + TCX_SIZE,
.nodisk_ok = 1,
.use_scsi = 1,
.ram_require = PROM_SIZE_MAX + TCX_SIZE,
.nodisk_ok = 1,
.use_scsi = 1,
};
QEMUMachine voyager_machine = {
};
QEMUMachine voyager_machine = {
.ram_require = PROM_SIZE_MAX + TCX_SIZE,
.nodisk_ok = 1,
.use_scsi = 1,
.ram_require = PROM_SIZE_MAX + TCX_SIZE,
.nodisk_ok = 1,
.use_scsi = 1,
};
QEMUMachine ss_lx_machine = {
};
QEMUMachine ss_lx_machine = {
.ram_require = PROM_SIZE_MAX + TCX_SIZE,
.nodisk_ok = 1,
.use_scsi = 1,
.ram_require = PROM_SIZE_MAX + TCX_SIZE,
.nodisk_ok = 1,
.use_scsi = 1,
};
QEMUMachine ss4_machine = {
};
QEMUMachine ss4_machine = {
.ram_require = PROM_SIZE_MAX + TCX_SIZE,
.nodisk_ok = 1,
.use_scsi = 1,
.ram_require = PROM_SIZE_MAX + TCX_SIZE,
.nodisk_ok = 1,
.use_scsi = 1,
};
QEMUMachine scls_machine = {
};
QEMUMachine scls_machine = {
.ram_require = PROM_SIZE_MAX + TCX_SIZE,
.nodisk_ok = 1,
.use_scsi = 1,
.ram_require = PROM_SIZE_MAX + TCX_SIZE,
.nodisk_ok = 1,
.use_scsi = 1,
};
QEMUMachine sbook_machine = {
};
QEMUMachine sbook_machine = {
.ram_require = PROM_SIZE_MAX + TCX_SIZE,
.nodisk_ok = 1,
.use_scsi = 1,
.ram_require = PROM_SIZE_MAX + TCX_SIZE,
.nodisk_ok = 1,
.use_scsi = 1,
};
static const struct sun4d_hwdef sun4d_hwdefs[] = {
};
static const struct sun4d_hwdef sun4d_hwdefs[] = {
.ram_require = PROM_SIZE_MAX + TCX_SIZE,
.nodisk_ok = 1,
.use_scsi = 1,
.ram_require = PROM_SIZE_MAX + TCX_SIZE,
.nodisk_ok = 1,
.use_scsi = 1,
};
QEMUMachine ss2000_machine = {
};
QEMUMachine ss2000_machine = {
.ram_require = PROM_SIZE_MAX + TCX_SIZE,
.nodisk_ok = 1,
.use_scsi = 1,
.ram_require = PROM_SIZE_MAX + TCX_SIZE,
.nodisk_ok = 1,
.use_scsi = 1,
.init = sun4u_init,
.ram_require = PROM_SIZE_MAX + VGA_RAM_SIZE,
.nodisk_ok = 1,
.init = sun4u_init,
.ram_require = PROM_SIZE_MAX + VGA_RAM_SIZE,
.nodisk_ok = 1,
};
QEMUMachine sun4v_machine = {
};
QEMUMachine sun4v_machine = {
.init = sun4v_init,
.ram_require = PROM_SIZE_MAX + VGA_RAM_SIZE,
.nodisk_ok = 1,
.init = sun4v_init,
.ram_require = PROM_SIZE_MAX + VGA_RAM_SIZE,
.nodisk_ok = 1,
};
QEMUMachine niagara_machine = {
};
QEMUMachine niagara_machine = {
.init = niagara_init,
.ram_require = PROM_SIZE_MAX + VGA_RAM_SIZE,
.nodisk_ok = 1,
.init = niagara_init,
.ram_require = PROM_SIZE_MAX + VGA_RAM_SIZE,
.nodisk_ok = 1,
.desc = "Tosa PDA (PXA255)",
.init = tosa_init,
.ram_require = TOSA_RAM + TOSA_ROM + PXA2XX_INTERNAL_SIZE + RAMSIZE_FIXED,
.desc = "Tosa PDA (PXA255)",
.init = tosa_init,
.ram_require = TOSA_RAM + TOSA_ROM + PXA2XX_INTERNAL_SIZE + RAMSIZE_FIXED,
.desc = "ARM Versatile/PB (ARM926EJ-S)",
.init = vpb_init,
.use_scsi = 1,
.desc = "ARM Versatile/PB (ARM926EJ-S)",
.init = vpb_init,
.use_scsi = 1,
};
QEMUMachine versatileab_machine = {
};
QEMUMachine versatileab_machine = {
.desc = "ARM Versatile/AB (ARM926EJ-S)",
.init = vab_init,
.use_scsi = 1,
.desc = "ARM Versatile/AB (ARM926EJ-S)",
.init = vab_init,
.use_scsi = 1,
static VLANState *first_vlan;
int smp_cpus = 1;
const char *vnc_display;
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;
int acpi_enabled = 1;
int fd_bootchk = 1;
int no_reboot = 0;
break;
case QEMU_OPTION_smp:
smp_cpus = atoi(optarg);
break;
case QEMU_OPTION_smp:
smp_cpus = atoi(optarg);
- if (smp_cpus < 1 || smp_cpus > MAX_CPUS) {
fprintf(stderr, "Invalid number of CPUs\n");
exit(1);
}
fprintf(stderr, "Invalid number of CPUs\n");
exit(1);
}
+ 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";
if (nographic) {
if (serial_device_index == 0)
serial_devices[0] = "stdio";