Commit e53f7796 authored by Peter Maydell's avatar Peter Maydell
Browse files

Merge remote-tracking branch 'remotes/ehabkost/tags/machine-next-pull-request' into staging



Machine queue, 2019-01-10

* Simplify GlobalProperty array declarations (Eduardo Habkost)
* Deprecate cpu-add commands (Kashyap Chamarthy)
* range/memory-device cleanups (David Hildenbrand)
* Fix -device scsi-hd,help regression (Marc-André Lureau)
* Fix crash when -global generates multiple warnings (Eduardo
  Habkost)

# gpg: Signature made Thu 10 Jan 2019 14:28:23 GMT
# gpg:                using RSA key 2807936F984DC5A6
# gpg: Good signature from "Eduardo Habkost <ehabkost@redhat.com>"
# Primary key fingerprint: 5A32 2FD5 ABC4 D3DB ACCF  D1AA 2807 936F 984D C5A6

* remotes/ehabkost/tags/machine-next-pull-request:
  qom: Don't keep error value between object_property_parse() calls
  qdev: fix -device scsi-hd,help regression
  machine: Use shorter format for GlobalProperty arrays
  machine: Eliminate unnecessary stringify() usage
  spapr: Eliminate SPAPR_PCI_2_7_MMIO_WIN_SIZE macro
  memory-device: rewrite address assignment using ranges
  range: add some more functions
  Mention that QMP 'cpu-add' will be deprecated
  Update that HMP 'cpu-add' is deprecated in 4.0
  qemu-deprecated.texi: Rename the HMP section

Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
parents 29174103 d769f0df
Loading
Loading
Loading
Loading
+65 −273
Original line number Diff line number Diff line
@@ -24,23 +24,10 @@
#include "hw/pci/pci.h"

GlobalProperty hw_compat_3_1[] = {
    {
        .driver   = "pcie-root-port",
        .property = "x-speed",
        .value    = "2_5",
    },{
        .driver   = "pcie-root-port",
        .property = "x-width",
        .value    = "1",
    },{
        .driver   = "memory-backend-file",
        .property = "x-use-canonical-path-for-ramblock-id",
        .value    = "true",
    },{
        .driver   = "memory-backend-memfd",
        .property = "x-use-canonical-path-for-ramblock-id",
        .value    = "true",
    },
    { "pcie-root-port", "x-speed", "2_5" },
    { "pcie-root-port", "x-width", "1" },
    { "memory-backend-file", "x-use-canonical-path-for-ramblock-id", "true" },
    { "memory-backend-memfd", "x-use-canonical-path-for-ramblock-id", "true" },
};
const size_t hw_compat_3_1_len = G_N_ELEMENTS(hw_compat_3_1);

@@ -48,269 +35,96 @@ GlobalProperty hw_compat_3_0[] = {};
const size_t hw_compat_3_0_len = G_N_ELEMENTS(hw_compat_3_0);

GlobalProperty hw_compat_2_12[] = {
    {
        .driver   = "migration",
        .property = "decompress-error-check",
        .value    = "off",
    },{
        .driver   = "hda-audio",
        .property = "use-timer",
        .value    = "false",
    },{
        .driver   = "cirrus-vga",
        .property = "global-vmstate",
        .value    = "true",
    },{
        .driver   = "VGA",
        .property = "global-vmstate",
        .value    = "true",
    },{
        .driver   = "vmware-svga",
        .property = "global-vmstate",
        .value    = "true",
    },{
        .driver   = "qxl-vga",
        .property = "global-vmstate",
        .value    = "true",
    },
    { "migration", "decompress-error-check", "off" },
    { "hda-audio", "use-timer", "false" },
    { "cirrus-vga", "global-vmstate", "true" },
    { "VGA", "global-vmstate", "true" },
    { "vmware-svga", "global-vmstate", "true" },
    { "qxl-vga", "global-vmstate", "true" },
};
const size_t hw_compat_2_12_len = G_N_ELEMENTS(hw_compat_2_12);

