mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-23 11:39:53 +00:00
hw/acpi/vmgenid: prevent device realization on pre-2.5 machine types
The WRITE_POINTER linker/loader command that underlies VMGENID depends on commitbaf2d5bfba
("fw-cfg: support writeable blobs", 2017-01-12), which in turn depends on fw_cfg DMA. DMA for fw_cfg is enabled in 2.5+ machine types only (see commite6915b5f3a
, "fw_cfg: unbreak migration compatibility for 2.4 and earlier machines", 2016-02-18). Cc: "Michael S. Tsirkin" <mst@redhat.com> Cc: Ben Warren <ben@skyportsystems.com> Cc: Igor Mammedov <imammedo@redhat.com> Cc: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Reviewed-by: Ben Warren <ben@skyportsystems.com <mailto:ben@skyportsystems.com>> Reviewed-by: Igor Mammedov <imammedo@redhat.com>
This commit is contained in:
parent
e49a661840
commit
f2a1ae45d8
@ -205,9 +205,22 @@ static void vmgenid_handle_reset(void *opaque)
|
||||
memset(vms->vmgenid_addr_le, 0, ARRAY_SIZE(vms->vmgenid_addr_le));
|
||||
}
|
||||
|
||||
static Property vmgenid_properties[] = {
|
||||
DEFINE_PROP_BOOL("x-write-pointer-available", VmGenIdState,
|
||||
write_pointer_available, true),
|
||||
DEFINE_PROP_END_OF_LIST(),
|
||||
};
|
||||
|
||||
static void vmgenid_realize(DeviceState *dev, Error **errp)
|
||||
{
|
||||
VmGenIdState *vms = VMGENID(dev);
|
||||
|
||||
if (!vms->write_pointer_available) {
|
||||
error_setg(errp, "%s requires DMA write support in fw_cfg, "
|
||||
"which this machine type does not provide", VMGENID_DEVICE);
|
||||
return;
|
||||
}
|
||||
|
||||
qemu_register_reset(vmgenid_handle_reset, vms);
|
||||
}
|
||||
|
||||
@ -218,6 +231,7 @@ static void vmgenid_device_class_init(ObjectClass *klass, void *data)
|
||||
dc->vmsd = &vmstate_vmgenid;
|
||||
dc->realize = vmgenid_realize;
|
||||
dc->hotpluggable = false;
|
||||
dc->props = vmgenid_properties;
|
||||
|
||||
object_class_property_add_str(klass, VMGENID_GUID, NULL,
|
||||
vmgenid_set_guid, NULL);
|
||||
|
@ -21,6 +21,7 @@ typedef struct VmGenIdState {
|
||||
DeviceClass parent_obj;
|
||||
QemuUUID guid; /* The 128-bit GUID seen by the guest */
|
||||
uint8_t vmgenid_addr_le[8]; /* Address of the GUID (little-endian) */
|
||||
bool write_pointer_available;
|
||||
} VmGenIdState;
|
||||
|
||||
static inline Object *find_vmgenid_dev(void)
|
||||
|
@ -131,6 +131,10 @@
|
||||
.driver = "fw_cfg_io",\
|
||||
.property = "dma_enabled",\
|
||||
.value = "off",\
|
||||
},{\
|
||||
.driver = "vmgenid",\
|
||||
.property = "x-write-pointer-available",\
|
||||
.value = "off",\
|
||||
},
|
||||
|
||||
#define HW_COMPAT_2_3 \
|
||||
|
Loading…
Reference in New Issue
Block a user