Hi Elisey,

Thank you for your patch! I'm sorry I previously noticed #2894 [*] but
missed your report.

Recently there's a fix (commit 5979f50fa9fd ("i386/tcg: Make CPUID_HT
and CPUID_EXT3_CMP_LEG supported")). Does that fix address this bug?

[*]: https://lore.kernel.org/qemu-devel/acwdhiqziu4q+...@intel.com/

Regards,
Zhao

On Tue, May 27, 2025 at 07:10:27PM +0300, elisey.konstanti...@icloud.com wrote:
> Date: Tue, 27 May 2025 19:10:27 +0300
> From: elisey.konstanti...@icloud.com
> Subject: [PATCH] Revert "i386/cpu: Set up CPUID_HT in
>  x86_cpu_expand_features() instead of cpu_x86_cpuid()"
> X-Mailer: Apple Mail (2.3826.600.51.1.1)
> 
> From e2f3eab60e9b9787c5c8f87bea5d1bd7079d982e Mon Sep 17 00:00:00 2001
> From: Elisey <elisey.konstanti...@icloud.com>
> Date: Tue, 27 May 2025 17:17:35 +0300
> Subject: [PATCH] Revert "i386/cpu: Set up CPUID_HT in 
> x86_cpu_expand_features() instead of cpu_x86_cpuid()"
> 
> This reverts commit c6bd2dd634208ca717b6dc010064fe34d1359080.
> 
> The original change caused a regression where macOS guests (XNU kernel)
> would panic during boot with a divide error (type=0) when using SMP
> configuration. This affects multiple macOS versions from 10.6 to 10.14
> and possibly others.
> 
> The issue occurs during kernel TSC initialization and can be worked
> around by using single-core configuration (-smp 1), but reverting this
> change restores proper multi-core functionality.
> 
> Buglink: https://gitlab.com/qemu-project/qemu/-/issues/2933
> Tested-by: Elisey Konstantinov <elisey.konstanti...@icloud.com>
> Signed-off-by: Elisey Konstantinov <elisey.konstanti...@icloud.com>
> ---
> target/i386/cpu.c | 15 +--------------
> 1 file changed, 1 insertion(+), 14 deletions(-)
> 
> diff --git a/target/i386/cpu.c b/target/i386/cpu.c
> index 9689f6374e..c648a1cf04 100644
> --- a/target/i386/cpu.c
> +++ b/target/i386/cpu.c
> @@ -6859,6 +6859,7 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, 
> uint32_t count,
>         *edx = env->features[FEAT_1_EDX];
>         if (threads_per_pkg > 1) {
>             *ebx |= threads_per_pkg << 16;
> +            *edx |= CPUID_HT;
>         }
>         if (!cpu->enable_pmu) {
>             *ecx &= ~CPUID_EXT_PDCM;
> @@ -7838,20 +7839,6 @@ void x86_cpu_expand_features(X86CPU *cpu, Error **errp)
>         }
>     }
> 
> -    if (x86_threads_per_pkg(&env->topo_info) > 1) {
> -        env->features[FEAT_1_EDX] |= CPUID_HT;
> -
> -        /*
> -         * The Linux kernel checks for the CMPLegacy bit and
> -         * discards multiple thread information if it is set.
> -         * So don't set it here for Intel (and other processors
> -         * following Intel's behavior) to make Linux guests happy.
> -         */
> -        if (!IS_INTEL_CPU(env) && !IS_ZHAOXIN_CPU(env)) {
> -            env->features[FEAT_8000_0001_ECX] |= CPUID_EXT3_CMP_LEG;
> -        }
> -    }
> -
>     for (i = 0; i < ARRAY_SIZE(feature_dependencies); i++) {
>         FeatureDep *d = &feature_dependencies[i];
>         if (!(env->features[d->from.index] & d->from.mask)) {
> -- 
> 2.39.5 (Apple Git-154)
> 
> 

Reply via email to