hw/i386/pc: Remove PCMachineClass::enforce_aligned_dimm

PCMachineClass::enforce_aligned_dimm was only used by the
pc-i440fx-2.1 machine, which got removed. It is now always
true. Remove it, simplifying pc_get_device_memory_range().
Update the comment in Avocado test_phybits_low_pse36().

Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
Message-Id: <20240617071118.60464-14-philmd@linaro.org>
This commit is contained in:
Philippe Mathieu-Daudé 2024-02-28 09:45:47 +01:00
parent 9adf35f04b
commit 516871f002
3 changed files with 7 additions and 19 deletions

View file

@ -728,7 +728,6 @@ static void pc_get_device_memory_range(PCMachineState *pcms,
hwaddr *base, hwaddr *base,
ram_addr_t *device_mem_size) ram_addr_t *device_mem_size)
{ {
PCMachineClass *pcmc = PC_MACHINE_GET_CLASS(pcms);
MachineState *machine = MACHINE(pcms); MachineState *machine = MACHINE(pcms);
ram_addr_t size; ram_addr_t size;
hwaddr addr; hwaddr addr;
@ -736,10 +735,8 @@ static void pc_get_device_memory_range(PCMachineState *pcms,
size = machine->maxram_size - machine->ram_size; size = machine->maxram_size - machine->ram_size;
addr = ROUND_UP(pc_above_4g_end(pcms), 1 * GiB); addr = ROUND_UP(pc_above_4g_end(pcms), 1 * GiB);
if (pcmc->enforce_aligned_dimm) { /* size device region assuming 1G page max alignment per slot */
/* size device region assuming 1G page max alignment per slot */ size += (1 * GiB) * machine->ram_slots;
size += (1 * GiB) * machine->ram_slots;
}
*base = addr; *base = addr;
*device_mem_size = size; *device_mem_size = size;
@ -1303,12 +1300,9 @@ void pc_i8259_create(ISABus *isa_bus, qemu_irq *i8259_irqs)
static void pc_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev, static void pc_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
Error **errp) Error **errp)
{ {
const PCMachineState *pcms = PC_MACHINE(hotplug_dev);
const X86MachineState *x86ms = X86_MACHINE(hotplug_dev); const X86MachineState *x86ms = X86_MACHINE(hotplug_dev);
const PCMachineClass *pcmc = PC_MACHINE_GET_CLASS(pcms);
const MachineState *ms = MACHINE(hotplug_dev); const MachineState *ms = MACHINE(hotplug_dev);
const bool is_nvdimm = object_dynamic_cast(OBJECT(dev), TYPE_NVDIMM); const bool is_nvdimm = object_dynamic_cast(OBJECT(dev), TYPE_NVDIMM);
const uint64_t legacy_align = TARGET_PAGE_SIZE;
Error *local_err = NULL; Error *local_err = NULL;
/* /*
@ -1333,8 +1327,7 @@ static void pc_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
return; return;
} }
pc_dimm_pre_plug(PC_DIMM(dev), MACHINE(hotplug_dev), pc_dimm_pre_plug(PC_DIMM(dev), MACHINE(hotplug_dev), NULL, errp);
pcmc->enforce_aligned_dimm ? NULL : &legacy_align, errp);
} }
static void pc_memory_plug(HotplugHandler *hotplug_dev, static void pc_memory_plug(HotplugHandler *hotplug_dev,
@ -1798,7 +1791,6 @@ static void pc_machine_class_init(ObjectClass *oc, void *data)
pcmc->smbios_defaults = true; pcmc->smbios_defaults = true;
pcmc->gigabyte_align = true; pcmc->gigabyte_align = true;
pcmc->has_reserved_memory = true; pcmc->has_reserved_memory = true;
pcmc->enforce_aligned_dimm = true;
pcmc->enforce_amd_1tb_hole = true; pcmc->enforce_amd_1tb_hole = true;
pcmc->isa_bios_alias = true; pcmc->isa_bios_alias = true;
/* BIOS ACPI tables: 128K. Other BIOS datastructures: less than 4K reported /* BIOS ACPI tables: 128K. Other BIOS datastructures: less than 4K reported

View file

@ -74,8 +74,6 @@ typedef struct PCMachineState {
* *
* Compat fields: * Compat fields:
* *
* @enforce_aligned_dimm: check that DIMM's address/size is aligned by
* backend's alignment value if provided
* @acpi_data_size: Size of the chunk of memory at the top of RAM * @acpi_data_size: Size of the chunk of memory at the top of RAM
* for the BIOS ACPI tables and other BIOS * for the BIOS ACPI tables and other BIOS
* datastructures. * datastructures.
@ -114,7 +112,6 @@ struct PCMachineClass {
/* RAM / address space compat: */ /* RAM / address space compat: */
bool gigabyte_align; bool gigabyte_align;
bool has_reserved_memory; bool has_reserved_memory;
bool enforce_aligned_dimm;
bool broken_reserved_end; bool broken_reserved_end;
bool enforce_amd_1tb_hole; bool enforce_amd_1tb_hole;
bool isa_bios_alias; bool isa_bios_alias;

View file

@ -31,11 +31,10 @@ class MemAddrCheck(QemuSystemTest):
at 4 GiB boundary when "above_4g_mem_size" is 0 (this would be true when at 4 GiB boundary when "above_4g_mem_size" is 0 (this would be true when
we have 0.5 GiB of VM memory, see pc_q35_init()). This means total we have 0.5 GiB of VM memory, see pc_q35_init()). This means total
hotpluggable memory size is 60 GiB. Per slot, we reserve 1 GiB of memory hotpluggable memory size is 60 GiB. Per slot, we reserve 1 GiB of memory
for dimm alignment for all newer machines (see enforce_aligned_dimm for dimm alignment for all machines. That leaves total hotpluggable
property for pc machines and pc_get_device_memory_range()). That leaves actual memory size of 59 GiB. If the VM is started with 0.5 GiB of
total hotpluggable actual memory size of 59 GiB. If the VM is started memory, maxmem should be set to a maximum value of 59.5 GiB to ensure
with 0.5 GiB of memory, maxmem should be set to a maximum value of that the processor can address all memory directly.
59.5 GiB to ensure that the processor can address all memory directly.
Note that 64-bit pci hole size is 0 in this case. If maxmem is set to Note that 64-bit pci hole size is 0 in this case. If maxmem is set to
59.6G, QEMU should fail to start with a message "phy-bits are too low". 59.6G, QEMU should fail to start with a message "phy-bits are too low".
If maxmem is set to 59.5G with all other QEMU parameters identical, QEMU If maxmem is set to 59.5G with all other QEMU parameters identical, QEMU