mirror of https://github.com/xemu-project/xemu.git
virtio, pci, pc: bugfixes, checkpatch, maintainers
Bugfixes all over the place. Add a new balloon maintainer. A checkpatch enhancement to enforce ACPI change rules. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> -----BEGIN PGP SIGNATURE----- iQFDBAABCAAtFiEEXQn9CHHI+FuUyooNKB8NuNKNVGkFAl6DWawPHG1zdEByZWRo YXQuY29tAAoJECgfDbjSjVRpGmUIALX0k29B81f3zpjwYYVCNYx97MNSvQc0X3xJ 0OjdMvw5oVqfvc7qjRLxqCJUzrXBbPGRGGZzKWj9XjOUzz9IfntxtlGERVqb1xSp lG4H254IKUP9q6p0P537ryzJunUbaeLLOaxtQVbEIR8alIX8w0tvSRGt6vKwfGTD 53projQswyKApaoDM338lpJbdLsGAKf7qiamO+zAw7ldBvTtZ0h92snv49dMS941 7+S9brLkrMYncyiQ2yKaekdwCHOam62NUgBzr7vrXFY4Ovq8WAp6EJuEkzQX0IBG Y0LJFpE+k6IMS5uRZYV5LwdARv9ZFFEFwNWufpVi1AY2NikUCk8= =AqIW -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/mst/tags/for_upstream' into staging virtio, pci, pc: bugfixes, checkpatch, maintainers Bugfixes all over the place. Add a new balloon maintainer. A checkpatch enhancement to enforce ACPI change rules. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> # gpg: Signature made Tue 31 Mar 2020 15:54:36 BST # gpg: using RSA key 5D09FD0871C8F85B94CA8A0D281F0DB8D28D5469 # gpg: issuer "mst@redhat.com" # gpg: Good signature from "Michael S. Tsirkin <mst@kernel.org>" [full] # gpg: aka "Michael S. Tsirkin <mst@redhat.com>" [full] # Primary key fingerprint: 0270 606B 6F3C DF3D 0B17 0970 C350 3912 AFBE 8E67 # Subkey fingerprint: 5D09 FD08 71C8 F85B 94CA 8A0D 281F 0DB8 D28D 5469 * remotes/mst/tags/for_upstream: vhost-vsock: fix double close() in the realize() error path acpi: add acpi=OnOffAuto machine property to x86 and arm virt fix vhost_user_blk_watch crash hw/i386/amd_iommu.c: Fix corruption of log events passed to guest virtio-iommu: avoid memleak in the unrealize virtio-blk: delete vqs on the error path in realize() acpi: pcihp: fix left shift undefined behavior in acpi_pcihp_eject_slot() virtio-serial-bus: Plug memory leak on realize() error paths MAINTAINERS: Add myself as virtio-balloon co-maintainer checkpatch: enforce process for expected files Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
82915faec3
|
@ -1634,6 +1634,15 @@ F: hw/virtio/trace-events
|
||||||
F: net/vhost-user.c
|
F: net/vhost-user.c
|
||||||
F: include/hw/virtio/
|
F: include/hw/virtio/
|
||||||
|
|
||||||
|
virtio-balloon
|
||||||
|
M: Michael S. Tsirkin <mst@redhat.com>
|
||||||
|
M: David Hildenbrand <david@redhat.com>
|
||||||
|
S: Maintained
|
||||||
|
F: hw/virtio/virtio-balloon*.c
|
||||||
|
F: include/hw/virtio/virtio-balloon.h
|
||||||
|
F: balloon.c
|
||||||
|
F: include/sysemu/balloon.h
|
||||||
|
|
||||||
virtio-9p
|
virtio-9p
|
||||||
M: Greg Kurz <groug@kaod.org>
|
M: Greg Kurz <groug@kaod.org>
|
||||||
R: Christian Schoenebeck <qemu_oss@crudebyte.com>
|
R: Christian Schoenebeck <qemu_oss@crudebyte.com>
|
||||||
|
|
|
@ -154,7 +154,7 @@ static void acpi_pcihp_eject_slot(AcpiPciHpState *s, unsigned bsel, unsigned slo
|
||||||
|
|
||||||
trace_acpi_pci_eject_slot(bsel, slot);
|
trace_acpi_pci_eject_slot(bsel, slot);
|
||||||
|
|
||||||
if (!bus) {
|
if (!bus || slot > 31) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -910,7 +910,7 @@ void virt_acpi_setup(VirtMachineState *vms)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!acpi_enabled) {
|
if (!virt_is_acpi_enabled(vms)) {
|
||||||
trace_virt_acpi_setup();
|
trace_virt_acpi_setup();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -67,6 +67,7 @@
|
||||||
#include "kvm_arm.h"
|
#include "kvm_arm.h"
|
||||||
#include "hw/firmware/smbios.h"
|
#include "hw/firmware/smbios.h"
|
||||||
#include "qapi/visitor.h"
|
#include "qapi/visitor.h"
|
||||||
|
#include "qapi/qapi-visit-common.h"
|
||||||
#include "standard-headers/linux/input.h"
|
#include "standard-headers/linux/input.h"
|
||||||
#include "hw/arm/smmuv3.h"
|
#include "hw/arm/smmuv3.h"
|
||||||
#include "hw/acpi/acpi.h"
|
#include "hw/acpi/acpi.h"
|
||||||
|
@ -1844,7 +1845,7 @@ static void machvirt_init(MachineState *machine)
|
||||||
|
|
||||||
create_pcie(vms);
|
create_pcie(vms);
|
||||||
|
|
||||||
if (has_ged && aarch64 && firmware_loaded && acpi_enabled) {
|
if (has_ged && aarch64 && firmware_loaded && virt_is_acpi_enabled(vms)) {
|
||||||
vms->acpi_dev = create_acpi_ged(vms);
|
vms->acpi_dev = create_acpi_ged(vms);
|
||||||
} else {
|
} else {
|
||||||
create_gpio(vms);
|
create_gpio(vms);
|
||||||
|
@ -1934,6 +1935,31 @@ static void virt_set_its(Object *obj, bool value, Error **errp)
|
||||||
vms->its = value;
|
vms->its = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool virt_is_acpi_enabled(VirtMachineState *vms)
|
||||||
|
{
|
||||||
|
if (vms->acpi == ON_OFF_AUTO_OFF) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void virt_get_acpi(Object *obj, Visitor *v, const char *name,
|
||||||
|
void *opaque, Error **errp)
|
||||||
|
{
|
||||||
|
VirtMachineState *vms = VIRT_MACHINE(obj);
|
||||||
|
OnOffAuto acpi = vms->acpi;
|
||||||
|
|
||||||
|
visit_type_OnOffAuto(v, name, &acpi, errp);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void virt_set_acpi(Object *obj, Visitor *v, const char *name,
|
||||||
|
void *opaque, Error **errp)
|
||||||
|
{
|
||||||
|
VirtMachineState *vms = VIRT_MACHINE(obj);
|
||||||
|
|
||||||
|
visit_type_OnOffAuto(v, name, &vms->acpi, errp);
|
||||||
|
}
|
||||||
|
|
||||||
static char *virt_get_gic_version(Object *obj, Error **errp)
|
static char *virt_get_gic_version(Object *obj, Error **errp)
|
||||||
{
|
{
|
||||||
VirtMachineState *vms = VIRT_MACHINE(obj);
|
VirtMachineState *vms = VIRT_MACHINE(obj);
|
||||||
|
@ -2113,7 +2139,7 @@ static HotplugHandler *virt_machine_get_hotplug_handler(MachineState *machine,
|
||||||
if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_IOMMU_PCI)) {
|
if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_IOMMU_PCI)) {
|
||||||
VirtMachineState *vms = VIRT_MACHINE(machine);
|
VirtMachineState *vms = VIRT_MACHINE(machine);
|
||||||
|
|
||||||
if (!vms->bootinfo.firmware_loaded || !acpi_enabled) {
|
if (!vms->bootinfo.firmware_loaded || !virt_is_acpi_enabled(vms)) {
|
||||||
return HOTPLUG_HANDLER(machine);
|
return HOTPLUG_HANDLER(machine);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2184,6 +2210,12 @@ static void virt_machine_class_init(ObjectClass *oc, void *data)
|
||||||
mc->numa_mem_supported = true;
|
mc->numa_mem_supported = true;
|
||||||
mc->auto_enable_numa_with_memhp = true;
|
mc->auto_enable_numa_with_memhp = true;
|
||||||
mc->default_ram_id = "mach-virt.ram";
|
mc->default_ram_id = "mach-virt.ram";
|
||||||
|
|
||||||
|
object_class_property_add(oc, "acpi", "OnOffAuto",
|
||||||
|
virt_get_acpi, virt_set_acpi,
|
||||||
|
NULL, NULL, &error_abort);
|
||||||
|
object_class_property_set_description(oc, "acpi",
|
||||||
|
"Enable ACPI", &error_abort);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void virt_instance_init(Object *obj)
|
static void virt_instance_init(Object *obj)
|
||||||
|
|
|
@ -349,18 +349,6 @@ static void vhost_user_blk_disconnect(DeviceState *dev)
|
||||||
vhost_dev_cleanup(&s->dev);
|
vhost_dev_cleanup(&s->dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean vhost_user_blk_watch(GIOChannel *chan, GIOCondition cond,
|
|
||||||
void *opaque)
|
|
||||||
{
|
|
||||||
DeviceState *dev = opaque;
|
|
||||||
VirtIODevice *vdev = VIRTIO_DEVICE(dev);
|
|
||||||
VHostUserBlk *s = VHOST_USER_BLK(vdev);
|
|
||||||
|
|
||||||
qemu_chr_fe_disconnect(&s->chardev);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void vhost_user_blk_event(void *opaque, QEMUChrEvent event)
|
static void vhost_user_blk_event(void *opaque, QEMUChrEvent event)
|
||||||
{
|
{
|
||||||
DeviceState *dev = opaque;
|
DeviceState *dev = opaque;
|
||||||
|
@ -373,15 +361,9 @@ static void vhost_user_blk_event(void *opaque, QEMUChrEvent event)
|
||||||
qemu_chr_fe_disconnect(&s->chardev);
|
qemu_chr_fe_disconnect(&s->chardev);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
s->watch = qemu_chr_fe_add_watch(&s->chardev, G_IO_HUP,
|
|
||||||
vhost_user_blk_watch, dev);
|
|
||||||
break;
|
break;
|
||||||
case CHR_EVENT_CLOSED:
|
case CHR_EVENT_CLOSED:
|
||||||
vhost_user_blk_disconnect(dev);
|
vhost_user_blk_disconnect(dev);
|
||||||
if (s->watch) {
|
|
||||||
g_source_remove(s->watch);
|
|
||||||
s->watch = 0;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case CHR_EVENT_BREAK:
|
case CHR_EVENT_BREAK:
|
||||||
case CHR_EVENT_MUX_IN:
|
case CHR_EVENT_MUX_IN:
|
||||||
|
@ -428,7 +410,6 @@ static void vhost_user_blk_device_realize(DeviceState *dev, Error **errp)
|
||||||
|
|
||||||
s->inflight = g_new0(struct vhost_inflight, 1);
|
s->inflight = g_new0(struct vhost_inflight, 1);
|
||||||
s->vhost_vqs = g_new0(struct vhost_virtqueue, s->num_queues);
|
s->vhost_vqs = g_new0(struct vhost_virtqueue, s->num_queues);
|
||||||
s->watch = 0;
|
|
||||||
s->connected = false;
|
s->connected = false;
|
||||||
|
|
||||||
qemu_chr_fe_set_handlers(&s->chardev, NULL, NULL, vhost_user_blk_event,
|
qemu_chr_fe_set_handlers(&s->chardev, NULL, NULL, vhost_user_blk_event,
|
||||||
|
|
|
@ -1204,6 +1204,9 @@ static void virtio_blk_device_realize(DeviceState *dev, Error **errp)
|
||||||
virtio_blk_data_plane_create(vdev, conf, &s->dataplane, &err);
|
virtio_blk_data_plane_create(vdev, conf, &s->dataplane, &err);
|
||||||
if (err != NULL) {
|
if (err != NULL) {
|
||||||
error_propagate(errp, err);
|
error_propagate(errp, err);
|
||||||
|
for (i = 0; i < conf->num_queues; i++) {
|
||||||
|
virtio_del_queue(vdev, i);
|
||||||
|
}
|
||||||
virtio_cleanup(vdev);
|
virtio_cleanup(vdev);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -943,7 +943,6 @@ static void virtser_port_device_realize(DeviceState *dev, Error **errp)
|
||||||
Error *err = NULL;
|
Error *err = NULL;
|
||||||
|
|
||||||
port->vser = bus->vser;
|
port->vser = bus->vser;
|
||||||
port->bh = qemu_bh_new(flush_queued_data_bh, port);
|
|
||||||
|
|
||||||
assert(vsc->have_data);
|
assert(vsc->have_data);
|
||||||
|
|
||||||
|
@ -992,6 +991,7 @@ static void virtser_port_device_realize(DeviceState *dev, Error **errp)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
port->bh = qemu_bh_new(flush_queued_data_bh, port);
|
||||||
port->elem = NULL;
|
port->elem = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3024,7 +3024,7 @@ void acpi_setup(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!acpi_enabled) {
|
if (!x86_machine_is_acpi_enabled(X86_MACHINE(pcms))) {
|
||||||
ACPI_BUILD_DPRINTF("ACPI disabled. Bailing out.\n");
|
ACPI_BUILD_DPRINTF("ACPI disabled. Bailing out.\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -181,7 +181,7 @@ static void amdvi_log_event(AMDVIState *s, uint64_t *evt)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dma_memory_write(&address_space_memory, s->evtlog + s->evtlog_tail,
|
if (dma_memory_write(&address_space_memory, s->evtlog + s->evtlog_tail,
|
||||||
&evt, AMDVI_EVENT_LEN)) {
|
evt, AMDVI_EVENT_LEN)) {
|
||||||
trace_amdvi_evntlog_fail(s->evtlog, s->evtlog_tail);
|
trace_amdvi_evntlog_fail(s->evtlog, s->evtlog_tail);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1297,7 +1297,7 @@ static void pc_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
|
||||||
* but pcms->acpi_dev is still created. Check !acpi_enabled in
|
* but pcms->acpi_dev is still created. Check !acpi_enabled in
|
||||||
* addition to cover this case.
|
* addition to cover this case.
|
||||||
*/
|
*/
|
||||||
if (!pcms->acpi_dev || !acpi_enabled) {
|
if (!pcms->acpi_dev || !x86_machine_is_acpi_enabled(X86_MACHINE(pcms))) {
|
||||||
error_setg(errp,
|
error_setg(errp,
|
||||||
"memory hotplug is not enabled: missing acpi device or acpi disabled");
|
"memory hotplug is not enabled: missing acpi device or acpi disabled");
|
||||||
return;
|
return;
|
||||||
|
@ -1351,7 +1351,7 @@ static void pc_memory_unplug_request(HotplugHandler *hotplug_dev,
|
||||||
* but pcms->acpi_dev is still created. Check !acpi_enabled in
|
* but pcms->acpi_dev is still created. Check !acpi_enabled in
|
||||||
* addition to cover this case.
|
* addition to cover this case.
|
||||||
*/
|
*/
|
||||||
if (!pcms->acpi_dev || !acpi_enabled) {
|
if (!pcms->acpi_dev || !x86_machine_is_acpi_enabled(X86_MACHINE(pcms))) {
|
||||||
error_setg(&local_err,
|
error_setg(&local_err,
|
||||||
"memory hotplug is not enabled: missing acpi device or acpi disabled");
|
"memory hotplug is not enabled: missing acpi device or acpi disabled");
|
||||||
goto out;
|
goto out;
|
||||||
|
|
|
@ -275,7 +275,7 @@ static void pc_init1(MachineState *machine,
|
||||||
pci_create_simple(pci_bus, piix3_devfn + 2, "piix3-usb-uhci");
|
pci_create_simple(pci_bus, piix3_devfn + 2, "piix3-usb-uhci");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pcmc->pci_enabled && acpi_enabled) {
|
if (pcmc->pci_enabled && x86_machine_is_acpi_enabled(X86_MACHINE(pcms))) {
|
||||||
DeviceState *piix4_pm;
|
DeviceState *piix4_pm;
|
||||||
|
|
||||||
smi_irq = qemu_allocate_irq(pc_acpi_smi_interrupt, first_cpu, 0);
|
smi_irq = qemu_allocate_irq(pc_acpi_smi_interrupt, first_cpu, 0);
|
||||||
|
|
|
@ -904,11 +904,37 @@ static void x86_machine_set_smm(Object *obj, Visitor *v, const char *name,
|
||||||
visit_type_OnOffAuto(v, name, &x86ms->smm, errp);
|
visit_type_OnOffAuto(v, name, &x86ms->smm, errp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool x86_machine_is_acpi_enabled(X86MachineState *x86ms)
|
||||||
|
{
|
||||||
|
if (x86ms->acpi == ON_OFF_AUTO_OFF) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void x86_machine_get_acpi(Object *obj, Visitor *v, const char *name,
|
||||||
|
void *opaque, Error **errp)
|
||||||
|
{
|
||||||
|
X86MachineState *x86ms = X86_MACHINE(obj);
|
||||||
|
OnOffAuto acpi = x86ms->acpi;
|
||||||
|
|
||||||
|
visit_type_OnOffAuto(v, name, &acpi, errp);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void x86_machine_set_acpi(Object *obj, Visitor *v, const char *name,
|
||||||
|
void *opaque, Error **errp)
|
||||||
|
{
|
||||||
|
X86MachineState *x86ms = X86_MACHINE(obj);
|
||||||
|
|
||||||
|
visit_type_OnOffAuto(v, name, &x86ms->acpi, errp);
|
||||||
|
}
|
||||||
|
|
||||||
static void x86_machine_initfn(Object *obj)
|
static void x86_machine_initfn(Object *obj)
|
||||||
{
|
{
|
||||||
X86MachineState *x86ms = X86_MACHINE(obj);
|
X86MachineState *x86ms = X86_MACHINE(obj);
|
||||||
|
|
||||||
x86ms->smm = ON_OFF_AUTO_AUTO;
|
x86ms->smm = ON_OFF_AUTO_AUTO;
|
||||||
|
x86ms->acpi = ON_OFF_AUTO_AUTO;
|
||||||
x86ms->max_ram_below_4g = 0; /* use default */
|
x86ms->max_ram_below_4g = 0; /* use default */
|
||||||
x86ms->smp_dies = 1;
|
x86ms->smp_dies = 1;
|
||||||
}
|
}
|
||||||
|
@ -937,6 +963,12 @@ static void x86_machine_class_init(ObjectClass *oc, void *data)
|
||||||
NULL, NULL, &error_abort);
|
NULL, NULL, &error_abort);
|
||||||
object_class_property_set_description(oc, X86_MACHINE_SMM,
|
object_class_property_set_description(oc, X86_MACHINE_SMM,
|
||||||
"Enable SMM", &error_abort);
|
"Enable SMM", &error_abort);
|
||||||
|
|
||||||
|
object_class_property_add(oc, X86_MACHINE_ACPI, "OnOffAuto",
|
||||||
|
x86_machine_get_acpi, x86_machine_set_acpi,
|
||||||
|
NULL, NULL, &error_abort);
|
||||||
|
object_class_property_set_description(oc, X86_MACHINE_ACPI,
|
||||||
|
"Enable ACPI", &error_abort);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const TypeInfo x86_machine_info = {
|
static const TypeInfo x86_machine_info = {
|
||||||
|
|
|
@ -364,12 +364,16 @@ static void vhost_vsock_device_realize(DeviceState *dev, Error **errp)
|
||||||
|
|
||||||
err_vhost_dev:
|
err_vhost_dev:
|
||||||
vhost_dev_cleanup(&vsock->vhost_dev);
|
vhost_dev_cleanup(&vsock->vhost_dev);
|
||||||
|
/* vhost_dev_cleanup() closes the vhostfd passed to vhost_dev_init() */
|
||||||
|
vhostfd = -1;
|
||||||
err_virtio:
|
err_virtio:
|
||||||
virtio_delete_queue(vsock->recv_vq);
|
virtio_delete_queue(vsock->recv_vq);
|
||||||
virtio_delete_queue(vsock->trans_vq);
|
virtio_delete_queue(vsock->trans_vq);
|
||||||
virtio_delete_queue(vsock->event_vq);
|
virtio_delete_queue(vsock->event_vq);
|
||||||
virtio_cleanup(vdev);
|
virtio_cleanup(vdev);
|
||||||
close(vhostfd);
|
if (vhostfd >= 0) {
|
||||||
|
close(vhostfd);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -693,9 +693,12 @@ static void virtio_iommu_device_unrealize(DeviceState *dev, Error **errp)
|
||||||
VirtIODevice *vdev = VIRTIO_DEVICE(dev);
|
VirtIODevice *vdev = VIRTIO_DEVICE(dev);
|
||||||
VirtIOIOMMU *s = VIRTIO_IOMMU(dev);
|
VirtIOIOMMU *s = VIRTIO_IOMMU(dev);
|
||||||
|
|
||||||
|
g_hash_table_destroy(s->as_by_busptr);
|
||||||
g_tree_destroy(s->domains);
|
g_tree_destroy(s->domains);
|
||||||
g_tree_destroy(s->endpoints);
|
g_tree_destroy(s->endpoints);
|
||||||
|
|
||||||
|
virtio_delete_queue(s->req_vq);
|
||||||
|
virtio_delete_queue(s->event_vq);
|
||||||
virtio_cleanup(vdev);
|
virtio_cleanup(vdev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -181,7 +181,6 @@ void acpi_send_gpe_event(ACPIREGS *ar, qemu_irq irq,
|
||||||
void acpi_update_sci(ACPIREGS *acpi_regs, qemu_irq irq);
|
void acpi_update_sci(ACPIREGS *acpi_regs, qemu_irq irq);
|
||||||
|
|
||||||
/* acpi.c */
|
/* acpi.c */
|
||||||
extern int acpi_enabled;
|
|
||||||
extern char unsigned *acpi_tables;
|
extern char unsigned *acpi_tables;
|
||||||
extern size_t acpi_tables_len;
|
extern size_t acpi_tables_len;
|
||||||
|
|
||||||
|
|
|
@ -131,6 +131,7 @@ typedef struct {
|
||||||
bool highmem_ecam;
|
bool highmem_ecam;
|
||||||
bool its;
|
bool its;
|
||||||
bool virt;
|
bool virt;
|
||||||
|
OnOffAuto acpi;
|
||||||
VirtGICType gic_version;
|
VirtGICType gic_version;
|
||||||
VirtIOMMUType iommu;
|
VirtIOMMUType iommu;
|
||||||
uint16_t virtio_iommu_bdf;
|
uint16_t virtio_iommu_bdf;
|
||||||
|
@ -163,6 +164,7 @@ typedef struct {
|
||||||
OBJECT_CLASS_CHECK(VirtMachineClass, klass, TYPE_VIRT_MACHINE)
|
OBJECT_CLASS_CHECK(VirtMachineClass, klass, TYPE_VIRT_MACHINE)
|
||||||
|
|
||||||
void virt_acpi_setup(VirtMachineState *vms);
|
void virt_acpi_setup(VirtMachineState *vms);
|
||||||
|
bool virt_is_acpi_enabled(VirtMachineState *vms);
|
||||||
|
|
||||||
/* Return the number of used redistributor regions */
|
/* Return the number of used redistributor regions */
|
||||||
static inline int virt_gicv3_redist_region_count(VirtMachineState *vms)
|
static inline int virt_gicv3_redist_region_count(VirtMachineState *vms)
|
||||||
|
|
|
@ -64,6 +64,7 @@ typedef struct {
|
||||||
unsigned smp_dies;
|
unsigned smp_dies;
|
||||||
|
|
||||||
OnOffAuto smm;
|
OnOffAuto smm;
|
||||||
|
OnOffAuto acpi;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Address space used by IOAPIC device. All IOAPIC interrupts
|
* Address space used by IOAPIC device. All IOAPIC interrupts
|
||||||
|
@ -74,6 +75,7 @@ typedef struct {
|
||||||
|
|
||||||
#define X86_MACHINE_MAX_RAM_BELOW_4G "max-ram-below-4g"
|
#define X86_MACHINE_MAX_RAM_BELOW_4G "max-ram-below-4g"
|
||||||
#define X86_MACHINE_SMM "smm"
|
#define X86_MACHINE_SMM "smm"
|
||||||
|
#define X86_MACHINE_ACPI "acpi"
|
||||||
|
|
||||||
#define TYPE_X86_MACHINE MACHINE_TYPE_NAME("x86")
|
#define TYPE_X86_MACHINE MACHINE_TYPE_NAME("x86")
|
||||||
#define X86_MACHINE(obj) \
|
#define X86_MACHINE(obj) \
|
||||||
|
@ -104,6 +106,7 @@ void x86_load_linux(X86MachineState *x86ms,
|
||||||
bool linuxboot_dma_enabled);
|
bool linuxboot_dma_enabled);
|
||||||
|
|
||||||
bool x86_machine_is_smm_enabled(X86MachineState *x86ms);
|
bool x86_machine_is_smm_enabled(X86MachineState *x86ms);
|
||||||
|
bool x86_machine_is_acpi_enabled(X86MachineState *x86ms);
|
||||||
|
|
||||||
/* Global System Interrupts */
|
/* Global System Interrupts */
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,6 @@ typedef struct VHostUserBlk {
|
||||||
VhostUserState vhost_user;
|
VhostUserState vhost_user;
|
||||||
struct vhost_virtqueue *vhost_vqs;
|
struct vhost_virtqueue *vhost_vqs;
|
||||||
VirtQueue **virtqs;
|
VirtQueue **virtqs;
|
||||||
guint watch;
|
|
||||||
bool connected;
|
bool connected;
|
||||||
} VHostUserBlk;
|
} VHostUserBlk;
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,8 @@ my $summary_file = 0;
|
||||||
my $root;
|
my $root;
|
||||||
my %debug;
|
my %debug;
|
||||||
my $help = 0;
|
my $help = 0;
|
||||||
|
my $acpi_testexpected;
|
||||||
|
my $acpi_nontestexpected;
|
||||||
|
|
||||||
sub help {
|
sub help {
|
||||||
my ($exitcode) = @_;
|
my ($exitcode) = @_;
|
||||||
|
@ -1256,6 +1258,27 @@ sub WARN {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# According to tests/qtest/bios-tables-test.c: do not
|
||||||
|
# change expected file in the same commit with adding test
|
||||||
|
sub checkfilename {
|
||||||
|
my ($name) = @_;
|
||||||
|
if ($name =~ m#^tests/data/acpi/# and
|
||||||
|
# make exception for a shell script that rebuilds the files
|
||||||
|
not $name =~ m#^\.sh$# or
|
||||||
|
$name =~ m#^tests/qtest/bios-tables-test-allowed-diff.h$#) {
|
||||||
|
$acpi_testexpected = $name;
|
||||||
|
} else {
|
||||||
|
$acpi_nontestexpected = $name;
|
||||||
|
}
|
||||||
|
if (defined $acpi_testexpected and defined $acpi_nontestexpected) {
|
||||||
|
ERROR("Do not add expected files together with tests, " .
|
||||||
|
"follow instructions in " .
|
||||||
|
"tests/qtest/bios-tables-test.c: both " .
|
||||||
|
$acpi_testexpected . " and " .
|
||||||
|
$acpi_nontestexpected . " found\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
sub process {
|
sub process {
|
||||||
my $filename = shift;
|
my $filename = shift;
|
||||||
|
|
||||||
|
@ -1431,9 +1454,11 @@ sub process {
|
||||||
if ($line =~ /^diff --git.*?(\S+)$/) {
|
if ($line =~ /^diff --git.*?(\S+)$/) {
|
||||||
$realfile = $1;
|
$realfile = $1;
|
||||||
$realfile =~ s@^([^/]*)/@@ if (!$file);
|
$realfile =~ s@^([^/]*)/@@ if (!$file);
|
||||||
|
checkfilename($realfile);
|
||||||
} elsif ($line =~ /^\+\+\+\s+(\S+)/) {
|
} elsif ($line =~ /^\+\+\+\s+(\S+)/) {
|
||||||
$realfile = $1;
|
$realfile = $1;
|
||||||
$realfile =~ s@^([^/]*)/@@ if (!$file);
|
$realfile =~ s@^([^/]*)/@@ if (!$file);
|
||||||
|
checkfilename($realfile);
|
||||||
|
|
||||||
$p1_prefix = $1;
|
$p1_prefix = $1;
|
||||||
if (!$file && $tree && $p1_prefix ne '' &&
|
if (!$file && $tree && $p1_prefix ne '' &&
|
||||||
|
|
|
@ -144,7 +144,6 @@ static Chardev **serial_hds;
|
||||||
Chardev *parallel_hds[MAX_PARALLEL_PORTS];
|
Chardev *parallel_hds[MAX_PARALLEL_PORTS];
|
||||||
int win2k_install_hack = 0;
|
int win2k_install_hack = 0;
|
||||||
int singlestep = 0;
|
int singlestep = 0;
|
||||||
int acpi_enabled = 1;
|
|
||||||
int no_hpet = 0;
|
int no_hpet = 0;
|
||||||
int fd_bootchk = 1;
|
int fd_bootchk = 1;
|
||||||
static int no_reboot;
|
static int no_reboot;
|
||||||
|
@ -3516,7 +3515,8 @@ void qemu_init(int argc, char **argv, char **envp)
|
||||||
vnc_parse(optarg, &error_fatal);
|
vnc_parse(optarg, &error_fatal);
|
||||||
break;
|
break;
|
||||||
case QEMU_OPTION_no_acpi:
|
case QEMU_OPTION_no_acpi:
|
||||||
acpi_enabled = 0;
|
olist = qemu_find_opts("machine");
|
||||||
|
qemu_opts_parse_noisily(olist, "acpi=off", false);
|
||||||
break;
|
break;
|
||||||
case QEMU_OPTION_no_hpet:
|
case QEMU_OPTION_no_hpet:
|
||||||
no_hpet = 1;
|
no_hpet = 1;
|
||||||
|
|
Loading…
Reference in New Issue