diff --git a/block-rbd-workaround-for-ceph-issue-53784.patch b/block-rbd-workaround-for-ceph-issue-53784.patch new file mode 100644 index 0000000000000000000000000000000000000000..efd6225bffa6eee217ab61383e3f940298861ffe --- /dev/null +++ b/block-rbd-workaround-for-ceph-issue-53784.patch @@ -0,0 +1,93 @@ +From 43302c8f56518cd467578fa084d64fd42c59348c Mon Sep 17 00:00:00 2001 +From: Peter Lieven +Date: Thu, 13 Jan 2022 15:44:26 +0100 +Subject: [PATCH] block/rbd: workaround for ceph issue #53784 + +librbd had a bug until early 2022 that affected all versions of ceph that +supported fast-diff. This bug results in reporting of incorrect offsets +if the offset parameter to rbd_diff_iterate2 is not object aligned. + +This patch works around this bug for pre Quincy versions of librbd. + +Fixes: 0347a8fd4c3faaedf119be04c197804be40a384b +Cc: qemu-stable@nongnu.org +Signed-off-by: Peter Lieven +Message-Id: <20220113144426.4036493-3-pl@kamp.de> +Reviewed-by: Ilya Dryomov +Reviewed-by: Stefano Garzarella +Tested-by: Stefano Garzarella +Signed-off-by: Kevin Wolf +--- + block/rbd.c | 42 ++++++++++++++++++++++++++++++++++++++++-- + 1 file changed, 40 insertions(+), 2 deletions(-) + +diff --git a/block/rbd.c b/block/rbd.c +index def96292e0..92dfb6083b 100644 +--- a/block/rbd.c ++++ b/block/rbd.c +@@ -1320,6 +1320,7 @@ static int coroutine_fn qemu_rbd_co_block_status(BlockDriverState *bs, + int status, r; + RBDDiffIterateReq req = { .offs = offset }; + uint64_t features, flags; ++ uint64_t head = 0; + + assert(offset + bytes <= s->image_size); + +@@ -1347,7 +1348,43 @@ static int coroutine_fn qemu_rbd_co_block_status(BlockDriverState *bs, + return status; + } + +- r = rbd_diff_iterate2(s->image, NULL, offset, bytes, true, true, ++#if LIBRBD_VERSION_CODE < LIBRBD_VERSION(1, 17, 0) ++ /* ++ * librbd had a bug until early 2022 that affected all versions of ceph that ++ * supported fast-diff. This bug results in reporting of incorrect offsets ++ * if the offset parameter to rbd_diff_iterate2 is not object aligned. ++ * Work around this bug by rounding down the offset to object boundaries. ++ * This is OK because we call rbd_diff_iterate2 with whole_object = true. ++ * However, this workaround only works for non cloned images with default ++ * striping. ++ * ++ * See: https://tracker.ceph.com/issues/53784 ++ */ ++ ++ /* check if RBD image has non-default striping enabled */ ++ if (features & RBD_FEATURE_STRIPINGV2) { ++ return status; ++ } ++ ++#pragma GCC diagnostic push ++#pragma GCC diagnostic ignored "-Wdeprecated-declarations" ++ /* ++ * check if RBD image is a clone (= has a parent). ++ * ++ * rbd_get_parent_info is deprecated from Nautilus onwards, but the ++ * replacement rbd_get_parent is not present in Luminous and Mimic. ++ */ ++ if (rbd_get_parent_info(s->image, NULL, 0, NULL, 0, NULL, 0) != -ENOENT) { ++ return status; ++ } ++#pragma GCC diagnostic pop ++ ++ head = req.offs & (s->object_size - 1); ++ req.offs -= head; ++ bytes += head; ++#endif ++ ++ r = rbd_diff_iterate2(s->image, NULL, req.offs, bytes, true, true, + qemu_rbd_diff_iterate_cb, &req); + if (r < 0 && r != QEMU_RBD_EXIT_DIFF_ITERATE2) { + return status; +@@ -1366,7 +1403,8 @@ static int coroutine_fn qemu_rbd_co_block_status(BlockDriverState *bs, + status = BDRV_BLOCK_ZERO | BDRV_BLOCK_OFFSET_VALID; + } + +- *pnum = req.bytes; ++ assert(req.bytes > head); ++ *pnum = req.bytes - head; + return status; + } + +-- +2.27.0 + diff --git a/core-cpu-common-Fix-the-wrong-ifdef-__aarch64__.patch b/core-cpu-common-Fix-the-wrong-ifdef-__aarch64__.patch new file mode 100644 index 0000000000000000000000000000000000000000..79a70ec61e2c13e21eeffa39769f3dc5a7c67f91 --- /dev/null +++ b/core-cpu-common-Fix-the-wrong-ifdef-__aarch64__.patch @@ -0,0 +1,32 @@ +From a6f84e8f2c1fef8ca8f48f81e2e6a1b823d9a90e Mon Sep 17 00:00:00 2001 +From: Kunkun Jiang +Date: Fri, 21 Apr 2023 14:53:46 +0800 +Subject: [PATCH] core/cpu-common: Fix the wrong '#ifdef __aarch64__' + +commit c3f86c199885 ("arm/virt: Correct timing of executing +cpu_synchronize_post_init for hot-plugged cpus") used the +wrong '#ifdef __aarch64__'. It should be '#ifndef __aarch64__'. + +Fixes: c3f86c199885 ("arm/virt: Correct timing of executing +cpu_synchronize_post_init for hot-plugged cpus") +Signed-off-by: Kunkun Jiang +--- + hw/core/cpu-common.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hw/core/cpu-common.c b/hw/core/cpu-common.c +index 2213840260..92d15f2f49 100644 +--- a/hw/core/cpu-common.c ++++ b/hw/core/cpu-common.c +@@ -206,7 +206,7 @@ static void cpu_common_realizefn(DeviceState *dev, Error **errp) + } + } + +-#ifdef __aarch64__ ++#ifndef __aarch64__ + if (dev->hotplugged) { + cpu_synchronize_post_init(cpu); + cpu_resume(cpu); +-- +2.27.0 + diff --git a/i386-Add-new-CPU-model-SapphireRapids.patch b/i386-Add-new-CPU-model-SapphireRapids.patch new file mode 100644 index 0000000000000000000000000000000000000000..9286476608a2b0cf722b3ff473904dc67c99cfc4 --- /dev/null +++ b/i386-Add-new-CPU-model-SapphireRapids.patch @@ -0,0 +1,221 @@ +From f91b5ed322bbb6d793fca7005ac350d466fff232 Mon Sep 17 00:00:00 2001 +From: "Wang, Lei" +Date: Thu, 11 Aug 2022 22:57:51 -0700 +Subject: [PATCH] i386: Add new CPU model SapphireRapids + +The new CPU model mostly inherits features from Icelake-Server, while +adding new features: + - AMX (Advance Matrix eXtensions) + - Bus Lock Debug Exception +and new instructions: + - AVX VNNI (Vector Neural Network Instruction): + - VPDPBUS: Multiply and Add Unsigned and Signed Bytes + - VPDPBUSDS: Multiply and Add Unsigned and Signed Bytes with Saturation + - VPDPWSSD: Multiply and Add Signed Word Integers + - VPDPWSSDS: Multiply and Add Signed Integers with Saturation + - FP16: Replicates existing AVX512 computational SP (FP32) instructions + using FP16 instead of FP32 for ~2X performance gain + - SERIALIZE: Provide software with a simple way to force the processor to + complete all modifications, faster, allowed in all privilege levels and + not causing an unconditional VM exit + - TSX Suspend Load Address Tracking: Allows programmers to choose which + memory accesses do not need to be tracked in the TSX read set + - AVX512_BF16: Vector Neural Network Instructions supporting BFLOAT16 + inputs and conversion instructions from IEEE single precision + - fast zero-length MOVSB (KVM doesn't support yet) + - fast short STOSB (KVM doesn't support yet) + - fast short CMPSB, SCASB (KVM doesn't support yet) + +Features that may be added in future versions: + - CET (virtualization support hasn't been merged) + +Signed-off-by: Wang, Lei +Reviewed-by: Robert Hoo +Message-Id: <20220812055751.14553-1-lei4.wang@intel.com> +Reviewed-by: Xiaoyao Li +Signed-off-by: Paolo Bonzini +--- + target/i386/cpu.c | 133 +++++++++++++++++++++++++++++++++++++++++++++- + target/i386/cpu.h | 4 ++ + 2 files changed, 135 insertions(+), 2 deletions(-) + +diff --git a/target/i386/cpu.c b/target/i386/cpu.c +index 7122af303d..61cd7abcaa 100644 +--- a/target/i386/cpu.c ++++ b/target/i386/cpu.c +@@ -3529,6 +3529,135 @@ static const X86CPUDefinition builtin_x86_defs[] = { + { /* end of list */ } + } + }, ++ { ++ .name = "SapphireRapids", ++ .level = 0x20, ++ .vendor = CPUID_VENDOR_INTEL, ++ .family = 6, ++ .model = 143, ++ .stepping = 4, ++ /* ++ * please keep the ascending order so that we can have a clear view of ++ * bit position of each feature. ++ */ ++ .features[FEAT_1_EDX] = ++ CPUID_FP87 | CPUID_VME | CPUID_DE | CPUID_PSE | CPUID_TSC | ++ CPUID_MSR | CPUID_PAE | CPUID_MCE | CPUID_CX8 | CPUID_APIC | ++ CPUID_SEP | CPUID_MTRR | CPUID_PGE | CPUID_MCA | CPUID_CMOV | ++ CPUID_PAT | CPUID_PSE36 | CPUID_CLFLUSH | CPUID_MMX | CPUID_FXSR | ++ CPUID_SSE | CPUID_SSE2, ++ .features[FEAT_1_ECX] = ++ CPUID_EXT_SSE3 | CPUID_EXT_PCLMULQDQ | CPUID_EXT_SSSE3 | ++ CPUID_EXT_FMA | CPUID_EXT_CX16 | CPUID_EXT_PCID | CPUID_EXT_SSE41 | ++ CPUID_EXT_SSE42 | CPUID_EXT_X2APIC | CPUID_EXT_MOVBE | ++ CPUID_EXT_POPCNT | CPUID_EXT_TSC_DEADLINE_TIMER | CPUID_EXT_AES | ++ CPUID_EXT_XSAVE | CPUID_EXT_AVX | CPUID_EXT_F16C | CPUID_EXT_RDRAND, ++ .features[FEAT_8000_0001_EDX] = ++ CPUID_EXT2_SYSCALL | CPUID_EXT2_NX | CPUID_EXT2_PDPE1GB | ++ CPUID_EXT2_RDTSCP | CPUID_EXT2_LM, ++ .features[FEAT_8000_0001_ECX] = ++ CPUID_EXT3_LAHF_LM | CPUID_EXT3_ABM | CPUID_EXT3_3DNOWPREFETCH, ++ .features[FEAT_8000_0008_EBX] = ++ CPUID_8000_0008_EBX_WBNOINVD, ++ .features[FEAT_7_0_EBX] = ++ CPUID_7_0_EBX_FSGSBASE | CPUID_7_0_EBX_BMI1 | CPUID_7_0_EBX_HLE | ++ CPUID_7_0_EBX_AVX2 | CPUID_7_0_EBX_SMEP | CPUID_7_0_EBX_BMI2 | ++ CPUID_7_0_EBX_ERMS | CPUID_7_0_EBX_INVPCID | CPUID_7_0_EBX_RTM | ++ CPUID_7_0_EBX_AVX512F | CPUID_7_0_EBX_AVX512DQ | ++ CPUID_7_0_EBX_RDSEED | CPUID_7_0_EBX_ADX | CPUID_7_0_EBX_SMAP | ++ CPUID_7_0_EBX_AVX512IFMA | CPUID_7_0_EBX_CLFLUSHOPT | ++ CPUID_7_0_EBX_CLWB | CPUID_7_0_EBX_AVX512CD | CPUID_7_0_EBX_SHA_NI | ++ CPUID_7_0_EBX_AVX512BW | CPUID_7_0_EBX_AVX512VL, ++ .features[FEAT_7_0_ECX] = ++ CPUID_7_0_ECX_AVX512_VBMI | CPUID_7_0_ECX_UMIP | CPUID_7_0_ECX_PKU | ++ CPUID_7_0_ECX_AVX512_VBMI2 | CPUID_7_0_ECX_GFNI | ++ CPUID_7_0_ECX_VAES | CPUID_7_0_ECX_VPCLMULQDQ | ++ CPUID_7_0_ECX_AVX512VNNI | CPUID_7_0_ECX_AVX512BITALG | ++ CPUID_7_0_ECX_AVX512_VPOPCNTDQ | CPUID_7_0_ECX_LA57 | ++ CPUID_7_0_ECX_RDPID | CPUID_7_0_ECX_BUS_LOCK_DETECT, ++ .features[FEAT_7_0_EDX] = ++ CPUID_7_0_EDX_FSRM | CPUID_7_0_EDX_SERIALIZE | ++ CPUID_7_0_EDX_TSX_LDTRK | CPUID_7_0_EDX_AMX_BF16 | ++ CPUID_7_0_EDX_AVX512_FP16 | CPUID_7_0_EDX_AMX_TILE | ++ CPUID_7_0_EDX_AMX_INT8 | CPUID_7_0_EDX_SPEC_CTRL | ++ CPUID_7_0_EDX_ARCH_CAPABILITIES | CPUID_7_0_EDX_SPEC_CTRL_SSBD, ++ .features[FEAT_ARCH_CAPABILITIES] = ++ MSR_ARCH_CAP_RDCL_NO | MSR_ARCH_CAP_IBRS_ALL | ++ MSR_ARCH_CAP_SKIP_L1DFL_VMENTRY | MSR_ARCH_CAP_MDS_NO | ++ MSR_ARCH_CAP_PSCHANGE_MC_NO | MSR_ARCH_CAP_TAA_NO, ++ .features[FEAT_XSAVE] = ++ CPUID_XSAVE_XSAVEOPT | CPUID_XSAVE_XSAVEC | ++ CPUID_XSAVE_XGETBV1 | CPUID_XSAVE_XSAVES | CPUID_D_1_EAX_XFD, ++ .features[FEAT_6_EAX] = ++ CPUID_6_EAX_ARAT, ++ .features[FEAT_7_1_EAX] = ++ CPUID_7_1_EAX_AVX_VNNI | CPUID_7_1_EAX_AVX512_BF16 | ++ CPUID_7_1_EAX_FZRM | CPUID_7_1_EAX_FSRS | CPUID_7_1_EAX_FSRC, ++ .features[FEAT_VMX_BASIC] = ++ MSR_VMX_BASIC_INS_OUTS | MSR_VMX_BASIC_TRUE_CTLS, ++ .features[FEAT_VMX_ENTRY_CTLS] = ++ VMX_VM_ENTRY_LOAD_DEBUG_CONTROLS | VMX_VM_ENTRY_IA32E_MODE | ++ VMX_VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL | ++ VMX_VM_ENTRY_LOAD_IA32_PAT | VMX_VM_ENTRY_LOAD_IA32_EFER, ++ .features[FEAT_VMX_EPT_VPID_CAPS] = ++ MSR_VMX_EPT_EXECONLY | ++ MSR_VMX_EPT_PAGE_WALK_LENGTH_4 | MSR_VMX_EPT_PAGE_WALK_LENGTH_5 | ++ MSR_VMX_EPT_WB | MSR_VMX_EPT_2MB | MSR_VMX_EPT_1GB | ++ MSR_VMX_EPT_INVEPT | MSR_VMX_EPT_AD_BITS | ++ MSR_VMX_EPT_INVEPT_SINGLE_CONTEXT | MSR_VMX_EPT_INVEPT_ALL_CONTEXT | ++ MSR_VMX_EPT_INVVPID | MSR_VMX_EPT_INVVPID_SINGLE_ADDR | ++ MSR_VMX_EPT_INVVPID_SINGLE_CONTEXT | ++ MSR_VMX_EPT_INVVPID_ALL_CONTEXT | ++ MSR_VMX_EPT_INVVPID_SINGLE_CONTEXT_NOGLOBALS, ++ .features[FEAT_VMX_EXIT_CTLS] = ++ VMX_VM_EXIT_SAVE_DEBUG_CONTROLS | ++ VMX_VM_EXIT_LOAD_IA32_PERF_GLOBAL_CTRL | ++ VMX_VM_EXIT_ACK_INTR_ON_EXIT | VMX_VM_EXIT_SAVE_IA32_PAT | ++ VMX_VM_EXIT_LOAD_IA32_PAT | VMX_VM_EXIT_SAVE_IA32_EFER | ++ VMX_VM_EXIT_LOAD_IA32_EFER | VMX_VM_EXIT_SAVE_VMX_PREEMPTION_TIMER, ++ .features[FEAT_VMX_MISC] = ++ MSR_VMX_MISC_STORE_LMA | MSR_VMX_MISC_ACTIVITY_HLT | ++ MSR_VMX_MISC_VMWRITE_VMEXIT, ++ .features[FEAT_VMX_PINBASED_CTLS] = ++ VMX_PIN_BASED_EXT_INTR_MASK | VMX_PIN_BASED_NMI_EXITING | ++ VMX_PIN_BASED_VIRTUAL_NMIS | VMX_PIN_BASED_VMX_PREEMPTION_TIMER | ++ VMX_PIN_BASED_POSTED_INTR, ++ .features[FEAT_VMX_PROCBASED_CTLS] = ++ VMX_CPU_BASED_VIRTUAL_INTR_PENDING | ++ VMX_CPU_BASED_USE_TSC_OFFSETING | VMX_CPU_BASED_HLT_EXITING | ++ VMX_CPU_BASED_INVLPG_EXITING | VMX_CPU_BASED_MWAIT_EXITING | ++ VMX_CPU_BASED_RDPMC_EXITING | VMX_CPU_BASED_RDTSC_EXITING | ++ VMX_CPU_BASED_CR3_LOAD_EXITING | VMX_CPU_BASED_CR3_STORE_EXITING | ++ VMX_CPU_BASED_CR8_LOAD_EXITING | VMX_CPU_BASED_CR8_STORE_EXITING | ++ VMX_CPU_BASED_TPR_SHADOW | VMX_CPU_BASED_VIRTUAL_NMI_PENDING | ++ VMX_CPU_BASED_MOV_DR_EXITING | VMX_CPU_BASED_UNCOND_IO_EXITING | ++ VMX_CPU_BASED_USE_IO_BITMAPS | VMX_CPU_BASED_MONITOR_TRAP_FLAG | ++ VMX_CPU_BASED_USE_MSR_BITMAPS | VMX_CPU_BASED_MONITOR_EXITING | ++ VMX_CPU_BASED_PAUSE_EXITING | ++ VMX_CPU_BASED_ACTIVATE_SECONDARY_CONTROLS, ++ .features[FEAT_VMX_SECONDARY_CTLS] = ++ VMX_SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES | ++ VMX_SECONDARY_EXEC_ENABLE_EPT | VMX_SECONDARY_EXEC_DESC | ++ VMX_SECONDARY_EXEC_RDTSCP | ++ VMX_SECONDARY_EXEC_VIRTUALIZE_X2APIC_MODE | ++ VMX_SECONDARY_EXEC_ENABLE_VPID | VMX_SECONDARY_EXEC_WBINVD_EXITING | ++ VMX_SECONDARY_EXEC_UNRESTRICTED_GUEST | ++ VMX_SECONDARY_EXEC_APIC_REGISTER_VIRT | ++ VMX_SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY | ++ VMX_SECONDARY_EXEC_RDRAND_EXITING | ++ VMX_SECONDARY_EXEC_ENABLE_INVPCID | ++ VMX_SECONDARY_EXEC_ENABLE_VMFUNC | VMX_SECONDARY_EXEC_SHADOW_VMCS | ++ VMX_SECONDARY_EXEC_RDSEED_EXITING | VMX_SECONDARY_EXEC_ENABLE_PML | ++ VMX_SECONDARY_EXEC_XSAVES, ++ .features[FEAT_VMX_VMFUNC] = ++ MSR_VMX_VMFUNC_EPT_SWITCHING, ++ .xlevel = 0x80000008, ++ .model_id = "Intel Xeon Processor (SapphireRapids)", ++ .versions = (X86CPUVersionDefinition[]) { ++ { .version = 1 }, ++ { /* end of list */ }, ++ }, ++ }, + { + .name = "Denverton", + .level = 21, +@@ -5619,7 +5748,7 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count, + break; + } + case 0x1D: { +- /* AMX TILE */ ++ /* AMX TILE, for now hardcoded for Sapphire Rapids*/ + *eax = 0; + *ebx = 0; + *ecx = 0; +@@ -5640,7 +5769,7 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count, + break; + } + case 0x1E: { +- /* AMX TMUL */ ++ /* AMX TMUL, for now hardcoded for Sapphire Rapids */ + *eax = 0; + *ebx = 0; + *ecx = 0; +diff --git a/target/i386/cpu.h b/target/i386/cpu.h +index 7a32dabf12..d0c7791a1e 100644 +--- a/target/i386/cpu.h ++++ b/target/i386/cpu.h +@@ -857,10 +857,14 @@ uint64_t x86_cpu_get_supported_feature_word(FeatureWord w, + #define CPUID_7_0_EDX_SERIALIZE (1U << 14) + /* TSX Suspend Load Address Tracking instruction */ + #define CPUID_7_0_EDX_TSX_LDTRK (1U << 16) ++/* AMX_BF16 instruction */ ++#define CPUID_7_0_EDX_AMX_BF16 (1U << 22) + /* AVX512_FP16 instruction */ + #define CPUID_7_0_EDX_AVX512_FP16 (1U << 23) + /* AMX tile (two-dimensional register) */ + #define CPUID_7_0_EDX_AMX_TILE (1U << 24) ++/* AMX_INT8 instruction */ ++#define CPUID_7_0_EDX_AMX_INT8 (1U << 25) + /* Speculation Control */ + #define CPUID_7_0_EDX_SPEC_CTRL (1U << 26) + /* Single Thread Indirect Branch Predictors */ +-- +2.27.0 + diff --git a/linux-user-fix-strace-build-w-out-munlockall.patch b/linux-user-fix-strace-build-w-out-munlockall.patch new file mode 100644 index 0000000000000000000000000000000000000000..f3e17ce1e47dbbf292796de5f9116ab105336422 --- /dev/null +++ b/linux-user-fix-strace-build-w-out-munlockall.patch @@ -0,0 +1,44 @@ +From c51eaedcf9833a6edfcee1993e6651046fad1f59 Mon Sep 17 00:00:00 2001 +From: qihao +Date: Thu, 30 Mar 2023 18:07:11 +0800 +Subject: [PATCH] linux-user: fix strace build w/out munlockall +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +cheery-pick from d237b416b9499441b6833b91609ec840efd832b6 + +Signed-off-by: qihao_yewu +Signed-off-by: Mike Frysinger +Reviewed-by: Philippe Mathieu-Daudé +Message-Id: <20230118090144.31155-1-vapier@gentoo.org> +Signed-off-by: Laurent Vivier +--- + linux-user/strace.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/linux-user/strace.c b/linux-user/strace.c +index 2cdbf030ba..37d66d0dff 100644 +--- a/linux-user/strace.c ++++ b/linux-user/strace.c +@@ -1368,7 +1368,8 @@ UNUSED static struct flags termios_lflags[] = { + FLAG_END, + }; + +-UNUSED static struct flags mlockall_flags[] = { ++#ifdef TARGET_NR_mlockall ++static struct flags mlockall_flags[] = { + FLAG_TARGET(MCL_CURRENT), + FLAG_TARGET(MCL_FUTURE), + #ifdef MCL_ONFAULT +@@ -1376,6 +1377,7 @@ UNUSED static struct flags mlockall_flags[] = { + #endif + FLAG_END, + }; ++#endif + + /* IDs of the various system clocks */ + #define TARGET_CLOCK_REALTIME 0 +-- +2.27.0 + diff --git a/migration-fix-populate_vfio_info.patch b/migration-fix-populate_vfio_info.patch new file mode 100644 index 0000000000000000000000000000000000000000..8ac94db08e51ac914f150acab64e5d6be82061ff --- /dev/null +++ b/migration-fix-populate_vfio_info.patch @@ -0,0 +1,49 @@ +From bae3be01cc25c5532806c3255dbae19393e95686 Mon Sep 17 00:00:00 2001 +From: jipengfei +Date: Tue, 4 Apr 2023 20:16:33 +0800 +Subject: [PATCH] migration: fix populate_vfio_info +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Include CONFIG_DEVICES so that populate_vfio_info is instantiated for +CONFIG_VFIO. Without it, the 'info migrate' command never returns +info about vfio. + +Fixes: 43bd0bf30f ("migration: Move populate_vfio_info() into a separate file") + +cheery-pick from fa76c854ae837328187bef41d80af5d1ad36681f + +Signed-off-by: jipengfei_yewu +Reviewed-by: Marc-André Lureau +Reviewed-by: Thomas Huth +Reviewed-by: Dr. David Alan Gilbert +Reviewed-by: Juan Quintela +Signed-off-by: Juan Quintela +--- + migration/target.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/migration/target.c b/migration/target.c +index 907ebf0a0a..00ca007f97 100644 +--- a/migration/target.c ++++ b/migration/target.c +@@ -8,6 +8,7 @@ + #include "qemu/osdep.h" + #include "qapi/qapi-types-migration.h" + #include "migration.h" ++#include CONFIG_DEVICES + + #ifdef CONFIG_VFIO + #include "hw/vfio/vfio-common.h" +@@ -17,7 +18,6 @@ void populate_vfio_info(MigrationInfo *info) + { + #ifdef CONFIG_VFIO + if (vfio_mig_active()) { +- info->has_vfio = true; + info->vfio = g_malloc0(sizeof(*info->vfio)); + info->vfio->transferred = vfio_mig_bytes_transferred(); + } +-- +2.27.0 + diff --git a/plugins-make-qemu_plugin_user_exit-s-locking-order-c.patch b/plugins-make-qemu_plugin_user_exit-s-locking-order-c.patch new file mode 100644 index 0000000000000000000000000000000000000000..6655be53f517249b9f6050596b06b24ef9c670b5 --- /dev/null +++ b/plugins-make-qemu_plugin_user_exit-s-locking-order-c.patch @@ -0,0 +1,66 @@ +From a729d2730d9d30f6610e43f070cedd1d60ba022f Mon Sep 17 00:00:00 2001 +From: qihao +Date: Thu, 30 Mar 2023 17:58:32 +0800 +Subject: [PATCH] plugins: make qemu_plugin_user_exit's locking order + consistent with fork_start's +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +cheery-pick from 2bbbc1be8d9a21b25d0c80b9a7345074d54abd51 + +To fix potential deadlocks as reported by tsan. + +Signed-off-by: qihao_yewu +Reviewed-by: Richard Henderson +Reviewed-by: Philippe Mathieu-Daudé +Signed-off-by: Emilio Cota +Message-Id: <20230111151628.320011-6-cota@braap.org> +Signed-off-by: Alex Bennée +Message-Id: <20230124180127.1881110-31-alex.bennee@linaro.org> +--- + plugins/core.c | 14 +++++++++++--- + 1 file changed, 11 insertions(+), 3 deletions(-) + +diff --git a/plugins/core.c b/plugins/core.c +index 792262da08..e935e3c0c9 100644 +--- a/plugins/core.c ++++ b/plugins/core.c +@@ -500,10 +500,18 @@ void qemu_plugin_user_exit(void) + enum qemu_plugin_event ev; + CPUState *cpu; + +- QEMU_LOCK_GUARD(&plugin.lock); ++ /* ++ * Locking order: we must acquire locks in an order that is consistent ++ * with the one in fork_start(). That is: ++ * - start_exclusive(), which acquires qemu_cpu_list_lock, ++ * must be called before acquiring plugin.lock. ++ * - tb_flush(), which acquires mmap_lock(), must be called ++ * while plugin.lock is not held. ++ */ + + start_exclusive(); + ++ qemu_rec_mutex_lock(&plugin.lock); + /* un-register all callbacks except the final AT_EXIT one */ + for (ev = 0; ev < QEMU_PLUGIN_EV_MAX; ev++) { + if (ev != QEMU_PLUGIN_EV_ATEXIT) { +@@ -514,12 +522,12 @@ void qemu_plugin_user_exit(void) + } + } + +- tb_flush(current_cpu); +- + CPU_FOREACH(cpu) { + qemu_plugin_disable_mem_helpers(cpu); + } ++ qemu_rec_mutex_unlock(&plugin.lock); + ++ tb_flush(current_cpu); + end_exclusive(); + + /* now it's safe to handle the exit case */ +-- +2.27.0 + diff --git a/qemu.spec b/qemu.spec index 26380feacf0256702fbf03f9dcaee0072d8a32ec..abdab399656ca20dbcfdaee8f66e98b8c02599af 100644 --- a/qemu.spec +++ b/qemu.spec @@ -1,6 +1,6 @@ Name: qemu Version: 6.2.0 -Release: 64 +Release: 65 Epoch: 10 Summary: QEMU is a generic and open source machine emulator and virtualizer License: GPLv2 and BSD and MIT and CC-BY-SA-4.0 @@ -469,6 +469,16 @@ Patch0457: net-Fix-uninitialized-data-usage.patch Patch0458: net-eth-Don-t-consider-ESP-to-be-an-IPv6-option-head.patch Patch0459: hw-net-vmxnet3-Log-guest-triggerable-errors-using-LO.patch Patch0460: fixup-compile-on-loongarch64-machine.patch +Patch0461: vhost-user-blk-fix-the-resize-crash.patch +Patch0462: plugins-make-qemu_plugin_user_exit-s-locking-order-c.patch +Patch0463: linux-user-fix-strace-build-w-out-munlockall.patch +Patch0464: ui-fix-crash-on-serial-reset-during-init.patch +Patch0465: qga-win-vss-requester_freeze-changes.patch +Patch0466: migration-fix-populate_vfio_info.patch +Patch0467: block-rbd-workaround-for-ceph-issue-53784.patch +Patch0468: target-i386-add-FZRM-FSRS-FSRC.patch +Patch0469: i386-Add-new-CPU-model-SapphireRapids.patch +Patch0470: core-cpu-common-Fix-the-wrong-ifdef-__aarch64__.patch BuildRequires: flex BuildRequires: gcc @@ -1026,6 +1036,18 @@ getent passwd qemu >/dev/null || \ %endif %changelog +* Sat Apr 22 2023 - 10:6.2.0-65 +- vhost-user-blk: fix the resize crash +- plugins: make qemu_plugin_user_exit's locking order consistent with fork_start's +- linux-user: fix strace build w/out munlockall +- ui: fix crash on serial reset, during init +- qga/win/vss: requester_freeze changes +- migration: fix populate_vfio_info +- block/rbd: workaround for ceph issue #53784 +- target/i386: add FZRM, FSRS, FSRC +- i386: Add new CPU model SapphireRapids +- core/cpu-common: Fix the wrong '#ifdef __aarch64__' + * Thu Mar 30 2023 - 10:6.2.0-64 - Add spice buildrequires for loongarch. diff --git a/qga-win-vss-requester_freeze-changes.patch b/qga-win-vss-requester_freeze-changes.patch new file mode 100644 index 0000000000000000000000000000000000000000..18ee0aa8efc5e3eff5dd824c4742dc0fc71175bb --- /dev/null +++ b/qga-win-vss-requester_freeze-changes.patch @@ -0,0 +1,41 @@ +From 977331440154d500d434258c61eb3542e01dea38 Mon Sep 17 00:00:00 2001 +From: jipengfei +Date: Tue, 4 Apr 2023 18:36:27 +0800 +Subject: [PATCH] qga/win/vss: requester_freeze changes + +Change requester_freeze so that the VSS backup type queried from the registry + +cheery-pick from 0961f929c66ceb5e9e95756bfe418b9ef34510eb + +Signed-off-by: jipengfei_yewu +Signed-off-by: Kfir Manor +Reviewed-by: Konstantin Kostiuk +Signed-off-by: Konstantin Kostiuk +--- + qga/vss-win32/requester.cpp | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/qga/vss-win32/requester.cpp b/qga/vss-win32/requester.cpp +index 940a2c8f55..418b9b6e4e 100644 +--- a/qga/vss-win32/requester.cpp ++++ b/qga/vss-win32/requester.cpp +@@ -248,6 +248,7 @@ void requester_freeze(int *num_vols, void *mountpoints, ErrorSet *errset) + int num_fixed_drives = 0, i; + int num_mount_points = 0; + ++ VSS_BACKUP_TYPE vss_bt = get_vss_backup_type(); + if (vss_ctx.pVssbc) { /* already frozen */ + *num_vols = 0; + return; +@@ -294,7 +295,7 @@ void requester_freeze(int *num_vols, void *mountpoints, ErrorSet *errset) + goto out; + } + +- hr = vss_ctx.pVssbc->SetBackupState(true, true, VSS_BT_FULL, false); ++ hr = vss_ctx.pVssbc->SetBackupState(true, true, vss_bt, false); + if (FAILED(hr)) { + err_set(errset, hr, "failed to set backup state"); + goto out; +-- +2.27.0 + diff --git a/target-i386-add-FZRM-FSRS-FSRC.patch b/target-i386-add-FZRM-FSRS-FSRC.patch new file mode 100644 index 0000000000000000000000000000000000000000..2077add338175e88fc5cd3752be19d82c076d2ee --- /dev/null +++ b/target-i386-add-FZRM-FSRS-FSRC.patch @@ -0,0 +1,62 @@ +From 37ef938fd9cdea1c9f87b17f49a935f729374f1d Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Mon, 27 Feb 2023 10:55:46 +0100 +Subject: [PATCH] target/i386: add FZRM, FSRS, FSRC + +These are three more markers for string operation optimizations. +They can all be added to TCG, whose string operations are more or +less as fast as they can be for short lengths. + +Reviewed-by: Xiaoyao Li +Signed-off-by: Paolo Bonzini +--- + target/i386/cpu.c | 7 ++++--- + target/i386/cpu.h | 7 +++++++ + 2 files changed, 11 insertions(+), 3 deletions(-) + +diff --git a/target/i386/cpu.c b/target/i386/cpu.c +index e3cea8397c..7122af303d 100644 +--- a/target/i386/cpu.c ++++ b/target/i386/cpu.c +@@ -661,7 +661,8 @@ void x86_cpu_vendor_words2str(char *dst, uint32_t vendor1, + /* CPUID_7_0_ECX_OSPKE is dynamic */ \ + CPUID_7_0_ECX_LA57 | CPUID_7_0_ECX_PKS) + #define TCG_7_0_EDX_FEATURES 0 +-#define TCG_7_1_EAX_FEATURES 0 ++#define TCG_7_1_EAX_FEATURES (CPUID_7_1_EAX_FZRM | CPUID_7_1_EAX_FSRS | \ ++ CPUID_7_1_EAX_FSRC) + #define TCG_APM_FEATURES 0 + #define TCG_6_EAX_FEATURES CPUID_6_EAX_ARAT + #define TCG_XSAVE_FEATURES (CPUID_XSAVE_XSAVEOPT | CPUID_XSAVE_XGETBV1) +@@ -871,8 +872,8 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = { + .feat_names = { + NULL, NULL, NULL, NULL, + "avx-vnni", "avx512-bf16", NULL, NULL, +- NULL, NULL, NULL, NULL, +- NULL, NULL, NULL, NULL, ++ NULL, NULL, "fzrm", "fsrs", ++ "fsrc", NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, +diff --git a/target/i386/cpu.h b/target/i386/cpu.h +index 4f7fa87b95..7a32dabf12 100644 +--- a/target/i386/cpu.h ++++ b/target/i386/cpu.h +@@ -876,6 +876,13 @@ uint64_t x86_cpu_get_supported_feature_word(FeatureWord w, + #define CPUID_7_1_EAX_AVX_VNNI (1U << 4) + /* AVX512 BFloat16 Instruction */ + #define CPUID_7_1_EAX_AVX512_BF16 (1U << 5) ++/* Fast Zero REP MOVS */ ++#define CPUID_7_1_EAX_FZRM (1U << 10) ++/* Fast Short REP STOS */ ++#define CPUID_7_1_EAX_FSRS (1U << 11) ++/* Fast Short REP CMPS/SCAS */ ++#define CPUID_7_1_EAX_FSRC (1U << 12) ++ + /* XFD Extend Feature Disabled */ + #define CPUID_D_1_EAX_XFD (1U << 4) + +-- +2.27.0 + diff --git a/ui-fix-crash-on-serial-reset-during-init.patch b/ui-fix-crash-on-serial-reset-during-init.patch new file mode 100644 index 0000000000000000000000000000000000000000..30aeb0cead9c1d76bea9d3c0ba716558ebb6017c --- /dev/null +++ b/ui-fix-crash-on-serial-reset-during-init.patch @@ -0,0 +1,70 @@ +From 548991fba5792b9efebc60cd75cba656624319d4 Mon Sep 17 00:00:00 2001 +From: jipengfei +Date: Tue, 4 Apr 2023 18:11:30 +0800 +Subject: [PATCH] ui: fix crash on serial reset, during init +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +For ex, when resetting the xlnx-zcu102 machine: + +(lldb) bt +* thread #1, queue = 'com.apple.main-thread', stop reason = +EXC_BAD_ACCESS (code=1, address=0x50) + * frame #0: 0x10020a740 gd_vc_send_chars(vc=0x000000000) at +gtk.c:1759:41 [opt] + frame #1: 0x100636264 qemu_chr_fe_accept_input(be=) at +char-fe.c:159:9 [opt] + frame #2: 0x1000608e0 cadence_uart_reset_hold [inlined] +uart_rx_reset(s=0x10810a960) at cadence_uart.c:158:5 [opt] + frame #3: 0x1000608d4 cadence_uart_reset_hold(obj=0x10810a960) at +cadence_uart.c:530:5 [opt] + frame #4: 0x100580ab4 resettable_phase_hold(obj=0x10810a960, +opaque=0x000000000, type=) at resettable.c:0 [opt] + frame #5: 0x10057d1b0 bus_reset_child_foreach(obj=, +cb=(resettable_phase_hold at resettable.c:162), opaque=0x000000000, +type=RESET_TYPE_COLD) at bus.c:97:13 [opt] + frame #6: 0x1005809f8 resettable_phase_hold [inlined] +resettable_child_foreach(rc=0x000060000332d2c0, obj=0x0000600002c1c180, +cb=, opaque=0x000000000, type=RESET_TYPE_COLD) at +resettable.c:96:9 [opt] + frame #7: 0x1005809d8 resettable_phase_hold(obj=0x0000600002c1c180, +opaque=0x000000000, type=RESET_TYPE_COLD) at resettable.c:173:5 [opt] + frame #8: 0x1005803a0 +resettable_assert_reset(obj=0x0000600002c1c180, type=) at +resettable.c:60:5 [opt] + frame #9: 0x10058027c resettable_reset(obj=0x0000600002c1c180, +type=RESET_TYPE_COLD) at resettable.c:45:5 [opt] + +While the chardev is created early, the VirtualConsole is associated +after, during qemu_init_displays(). + +cheery-pick from 49152ac47003ca21fc6f2a5c3e517f79649e1541 +Signed-off-by: jipengfei_yewu@cmss.chinamobile.com +Signed-off-by: Marc-André Lureau +Reviewed-by: Philippe Mathieu-Daudé +Message-Id: <20230220072251.3385878-1-marcandre.lureau@redhat.com> +--- + ui/gtk.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/ui/gtk.c b/ui/gtk.c +index 428f02f2df..6d9cb42b3d 100644 +--- a/ui/gtk.c ++++ b/ui/gtk.c +@@ -1718,8 +1718,10 @@ static void gd_vc_chr_accept_input(Chardev *chr) + { + VCChardev *vcd = VC_CHARDEV(chr); + VirtualConsole *vc = vcd->console; +- +- gd_vc_send_chars(vc); ++ ++ if (vc) { ++ gd_vc_send_chars(vc); ++ } + } + + static void gd_vc_chr_set_echo(Chardev *chr, bool echo) +-- +2.27.0 + diff --git a/vhost-user-blk-fix-the-resize-crash.patch b/vhost-user-blk-fix-the-resize-crash.patch new file mode 100644 index 0000000000000000000000000000000000000000..83c6cea4ed8459c0a48963f144351f5502a3d8ad --- /dev/null +++ b/vhost-user-blk-fix-the-resize-crash.patch @@ -0,0 +1,41 @@ +From 17e6be412054ae22027a339614fca82d55e64973 Mon Sep 17 00:00:00 2001 +From: qihao +Date: Thu, 30 Mar 2023 17:45:11 +0800 +Subject: [PATCH] vhost-user-blk: fix the resize crash + +cheery-pick from ab6075d849f4285fc730d3ae6e17418d65d09998 + +If the os is not installed and doesn't have the virtio guest driver, +the vhost dev isn't started, so the dev->vdev is NULL. + +Reproduce: mount a Win 2019 iso, go into the install ui, then resize +the virtio-blk device, qemu crash. + +Signed-off-by: qihao_yewu +Signed-off-by: Li Feng +Message-Id: <20220919121816.3252223-1-fengli@smartx.com> +Reviewed-by: Raphael Norwitz +Reviewed-by: Kevin Wolf +Signed-off-by: Kevin Wolf +--- + hw/block/vhost-user-blk.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/hw/block/vhost-user-blk.c b/hw/block/vhost-user-blk.c +index eb1264afc7..bcc3f83c4b 100644 +--- a/hw/block/vhost-user-blk.c ++++ b/hw/block/vhost-user-blk.c +@@ -95,6 +95,10 @@ static int vhost_user_blk_handle_config_change(struct vhost_dev *dev) + VHostUserBlk *s = VHOST_USER_BLK(dev->vdev); + Error *local_err = NULL; + ++ if (!dev->started) { ++ return 0; ++ } ++ + ret = vhost_dev_get_config(dev, (uint8_t *)&blkcfg, + sizeof(struct virtio_blk_config), + &local_err); +-- +2.27.0 +