Commit 2f8b5008 authored by Igor Mammedov's avatar Igor Mammedov Committed by Michael S. Tsirkin
Browse files

pc: memhotplug: keep reserved-memory-end broken on 2.4 and earlier machines



it will prevent guests on old machines from seeing
inconsistent memory mapping in firmware/ACPI views.

Signed-off-by: default avatarIgor Mammedov <imammedo@redhat.com>
Reviewed-by: default avatarMichael S. Tsirkin <mst@redhat.com>
Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
Reviewed-by: default avatarEduardo Habkost <ehabkost@redhat.com>
parent 3385e8e2
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -1412,8 +1412,12 @@ FWCfgState *pc_memory_init(PCMachineState *pcms,

    if (guest_info->has_reserved_memory && pcms->hotplug_memory.base) {
        uint64_t *val = g_malloc(sizeof(*val));
        uint64_t res_mem_end = pcms->hotplug_memory.base +
                               memory_region_size(&pcms->hotplug_memory.mr);
        PCMachineClass *pcmc = PC_MACHINE_GET_CLASS(pcms);
        uint64_t res_mem_end = pcms->hotplug_memory.base;

        if (!pcmc->broken_reserved_end) {
            res_mem_end += memory_region_size(&pcms->hotplug_memory.mr);
        }
        *val = cpu_to_le64(ROUND_UP(res_mem_end, 0x1ULL << 30));
        fw_cfg_add_file(fw_cfg, "etc/reserved-memory-end", val, sizeof(*val));
    }
+2 −0
Original line number Diff line number Diff line
@@ -449,7 +449,9 @@ static void pc_i440fx_machine_options(MachineClass *m)

static void pc_i440fx_2_4_machine_options(MachineClass *m)
{
    PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
    pc_i440fx_machine_options(m);
    pcmc->broken_reserved_end = true;
    m->default_machine_opts = "firmware=bios-256k.bin";
    m->default_display = "std";
    m->alias = "pc";
+2 −0
Original line number Diff line number Diff line
@@ -368,7 +368,9 @@ static void pc_q35_machine_options(MachineClass *m)

static void pc_q35_2_4_machine_options(MachineClass *m)
{
    PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
    pc_q35_machine_options(m);
    pcmc->broken_reserved_end = true;
    m->default_machine_opts = "firmware=bios-256k.bin";
    m->default_display = "std";
    m->no_floppy = 1;
+1 −0
Original line number Diff line number Diff line
@@ -59,6 +59,7 @@ struct PCMachineClass {
    MachineClass parent_class;

    /*< public >*/
    bool broken_reserved_end;
    HotplugHandler *(*get_hotplug_handler)(MachineState *machine,
                                           DeviceState *dev);
};