GlobalProperty hw_compat_2_11[] = {
    {
        .driver   = "hpet",
        .property = "hpet-offset-saved",
        .value    = "false",
    },{
        .driver   = "virtio-blk-pci",
        .property = "vectors",
        .value    = "2",
    },{
        .driver   = "vhost-user-blk-pci",
        .property = "vectors",
        .value    = "2",
    },{
        .driver   = "e1000",
        .property = "migrate_tso_props",
        .value    = "off",
    },
    { "hpet", "hpet-offset-saved", "false" },
    { "virtio-blk-pci", "vectors", "2" },
    { "vhost-user-blk-pci", "vectors", "2" },
    { "e1000", "migrate_tso_props", "off" },
};
const size_t hw_compat_2_11_len = G_N_ELEMENTS(hw_compat_2_11);

GlobalProperty hw_compat_2_10[] = {
    {
        .driver   = "virtio-mouse-device",
        .property = "wheel-axis",
        .value    = "false",
    },{
        .driver   = "virtio-tablet-device",
        .property = "wheel-axis",
        .value    = "false",
    },
    { "virtio-mouse-device", "wheel-axis", "false" },
    { "virtio-tablet-device", "wheel-axis", "false" },
};
const size_t hw_compat_2_10_len = G_N_ELEMENTS(hw_compat_2_10);

GlobalProperty hw_compat_2_9[] = {
    {
        .driver   = "pci-bridge",
        .property = "shpc",
        .value    = "off",
    },{
        .driver   = "intel-iommu",
        .property = "pt",
        .value    = "off",
    },{
        .driver   = "virtio-net-device",
        .property = "x-mtu-bypass-backend",
        .value    = "off",
    },{
        .driver   = "pcie-root-port",
        .property = "x-migrate-msix",
        .value    = "false",
    },
    { "pci-bridge", "shpc", "off" },
    { "intel-iommu", "pt", "off" },
    { "virtio-net-device", "x-mtu-bypass-backend", "off" },
    { "pcie-root-port", "x-migrate-msix", "false" },
};
const size_t hw_compat_2_9_len = G_N_ELEMENTS(hw_compat_2_9);

GlobalProperty hw_compat_2_8[] = {
    {
        .driver   = "fw_cfg_mem",
        .property = "x-file-slots",
        .value    = stringify(0x10),
    },{
        .driver   = "fw_cfg_io",
        .property = "x-file-slots",
        .value    = stringify(0x10),
    },{
        .driver   = "pflash_cfi01",
        .property = "old-multiple-chip-handling",
        .value    = "on",
    },{
        .driver   = "pci-bridge",
        .property = "shpc",
        .value    = "on",
    },{
        .driver   = TYPE_PCI_DEVICE,
        .property = "x-pcie-extcap-init",
        .value    = "off",
    },{
        .driver   = "virtio-pci",
        .property = "x-pcie-deverr-init",
        .value    = "off",
    },{
        .driver   = "virtio-pci",
        .property = "x-pcie-lnkctl-init",
        .value    = "off",
    },{
        .driver   = "virtio-pci",
        .property = "x-pcie-pm-init",
        .value    = "off",
    },{
        .driver   = "cirrus-vga",
        .property = "vgamem_mb",
        .value    = "8",
    },{
        .driver   = "isa-cirrus-vga",
        .property = "vgamem_mb",
        .value    = "8",
    },
    { "fw_cfg_mem", "x-file-slots", "0x10" },
    { "fw_cfg_io", "x-file-slots", "0x10" },
    { "pflash_cfi01", "old-multiple-chip-handling", "on" },
    { "pci-bridge", "shpc", "on" },
    { TYPE_PCI_DEVICE, "x-pcie-extcap-init", "off" },
    { "virtio-pci", "x-pcie-deverr-init", "off" },
    { "virtio-pci", "x-pcie-lnkctl-init", "off" },
    { "virtio-pci", "x-pcie-pm-init", "off" },
    { "cirrus-vga", "vgamem_mb", "8" },
    { "isa-cirrus-vga", "vgamem_mb", "8" },
};
const size_t hw_compat_2_8_len = G_N_ELEMENTS(hw_compat_2_8);

