virtio, pc, pci: fixes, cleanups, tests
A bunch of fixes all over the place. ACPI tests will now run on more systems: might introduce new failure reports but that's for the best, isn't it? Signed-off-by: Michael S. Tsirkin <mst@redhat.com> -----BEGIN PGP SIGNATURE----- iQEcBAABAgAGBQJdKJ/kAAoJECgfDbjSjVRp4dUH/A/eeIm24ul74NRnQHzsiL7F duiFhPcnGhMYdTFbrV/vCAenaGR5eBl10XwVHeMEFC1ltIpwc3erdFotRp3WhOzo P57ZpqCKr6G8MayhSSTAiNq6GJrQlQ2/eF5TSZlo6kpfP3MDYDS9W/C4Zlp52f0Y sxvB49zXytMOJHlM0JqtiMuOfTftn+1GdEzfylJlSX0P3mKmYZG9l2++ByLoKQWd 8TNdTdGGV3go/xJ3rjmZTTLAS+rEuclVvfSXX6Y1RdGwUxmqZI/JxKmtt9eRRDdw 896p5dfYbxIGk3kOatfLfCEIBu6EcpvxwKMbbULYibITn939uNZX6rn4bI6FD9I= =BUdh -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/mst/tags/for_upstream' into staging virtio, pc, pci: fixes, cleanups, tests A bunch of fixes all over the place. ACPI tests will now run on more systems: might introduce new failure reports but that's for the best, isn't it? Signed-off-by: Michael S. Tsirkin <mst@redhat.com> # gpg: Signature made Fri 12 Jul 2019 15:57:40 BST # gpg: using RSA key 281F0DB8D28D5469 # 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: virtio pmem: remove transitional names virtio pmem: remove memdev null check virtio pmem: fix wrong mem region condition tests: acpi: do not skip tests when IASL is not installed tests: acpi: do not require IASL for dumping AML blobs virtio-balloon: fix QEMU 4.0 config size migration incompatibility pcie: consistent names for function args xio3130_downstream: typo fix Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
		
						commit
						46cd24e7ed
					
				@ -34,6 +34,7 @@ GlobalProperty hw_compat_4_0[] = {
 | 
				
			|||||||
    { "virtio-vga",     "edid", "false" },
 | 
					    { "virtio-vga",     "edid", "false" },
 | 
				
			||||||
    { "virtio-gpu-pci", "edid", "false" },
 | 
					    { "virtio-gpu-pci", "edid", "false" },
 | 
				
			||||||
    { "virtio-device", "use-started", "false" },
 | 
					    { "virtio-device", "use-started", "false" },
 | 
				
			||||||
 | 
					    { "virtio-balloon-device", "qemu-4-0-config-size", "true" },
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
const size_t hw_compat_4_0_len = G_N_ELEMENTS(hw_compat_4_0);
 | 
					const size_t hw_compat_4_0_len = G_N_ELEMENTS(hw_compat_4_0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -49,6 +50,7 @@ GlobalProperty hw_compat_3_1[] = {
 | 
				
			|||||||
    { "usb-tablet", "serial", "42" },
 | 
					    { "usb-tablet", "serial", "42" },
 | 
				
			||||||
    { "virtio-blk-device", "discard", "false" },
 | 
					    { "virtio-blk-device", "discard", "false" },
 | 
				
			||||||
    { "virtio-blk-device", "write-zeroes", "false" },
 | 
					    { "virtio-blk-device", "write-zeroes", "false" },
 | 
				
			||||||
 | 
					    { "virtio-balloon-device", "qemu-4-0-config-size", "false" },
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
const size_t hw_compat_3_1_len = G_N_ELEMENTS(hw_compat_3_1);
 | 
					const size_t hw_compat_3_1_len = G_N_ELEMENTS(hw_compat_3_1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -43,7 +43,7 @@ static void xio3130_downstream_write_config(PCIDevice *d, uint32_t address,
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    uint16_t slt_ctl, slt_sta;
 | 
					    uint16_t slt_ctl, slt_sta;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pcie_cap_slot_get(d, &slt_sta, &slt_ctl);
 | 
					    pcie_cap_slot_get(d, &slt_ctl, &slt_sta);
 | 
				
			||||||
    pci_bridge_write_config(d, address, val, len);
 | 
					    pci_bridge_write_config(d, address, val, len);
 | 
				
			||||||
    pcie_cap_flr_write_config(d, address, val, len);
 | 
					    pcie_cap_flr_write_config(d, address, val, len);
 | 
				
			||||||
    pcie_cap_slot_write_config(d, slt_ctl, slt_sta, address, val, len);
 | 
					    pcie_cap_slot_write_config(d, slt_ctl, slt_sta, address, val, len);
 | 
				
			||||||
 | 
				
			|||||||
@ -615,6 +615,22 @@ virtio_balloon_free_page_report_notify(NotifierWithReturn *n, void *data)
 | 
				
			|||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static size_t virtio_balloon_config_size(VirtIOBalloon *s)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    uint64_t features = s->host_features;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (s->qemu_4_0_config_size) {
 | 
				
			||||||
 | 
					        return sizeof(struct virtio_balloon_config);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (virtio_has_feature(features, VIRTIO_BALLOON_F_PAGE_POISON)) {
 | 
				
			||||||
 | 
					        return sizeof(struct virtio_balloon_config);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (virtio_has_feature(features, VIRTIO_BALLOON_F_FREE_PAGE_HINT)) {
 | 
				
			||||||
 | 
					        return offsetof(struct virtio_balloon_config, poison_val);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return offsetof(struct virtio_balloon_config, free_page_report_cmd_id);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void virtio_balloon_get_config(VirtIODevice *vdev, uint8_t *config_data)
 | 
					static void virtio_balloon_get_config(VirtIODevice *vdev, uint8_t *config_data)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    VirtIOBalloon *dev = VIRTIO_BALLOON(vdev);
 | 
					    VirtIOBalloon *dev = VIRTIO_BALLOON(vdev);
 | 
				
			||||||
@ -635,7 +651,7 @@ static void virtio_balloon_get_config(VirtIODevice *vdev, uint8_t *config_data)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    trace_virtio_balloon_get_config(config.num_pages, config.actual);
 | 
					    trace_virtio_balloon_get_config(config.num_pages, config.actual);
 | 
				
			||||||
    memcpy(config_data, &config, sizeof(struct virtio_balloon_config));
 | 
					    memcpy(config_data, &config, virtio_balloon_config_size(dev));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int build_dimm_list(Object *obj, void *opaque)
 | 
					static int build_dimm_list(Object *obj, void *opaque)
 | 
				
			||||||
@ -679,7 +695,7 @@ static void virtio_balloon_set_config(VirtIODevice *vdev,
 | 
				
			|||||||
    uint32_t oldactual = dev->actual;
 | 
					    uint32_t oldactual = dev->actual;
 | 
				
			||||||
    ram_addr_t vm_ram_size = get_current_ram_size();
 | 
					    ram_addr_t vm_ram_size = get_current_ram_size();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    memcpy(&config, config_data, sizeof(struct virtio_balloon_config));
 | 
					    memcpy(&config, config_data, virtio_balloon_config_size(dev));
 | 
				
			||||||
    dev->actual = le32_to_cpu(config.actual);
 | 
					    dev->actual = le32_to_cpu(config.actual);
 | 
				
			||||||
    if (dev->actual != oldactual) {
 | 
					    if (dev->actual != oldactual) {
 | 
				
			||||||
        qapi_event_send_balloon_change(vm_ram_size -
 | 
					        qapi_event_send_balloon_change(vm_ram_size -
 | 
				
			||||||
@ -766,7 +782,7 @@ static void virtio_balloon_device_realize(DeviceState *dev, Error **errp)
 | 
				
			|||||||
    int ret;
 | 
					    int ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    virtio_init(vdev, "virtio-balloon", VIRTIO_ID_BALLOON,
 | 
					    virtio_init(vdev, "virtio-balloon", VIRTIO_ID_BALLOON,
 | 
				
			||||||
                sizeof(struct virtio_balloon_config));
 | 
					                virtio_balloon_config_size(s));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ret = qemu_add_balloon_handler(virtio_balloon_to_target,
 | 
					    ret = qemu_add_balloon_handler(virtio_balloon_to_target,
 | 
				
			||||||
                                   virtio_balloon_stat, s);
 | 
					                                   virtio_balloon_stat, s);
 | 
				
			||||||
@ -897,6 +913,12 @@ static Property virtio_balloon_properties[] = {
 | 
				
			|||||||
                    VIRTIO_BALLOON_F_DEFLATE_ON_OOM, false),
 | 
					                    VIRTIO_BALLOON_F_DEFLATE_ON_OOM, false),
 | 
				
			||||||
    DEFINE_PROP_BIT("free-page-hint", VirtIOBalloon, host_features,
 | 
					    DEFINE_PROP_BIT("free-page-hint", VirtIOBalloon, host_features,
 | 
				
			||||||
                    VIRTIO_BALLOON_F_FREE_PAGE_HINT, false),
 | 
					                    VIRTIO_BALLOON_F_FREE_PAGE_HINT, false),
 | 
				
			||||||
 | 
					    /* QEMU 4.0 accidentally changed the config size even when free-page-hint
 | 
				
			||||||
 | 
					     * is disabled, resulting in QEMU 3.1 migration incompatibility.  This
 | 
				
			||||||
 | 
					     * property retains this quirk for QEMU 4.1 machine types.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    DEFINE_PROP_BOOL("qemu-4-0-config-size", VirtIOBalloon,
 | 
				
			||||||
 | 
					                     qemu_4_0_config_size, false),
 | 
				
			||||||
    DEFINE_PROP_LINK("iothread", VirtIOBalloon, iothread, TYPE_IOTHREAD,
 | 
					    DEFINE_PROP_LINK("iothread", VirtIOBalloon, iothread, TYPE_IOTHREAD,
 | 
				
			||||||
                     IOThread *),
 | 
					                     IOThread *),
 | 
				
			||||||
    DEFINE_PROP_END_OF_LIST(),
 | 
					    DEFINE_PROP_END_OF_LIST(),
 | 
				
			||||||
 | 
				
			|||||||
@ -57,7 +57,7 @@ static uint64_t virtio_pmem_pci_get_plugged_size(const MemoryDeviceState *md,
 | 
				
			|||||||
    MemoryRegion *mr = vpc->get_memory_region(pmem, errp);
 | 
					    MemoryRegion *mr = vpc->get_memory_region(pmem, errp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* the plugged size corresponds to the region size */
 | 
					    /* the plugged size corresponds to the region size */
 | 
				
			||||||
    return mr ? 0 : memory_region_size(mr);
 | 
					    return mr ? memory_region_size(mr) : 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void virtio_pmem_pci_fill_device_info(const MemoryDeviceState *md,
 | 
					static void virtio_pmem_pci_fill_device_info(const MemoryDeviceState *md,
 | 
				
			||||||
@ -113,8 +113,6 @@ static void virtio_pmem_pci_instance_init(Object *obj)
 | 
				
			|||||||
static const VirtioPCIDeviceTypeInfo virtio_pmem_pci_info = {
 | 
					static const VirtioPCIDeviceTypeInfo virtio_pmem_pci_info = {
 | 
				
			||||||
    .base_name             = TYPE_VIRTIO_PMEM_PCI,
 | 
					    .base_name             = TYPE_VIRTIO_PMEM_PCI,
 | 
				
			||||||
    .generic_name          = "virtio-pmem-pci",
 | 
					    .generic_name          = "virtio-pmem-pci",
 | 
				
			||||||
    .transitional_name     = "virtio-pmem-pci-transitional",
 | 
					 | 
				
			||||||
    .non_transitional_name = "virtio-pmem-pci-non-transitional",
 | 
					 | 
				
			||||||
    .instance_size = sizeof(VirtIOPMEMPCI),
 | 
					    .instance_size = sizeof(VirtIOPMEMPCI),
 | 
				
			||||||
    .instance_init = virtio_pmem_pci_instance_init,
 | 
					    .instance_init = virtio_pmem_pci_instance_init,
 | 
				
			||||||
    .class_init    = virtio_pmem_pci_class_init,
 | 
					    .class_init    = virtio_pmem_pci_class_init,
 | 
				
			||||||
 | 
				
			|||||||
@ -134,8 +134,8 @@ static void virtio_pmem_fill_device_info(const VirtIOPMEM *pmem,
 | 
				
			|||||||
                                         VirtioPMEMDeviceInfo *vi)
 | 
					                                         VirtioPMEMDeviceInfo *vi)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    vi->memaddr = pmem->start;
 | 
					    vi->memaddr = pmem->start;
 | 
				
			||||||
    vi->size = pmem->memdev ? memory_region_size(&pmem->memdev->mr) : 0;
 | 
					    vi->size    = memory_region_size(&pmem->memdev->mr);
 | 
				
			||||||
    vi->memdev = object_get_canonical_path(OBJECT(pmem->memdev));
 | 
					    vi->memdev  = object_get_canonical_path(OBJECT(pmem->memdev));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static MemoryRegion *virtio_pmem_get_memory_region(VirtIOPMEM *pmem,
 | 
					static MemoryRegion *virtio_pmem_get_memory_region(VirtIOPMEM *pmem,
 | 
				
			||||||
 | 
				
			|||||||
@ -107,9 +107,9 @@ void pcie_cap_lnkctl_reset(PCIDevice *dev);
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void pcie_cap_slot_init(PCIDevice *dev, uint16_t slot);
 | 
					void pcie_cap_slot_init(PCIDevice *dev, uint16_t slot);
 | 
				
			||||||
void pcie_cap_slot_reset(PCIDevice *dev);
 | 
					void pcie_cap_slot_reset(PCIDevice *dev);
 | 
				
			||||||
void pcie_cap_slot_get(PCIDevice *dev, uint16_t *slot_ctl, uint16_t *slt_sta);
 | 
					void pcie_cap_slot_get(PCIDevice *dev, uint16_t *slt_ctl, uint16_t *slt_sta);
 | 
				
			||||||
void pcie_cap_slot_write_config(PCIDevice *dev,
 | 
					void pcie_cap_slot_write_config(PCIDevice *dev,
 | 
				
			||||||
                                uint16_t old_slot_ctl, uint16_t old_slt_sta,
 | 
					                                uint16_t old_slt_ctl, uint16_t old_slt_sta,
 | 
				
			||||||
                                uint32_t addr, uint32_t val, int len);
 | 
					                                uint32_t addr, uint32_t val, int len);
 | 
				
			||||||
int pcie_cap_slot_post_load(void *opaque, int version_id);
 | 
					int pcie_cap_slot_post_load(void *opaque, int version_id);
 | 
				
			||||||
void pcie_cap_slot_push_attention_button(PCIDevice *dev);
 | 
					void pcie_cap_slot_push_attention_button(PCIDevice *dev);
 | 
				
			||||||
 | 
				
			|||||||
@ -71,6 +71,8 @@ typedef struct VirtIOBalloon {
 | 
				
			|||||||
    int64_t stats_poll_interval;
 | 
					    int64_t stats_poll_interval;
 | 
				
			||||||
    uint32_t host_features;
 | 
					    uint32_t host_features;
 | 
				
			||||||
    PartiallyBalloonedPage *pbp;
 | 
					    PartiallyBalloonedPage *pbp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    bool qemu_4_0_config_size;
 | 
				
			||||||
} VirtIOBalloon;
 | 
					} VirtIOBalloon;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
				
			|||||||
@ -389,6 +389,14 @@ static void test_acpi_asl(test_data *data)
 | 
				
			|||||||
        all_tables_match = all_tables_match &&
 | 
					        all_tables_match = all_tables_match &&
 | 
				
			||||||
            test_acpi_find_diff_allowed(exp_sdt);
 | 
					            test_acpi_find_diff_allowed(exp_sdt);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /*
 | 
				
			||||||
 | 
					         *  don't try to decompile if IASL isn't present, in this case user
 | 
				
			||||||
 | 
					         * will just 'get binary file mismatch' warnings and test failure
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
 | 
					        if (!iasl) {
 | 
				
			||||||
 | 
					            continue;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        err = load_asl(data->tables, sdt);
 | 
					        err = load_asl(data->tables, sdt);
 | 
				
			||||||
        asl = normalize_asl(sdt->asl);
 | 
					        asl = normalize_asl(sdt->asl);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -431,6 +439,11 @@ static void test_acpi_asl(test_data *data)
 | 
				
			|||||||
        g_string_free(asl, true);
 | 
					        g_string_free(asl, true);
 | 
				
			||||||
        g_string_free(exp_asl, true);
 | 
					        g_string_free(exp_asl, true);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    if (!iasl && !all_tables_match) {
 | 
				
			||||||
 | 
					        fprintf(stderr, "to see ASL diff between mismatched files install IASL,"
 | 
				
			||||||
 | 
					                " rebuild QEMU from scratch and re-run tests with V=1"
 | 
				
			||||||
 | 
					                " environment variable set");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    g_assert(all_tables_match);
 | 
					    g_assert(all_tables_match);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    free_test_data(&exp_data);
 | 
					    free_test_data(&exp_data);
 | 
				
			||||||
@ -597,12 +610,10 @@ static void test_acpi_one(const char *params, test_data *data)
 | 
				
			|||||||
    test_acpi_rxsdt_table(data);
 | 
					    test_acpi_rxsdt_table(data);
 | 
				
			||||||
    test_acpi_fadt_table(data);
 | 
					    test_acpi_fadt_table(data);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (iasl) {
 | 
					    if (getenv(ACPI_REBUILD_EXPECTED_AML)) {
 | 
				
			||||||
        if (getenv(ACPI_REBUILD_EXPECTED_AML)) {
 | 
					        dump_aml_files(data, true);
 | 
				
			||||||
            dump_aml_files(data, true);
 | 
					    } else {
 | 
				
			||||||
        } else {
 | 
					        test_acpi_asl(data);
 | 
				
			||||||
            test_acpi_asl(data);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /*
 | 
					    /*
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user