From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:43097) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WJTxA-00027g-H9 for qemu-devel@nongnu.org; Fri, 28 Feb 2014 15:22:46 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WJTx4-0006QH-Ca for qemu-devel@nongnu.org; Fri, 28 Feb 2014 15:22:40 -0500 Received: from mx1.redhat.com ([209.132.183.28]:12697) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WJTx4-0006QC-4V for qemu-devel@nongnu.org; Fri, 28 Feb 2014 15:22:34 -0500 From: Eduardo Habkost Date: Fri, 28 Feb 2014 17:21:53 -0300 Message-Id: <1393618913-12411-11-git-send-email-ehabkost@redhat.com> In-Reply-To: <1393618913-12411-1-git-send-email-ehabkost@redhat.com> References: <1393618913-12411-1-git-send-email-ehabkost@redhat.com> Subject: [Qemu-devel] [qom-cpu PATCH 10/10] target-i386: Support check/enforce flags in TCG mode, too List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org, =?UTF-8?q?Andreas=20F=C3=A4rber?= Cc: Igor Mammedov , Richard Henderson , Aurelien Jarno , Paolo Bonzini If enforce/check is specified in TCG mode, QEMU will ensure all CPU features are supported by TCG, so no CPU feature is silently disabled. Signed-off-by: Eduardo Habkost --- target-i386/cpu.c | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/target-i386/cpu.c b/target-i386/cpu.c index f4b2674..e229112 100644 --- a/target-i386/cpu.c +++ b/target-i386/cpu.c @@ -1200,8 +1200,9 @@ static int report_unavailable_features(FeatureWord w, uint32_t mask) if (1 << i & mask) { const char *reg = get_register_name_32(f->cpuid_reg); assert(reg); - fprintf(stderr, "warning: host doesn't support requested feature: " + fprintf(stderr, "warning: %s doesn't support requested feature: " "CPUID.%02XH:%s%s%s [bit %d]\n", + kvm_enabled() ? "host" : "TCG", f->cpuid_eax, reg, f->feat_names[i] ? "." : "", f->feat_names[i] ? f->feat_names[i] : "", i); @@ -1792,17 +1793,18 @@ CpuDefinitionInfoList *arch_query_cpu_definitions(Error **errp) static uint32_t x86_cpu_get_supported_feature_word(FeatureWord w) { FeatureWordInfo *wi = &feature_word_info[w]; - assert(kvm_enabled()); - return kvm_arch_get_supported_cpuid(kvm_state, wi->cpuid_eax, - wi->cpuid_ecx, - wi->cpuid_reg); + if (kvm_enabled()) { + return kvm_arch_get_supported_cpuid(kvm_state, wi->cpuid_eax, + wi->cpuid_ecx, + wi->cpuid_reg); + } else { + return wi->tcg_features; + } } /* Filters CPU feature words based on host availability of each feature * * Returns 0 if all flags are supported by the host, non-zero otherwise. - * - * This function may be called only if KVM is enabled. */ static int x86_cpu_filter_features(X86CPU *cpu) { @@ -2539,17 +2541,13 @@ static void x86_cpu_realizefn(DeviceState *dev, Error **errp) & CPUID_EXT2_AMD_ALIASES); } - if (!kvm_enabled()) { - FeatureWord w; - for (w = 0; w < FEATURE_WORDS; w++) { - env->features[w] &= feature_word_info[w].tcg_features; - } - } else { - if (x86_cpu_filter_features(cpu) && cpu->enforce_cpuid) { - error_setg(&local_err, - "Host's CPU doesn't support requested features"); - goto out; - } + + if (x86_cpu_filter_features(cpu) && cpu->enforce_cpuid) { + error_setg(&local_err, + kvm_enabled() ? + "Host doesn't support requested features" : + "TCG doesn't support requested features"); + goto out; } #ifndef CONFIG_USER_ONLY -- 1.8.5.3