GlobalProperty hw_compat_2_7[] = {
    {
        .driver   = "virtio-pci",
        .property = "page-per-vq",
        .value    = "on",
    },{
        .driver   = "virtio-serial-device",
        .property = "emergency-write",
        .value    = "off",
    },{
        .driver   = "ioapic",
        .property = "version",
        .value    = "0x11",
    },{
        .driver   = "intel-iommu",
        .property = "x-buggy-eim",
        .value    = "true",
    },{
        .driver   = "virtio-pci",
        .property = "x-ignore-backend-features",
        .value    = "on",
    },
    { "virtio-pci", "page-per-vq", "on" },
    { "virtio-serial-device", "emergency-write", "off" },
    { "ioapic", "version", "0x11" },
    { "intel-iommu", "x-buggy-eim", "true" },
    { "virtio-pci", "x-ignore-backend-features", "on" },
};
const size_t hw_compat_2_7_len = G_N_ELEMENTS(hw_compat_2_7);

GlobalProperty hw_compat_2_6[] = {
    {
        .driver   = "virtio-mmio",
        .property = "format_transport_address",
        .value    = "off",
    },{
        .driver   = "virtio-pci",
        .property = "disable-modern",
        .value    = "on",
    },{
        .driver   = "virtio-pci",
        .property = "disable-legacy",
        .value    = "off",
    },
    { "virtio-mmio", "format_transport_address", "off" },
    { "virtio-pci", "disable-modern", "on" },
    { "virtio-pci", "disable-legacy", "off" },
};
const size_t hw_compat_2_6_len = G_N_ELEMENTS(hw_compat_2_6);

GlobalProperty hw_compat_2_5[] = {
    {
        .driver   = "isa-fdc",
        .property = "fallback",
        .value    = "144",
    },{
        .driver   = "pvscsi",
        .property = "x-old-pci-configuration",
        .value    = "on",
    },{
        .driver   = "pvscsi",
        .property = "x-disable-pcie",
        .value    = "on",
    },
    {
        .driver   = "vmxnet3",
        .property = "x-old-msi-offsets",
        .value    = "on",
    },{
        .driver   = "vmxnet3",
        .property = "x-disable-pcie",
        .value    = "on",
    },
    { "isa-fdc", "fallback", "144" },
    { "pvscsi", "x-old-pci-configuration", "on" },
    { "pvscsi", "x-disable-pcie", "on" },
    { "vmxnet3", "x-old-msi-offsets", "on" },
    { "vmxnet3", "x-disable-pcie", "on" },
};
const size_t hw_compat_2_5_len = G_N_ELEMENTS(hw_compat_2_5);

GlobalProperty hw_compat_2_4[] = {
    {
        .driver   = "virtio-blk-device",
        .property = "scsi",
        .value    = "true",
    },{
        .driver   = "e1000",
        .property = "extra_mac_registers",
        .value    = "off",
    },{
        .driver   = "virtio-pci",
        .property = "x-disable-pcie",
        .value    = "on",
    },{
        .driver   = "virtio-pci",
        .property = "migrate-extra",
        .value    = "off",
    },{
        .driver   = "fw_cfg_mem",
        .property = "dma_enabled",
        .value    = "off",
    },{
        .driver   = "fw_cfg_io",
        .property = "dma_enabled",
        .value    = "off",
    }
    { "virtio-blk-device", "scsi", "true" },
    { "e1000", "extra_mac_registers", "off" },
    { "virtio-pci", "x-disable-pcie", "on" },
    { "virtio-pci", "migrate-extra", "off" },
    { "fw_cfg_mem", "dma_enabled", "off" },
    { "fw_cfg_io", "dma_enabled", "off" }
};
const size_t hw_compat_2_4_len = G_N_ELEMENTS(hw_compat_2_4);

