hw/i386/pc_piix.c: simplify RAM size logic in pc_init_isa()
All isapc machines must have 32-bit CPUs and so the RAM split logic can be hardcoded accordingly. Signed-off-by: Mark Cave-Ayland <mark.caveayland@nutanix.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Link: https://lore.kernel.org/r/20250828111057.468712-12-mark.caveayland@nutanix.com Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
62f8d562bb
commit
f2096fa151
1 changed files with 4 additions and 54 deletions
|
|
@ -445,7 +445,6 @@ static void pc_init_isa(MachineState *machine)
|
|||
GSIState *gsi_state;
|
||||
MemoryRegion *ram_memory;
|
||||
MemoryRegion *rom_memory = system_memory;
|
||||
ram_addr_t lowmem;
|
||||
uint64_t hole64_size = 0;
|
||||
|
||||
/*
|
||||
|
|
@ -480,65 +479,16 @@ static void pc_init_isa(MachineState *machine)
|
|||
}
|
||||
|
||||
/*
|
||||
* Calculate ram split, for memory below and above 4G. It's a bit
|
||||
* complicated for backward compatibility reasons ...
|
||||
*
|
||||
* - Traditional split is 3.5G (lowmem = 0xe0000000). This is the
|
||||
* default value for max_ram_below_4g now.
|
||||
*
|
||||
* - Then, to gigabyte align the memory, we move the split to 3G
|
||||
* (lowmem = 0xc0000000). But only in case we have to split in
|
||||
* the first place, i.e. ram_size is larger than (traditional)
|
||||
* lowmem. And for new machine types (gigabyte_align = true)
|
||||
* only, for live migration compatibility reasons.
|
||||
*
|
||||
* - Next the max-ram-below-4g option was added, which allowed to
|
||||
* reduce lowmem to a smaller value, to allow a larger PCI I/O
|
||||
* window below 4G. qemu doesn't enforce gigabyte alignment here,
|
||||
* but prints a warning.
|
||||
*
|
||||
* - Finally max-ram-below-4g got updated to also allow raising lowmem,
|
||||
* so legacy non-PAE guests can get as much memory as possible in
|
||||
* the 32bit address space below 4G.
|
||||
*
|
||||
* - Note that Xen has its own ram setup code in xen_ram_init(),
|
||||
* called via xen_hvm_init_pc().
|
||||
*
|
||||
* Examples:
|
||||
* qemu -M pc-1.7 -m 4G (old default) -> 3584M low, 512M high
|
||||
* qemu -M pc -m 4G (new default) -> 3072M low, 1024M high
|
||||
* qemu -M pc,max-ram-below-4g=2G -m 4G -> 2048M low, 2048M high
|
||||
* qemu -M pc,max-ram-below-4g=4G -m 3968M -> 3968M low (=4G-128M)
|
||||
* There is no RAM split for the isapc machine
|
||||
*/
|
||||
if (xen_enabled()) {
|
||||
xen_hvm_init_pc(pcms, &ram_memory);
|
||||
} else {
|
||||
ram_memory = machine->ram;
|
||||
if (!pcms->max_ram_below_4g) {
|
||||
pcms->max_ram_below_4g = 0xe0000000; /* default: 3.5G */
|
||||
}
|
||||
lowmem = pcms->max_ram_below_4g;
|
||||
if (machine->ram_size >= pcms->max_ram_below_4g) {
|
||||
if (pcmc->gigabyte_align) {
|
||||
if (lowmem > 0xc0000000) {
|
||||
lowmem = 0xc0000000;
|
||||
}
|
||||
if (lowmem & (1 * GiB - 1)) {
|
||||
warn_report("Large machine and max_ram_below_4g "
|
||||
"(%" PRIu64 ") not a multiple of 1G; "
|
||||
"possible bad performance.",
|
||||
pcms->max_ram_below_4g);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (machine->ram_size >= lowmem) {
|
||||
x86ms->above_4g_mem_size = machine->ram_size - lowmem;
|
||||
x86ms->below_4g_mem_size = lowmem;
|
||||
} else {
|
||||
x86ms->above_4g_mem_size = 0;
|
||||
x86ms->below_4g_mem_size = machine->ram_size;
|
||||
}
|
||||
pcms->max_ram_below_4g = 3.5 * GiB;
|
||||
x86ms->above_4g_mem_size = 0;
|
||||
x86ms->below_4g_mem_size = machine->ram_size;
|
||||
}
|
||||
|
||||
x86_cpus_init(x86ms, pcmc->default_cpu_version);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue