From 7b74d99404be1082c47902dd5c147285b9db9f98 Mon Sep 17 00:00:00 2001 From: Miroslav Rezanina Date: Tue, 8 Jun 2021 02:39:22 -0400 Subject: [PATCH] * Tue Jun 08 2021 Miroslav Rezanina - 6.0.0-5 - kvm-arm-virt-Register-highmem-and-gic-version-as-class-p.patch [bz#1952449] - kvm-hw-arm-virt-Add-8.5-and-9.0-machine-types-and-remove.patch [bz#1952449] - kvm-aarch64-rh-devices-add-CONFIG_PVPANIC_PCI.patch [bz#1747467] - kvm-spec-Do-not-build-qemu-kvm-block-gluster.patch [bz#1964795] - kvm-spec-Do-not-link-pcnet-and-ne2k_pci-roms.patch [bz#1965961] - kvm-redhat-s390x-add-rhel-8.5.0-compat-machine.patch [bz#1957194] - kvm-redhat-add-missing-entries-in-hw_compat_rhel_8_4.patch [bz#1957194] - kvm-redhat-Define-pseries-rhel8.5.0-machine-type.patch [bz#1957194] - kvm-virtio-net-failover-add-missing-remove_migration_sta.patch [bz#1957194] - kvm-hw-arm-virt-Disable-PL011-clock-migration-through-hw.patch [bz#1957194] - kvm-virtio-blk-Fix-rollback-path-in-virtio_blk_data_plan.patch [bz#1957194] - kvm-virtio-blk-Configure-all-host-notifiers-in-a-single-.patch [bz#1957194] - kvm-virtio-scsi-Set-host-notifiers-and-callbacks-separat.patch [bz#1957194] - kvm-virtio-scsi-Configure-all-host-notifiers-in-a-single.patch [bz#1957194] - kvm-hw-arm-smmuv3-Another-range-invalidation-fix.patch [bz#1957194] - Resolves: bz#1952449 ([aarch64] define RHEL9 machine types) - Resolves: bz#1747467 ([aarch64] [qemu] PVPANIC support) - Resolves: bz#1964795 (Remove qemu-kvm-block-gluster package) - Resolves: bz#1965961 (Remove links to not build roms) - Resolves: bz#1957194 (Synchronize RHEL-AV 8.5.0 changes to RHEL 9.0.0 Beta) --- .gitignore | 3 + ...64-rh-devices-add-CONFIG_PVPANIC_PCI.patch | 38 ++++++ ...r-highmem-and-gic-version-as-class-p.patch | 77 +++++++++++ ...mmuv3-Another-range-invalidation-fix.patch | 111 ++++++++++++++++ ...8.5-and-9.0-machine-types-and-remove.patch | 63 +++++++++ ...ble-PL011-clock-migration-through-hw.patch | 51 +++++++ ...efine-pseries-rhel8.5.0-machine-type.patch | 67 ++++++++++ ...issing-entries-in-hw_compat_rhel_8_4.patch | 42 ++++++ ...-s390x-add-rhel-8.5.0-compat-machine.patch | 59 +++++++++ ...gure-all-host-notifiers-in-a-single-.patch | 107 +++++++++++++++ ...ollback-path-in-virtio_blk_data_plan.patch | 83 ++++++++++++ ...ver-add-missing-remove_migration_sta.patch | 77 +++++++++++ ...igure-all-host-notifiers-in-a-single.patch | 91 +++++++++++++ ...host-notifiers-and-callbacks-separat.patch | 125 ++++++++++++++++++ qemu-kvm.spec | 98 ++++++++------ 15 files changed, 1052 insertions(+), 40 deletions(-) create mode 100644 kvm-aarch64-rh-devices-add-CONFIG_PVPANIC_PCI.patch create mode 100644 kvm-arm-virt-Register-highmem-and-gic-version-as-class-p.patch create mode 100644 kvm-hw-arm-smmuv3-Another-range-invalidation-fix.patch create mode 100644 kvm-hw-arm-virt-Add-8.5-and-9.0-machine-types-and-remove.patch create mode 100644 kvm-hw-arm-virt-Disable-PL011-clock-migration-through-hw.patch create mode 100644 kvm-redhat-Define-pseries-rhel8.5.0-machine-type.patch create mode 100644 kvm-redhat-add-missing-entries-in-hw_compat_rhel_8_4.patch create mode 100644 kvm-redhat-s390x-add-rhel-8.5.0-compat-machine.patch create mode 100644 kvm-virtio-blk-Configure-all-host-notifiers-in-a-single-.patch create mode 100644 kvm-virtio-blk-Fix-rollback-path-in-virtio_blk_data_plan.patch create mode 100644 kvm-virtio-net-failover-add-missing-remove_migration_sta.patch create mode 100644 kvm-virtio-scsi-Configure-all-host-notifiers-in-a-single.patch create mode 100644 kvm-virtio-scsi-Set-host-notifiers-and-callbacks-separat.patch diff --git a/.gitignore b/.gitignore index 9bf151b..b919b12 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,6 @@ /qemu-5.2.0-rc3.tar.xz /qemu-5.2.0.tar.xz /qemu-6.0.0.tar.xz +/qemu-kvm*.src.rpm +/patches.* +/*.orig diff --git a/kvm-aarch64-rh-devices-add-CONFIG_PVPANIC_PCI.patch b/kvm-aarch64-rh-devices-add-CONFIG_PVPANIC_PCI.patch new file mode 100644 index 0000000..800b567 --- /dev/null +++ b/kvm-aarch64-rh-devices-add-CONFIG_PVPANIC_PCI.patch @@ -0,0 +1,38 @@ +From 5cc3aacc241c0d26f63d51efd1b6fa35490d37c9 Mon Sep 17 00:00:00 2001 +From: Eric Auger +Date: Wed, 26 May 2021 10:33:20 -0400 +Subject: [PATCH 03/15] aarch64-rh-devices: add CONFIG_PVPANIC_PCI +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Eric Auger +RH-MergeRequest: 2: aarch64-rh-devices: add CONFIG_PVPANIC_PCI +RH-Commit: [1/1] f3d0a94a91ea1b3fff925f32affce1b77469e206 (eauger1/centos-qemu-kvm) +RH-Bugzilla: 1747467 +RH-Acked-by: Philippe Mathieu-Daudé +RH-Acked-by: Gavin Shan +RH-Acked-by: Andrew Jones + +We want to enable the PVPANIC facility on ARM. On aarch64, +the PVPANIC PCI device is used (on x86_64 the ISA device is used). +so let's set the PVPANIC_PCI config. + +Signed-off-by: Eric Auger +Signed-off-by: Miroslav Rezanina +--- + default-configs/devices/aarch64-rh-devices.mak | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/default-configs/devices/aarch64-rh-devices.mak b/default-configs/devices/aarch64-rh-devices.mak +index a4d67274c0..4220469178 100644 +--- a/default-configs/devices/aarch64-rh-devices.mak ++++ b/default-configs/devices/aarch64-rh-devices.mak +@@ -26,3 +26,4 @@ CONFIG_TPM_EMULATOR=y + CONFIG_TPM_TIS_SYSBUS=y + CONFIG_PTIMER=y + CONFIG_ARM_COMPATIBLE_SEMIHOSTING=y ++CONFIG_PVPANIC_PCI=y +-- +2.27.0 + diff --git a/kvm-arm-virt-Register-highmem-and-gic-version-as-class-p.patch b/kvm-arm-virt-Register-highmem-and-gic-version-as-class-p.patch new file mode 100644 index 0000000..52641bd --- /dev/null +++ b/kvm-arm-virt-Register-highmem-and-gic-version-as-class-p.patch @@ -0,0 +1,77 @@ +From e808acaa50effe471c56a48b80d5e0d2d196b495 Mon Sep 17 00:00:00 2001 +From: Eric Auger +Date: Tue, 25 May 2021 09:22:23 +0200 +Subject: [PATCH 01/15] arm/virt: Register highmem and gic-version as class + properties + +RH-Author: Eric Auger +RH-MergeRequest: 1: Add 9.0.0 and 8.5.0 arm-virt machine types +RH-Commit: [1/2] 1ff3970773e09f2efb194430511928ae852c02ba (eauger1/centos-qemu-kvm) +RH-Bugzilla: 1952449 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Gavin Shan +RH-Acked-by: Andrew Jones + +This mirrors changes made in commit +b91def7b8382 ("rm/virt: Register most properties as class properties") +for the highmem and gic-version properties. This makes the +code easier to diff against upstream. + +Signed-off-by: Eric Auger +Signed-off-by: Miroslav Rezanina +--- + hw/arm/virt.c | 23 ++++++++++++----------- + 1 file changed, 12 insertions(+), 11 deletions(-) + +diff --git a/hw/arm/virt.c b/hw/arm/virt.c +index 080cf54ef1..51a415570c 100644 +--- a/hw/arm/virt.c ++++ b/hw/arm/virt.c +@@ -2996,6 +2996,18 @@ static void rhel_machine_class_init(ObjectClass *oc, void *data) + object_class_property_set_description(oc, "acpi", + "Enable ACPI"); + ++ object_class_property_add_bool(oc, "highmem", virt_get_highmem, ++ virt_set_highmem); ++ object_class_property_set_description(oc, "highmem", ++ "Set on/off to enable/disable using " ++ "physical address space above 32 bits"); ++ ++ object_class_property_add_str(oc, "gic-version", virt_get_gic_version, ++ virt_set_gic_version); ++ object_class_property_set_description(oc, "gic-version", ++ "Set GIC version. " ++ "Valid values are 2, 3, host and max"); ++ + object_class_property_add_str(oc, "x-oem-id", + virt_get_oem_id, + virt_set_oem_id); +@@ -3004,7 +3016,6 @@ static void rhel_machine_class_init(ObjectClass *oc, void *data) + "in ACPI table header." + "The string may be up to 6 bytes in size"); + +- + object_class_property_add_str(oc, "x-oem-table-id", + virt_get_oem_table_id, + virt_set_oem_table_id); +@@ -3027,17 +3038,7 @@ static void rhel_virt_instance_init(Object *obj) + + /* High memory is enabled by default */ + vms->highmem = true; +- object_property_add_bool(obj, "highmem", virt_get_highmem, +- virt_set_highmem); +- object_property_set_description(obj, "highmem", +- "Set on/off to enable/disable using " +- "physical address space above 32 bits"); + vms->gic_version = VIRT_GIC_VERSION_NOSEL; +- object_property_add_str(obj, "gic-version", virt_get_gic_version, +- virt_set_gic_version); +- object_property_set_description(obj, "gic-version", +- "Set GIC version. " +- "Valid values are 2, 3, host and max"); + + vms->highmem_ecam = !vmc->no_highmem_ecam; + +-- +2.27.0 + diff --git a/kvm-hw-arm-smmuv3-Another-range-invalidation-fix.patch b/kvm-hw-arm-smmuv3-Another-range-invalidation-fix.patch new file mode 100644 index 0000000..7fb1c3a --- /dev/null +++ b/kvm-hw-arm-smmuv3-Another-range-invalidation-fix.patch @@ -0,0 +1,111 @@ +From e9abef24fae799febf81cd4ac02efe8987a698e8 Mon Sep 17 00:00:00 2001 +From: Auger Eric +Date: Wed, 26 May 2021 16:07:40 -0400 +Subject: [PATCH 15/15] hw/arm/smmuv3: Another range invalidation fix + +RH-Author: Miroslav Rezanina +RH-MergeRequest: 5: Synchronize RHEL-AV 8.5 release 18 to RHEL 9 Beta +RH-Commit: [12/12] dc064684e5f3f11d955565b05d37b0f2d9f79b91 (mrezanin/centos-src-qemu-kvm) +RH-Bugzilla: 1957194 +RH-Acked-by: Danilo Cesar Lemes de Paula +RH-Acked-by: Cornelia Huck +RH-Acked-by: Greg Kurz +RH-Acked-by: Laurent Vivier + +6d9cd115b9 ("hw/arm/smmuv3: Enforce invalidation on a power of two range") +failed to completely fix misalignment issues with range +invalidation. For instance invalidations patterns like "invalidate 32 +4kB pages starting from 0xff395000 are not correctly handled" due +to the fact the previous fix only made sure the number of invalidated +pages were a power of 2 but did not properly handle the start +address was not aligned with the range. This can be noticed when +boothing a fedora 33 with protected virtio-blk-pci. + +Signed-off-by: Eric Auger +Fixes: 6d9cd115b9 ("hw/arm/smmuv3: Enforce invalidation on a power of two range") +Reviewed-by: Peter Maydell +Signed-off-by: Peter Maydell +(cherry picked from commit 219729cfbf9e979020bffedac6a790144173ec62) +Signed-off-by: Eric Auger +Signed-off-by: Miroslav Rezanina +--- + hw/arm/smmuv3.c | 50 +++++++++++++++++++++++++------------------------ + 1 file changed, 26 insertions(+), 24 deletions(-) + +diff --git a/hw/arm/smmuv3.c b/hw/arm/smmuv3.c +index 8705612535..e1979282e4 100644 +--- a/hw/arm/smmuv3.c ++++ b/hw/arm/smmuv3.c +@@ -856,43 +856,45 @@ static void smmuv3_inv_notifiers_iova(SMMUState *s, int asid, dma_addr_t iova, + + static void smmuv3_s1_range_inval(SMMUState *s, Cmd *cmd) + { +- uint8_t scale = 0, num = 0, ttl = 0; +- dma_addr_t addr = CMD_ADDR(cmd); ++ dma_addr_t end, addr = CMD_ADDR(cmd); + uint8_t type = CMD_TYPE(cmd); + uint16_t vmid = CMD_VMID(cmd); ++ uint8_t scale = CMD_SCALE(cmd); ++ uint8_t num = CMD_NUM(cmd); ++ uint8_t ttl = CMD_TTL(cmd); + bool leaf = CMD_LEAF(cmd); + uint8_t tg = CMD_TG(cmd); +- uint64_t first_page = 0, last_page; +- uint64_t num_pages = 1; ++ uint64_t num_pages; ++ uint8_t granule; + int asid = -1; + +- if (tg) { +- scale = CMD_SCALE(cmd); +- num = CMD_NUM(cmd); +- ttl = CMD_TTL(cmd); +- num_pages = (num + 1) * BIT_ULL(scale); +- } +- + if (type == SMMU_CMD_TLBI_NH_VA) { + asid = CMD_ASID(cmd); + } + +- /* Split invalidations into ^2 range invalidations */ +- last_page = num_pages - 1; +- while (num_pages) { +- uint8_t granule = tg * 2 + 10; +- uint64_t mask, count; ++ if (!tg) { ++ trace_smmuv3_s1_range_inval(vmid, asid, addr, tg, 1, ttl, leaf); ++ smmuv3_inv_notifiers_iova(s, asid, addr, tg, 1); ++ smmu_iotlb_inv_iova(s, asid, addr, tg, 1, ttl); ++ return; ++ } ++ ++ /* RIL in use */ + +- mask = dma_aligned_pow2_mask(first_page, last_page, 64 - granule); +- count = mask + 1; ++ num_pages = (num + 1) * BIT_ULL(scale); ++ granule = tg * 2 + 10; ++ ++ /* Split invalidations into ^2 range invalidations */ ++ end = addr + (num_pages << granule) - 1; + +- trace_smmuv3_s1_range_inval(vmid, asid, addr, tg, count, ttl, leaf); +- smmuv3_inv_notifiers_iova(s, asid, addr, tg, count); +- smmu_iotlb_inv_iova(s, asid, addr, tg, count, ttl); ++ while (addr != end + 1) { ++ uint64_t mask = dma_aligned_pow2_mask(addr, end, 64); + +- num_pages -= count; +- first_page += count; +- addr += count * BIT_ULL(granule); ++ num_pages = (mask + 1) >> granule; ++ trace_smmuv3_s1_range_inval(vmid, asid, addr, tg, num_pages, ttl, leaf); ++ smmuv3_inv_notifiers_iova(s, asid, addr, tg, num_pages); ++ smmu_iotlb_inv_iova(s, asid, addr, tg, num_pages, ttl); ++ addr += mask + 1; + } + } + +-- +2.27.0 + diff --git a/kvm-hw-arm-virt-Add-8.5-and-9.0-machine-types-and-remove.patch b/kvm-hw-arm-virt-Add-8.5-and-9.0-machine-types-and-remove.patch new file mode 100644 index 0000000..6415284 --- /dev/null +++ b/kvm-hw-arm-virt-Add-8.5-and-9.0-machine-types-and-remove.patch @@ -0,0 +1,63 @@ +From ee0be09f3598596e41b3fc2dbefef3382c5b0541 Mon Sep 17 00:00:00 2001 +From: Eric Auger +Date: Tue, 25 May 2021 09:22:24 +0200 +Subject: [PATCH 02/15] hw/arm/virt: Add 8.5 and 9.0 machine types and remove + older ones + +RH-Author: Eric Auger +RH-MergeRequest: 1: Add 9.0.0 and 8.5.0 arm-virt machine types +RH-Commit: [2/2] ace4619a1d505a3b552a236260b259bd6ddabc00 (eauger1/centos-qemu-kvm) +RH-Bugzilla: 1952449 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Gavin Shan +RH-Acked-by: Andrew Jones + +Add 8.5 and 9.0 machine types and remove older ones. + +Signed-off-by: Eric Auger +Signed-off-by: Miroslav Rezanina +--- + hw/arm/virt.c | 24 +++++------------------- + 1 file changed, 5 insertions(+), 19 deletions(-) + +diff --git a/hw/arm/virt.c b/hw/arm/virt.c +index 51a415570c..e4aa794f83 100644 +--- a/hw/arm/virt.c ++++ b/hw/arm/virt.c +@@ -3095,28 +3095,14 @@ static void rhel_machine_init(void) + } + type_init(rhel_machine_init); + +-static void rhel840_virt_options(MachineClass *mc) ++static void rhel900_virt_options(MachineClass *mc) + { + compat_props_add(mc->compat_props, arm_rhel_compat, arm_rhel_compat_len); +- compat_props_add(mc->compat_props, hw_compat_rhel_8_4, hw_compat_rhel_8_4_len); + } +-DEFINE_RHEL_MACHINE_AS_LATEST(8, 4, 0) ++DEFINE_RHEL_MACHINE_AS_LATEST(9, 0, 0) + +-static void rhel830_virt_options(MachineClass *mc) ++static void rhel850_virt_options(MachineClass *mc) + { +- VirtMachineClass *vmc = VIRT_MACHINE_CLASS(OBJECT_CLASS(mc)); +- +- rhel840_virt_options(mc); +- compat_props_add(mc->compat_props, hw_compat_rhel_8_3, hw_compat_rhel_8_3_len); +- vmc->no_kvm_steal_time = true; +-} +-DEFINE_RHEL_MACHINE(8, 3, 0) +- +-static void rhel820_virt_options(MachineClass *mc) +-{ +- rhel830_virt_options(mc); +- compat_props_add(mc->compat_props, hw_compat_rhel_8_2, hw_compat_rhel_8_2_len); +- mc->numa_mem_supported = true; +- mc->auto_enable_numa_with_memdev = false; ++ rhel900_virt_options(mc); + } +-DEFINE_RHEL_MACHINE(8, 2, 0) ++DEFINE_RHEL_MACHINE(8, 5, 0) +-- +2.27.0 + diff --git a/kvm-hw-arm-virt-Disable-PL011-clock-migration-through-hw.patch b/kvm-hw-arm-virt-Disable-PL011-clock-migration-through-hw.patch new file mode 100644 index 0000000..6ce6dd0 --- /dev/null +++ b/kvm-hw-arm-virt-Disable-PL011-clock-migration-through-hw.patch @@ -0,0 +1,51 @@ +From 7f76c347f17c5fc60f3bcb99ad65e26f9da4ed9f Mon Sep 17 00:00:00 2001 +From: Auger Eric +Date: Thu, 20 May 2021 19:23:26 -0400 +Subject: [PATCH 10/15] hw/arm/virt: Disable PL011 clock migration through + hw_compat_rhel_8_3 + +RH-Author: Miroslav Rezanina +RH-MergeRequest: 5: Synchronize RHEL-AV 8.5 release 18 to RHEL 9 Beta +RH-Commit: [6/12] 5f52975350b2497ee82cc5c9b8ba930e3a9b8c3d (mrezanin/centos-src-qemu-kvm) +RH-Bugzilla: 1957194 +RH-Acked-by: Danilo Cesar Lemes de Paula +RH-Acked-by: Cornelia Huck +RH-Acked-by: Greg Kurz +RH-Acked-by: Laurent Vivier + +Disable PL011 clock migration for machine types before +virt-rhel8.4.0. + +The regression was introduced by aac63e0e6ea3 +("hw/char/pl011: add a clock input"), in 8.4, +causing failure of migration between qemu 8.4 towards +older ones. + +The fix was taken in 8.5 as part of the rebase, +e6fa978d8343 ("hw/arm/virt: Disable pl011 clock migration +if needed"). But the compat needs to be applied in +hw_compat_rhel_8_3[]. + +Signed-off-by: Eric Auger +Signed-off-by: Danilo C. L. de Paula +Signed-off-by: Miroslav Rezanina +--- + hw/core/machine.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/hw/core/machine.c b/hw/core/machine.c +index c665e869de..6c534e14fa 100644 +--- a/hw/core/machine.c ++++ b/hw/core/machine.c +@@ -69,6 +69,8 @@ GlobalProperty hw_compat_rhel_8_3[] = { + { "nvme", "use-intel-id", "on"}, + /* hw_compat_rhel_8_3 from hw_compat_5_1 */ + { "pvpanic", "events", "1"}, /* PVPANIC_PANICKED */ ++ /* hw_compat_rhel_8_3 from hw_compat_5_1 */ ++ { "pl011", "migrate-clk", "off" }, + /* hw_compat_rhel_8_3 bz 1912846 */ + { "pci-xhci", "x-rh-late-msi-cap", "off" }, + /* hw_compat_rhel_8_3 from hw_compat_5_1 */ +-- +2.27.0 + diff --git a/kvm-redhat-Define-pseries-rhel8.5.0-machine-type.patch b/kvm-redhat-Define-pseries-rhel8.5.0-machine-type.patch new file mode 100644 index 0000000..eb9f32a --- /dev/null +++ b/kvm-redhat-Define-pseries-rhel8.5.0-machine-type.patch @@ -0,0 +1,67 @@ +From 1194549a01a472b9ce21819cd32fe253d6263cd6 Mon Sep 17 00:00:00 2001 +From: Greg Kurz +Date: Mon, 10 May 2021 15:37:40 -0400 +Subject: [PATCH 08/15] redhat: Define pseries-rhel8.5.0 machine type + +RH-Author: Miroslav Rezanina +RH-MergeRequest: 5: Synchronize RHEL-AV 8.5 release 18 to RHEL 9 Beta +RH-Commit: [3/12] accc2ed549b94360bc6ab180c4266466816f122e (mrezanin/centos-src-qemu-kvm) +RH-Bugzilla: 1957194 +RH-Acked-by: Danilo Cesar Lemes de Paula +RH-Acked-by: Cornelia Huck +RH-Acked-by: Greg Kurz +RH-Acked-by: Laurent Vivier + +Note that the compat entries for 8.4.0 were already wired up +in the rhel-8.4.0 machine type. + +Signed-off-by: Greg Kurz +Signed-off-by: Danilo C. L. de Paula +Signed-off-by: Miroslav Rezanina +--- + hw/ppc/spapr.c | 18 +++++++++++++++--- + 1 file changed, 15 insertions(+), 3 deletions(-) + +diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c +index f9e8dfdfc9..653574ba91 100644 +--- a/hw/ppc/spapr.c ++++ b/hw/ppc/spapr.c +@@ -5083,6 +5083,19 @@ static void spapr_machine_rhel_default_class_options(MachineClass *mc) + mc->max_cpus = 384; + } + ++/* ++ * pseries-rhel8.5.0 ++ * like pseries-6.0 ++ */ ++ ++static void spapr_machine_rhel850_class_options(MachineClass *mc) ++{ ++ /* The default machine type must apply the RHEL specific defaults */ ++ spapr_machine_rhel_default_class_options(mc); ++} ++ ++DEFINE_SPAPR_MACHINE(rhel850, "rhel8.5.0", true); ++ + /* + * pseries-rhel8.4.0 + * like pseries-5.2 +@@ -5090,13 +5103,12 @@ static void spapr_machine_rhel_default_class_options(MachineClass *mc) + + static void spapr_machine_rhel840_class_options(MachineClass *mc) + { +- /* The default machine type must apply the RHEL specific defaults */ +- spapr_machine_rhel_default_class_options(mc); ++ spapr_machine_rhel850_class_options(mc); + compat_props_add(mc->compat_props, hw_compat_rhel_8_4, + hw_compat_rhel_8_4_len); + } + +-DEFINE_SPAPR_MACHINE(rhel840, "rhel8.4.0", true); ++DEFINE_SPAPR_MACHINE(rhel840, "rhel8.4.0", false); + + /* + * pseries-rhel8.3.0 +-- +2.27.0 + diff --git a/kvm-redhat-add-missing-entries-in-hw_compat_rhel_8_4.patch b/kvm-redhat-add-missing-entries-in-hw_compat_rhel_8_4.patch new file mode 100644 index 0000000..b70c6de --- /dev/null +++ b/kvm-redhat-add-missing-entries-in-hw_compat_rhel_8_4.patch @@ -0,0 +1,42 @@ +From 8be260b07df50891463e6efbd45f84b1b8323983 Mon Sep 17 00:00:00 2001 +From: Greg Kurz +Date: Mon, 10 May 2021 15:37:39 -0400 +Subject: [PATCH 07/15] redhat: add missing entries in hw_compat_rhel_8_4 + +RH-Author: Miroslav Rezanina +RH-MergeRequest: 5: Synchronize RHEL-AV 8.5 release 18 to RHEL 9 Beta +RH-Commit: [2/12] 69b6e4dff872478b6d0b09b2587f55967e1c9740 (mrezanin/centos-src-qemu-kvm) +RH-Bugzilla: 1957194 +RH-Acked-by: Danilo Cesar Lemes de Paula +RH-Acked-by: Cornelia Huck +RH-Acked-by: Greg Kurz +RH-Acked-by: Laurent Vivier + +Some entries from hw_compat_5_2 were missing. + +Signed-off-by: Cornelia Huck +Signed-off-by: Greg Kurz +Signed-off-by: Danilo C. L. de Paula +Signed-off-by: Miroslav Rezanina +--- + hw/core/machine.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/hw/core/machine.c b/hw/core/machine.c +index 848e7fdff6..c665e869de 100644 +--- a/hw/core/machine.c ++++ b/hw/core/machine.c +@@ -44,6 +44,10 @@ GlobalProperty hw_compat_rhel_8_4[] = { + { "ICH9-LPC", "smm-compat", "on"}, + /* hw_compat_rhel_8_4 from hw_compat_5_2 */ + { "PIIX4_PM", "smm-compat", "on"}, ++ /* hw_compat_rhel_8_4 from hw_compat_5_2 */ ++ { "virtio-blk-device", "report-discard-granularity", "off" }, ++ /* hw_compat_rhel_8_4 from hw_compat_5_2 */ ++ { "virtio-net-pci", "vectors", "3"}, + }; + const size_t hw_compat_rhel_8_4_len = G_N_ELEMENTS(hw_compat_rhel_8_4); + +-- +2.27.0 + diff --git a/kvm-redhat-s390x-add-rhel-8.5.0-compat-machine.patch b/kvm-redhat-s390x-add-rhel-8.5.0-compat-machine.patch new file mode 100644 index 0000000..1be8506 --- /dev/null +++ b/kvm-redhat-s390x-add-rhel-8.5.0-compat-machine.patch @@ -0,0 +1,59 @@ +From a5e149c13279386c4fc3fae130289ac4ac53bd3e Mon Sep 17 00:00:00 2001 +From: Cornelia Huck +Date: Mon, 10 May 2021 14:41:31 -0400 +Subject: [PATCH 06/15] redhat: s390x: add rhel-8.5.0 compat machine + +RH-Author: Miroslav Rezanina +RH-MergeRequest: 5: Synchronize RHEL-AV 8.5 release 18 to RHEL 9 Beta +RH-Commit: [1/12] 3560ef3f773425f1479a131df7a351df2cbb502c (mrezanin/centos-src-qemu-kvm) +RH-Bugzilla: 1957194 +RH-Acked-by: Danilo Cesar Lemes de Paula +RH-Acked-by: Cornelia Huck +RH-Acked-by: Greg Kurz +RH-Acked-by: Laurent Vivier + +Note that the compat entries for 8.4.0 were already wired up +in the rhel-8.4.0 machine type. + +Signed-off-by: Cornelia Huck +Signed-off-by: Danilo C. L. de Paula +Signed-off-by: Miroslav Rezanina +--- + hw/s390x/s390-virtio-ccw.c | 13 ++++++++++++- + 1 file changed, 12 insertions(+), 1 deletion(-) + +diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c +index 432f36bce5..667a99f336 100644 +--- a/hw/s390x/s390-virtio-ccw.c ++++ b/hw/s390x/s390-virtio-ccw.c +@@ -1074,15 +1074,26 @@ static void ccw_machine_2_4_class_options(MachineClass *mc) + DEFINE_CCW_MACHINE(2_4, "2.4", false); + #endif + ++static void ccw_machine_rhel850_instance_options(MachineState *machine) ++{ ++} ++ ++static void ccw_machine_rhel850_class_options(MachineClass *mc) ++{ ++} ++DEFINE_CCW_MACHINE(rhel850, "rhel8.5.0", true); ++ + static void ccw_machine_rhel840_instance_options(MachineState *machine) + { ++ ccw_machine_rhel850_instance_options(machine); + } + + static void ccw_machine_rhel840_class_options(MachineClass *mc) + { ++ ccw_machine_rhel850_class_options(mc); + compat_props_add(mc->compat_props, hw_compat_rhel_8_4, hw_compat_rhel_8_4_len); + } +-DEFINE_CCW_MACHINE(rhel840, "rhel8.4.0", true); ++DEFINE_CCW_MACHINE(rhel840, "rhel8.4.0", false); + + static void ccw_machine_rhel820_instance_options(MachineState *machine) + { +-- +2.27.0 + diff --git a/kvm-virtio-blk-Configure-all-host-notifiers-in-a-single-.patch b/kvm-virtio-blk-Configure-all-host-notifiers-in-a-single-.patch new file mode 100644 index 0000000..e670a6c --- /dev/null +++ b/kvm-virtio-blk-Configure-all-host-notifiers-in-a-single-.patch @@ -0,0 +1,107 @@ +From f02134f067150d02d1a74ff5aea151096679492e Mon Sep 17 00:00:00 2001 +From: Greg Kurz +Date: Wed, 26 May 2021 09:03:52 -0400 +Subject: [PATCH 12/15] virtio-blk: Configure all host notifiers in a single MR + transaction + +RH-Author: Miroslav Rezanina +RH-MergeRequest: 5: Synchronize RHEL-AV 8.5 release 18 to RHEL 9 Beta +RH-Commit: [9/12] 609631835874ea62dad1ffbd469e83744299ee07 (mrezanin/centos-src-qemu-kvm) +RH-Bugzilla: 1957194 +RH-Acked-by: Danilo Cesar Lemes de Paula +RH-Acked-by: Cornelia Huck +RH-Acked-by: Greg Kurz +RH-Acked-by: Laurent Vivier + +This allows the virtio-blk-pci device to batch the setup of all its +host notifiers. This significantly improves boot time of VMs with a +high number of vCPUs, e.g. from 3m26.186s down to 0m58.023s for a +pseries machine with 384 vCPUs. + +Note that memory_region_transaction_commit() must be called before +virtio_bus_cleanup_host_notifier() because the latter might close +ioeventfds that the transaction still assumes to be around when it +commits. + +Signed-off-by: Greg Kurz +Message-Id: <20210407143501.244343-3-groug@kaod.org> +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit d0267da614890b8f817364ae25850cdbb580a569) +Signed-off-by: Greg Kurz +Signed-off-by: Danilo C. L. de Paula +Signed-off-by: Miroslav Rezanina +--- + hw/block/dataplane/virtio-blk.c | 25 +++++++++++++++++++++++++ + 1 file changed, 25 insertions(+) + +diff --git a/hw/block/dataplane/virtio-blk.c b/hw/block/dataplane/virtio-blk.c +index d7b5c95d26..cd81893d1d 100644 +--- a/hw/block/dataplane/virtio-blk.c ++++ b/hw/block/dataplane/virtio-blk.c +@@ -198,19 +198,30 @@ int virtio_blk_data_plane_start(VirtIODevice *vdev) + goto fail_guest_notifiers; + } + ++ memory_region_transaction_begin(); ++ + /* Set up virtqueue notify */ + for (i = 0; i < nvqs; i++) { + r = virtio_bus_set_host_notifier(VIRTIO_BUS(qbus), i, true); + if (r != 0) { ++ int j = i; ++ + fprintf(stderr, "virtio-blk failed to set host notifier (%d)\n", r); + while (i--) { + virtio_bus_set_host_notifier(VIRTIO_BUS(qbus), i, false); ++ } ++ ++ memory_region_transaction_commit(); ++ ++ while (j--) { + virtio_bus_cleanup_host_notifier(VIRTIO_BUS(qbus), i); + } + goto fail_host_notifiers; + } + } + ++ memory_region_transaction_commit(); ++ + s->starting = false; + vblk->dataplane_started = true; + trace_virtio_blk_data_plane_start(s); +@@ -246,8 +257,15 @@ int virtio_blk_data_plane_start(VirtIODevice *vdev) + return 0; + + fail_aio_context: ++ memory_region_transaction_begin(); ++ + for (i = 0; i < nvqs; i++) { + virtio_bus_set_host_notifier(VIRTIO_BUS(qbus), i, false); ++ } ++ ++ memory_region_transaction_commit(); ++ ++ for (i = 0; i < nvqs; i++) { + virtio_bus_cleanup_host_notifier(VIRTIO_BUS(qbus), i); + } + fail_host_notifiers: +@@ -312,8 +330,15 @@ void virtio_blk_data_plane_stop(VirtIODevice *vdev) + + aio_context_release(s->ctx); + ++ memory_region_transaction_begin(); ++ + for (i = 0; i < nvqs; i++) { + virtio_bus_set_host_notifier(VIRTIO_BUS(qbus), i, false); ++ } ++ ++ memory_region_transaction_commit(); ++ ++ for (i = 0; i < nvqs; i++) { + virtio_bus_cleanup_host_notifier(VIRTIO_BUS(qbus), i); + } + +-- +2.27.0 + diff --git a/kvm-virtio-blk-Fix-rollback-path-in-virtio_blk_data_plan.patch b/kvm-virtio-blk-Fix-rollback-path-in-virtio_blk_data_plan.patch new file mode 100644 index 0000000..d08e1aa --- /dev/null +++ b/kvm-virtio-blk-Fix-rollback-path-in-virtio_blk_data_plan.patch @@ -0,0 +1,83 @@ +From b8febd2f080de1f12e68cc233c68c7a39835a3c4 Mon Sep 17 00:00:00 2001 +From: Greg Kurz +Date: Wed, 26 May 2021 09:03:51 -0400 +Subject: [PATCH 11/15] virtio-blk: Fix rollback path in + virtio_blk_data_plane_start() + +RH-Author: Miroslav Rezanina +RH-MergeRequest: 5: Synchronize RHEL-AV 8.5 release 18 to RHEL 9 Beta +RH-Commit: [8/12] 73d05400a537ce1847605dca58aff99e0a905919 (mrezanin/centos-src-qemu-kvm) +RH-Bugzilla: 1957194 +RH-Acked-by: Danilo Cesar Lemes de Paula +RH-Acked-by: Cornelia Huck +RH-Acked-by: Greg Kurz +RH-Acked-by: Laurent Vivier + +When dataplane multiqueue support was added in QEMU 2.7, the path +that would rollback guest notifiers assignment in case of error +simply got dropped. + +Later on, when Error was added to blk_set_aio_context() in QEMU 4.1, +another error path was introduced, but it ommits to rollback both +host and guest notifiers. + +It seems cleaner to fix the rollback path in one go. The patch is +simple enough that it can be adjusted if backported to a pre-4.1 +QEMU. + +Fixes: 51b04ac5c6a6 ("virtio-blk: dataplane multiqueue support") +Cc: stefanha@redhat.com +Fixes: 97896a4887a0 ("block: Add Error to blk_set_aio_context()") +Cc: kwolf@redhat.com +Signed-off-by: Greg Kurz +Reviewed-by: Stefan Hajnoczi +Message-Id: <20210407143501.244343-2-groug@kaod.org> +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 570fe439e5d1b8626cf344c6bc97d90cfcaf0c79) +Signed-off-by: Greg Kurz +Signed-off-by: Danilo C. L. de Paula +Signed-off-by: Miroslav Rezanina +--- + hw/block/dataplane/virtio-blk.c | 11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) + +diff --git a/hw/block/dataplane/virtio-blk.c b/hw/block/dataplane/virtio-blk.c +index e9050c8987..d7b5c95d26 100644 +--- a/hw/block/dataplane/virtio-blk.c ++++ b/hw/block/dataplane/virtio-blk.c +@@ -207,7 +207,7 @@ int virtio_blk_data_plane_start(VirtIODevice *vdev) + virtio_bus_set_host_notifier(VIRTIO_BUS(qbus), i, false); + virtio_bus_cleanup_host_notifier(VIRTIO_BUS(qbus), i); + } +- goto fail_guest_notifiers; ++ goto fail_host_notifiers; + } + } + +@@ -221,7 +221,7 @@ int virtio_blk_data_plane_start(VirtIODevice *vdev) + aio_context_release(old_context); + if (r < 0) { + error_report_err(local_err); +- goto fail_guest_notifiers; ++ goto fail_aio_context; + } + + /* Process queued requests before the ones in vring */ +@@ -245,6 +245,13 @@ int virtio_blk_data_plane_start(VirtIODevice *vdev) + aio_context_release(s->ctx); + return 0; + ++ fail_aio_context: ++ for (i = 0; i < nvqs; i++) { ++ virtio_bus_set_host_notifier(VIRTIO_BUS(qbus), i, false); ++ virtio_bus_cleanup_host_notifier(VIRTIO_BUS(qbus), i); ++ } ++ fail_host_notifiers: ++ k->set_guest_notifiers(qbus->parent, nvqs, false); + fail_guest_notifiers: + /* + * If we failed to set up the guest notifiers queued requests will be +-- +2.27.0 + diff --git a/kvm-virtio-net-failover-add-missing-remove_migration_sta.patch b/kvm-virtio-net-failover-add-missing-remove_migration_sta.patch new file mode 100644 index 0000000..acd5a66 --- /dev/null +++ b/kvm-virtio-net-failover-add-missing-remove_migration_sta.patch @@ -0,0 +1,77 @@ +From 21027e308bf410293a745d4358a848e9aa037df1 Mon Sep 17 00:00:00 2001 +From: Laurent Vivier +Date: Mon, 10 May 2021 13:08:20 -0400 +Subject: [PATCH 09/15] virtio-net: failover: add missing + remove_migration_state_change_notifier() + +RH-Author: Miroslav Rezanina +RH-MergeRequest: 5: Synchronize RHEL-AV 8.5 release 18 to RHEL 9 Beta +RH-Commit: [4/12] 884f0f99fbbba4312663ec6232b1d8c9576df84e (mrezanin/centos-src-qemu-kvm) +RH-Bugzilla: 1957194 +RH-Acked-by: Danilo Cesar Lemes de Paula +RH-Acked-by: Cornelia Huck +RH-Acked-by: Greg Kurz +RH-Acked-by: Laurent Vivier + +In the failover case configuration, virtio_net_device_realize() uses an +add_migration_state_change_notifier() to add a state notifier, but this +notifier is not removed by the unrealize function when the virtio-net +card is unplugged. + +If the card is unplugged and a migration is started, the notifier is +called and as it is not valid anymore QEMU crashes. + +This patch fixes the problem by adding the +remove_migration_state_change_notifier() in virtio_net_device_unrealize(). + +The problem can be reproduced with: + + $ qemu-system-x86_64 -enable-kvm -m 1g -M q35 \ + -device pcie-root-port,slot=4,id=root1 \ + -device pcie-root-port,slot=5,id=root2 \ + -device virtio-net-pci,id=net1,mac=52:54:00:6f:55:cc,failover=on,bus=root1 \ + -monitor stdio disk.qcow2 + (qemu) device_del net1 + (qemu) migrate "exec:gzip -c > STATEFILE.gz" + + Thread 1 "qemu-system-x86" received signal SIGSEGV, Segmentation fault. + 0x0000000000000000 in ?? () + (gdb) bt + #0 0x0000000000000000 in () + #1 0x0000555555d726d7 in notifier_list_notify (...) + at .../util/notify.c:39 + #2 0x0000555555842c1a in migrate_fd_connect (...) + at .../migration/migration.c:3975 + #3 0x0000555555950f7d in migration_channel_connect (...) + error@entry=0x0) at .../migration/channel.c:107 + #4 0x0000555555910922 in exec_start_outgoing_migration (...) + at .../migration/exec.c:42 + +Reported-by: Igor Mammedov +Reviewed-by: Dr. David Alan Gilbert +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Laurent Vivier +Signed-off-by: Jason Wang +(cherry picked from commit a7eca58380f9589bb1bb6333ccfb58869734edb6) +Signed-off-by: Laurent Vivier +Signed-off-by: Danilo C. L. de Paula +Signed-off-by: Miroslav Rezanina +--- + hw/net/virtio-net.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c +index 66b9ff4511..914051feb7 100644 +--- a/hw/net/virtio-net.c ++++ b/hw/net/virtio-net.c +@@ -3373,6 +3373,7 @@ static void virtio_net_device_unrealize(DeviceState *dev) + + if (n->failover) { + device_listener_unregister(&n->primary_listener); ++ remove_migration_state_change_notifier(&n->migration_state); + } + + max_queues = n->multiqueue ? n->max_queues : 1; +-- +2.27.0 + diff --git a/kvm-virtio-scsi-Configure-all-host-notifiers-in-a-single.patch b/kvm-virtio-scsi-Configure-all-host-notifiers-in-a-single.patch new file mode 100644 index 0000000..a58b251 --- /dev/null +++ b/kvm-virtio-scsi-Configure-all-host-notifiers-in-a-single.patch @@ -0,0 +1,91 @@ +From 5e7855d3c9d5a59d2c0ac05444428b058ca9abb8 Mon Sep 17 00:00:00 2001 +From: Greg Kurz +Date: Wed, 26 May 2021 09:03:54 -0400 +Subject: [PATCH 14/15] virtio-scsi: Configure all host notifiers in a single + MR transaction + +RH-Author: Miroslav Rezanina +RH-MergeRequest: 5: Synchronize RHEL-AV 8.5 release 18 to RHEL 9 Beta +RH-Commit: [11/12] f3c785c4b63aeb3a7b153f2fc17e86c983f98c23 (mrezanin/centos-src-qemu-kvm) +RH-Bugzilla: 1957194 +RH-Acked-by: Danilo Cesar Lemes de Paula +RH-Acked-by: Cornelia Huck +RH-Acked-by: Greg Kurz +RH-Acked-by: Laurent Vivier + +This allows the virtio-scsi-pci device to batch the setup of all its +host notifiers. This significantly improves boot time of VMs with a +high number of vCPUs, e.g. from 6m5.563s down to 1m2.884s for a +pseries machine with 384 vCPUs. + +Note that memory_region_transaction_commit() must be called before +virtio_bus_cleanup_host_notifier() because the latter might close +ioeventfds that the transaction still assumes to be around when it +commits. + +Signed-off-by: Greg Kurz +Message-Id: <20210407143501.244343-5-groug@kaod.org> +Reviewed-by: Stefan Hajnoczi +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit c4f5dcc4360a02085a633fd7a90b7ac395ca1ba4) +Signed-off-by: Greg Kurz +Signed-off-by: Danilo C. L. de Paula +Signed-off-by: Miroslav Rezanina +--- + hw/scsi/virtio-scsi-dataplane.c | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) + +diff --git a/hw/scsi/virtio-scsi-dataplane.c b/hw/scsi/virtio-scsi-dataplane.c +index b2cb3d9dcc..28e003250a 100644 +--- a/hw/scsi/virtio-scsi-dataplane.c ++++ b/hw/scsi/virtio-scsi-dataplane.c +@@ -152,6 +152,8 @@ int virtio_scsi_dataplane_start(VirtIODevice *vdev) + goto fail_guest_notifiers; + } + ++ memory_region_transaction_begin(); ++ + rc = virtio_scsi_set_host_notifier(s, vs->ctrl_vq, 0); + if (rc != 0) { + goto fail_host_notifiers; +@@ -173,6 +175,8 @@ int virtio_scsi_dataplane_start(VirtIODevice *vdev) + vq_init_count++; + } + ++ memory_region_transaction_commit(); ++ + aio_context_acquire(s->ctx); + virtio_queue_aio_set_host_notifier_handler(vs->ctrl_vq, s->ctx, + virtio_scsi_data_plane_handle_ctrl); +@@ -192,6 +196,11 @@ int virtio_scsi_dataplane_start(VirtIODevice *vdev) + fail_host_notifiers: + for (i = 0; i < vq_init_count; i++) { + virtio_bus_set_host_notifier(VIRTIO_BUS(qbus), i, false); ++ } ++ ++ memory_region_transaction_commit(); ++ ++ for (i = 0; i < vq_init_count; i++) { + virtio_bus_cleanup_host_notifier(VIRTIO_BUS(qbus), i); + } + k->set_guest_notifiers(qbus->parent, vs->conf.num_queues + 2, false); +@@ -229,8 +238,15 @@ void virtio_scsi_dataplane_stop(VirtIODevice *vdev) + + blk_drain_all(); /* ensure there are no in-flight requests */ + ++ memory_region_transaction_begin(); ++ + for (i = 0; i < vs->conf.num_queues + 2; i++) { + virtio_bus_set_host_notifier(VIRTIO_BUS(qbus), i, false); ++ } ++ ++ memory_region_transaction_commit(); ++ ++ for (i = 0; i < vs->conf.num_queues + 2; i++) { + virtio_bus_cleanup_host_notifier(VIRTIO_BUS(qbus), i); + } + +-- +2.27.0 + diff --git a/kvm-virtio-scsi-Set-host-notifiers-and-callbacks-separat.patch b/kvm-virtio-scsi-Set-host-notifiers-and-callbacks-separat.patch new file mode 100644 index 0000000..ab10168 --- /dev/null +++ b/kvm-virtio-scsi-Set-host-notifiers-and-callbacks-separat.patch @@ -0,0 +1,125 @@ +From 0ca53acb7ee0a3b3b72685f47df1fb2466989d6c Mon Sep 17 00:00:00 2001 +From: Greg Kurz +Date: Wed, 26 May 2021 09:03:53 -0400 +Subject: [PATCH 13/15] virtio-scsi: Set host notifiers and callbacks + separately + +RH-Author: Miroslav Rezanina +RH-MergeRequest: 5: Synchronize RHEL-AV 8.5 release 18 to RHEL 9 Beta +RH-Commit: [10/12] 61f873b494c52dc34eb60a705046bfead08532da (mrezanin/centos-src-qemu-kvm) +RH-Bugzilla: 1957194 +RH-Acked-by: Danilo Cesar Lemes de Paula +RH-Acked-by: Cornelia Huck +RH-Acked-by: Greg Kurz +RH-Acked-by: Laurent Vivier + +Host notifiers are guaranteed to be idle until the callbacks are +hooked up with virtio_queue_aio_set_host_notifier_handler(). They +thus don't need to be set or unset with the AioContext lock held. + +Do this outside the critical section, like virtio-blk already +does : basically downgrading virtio_scsi_vring_init() to only +setup the host notifier and set the callback in the caller. + +This will allow to batch addition/deletion of ioeventds in +a single memory transaction, which is expected to greatly +improve initialization time. + +Signed-off-by: Greg Kurz +Message-Id: <20210407143501.244343-4-groug@kaod.org> +Reviewed-by: Stefan Hajnoczi +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 61fc57bfc464c3584bd7ab810c86833661f0188c) +Signed-off-by: Greg Kurz +Signed-off-by: Danilo C. L. de Paula +Signed-off-by: Miroslav Rezanina +--- + hw/scsi/virtio-scsi-dataplane.c | 40 ++++++++++++++++++--------------- + 1 file changed, 22 insertions(+), 18 deletions(-) + +diff --git a/hw/scsi/virtio-scsi-dataplane.c b/hw/scsi/virtio-scsi-dataplane.c +index 4ad8793406..b2cb3d9dcc 100644 +--- a/hw/scsi/virtio-scsi-dataplane.c ++++ b/hw/scsi/virtio-scsi-dataplane.c +@@ -94,8 +94,7 @@ static bool virtio_scsi_data_plane_handle_event(VirtIODevice *vdev, + return progress; + } + +-static int virtio_scsi_vring_init(VirtIOSCSI *s, VirtQueue *vq, int n, +- VirtIOHandleAIOOutput fn) ++static int virtio_scsi_set_host_notifier(VirtIOSCSI *s, VirtQueue *vq, int n) + { + BusState *qbus = BUS(qdev_get_parent_bus(DEVICE(s))); + int rc; +@@ -109,7 +108,6 @@ static int virtio_scsi_vring_init(VirtIOSCSI *s, VirtQueue *vq, int n, + return rc; + } + +- virtio_queue_aio_set_host_notifier_handler(vq, s->ctx, fn); + return 0; + } + +@@ -154,38 +152,44 @@ int virtio_scsi_dataplane_start(VirtIODevice *vdev) + goto fail_guest_notifiers; + } + +- aio_context_acquire(s->ctx); +- rc = virtio_scsi_vring_init(s, vs->ctrl_vq, 0, +- virtio_scsi_data_plane_handle_ctrl); +- if (rc) { +- goto fail_vrings; ++ rc = virtio_scsi_set_host_notifier(s, vs->ctrl_vq, 0); ++ if (rc != 0) { ++ goto fail_host_notifiers; + } + + vq_init_count++; +- rc = virtio_scsi_vring_init(s, vs->event_vq, 1, +- virtio_scsi_data_plane_handle_event); +- if (rc) { +- goto fail_vrings; ++ rc = virtio_scsi_set_host_notifier(s, vs->event_vq, 1); ++ if (rc != 0) { ++ goto fail_host_notifiers; + } + + vq_init_count++; ++ + for (i = 0; i < vs->conf.num_queues; i++) { +- rc = virtio_scsi_vring_init(s, vs->cmd_vqs[i], i + 2, +- virtio_scsi_data_plane_handle_cmd); ++ rc = virtio_scsi_set_host_notifier(s, vs->cmd_vqs[i], i + 2); + if (rc) { +- goto fail_vrings; ++ goto fail_host_notifiers; + } + vq_init_count++; + } + ++ aio_context_acquire(s->ctx); ++ virtio_queue_aio_set_host_notifier_handler(vs->ctrl_vq, s->ctx, ++ virtio_scsi_data_plane_handle_ctrl); ++ virtio_queue_aio_set_host_notifier_handler(vs->event_vq, s->ctx, ++ virtio_scsi_data_plane_handle_event); ++ ++ for (i = 0; i < vs->conf.num_queues; i++) { ++ virtio_queue_aio_set_host_notifier_handler(vs->cmd_vqs[i], s->ctx, ++ virtio_scsi_data_plane_handle_cmd); ++ } ++ + s->dataplane_starting = false; + s->dataplane_started = true; + aio_context_release(s->ctx); + return 0; + +-fail_vrings: +- aio_wait_bh_oneshot(s->ctx, virtio_scsi_dataplane_stop_bh, s); +- aio_context_release(s->ctx); ++fail_host_notifiers: + for (i = 0; i < vq_init_count; i++) { + virtio_bus_set_host_notifier(VIRTIO_BUS(qbus), i, false); + virtio_bus_cleanup_host_notifier(VIRTIO_BUS(qbus), i); +-- +2.27.0 + diff --git a/qemu-kvm.spec b/qemu-kvm.spec index 3eb1eaa..ae2bcd2 100644 --- a/qemu-kvm.spec +++ b/qemu-kvm.spec @@ -4,7 +4,6 @@ %global have_usbredir 1 %global have_opengl 1 %global have_fdt 0 -%global have_gluster 1 %global have_kvm_setup 0 %global have_memlock_limits 0 @@ -27,7 +26,6 @@ %global kvm_target x86_64 %else %global have_opengl 0 - %global have_gluster 0 %endif %ifarch %{power64} %global kvm_target ppc64 @@ -55,9 +53,6 @@ Requires: %{name}-ui-opengl = %{epoch}:%{version}-%{release} \ %endif \ Requires: %{name}-block-curl = %{epoch}:%{version}-%{release} \ -%if %{have_gluster} \ -Requires: %{name}-block-gluster = %{epoch}:%{version}-%{release} \ -%endif \ Requires: %{name}-block-iscsi = %{epoch}:%{version}-%{release} \ Requires: %{name}-block-rbd = %{epoch}:%{version}-%{release} \ Requires: %{name}-block-ssh = %{epoch}:%{version}-%{release} @@ -65,9 +60,11 @@ Requires: %{name}-block-ssh = %{epoch}:%{version}-%{release} Summary: QEMU is a machine emulator and virtualizer Name: qemu-kvm Version: 6.0.0 -Release: 4%{?rcversion}%{?dist} +Release: 5%{?rcversion}%{?dist} # Epoch because we pushed a qemu-1.0 package. AIUI this can't ever be dropped -Epoch: 15 +# Epoch 15 used for RHEL 8 +# Epoch 17 used for RHEL 9 (due to release versioning offset in RHEL 8.5) +Epoch: 17 License: GPLv2 and GPLv2+ and CC-BY Group: Development/Tools URL: http://www.qemu.org/ @@ -121,6 +118,32 @@ Patch19: kvm-Remove-SPICE-and-QXL-from-x86_64-rh-devices.mak.patch Patch20: kvm-hw-s390x-Remove-the-RHEL7-only-machine-type.patch # For bz#1962479 - Disable the 'x-terminal3270' device in qemu-kvm on s390x Patch21: kvm-s390x-redhat-disable-experimental-3270-device.patch +# For bz#1952449 - [aarch64] define RHEL9 machine types +Patch22: kvm-arm-virt-Register-highmem-and-gic-version-as-class-p.patch +# For bz#1952449 - [aarch64] define RHEL9 machine types +Patch23: kvm-hw-arm-virt-Add-8.5-and-9.0-machine-types-and-remove.patch +# For bz#1747467 - [aarch64] [qemu] PVPANIC support +Patch24: kvm-aarch64-rh-devices-add-CONFIG_PVPANIC_PCI.patch +# For bz#1957194 - Synchronize RHEL-AV 8.5.0 changes to RHEL 9.0.0 Beta +Patch25: kvm-redhat-s390x-add-rhel-8.5.0-compat-machine.patch +# For bz#1957194 - Synchronize RHEL-AV 8.5.0 changes to RHEL 9.0.0 Beta +Patch26: kvm-redhat-add-missing-entries-in-hw_compat_rhel_8_4.patch +# For bz#1957194 - Synchronize RHEL-AV 8.5.0 changes to RHEL 9.0.0 Beta +Patch27: kvm-redhat-Define-pseries-rhel8.5.0-machine-type.patch +# For bz#1957194 - Synchronize RHEL-AV 8.5.0 changes to RHEL 9.0.0 Beta +Patch28: kvm-virtio-net-failover-add-missing-remove_migration_sta.patch +# For bz#1957194 - Synchronize RHEL-AV 8.5.0 changes to RHEL 9.0.0 Beta +Patch29: kvm-hw-arm-virt-Disable-PL011-clock-migration-through-hw.patch +# For bz#1957194 - Synchronize RHEL-AV 8.5.0 changes to RHEL 9.0.0 Beta +Patch30: kvm-virtio-blk-Fix-rollback-path-in-virtio_blk_data_plan.patch +# For bz#1957194 - Synchronize RHEL-AV 8.5.0 changes to RHEL 9.0.0 Beta +Patch31: kvm-virtio-blk-Configure-all-host-notifiers-in-a-single-.patch +# For bz#1957194 - Synchronize RHEL-AV 8.5.0 changes to RHEL 9.0.0 Beta +Patch32: kvm-virtio-scsi-Set-host-notifiers-and-callbacks-separat.patch +# For bz#1957194 - Synchronize RHEL-AV 8.5.0 changes to RHEL 9.0.0 Beta +Patch33: kvm-virtio-scsi-Configure-all-host-notifiers-in-a-single.patch +# For bz#1957194 - Synchronize RHEL-AV 8.5.0 changes to RHEL 9.0.0 Beta +Patch34: kvm-hw-arm-smmuv3-Another-range-invalidation-fix.patch BuildRequires: wget BuildRequires: rpm-build @@ -151,11 +174,6 @@ BuildRequires: libcurl-devel BuildRequires: libssh-devel BuildRequires: librados-devel BuildRequires: librbd-devel -%if %{have_gluster} -# For gluster block driver -BuildRequires: glusterfs-api-devel -BuildRequires: glusterfs-devel -%endif # We need both because the 'stap' binary is probed for by configure BuildRequires: systemtap BuildRequires: systemtap-sdt-devel @@ -269,6 +287,7 @@ Requires: libfdt >= 1.6.0 # The "<= {version}" assumes RHEL-9 version >= RHEL-8 version (in # other words RHEL-9 rebases are done together/before RHEL-8 ones) Obsoletes: qemu-kvm-ui-spice <= %{version} +Obsoletes: qemu-kvm-block-gluster <= %{version} %description -n qemu-kvm-core qemu-kvm is an open source virtualizer that provides hardware @@ -353,17 +372,6 @@ Install this package if you want to access remote disks over http, https, ftp and other transports provided by the CURL library. -%if %{have_gluster} -%package block-gluster -Summary: QEMU Gluster block driver -Requires: %{name}-common%{?_isa} = %{epoch}:%{version}-%{release} -%description block-gluster -This package provides the additional Gluster block driver for QEMU. - -Install this package if you want to access remote Gluster storage. -%endif - - %package block-iscsi Summary: QEMU iSCSI block driver Requires: %{name}-common%{?_isa} = %{epoch}:%{version}-%{release} @@ -429,11 +437,6 @@ buildldflags="VL_LDFLAGS=-Wl,--build-id" %global block_drivers_list qcow2,raw,file,host_device,nbd,iscsi,rbd,blkdebug,luks,null-co,nvme,copy-on-read,throttle -%if 0%{have_gluster} - %global block_drivers_list %{block_drivers_list},gluster -%endif - - %define disable_everything \\\ --disable-attr \\\ --disable-auth-pam \\\ @@ -594,9 +597,6 @@ pushd %{qemu_kvm_build} --enable-fdt \ %endif --enable-gcrypt \ -%if 0%{have_gluster} - --enable-glusterfs \ -%endif --enable-gnutls \ --enable-guest-agent \ --enable-iconv \ @@ -937,8 +937,6 @@ pxe_link() { %ifnarch aarch64 s390x pxe_link e1000 8086100e -pxe_link ne2k_pci 10ec8029 -pxe_link pcnet 10222000 pxe_link rtl8139 10ec8139 pxe_link virtio 1af41000 pxe_link e1000e 808610d3 @@ -1134,9 +1132,7 @@ sh %{_sysconfdir}/sysconfig/modules/kvm.modules &> /dev/null || : %{_datadir}/%{name}/efi-e1000.rom %{_datadir}/%{name}/efi-e1000e.rom %{_datadir}/%{name}/efi-virtio.rom - %{_datadir}/%{name}/efi-pcnet.rom %{_datadir}/%{name}/efi-rtl8139.rom - %{_datadir}/%{name}/efi-ne2k_pci.rom %{_libdir}/qemu-kvm/hw-display-virtio-vga.so %endif %{_datadir}/icons/* @@ -1205,11 +1201,6 @@ sh %{_sysconfdir}/sysconfig/modules/kvm.modules &> /dev/null || : %files block-curl %{_libdir}/qemu-kvm/block-curl.so -%if %{have_gluster} -%files block-gluster -%{_libdir}/qemu-kvm/block-gluster.so -%endif - %files block-iscsi %{_libdir}/qemu-kvm/block-iscsi.so @@ -1227,6 +1218,33 @@ sh %{_sysconfdir}/sysconfig/modules/kvm.modules &> /dev/null || : %endif %changelog +* Tue Jun 08 2021 Miroslav Rezanina - 6.0.0-5 +- kvm-arm-virt-Register-highmem-and-gic-version-as-class-p.patch [bz#1952449] +- kvm-hw-arm-virt-Add-8.5-and-9.0-machine-types-and-remove.patch [bz#1952449] +- kvm-aarch64-rh-devices-add-CONFIG_PVPANIC_PCI.patch [bz#1747467] +- kvm-spec-Do-not-build-qemu-kvm-block-gluster.patch [bz#1964795] +- kvm-spec-Do-not-link-pcnet-and-ne2k_pci-roms.patch [bz#1965961] +- kvm-redhat-s390x-add-rhel-8.5.0-compat-machine.patch [bz#1957194] +- kvm-redhat-add-missing-entries-in-hw_compat_rhel_8_4.patch [bz#1957194] +- kvm-redhat-Define-pseries-rhel8.5.0-machine-type.patch [bz#1957194] +- kvm-virtio-net-failover-add-missing-remove_migration_sta.patch [bz#1957194] +- kvm-hw-arm-virt-Disable-PL011-clock-migration-through-hw.patch [bz#1957194] +- kvm-virtio-blk-Fix-rollback-path-in-virtio_blk_data_plan.patch [bz#1957194] +- kvm-virtio-blk-Configure-all-host-notifiers-in-a-single-.patch [bz#1957194] +- kvm-virtio-scsi-Set-host-notifiers-and-callbacks-separat.patch [bz#1957194] +- kvm-virtio-scsi-Configure-all-host-notifiers-in-a-single.patch [bz#1957194] +- kvm-hw-arm-smmuv3-Another-range-invalidation-fix.patch [bz#1957194] +- Resolves: bz#1952449 + ([aarch64] define RHEL9 machine types) +- Resolves: bz#1747467 + ([aarch64] [qemu] PVPANIC support) +- Resolves: bz#1964795 + (Remove qemu-kvm-block-gluster package) +- Resolves: bz#1965961 + (Remove links to not build roms) +- Resolves: bz#1957194 + (Synchronize RHEL-AV 8.5.0 changes to RHEL 9.0.0 Beta) + * Mon May 31 2021 Miroslav Rezanina - 6.0.0-4 - kvm-s390x-redhat-disable-experimental-3270-device.patch - Resolves: bz#1962479