[snip] > @@ -7558,7 +7558,7 @@ void x86_cpu_expand_features(X86CPU *cpu, Error **errp) > * > * Returns: 0 if all flags are supported by the host, non-zero otherwise.
Comment can be updated as well. :-) Returns: true if any flag is not supported by the host, false otherwise. > */ > -static void x86_cpu_filter_features(X86CPU *cpu, bool verbose) > +static bool x86_cpu_filter_features(X86CPU *cpu, bool verbose) > { > CPUX86State *env = &cpu->env; > FeatureWord w; > @@ -7610,6 +7610,8 @@ static void x86_cpu_filter_features(X86CPU *cpu, bool > verbose) > mark_unavailable_features(cpu, FEAT_7_0_EBX, > CPUID_7_0_EBX_INTEL_PT, prefix); > } > } > + > + return x86_cpu_have_filtered_features(cpu); > } > > static void x86_cpu_hyperv_realize(X86CPU *cpu) > @@ -7707,14 +7709,14 @@ static void x86_cpu_realizefn(DeviceState *dev, Error > **errp) > } > } > > - x86_cpu_filter_features(cpu, cpu->check_cpuid || cpu->enforce_cpuid); > - > - if (cpu->enforce_cpuid && x86_cpu_have_filtered_features(cpu)) { > - error_setg(&local_err, > - accel_uses_host_cpuid() ? > + if (x86_cpu_filter_features(cpu, cpu->check_cpuid || > cpu->enforce_cpuid)) { > + if (cpu->enforce_cpuid) { > + error_setg(&local_err, It seems that we don't need local_err here, as this function already has an errp parameter. I will clean up the error handling of this function later. > + accel_uses_host_cpuid() ? > "Host doesn't support requested features" : > "TCG doesn't support requested features"); > - goto out; > + goto out; > + } > } LGTM, Reviewed-by: Zhao Liu <zhao1....@intel.com>