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: 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
|
||||
M: Greg Kurz <groug@kaod.org>
|
||||
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);
|
||||
|
||||
if (!bus) {
|
||||
if (!bus || slot > 31) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -910,7 +910,7 @@ void virt_acpi_setup(VirtMachineState *vms)
|
||||
return;
|
||||
}
|
||||
|
||||
if (!acpi_enabled) {
|
||||
if (!virt_is_acpi_enabled(vms)) {
|
||||
trace_virt_acpi_setup();
|
||||
return;
|
||||
}
|
||||
|
@ -67,6 +67,7 @@
|
||||
#include "kvm_arm.h"
|
||||
#include "hw/firmware/smbios.h"
|
||||
#include "qapi/visitor.h"
|
||||
#include "qapi/qapi-visit-common.h"
|
||||
#include "standard-headers/linux/input.h"
|
||||
#include "hw/arm/smmuv3.h"
|
||||
#include "hw/acpi/acpi.h"
|
||||
@ -1844,7 +1845,7 @@ static void machvirt_init(MachineState *machine)
|
||||
|
||||
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);
|
||||
} else {
|
||||
create_gpio(vms);
|
||||
@ -1934,6 +1935,31 @@ static void virt_set_its(Object *obj, bool value, Error **errp)
|
||||
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)
|
||||
{
|
||||
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)) {
|
||||
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);
|
||||
}
|
||||
}
|
||||
@ -2184,6 +2210,12 @@ static void virt_machine_class_init(ObjectClass *oc, void *data)
|
||||
mc->numa_mem_supported = true;
|
||||
mc->auto_enable_numa_with_memhp = true;
|
||||
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)
|
||||
|
@ -349,18 +349,6 @@ static void vhost_user_blk_disconnect(DeviceState *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)
|
||||
{
|
||||
DeviceState *dev = opaque;
|
||||
@ -373,15 +361,9 @@ static void vhost_user_blk_event(void *opaque, QEMUChrEvent event)
|
||||
qemu_chr_fe_disconnect(&s->chardev);
|
||||
return;
|
||||
}
|
||||
s->watch = qemu_chr_fe_add_watch(&s->chardev, G_IO_HUP,
|
||||
vhost_user_blk_watch, dev);
|
||||
break;
|
||||
case CHR_EVENT_CLOSED:
|
||||
vhost_user_blk_disconnect(dev);
|
||||
if (s->watch) {
|
||||
g_source_remove(s->watch);
|
||||
s->watch = 0;
|
||||
}
|
||||
break;
|
||||
case CHR_EVENT_BREAK:
|
||||
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->vhost_vqs = g_new0(struct vhost_virtqueue, s->num_queues);
|
||||
s->watch = 0;
|
||||
s->connected = false;
|
||||
|
||||
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);
|
||||
if (err != NULL) {
|
||||
error_propagate(errp, err);
|
||||
for (i = 0; i < conf->num_queues; i++) {
|
||||
virtio_del_queue(vdev, i);
|
||||
}
|
||||
virtio_cleanup(vdev);
|
||||
return;
|
||||
}
|
||||
|
@ -943,7 +943,6 @@ static void virtser_port_device_realize(DeviceState *dev, Error **errp)
|
||||
Error *err = NULL;
|
||||
|
||||
port->vser = bus->vser;
|
||||
port->bh = qemu_bh_new(flush_queued_data_bh, port);
|
||||
|
||||
assert(vsc->have_data);
|
||||
|
||||
@ -992,6 +991,7 @@ static void virtser_port_device_realize(DeviceState *dev, Error **errp)
|
||||
return;
|
||||
}
|
||||
|
||||
port->bh = qemu_bh_new(flush_queued_data_bh, port);
|
||||
port->elem = NULL;
|
||||
}
|
||||
|
||||
|
@ -3024,7 +3024,7 @@ void acpi_setup(void)
|
||||
return;
|
||||
}
|
||||
|
||||
if (!acpi_enabled) {
|
||||
if (!x86_machine_is_acpi_enabled(X86_MACHINE(pcms))) {
|
||||
ACPI_BUILD_DPRINTF("ACPI disabled. Bailing out.\n");
|
||||
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,
|
||||
&evt, AMDVI_EVENT_LEN)) {
|
||||
evt, AMDVI_EVENT_LEN)) {
|
||||
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
|
||||
* 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,
|
||||
"memory hotplug is not enabled: missing acpi device or acpi disabled");
|
||||
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
|
||||
* 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,
|
||||
"memory hotplug is not enabled: missing acpi device or acpi disabled");
|
||||
goto out;
|
||||
|
@ -275,7 +275,7 @@ static void pc_init1(MachineState *machine,
|
||||
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;
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
X86MachineState *x86ms = X86_MACHINE(obj);
|
||||
|
||||
x86ms->smm = ON_OFF_AUTO_AUTO;
|
||||
x86ms->acpi = ON_OFF_AUTO_AUTO;
|
||||
x86ms->max_ram_below_4g = 0; /* use default */
|
||||
x86ms->smp_dies = 1;
|
||||
}
|
||||
@ -937,6 +963,12 @@ static void x86_machine_class_init(ObjectClass *oc, void *data)
|
||||
NULL, NULL, &error_abort);
|
||||
object_class_property_set_description(oc, X86_MACHINE_SMM,
|
||||
"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 = {
|
||||
|
@ -364,12 +364,16 @@ static void vhost_vsock_device_realize(DeviceState *dev, Error **errp)
|
||||
|
||||
err_vhost_dev:
|
||||
vhost_dev_cleanup(&vsock->vhost_dev);
|
||||
/* vhost_dev_cleanup() closes the vhostfd passed to vhost_dev_init() */
|
||||
vhostfd = -1;
|
||||
err_virtio:
|
||||
virtio_delete_queue(vsock->recv_vq);
|
||||
virtio_delete_queue(vsock->trans_vq);
|
||||
virtio_delete_queue(vsock->event_vq);
|
||||
virtio_cleanup(vdev);
|
||||
close(vhostfd);
|
||||
if (vhostfd >= 0) {
|
||||
close(vhostfd);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -693,9 +693,12 @@ static void virtio_iommu_device_unrealize(DeviceState *dev, Error **errp)
|
||||
VirtIODevice *vdev = VIRTIO_DEVICE(dev);
|
||||
VirtIOIOMMU *s = VIRTIO_IOMMU(dev);
|
||||
|
||||
g_hash_table_destroy(s->as_by_busptr);
|
||||
g_tree_destroy(s->domains);
|
||||
g_tree_destroy(s->endpoints);
|
||||
|
||||
virtio_delete_queue(s->req_vq);
|
||||
virtio_delete_queue(s->event_vq);
|
||||
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);
|
||||
|
||||
/* acpi.c */
|
||||
extern int acpi_enabled;
|
||||
extern char unsigned *acpi_tables;
|
||||
extern size_t acpi_tables_len;
|
||||
|
||||
|
@ -131,6 +131,7 @@ typedef struct {
|
||||
bool highmem_ecam;
|
||||
bool its;
|
||||
bool virt;
|
||||
OnOffAuto acpi;
|
||||
VirtGICType gic_version;
|
||||
VirtIOMMUType iommu;
|
||||
uint16_t virtio_iommu_bdf;
|
||||
@ -163,6 +164,7 @@ typedef struct {
|
||||
OBJECT_CLASS_CHECK(VirtMachineClass, klass, TYPE_VIRT_MACHINE)
|
||||
|
||||
void virt_acpi_setup(VirtMachineState *vms);
|
||||
bool virt_is_acpi_enabled(VirtMachineState *vms);
|
||||
|
||||
/* Return the number of used redistributor regions */
|
||||
static inline int virt_gicv3_redist_region_count(VirtMachineState *vms)
|
||||
|
@ -64,6 +64,7 @@ typedef struct {
|
||||
unsigned smp_dies;
|
||||
|
||||
OnOffAuto smm;
|
||||
OnOffAuto acpi;
|
||||
|
||||
/*
|
||||
* 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_SMM "smm"
|
||||
#define X86_MACHINE_ACPI "acpi"
|
||||
|
||||
#define TYPE_X86_MACHINE MACHINE_TYPE_NAME("x86")
|
||||
#define X86_MACHINE(obj) \
|
||||
@ -104,6 +106,7 @@ void x86_load_linux(X86MachineState *x86ms,
|
||||
bool linuxboot_dma_enabled);
|
||||
|
||||
bool x86_machine_is_smm_enabled(X86MachineState *x86ms);
|
||||
bool x86_machine_is_acpi_enabled(X86MachineState *x86ms);
|
||||
|
||||
/* Global System Interrupts */
|
||||
|
||||
|
@ -38,7 +38,6 @@ typedef struct VHostUserBlk {
|
||||
VhostUserState vhost_user;
|
||||
struct vhost_virtqueue *vhost_vqs;
|
||||
VirtQueue **virtqs;
|
||||
guint watch;
|
||||
bool connected;
|
||||
} VHostUserBlk;
|
||||
|
||||
|
@ -35,6 +35,8 @@ my $summary_file = 0;
|
||||
my $root;
|
||||
my %debug;
|
||||
my $help = 0;
|
||||
my $acpi_testexpected;
|
||||
my $acpi_nontestexpected;
|
||||
|
||||
sub help {
|
||||
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 {
|
||||
my $filename = shift;
|
||||
|
||||
@ -1431,9 +1454,11 @@ sub process {
|
||||
if ($line =~ /^diff --git.*?(\S+)$/) {
|
||||
$realfile = $1;
|
||||
$realfile =~ s@^([^/]*)/@@ if (!$file);
|
||||
checkfilename($realfile);
|
||||
} elsif ($line =~ /^\+\+\+\s+(\S+)/) {
|
||||
$realfile = $1;
|
||||
$realfile =~ s@^([^/]*)/@@ if (!$file);
|
||||
checkfilename($realfile);
|
||||
|
||||
$p1_prefix = $1;
|
||||
if (!$file && $tree && $p1_prefix ne '' &&
|
||||
|
@ -144,7 +144,6 @@ static Chardev **serial_hds;
|
||||
Chardev *parallel_hds[MAX_PARALLEL_PORTS];
|
||||
int win2k_install_hack = 0;
|
||||
int singlestep = 0;
|
||||
int acpi_enabled = 1;
|
||||
int no_hpet = 0;
|
||||
int fd_bootchk = 1;
|
||||
static int no_reboot;
|
||||
@ -3516,7 +3515,8 @@ void qemu_init(int argc, char **argv, char **envp)
|
||||
vnc_parse(optarg, &error_fatal);
|
||||
break;
|
||||
case QEMU_OPTION_no_acpi:
|
||||
acpi_enabled = 0;
|
||||
olist = qemu_find_opts("machine");
|
||||
qemu_opts_parse_noisily(olist, "acpi=off", false);
|
||||
break;
|
||||
case QEMU_OPTION_no_hpet:
|
||||
no_hpet = 1;
|
||||
|
Loading…
Reference in New Issue
Block a user