GlobalProperty hw_compat_2_3[] = {
    {
        .driver   = "virtio-blk-pci",
        .property = "any_layout",
        .value    = "off",
    },{
        .driver   = "virtio-balloon-pci",
        .property = "any_layout",
        .value    = "off",
    },{
        .driver   = "virtio-serial-pci",
        .property = "any_layout",
        .value    = "off",
    },{
        .driver   = "virtio-9p-pci",
        .property = "any_layout",
        .value    = "off",
    },{
        .driver   = "virtio-rng-pci",
        .property = "any_layout",
        .value    = "off",
    },{
        .driver   = TYPE_PCI_DEVICE,
        .property = "x-pcie-lnksta-dllla",
        .value    = "off",
    },{
        .driver   = "migration",
        .property = "send-configuration",
        .value    = "off",
    },{
        .driver   = "migration",
        .property = "send-section-footer",
        .value    = "off",
    },{
        .driver   = "migration",
        .property = "store-global-state",
        .value    = "off",
    },
    { "virtio-blk-pci", "any_layout", "off" },
    { "virtio-balloon-pci", "any_layout", "off" },
    { "virtio-serial-pci", "any_layout", "off" },
    { "virtio-9p-pci", "any_layout", "off" },
    { "virtio-rng-pci", "any_layout", "off" },
    { TYPE_PCI_DEVICE, "x-pcie-lnksta-dllla", "off" },
    { "migration", "send-configuration", "off" },
    { "migration", "send-section-footer", "off" },
    { "migration", "store-global-state", "off" },
};
const size_t hw_compat_2_3_len = G_N_ELEMENTS(hw_compat_2_3);

@@ -318,35 +132,13 @@ GlobalProperty hw_compat_2_2[] = {};
const size_t hw_compat_2_2_len = G_N_ELEMENTS(hw_compat_2_2);

GlobalProperty hw_compat_2_1[] = {
    {
        .driver   = "intel-hda",
        .property = "old_msi_addr",
        .value    = "on",
    },{
        .driver   = "VGA",
        .property = "qemu-extended-regs",
        .value    = "off",
    },{
        .driver   = "secondary-vga",
        .property = "qemu-extended-regs",
        .value    = "off",
    },{
        .driver   = "virtio-scsi-pci",
        .property = "any_layout",
        .value    = "off",
    },{
        .driver   = "usb-mouse",
        .property = "usb_version",
        .value    = stringify(1),
    },{
        .driver   = "usb-kbd",
        .property = "usb_version",
        .value    = stringify(1),
    },{
        .driver   = "virtio-pci",
        .property = "virtio-pci-bus-master-bug-migration",
        .value    = "on",
    },
    { "intel-hda", "old_msi_addr", "on" },
    { "VGA", "qemu-extended-regs", "off" },
    { "secondary-vga", "qemu-extended-regs", "off" },
    { "virtio-scsi-pci", "any_layout", "off" },
    { "usb-mouse", "usb_version", "1" },
    { "usb-kbd", "usb_version", "1" },
    { "virtio-pci", "virtio-pci-bus-master-bug-migration", "on" },
};
const size_t hw_compat_2_1_len = G_N_ELEMENTS(hw_compat_2_1);

+6 −3
Original line number Diff line number Diff line
@@ -975,11 +975,14 @@ void object_apply_compat_props(Object *obj)
    if (object_dynamic_cast(qdev_get_machine(), TYPE_MACHINE)) {
        MachineState *m = MACHINE(qdev_get_machine());
        MachineClass *mc = MACHINE_GET_CLASS(m);

        if (m->accelerator) {
            AccelClass *ac = ACCEL_GET_CLASS(m->accelerator);

            if (ac->compat_props) {
                object_apply_global_props(obj, ac->compat_props, &error_abort);
            }
        }
        object_apply_global_props(obj, mc->compat_props, &error_abort);
    }
}
+131 −589

File changed.

Preview size limit exceeded, changes collapsed.

