From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40284) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vkfmp-0007XW-6n for qemu-devel@nongnu.org; Sun, 24 Nov 2013 14:56:13 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Vkfmi-0003D6-9h for qemu-devel@nongnu.org; Sun, 24 Nov 2013 14:56:07 -0500 Received: from mx1.redhat.com ([209.132.183.28]:47597) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vkfmi-0003Cw-0p for qemu-devel@nongnu.org; Sun, 24 Nov 2013 14:56:00 -0500 From: Eduardo Habkost Date: Sun, 24 Nov 2013 17:55:39 -0200 Message-Id: <1385322940-27325-8-git-send-email-ehabkost@redhat.com> In-Reply-To: <1385322940-27325-1-git-send-email-ehabkost@redhat.com> References: <1385322940-27325-1-git-send-email-ehabkost@redhat.com> Subject: [Qemu-devel] [PATCH 7/8] target-i386: kvm_check_features_against_host(): Kill feature word array List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Igor Mammedov , =?UTF-8?q?Andreas=20F=C3=A4rber?= We don't need the ft[] array on kvm_check_features_against_host() anymore, as we can simply use the feature_word_info[] array, that has everything we need. Signed-off-by: Eduardo Habkost --- target-i386/cpu.c | 41 ++++++++--------------------------------- 1 file changed, 8 insertions(+), 33 deletions(-) diff --git a/target-i386/cpu.c b/target-i386/cpu.c index 9fc8500..6c540c6 100644 --- a/target-i386/cpu.c +++ b/target-i386/cpu.c @@ -1204,44 +1204,19 @@ static int kvm_check_features_against_host(X86CPU *cpu) { CPUX86State *env = &cpu->env; x86_def_t host_def; - uint32_t mask; - int rv, i; - struct model_features_t ft[] = { - {&env->features[FEAT_1_EDX], - &host_def.features[FEAT_1_EDX], - FEAT_1_EDX }, - {&env->features[FEAT_1_ECX], - &host_def.features[FEAT_1_ECX], - FEAT_1_ECX }, - {&env->features[FEAT_8000_0001_EDX], - &host_def.features[FEAT_8000_0001_EDX], - FEAT_8000_0001_EDX }, - {&env->features[FEAT_8000_0001_ECX], - &host_def.features[FEAT_8000_0001_ECX], - FEAT_8000_0001_ECX }, - {&env->features[FEAT_C000_0001_EDX], - &host_def.features[FEAT_C000_0001_EDX], - FEAT_C000_0001_EDX }, - {&env->features[FEAT_7_0_EBX], - &host_def.features[FEAT_7_0_EBX], - FEAT_7_0_EBX }, - {&env->features[FEAT_SVM], - &host_def.features[FEAT_SVM], - FEAT_SVM }, - {&env->features[FEAT_KVM], - &host_def.features[FEAT_KVM], - FEAT_KVM }, - }; + int rv = 0; + FeatureWord w; assert(kvm_enabled()); - kvm_cpu_fill_host(&host_def); - for (rv = 0, i = 0; i < ARRAY_SIZE(ft); ++i) { - FeatureWord w = ft[i].feat_word; + + for (w = 0; w < FEATURE_WORDS; w++) { FeatureWordInfo *wi = &feature_word_info[w]; + uint32_t guest_feat = env->features[w]; + uint32_t host_feat = host_def.features[w]; + uint32_t mask; for (mask = 1; mask; mask <<= 1) { - if (*ft[i].guest_feat & mask && - !(*ft[i].host_feat & mask)) { + if (guest_feat & mask && !(host_feat & mask)) { unavailable_host_feature(wi, mask); rv = 1; } -- 1.8.3.1