+37 −155
Original line number Diff line number Diff line
@@ -694,23 +694,10 @@ static void pc_i440fx_1_3_machine_options(MachineClass *m)
{
    static GlobalProperty compat[] = {
        PC_CPU_MODEL_IDS("1.3.0")
        {
            .driver   = "usb-tablet",
            .property = "usb_version",
            .value    = stringify(1),
        },{
            .driver   = "virtio-net-pci",
            .property = "ctrl_mac_addr",
            .value    = "off",
        },{
            .driver   = "virtio-net-pci",
            .property = "mq",
            .value    = "off",
        }, {
            .driver   = "e1000",
            .property = "autonegotiation",
            .value    = "off",
        },
        { "usb-tablet", "usb_version", "1" },
        { "virtio-net-pci", "ctrl_mac_addr", "off" },
        { "virtio-net-pci", "mq", "off" },
        { "e1000", "autonegotiation", "off" },
    };

    pc_i440fx_1_4_machine_options(m);
@@ -726,31 +713,12 @@ static void pc_i440fx_1_2_machine_options(MachineClass *m)
{
    static GlobalProperty compat[] = {
        PC_CPU_MODEL_IDS("1.2.0")
        {
            .driver   = "nec-usb-xhci",
            .property = "msi",
            .value    = "off",
        },{
            .driver   = "nec-usb-xhci",
            .property = "msix",
            .value    = "off",
        },{
            .driver   = "ivshmem",
            .property = "use64",
            .value    = "0",
        },{
            .driver   = "qxl",
            .property = "revision",
            .value    = stringify(3),
        },{
            .driver   = "qxl-vga",
            .property = "revision",
            .value    = stringify(3),
        },{
            .driver   = "VGA",
            .property = "mmio",
            .value    = "off",
        },
        { "nec-usb-xhci", "msi", "off" },
        { "nec-usb-xhci", "msix", "off" },
        { "ivshmem", "use64", "0" },
        { "qxl", "revision", "3" },
        { "qxl-vga", "revision", "3" },
        { "VGA", "mmio", "off" },
    };

    pc_i440fx_1_3_machine_options(m);
@@ -766,35 +734,13 @@ static void pc_i440fx_1_1_machine_options(MachineClass *m)
{
    static GlobalProperty compat[] = {
        PC_CPU_MODEL_IDS("1.1.0")
        {
            .driver   = "virtio-scsi-pci",
            .property = "hotplug",
            .value    = "off",
        },{
            .driver   = "virtio-scsi-pci",
            .property = "param_change",
            .value    = "off",
        },{
            .driver   = "VGA",
            .property = "vgamem_mb",
            .value    = stringify(8),
        },{
            .driver   = "vmware-svga",
            .property = "vgamem_mb",
            .value    = stringify(8),
        },{
            .driver   = "qxl-vga",
            .property = "vgamem_mb",
            .value    = stringify(8),
        },{
            .driver   = "qxl",
            .property = "vgamem_mb",
            .value    = stringify(8),
        },{
            .driver   = "virtio-blk-pci",
            .property = "config-wce",
            .value    = "off",
        },
        { "virtio-scsi-pci", "hotplug", "off" },
        { "virtio-scsi-pci", "param_change", "off" },
        { "VGA", "vgamem_mb", "8" },
        { "vmware-svga", "vgamem_mb", "8" },
        { "qxl-vga", "vgamem_mb", "8" },
        { "qxl", "vgamem_mb", "8" },
        { "virtio-blk-pci", "config-wce", "off" },
    };

    pc_i440fx_1_2_machine_options(m);
@@ -809,23 +755,10 @@ static void pc_i440fx_1_0_machine_options(MachineClass *m)
{
    static GlobalProperty compat[] = {
        PC_CPU_MODEL_IDS("1.0")
        {
            .driver   = TYPE_ISA_FDC,
            .property = "check_media_rate",
            .value    = "off",
        },{
            .driver   = "virtio-balloon-pci",
            .property = "class",
            .value    = stringify(PCI_CLASS_MEMORY_RAM),
        },{
            .driver   = "apic-common",
            .property = "vapic",
            .value    = "off",
        },{
            .driver   = TYPE_USB_DEVICE,
            .property = "full-path",
            .value    = "no",
        },
        { TYPE_ISA_FDC, "check_media_rate", "off" },
        { "virtio-balloon-pci", "class", stringify(PCI_CLASS_MEMORY_RAM) },
        { "apic-common", "vapic", "off" },
        { TYPE_USB_DEVICE, "full-path", "no" },
    };

    pc_i440fx_1_1_machine_options(m);
@@ -857,31 +790,12 @@ static void pc_i440fx_0_14_machine_options(MachineClass *m)
{
    static GlobalProperty compat[] = {
        PC_CPU_MODEL_IDS("0.14")
        {
            .driver   = "virtio-blk-pci",
            .property = "event_idx",
            .value    = "off",
        },{
            .driver   = "virtio-serial-pci",
            .property = "event_idx",
            .value    = "off",
        },{
            .driver   = "virtio-net-pci",
            .property = "event_idx",
            .value    = "off",
        },{
            .driver   = "virtio-balloon-pci",
            .property = "event_idx",
            .value    = "off",
        },{
            .driver   = "qxl",
            .property = "revision",
            .value    = stringify(2),
        },{
            .driver   = "qxl-vga",
            .property = "revision",
            .value    = stringify(2),
        },
        { "virtio-blk-pci", "event_idx", "off" },
        { "virtio-serial-pci", "event_idx", "off" },
        { "virtio-net-pci", "event_idx", "off" },
        { "virtio-balloon-pci", "event_idx", "off" },
        { "qxl", "revision", "2" },
        { "qxl-vga", "revision", "2" },
    };

    pc_i440fx_0_15_machine_options(m);
@@ -897,27 +811,11 @@ static void pc_i440fx_0_13_machine_options(MachineClass *m)
    PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
    static GlobalProperty compat[] = {
        PC_CPU_MODEL_IDS("0.13")
        {
            .driver   = TYPE_PCI_DEVICE,
            .property = "command_serr_enable",
            .value    = "off",
        },{
            .driver   = "AC97",
            .property = "use_broken_id",
            .value    = stringify(1),
        },{
            .driver   = "virtio-9p-pci",
            .property = "vectors",
            .value    = stringify(0),
        },{
            .driver   = "VGA",
            .property = "rombar",
            .value    = stringify(0),
        },{
            .driver   = "vmware-svga",
            .property = "rombar",
            .value    = stringify(0),
        },
        { TYPE_PCI_DEVICE, "command_serr_enable", "off" },
        { "AC97", "use_broken_id", "1" },
        { "virtio-9p-pci", "vectors", "0" },
        { "VGA", "rombar", "0" },
        { "vmware-svga", "rombar", "0" },
    };

    pc_i440fx_0_14_machine_options(m);
@@ -933,27 +831,11 @@ static void pc_i440fx_0_12_machine_options(MachineClass *m)
{
    static GlobalProperty compat[] = {
        PC_CPU_MODEL_IDS("0.12")
        {
            .driver   = "virtio-serial-pci",
            .property = "max_ports",
            .value    = stringify(1),
        },{
            .driver   = "virtio-serial-pci",
            .property = "vectors",
            .value    = stringify(0),
        },{
            .driver   = "usb-mouse",
            .property = "serial",
            .value    = "1",
        },{
            .driver   = "usb-tablet",
            .property = "serial",
            .value    = "1",
        },{
            .driver   = "usb-kbd",
            .property = "serial",
            .value    = "1",
        },
        { "virtio-serial-pci", "max_ports", "1" },
        { "virtio-serial-pci", "vectors", "0" },
        { "usb-mouse", "serial", "1" },
        { "usb-tablet", "serial", "1" },
        { "usb-kbd", "serial", "1" },
    };

    pc_i440fx_0_13_machine_options(m);
+26 −25
Original line number Diff line number Diff line
@@ -100,9 +100,8 @@ static uint64_t memory_device_get_free_addr(MachineState *ms,
                                            uint64_t align, uint64_t size,
                                            Error **errp)
{
    uint64_t address_space_start, address_space_end;
    GSList *list = NULL, *item;
    uint64_t new_addr = 0;
    Range as, new = range_empty;

    if (!ms->device_memory) {
        error_setg(errp, "memory devices (e.g. for memory hotplug) are not "
@@ -115,13 +114,11 @@ static uint64_t memory_device_get_free_addr(MachineState *ms,
                         "enabled, please specify the maxmem option");
        return 0;
    }
    address_space_start = ms->device_memory->base;
    address_space_end = address_space_start +
                        memory_region_size(&ms->device_memory->mr);
    g_assert(address_space_end >= address_space_start);
    range_init_nofail(&as, ms->device_memory->base,
                      memory_region_size(&ms->device_memory->mr));

    /* address_space_start indicates the maximum alignment we expect */
    if (!QEMU_IS_ALIGNED(address_space_start, align)) {
    /* start of address space indicates the maximum alignment we expect */
    if (!QEMU_IS_ALIGNED(range_lob(&as), align)) {
        error_setg(errp, "the alignment (0x%" PRIx64 ") is not supported",
                   align);
        return 0;
@@ -145,20 +142,18 @@ static uint64_t memory_device_get_free_addr(MachineState *ms,
    }

    if (hint) {
        new_addr = *hint;
        if (new_addr < address_space_start) {
        if (range_init(&new, *hint, size) || !range_contains_range(&as, &new)) {
            error_setg(errp, "can't add memory device [0x%" PRIx64 ":0x%" PRIx64
                       "] before 0x%" PRIx64, new_addr, size,
                       address_space_start);
            return 0;
        } else if ((new_addr + size) > address_space_end) {
            error_setg(errp, "can't add memory device [0x%" PRIx64 ":0x%" PRIx64
                       "] beyond 0x%" PRIx64, new_addr, size,
                       address_space_end);
                       "], usable range for memory devices [0x%" PRIx64 ":0x%"
                       PRIx64 "]", *hint, size, range_lob(&as),
                       range_size(&as));
            return 0;
        }
    } else {
        new_addr = address_space_start;
        if (range_init(&new, range_lob(&as), size)) {
            error_setg(errp, "can't add memory device, device too big");
            return 0;
        }
    }

    /* find address range that will fit new memory device */
@@ -166,30 +161,36 @@ static uint64_t memory_device_get_free_addr(MachineState *ms,
    for (item = list; item; item = g_slist_next(item)) {
        const MemoryDeviceState *md = item->data;
        const MemoryDeviceClass *mdc = MEMORY_DEVICE_GET_CLASS(OBJECT(md));
        uint64_t md_size, md_addr;
        uint64_t next_addr;
        Range tmp;

        md_addr = mdc->get_addr(md);
        md_size = memory_device_get_region_size(md, &error_abort);
        range_init_nofail(&tmp, mdc->get_addr(md),
                          memory_device_get_region_size(md, &error_abort));

        if (ranges_overlap(md_addr, md_size, new_addr, size)) {
        if (range_overlaps_range(&tmp, &new)) {
            if (hint) {
                const DeviceState *d = DEVICE(md);
                error_setg(errp, "address range conflicts with memory device"
                           " id='%s'", d->id ? d->id : "(unnamed)");
                goto out;
            }
            new_addr = QEMU_ALIGN_UP(md_addr + md_size, align);

            next_addr = QEMU_ALIGN_UP(range_upb(&tmp) + 1, align);
            if (!next_addr || range_init(&new, next_addr, range_size(&new))) {
                range_make_empty(&new);
                break;
            }
        }
    }

    if (new_addr + size > address_space_end) {
    if (!range_contains_range(&as, &new)) {
        error_setg(errp, "could not find position in guest address space for "
                   "memory device - memory fragmented due to alignments");
        goto out;
    }
out:
    g_slist_free(list);
    return new_addr;
    return range_lob(&new);
}

MemoryDeviceInfoList *qmp_memory_device_list(void)
Loading