From mboxrd@z Thu Jan 1 00:00:00 1970 From: Xiao Guangrong Subject: Re: [PATCH V4 1/7] KVM, pkeys: expose CPUID/CR4 to guest Date: Tue, 8 Mar 2016 15:39:55 +0800 Message-ID: <56DE81CB.3040505@linux.intel.com> References: <1457177252-7577-1-git-send-email-huaitong.han@intel.com> <1457177252-7577-2-git-send-email-huaitong.han@intel.com> <56DBD925.1010807@linux.intel.com> <56DCBB30.7010107@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Cc: kvm@vger.kernel.org To: Paolo Bonzini , Huaitong Han , gleb@kernel.org Return-path: Received: from mga09.intel.com ([134.134.136.24]:24486 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753677AbcCHHkU (ORCPT ); Tue, 8 Mar 2016 02:40:20 -0500 In-Reply-To: <56DCBB30.7010107@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: On 03/07/2016 07:20 AM, Paolo Bonzini wrote: > > > On 06/03/2016 08:15, Xiao Guangrong wrote: >>> + /* cpuid 7.0.ecx*/ >>> + const u32 kvm_supported_word11_x86_features = F(PKU) | 0 /*OSPKE*/; >>> + >>> >>> cpuid_mask(&entry->ebx, 9); >>> // TSC_ADJUST is emulated >>> entry->ebx |= F(TSC_ADJUST); >>> - } else >>> + entry->ecx &= kvm_supported_word11_x86_features; >>> + cpuid_mask(&entry->ecx, 13); >> >> Can we use a meaningful name defined by cpuid_leafs instead of the raw >> number? > > This is not a cpuid leaf number, it's the Linux feature word number. In > other words, the "11" in kvm_supported_word11_x86_features should have > matched the "13" in cpuid_mask(&entry->ecx, 13). But i noticed kernel uses the more meaningful name to update boot_cpu_data.x86_capability[]: $ git grep x86_capability arch/x86/ ...... arch/x86/kernel/cpu/centaur.c: c->x86_capability[CPUID_C000_0001_EDX] = cpuid_edx(0xC0000001); arch/x86/kernel/cpu/common.c: c->x86_capability[CPUID_1_ECX] = ecx; arch/x86/kernel/cpu/common.c: c->x86_capability[CPUID_1_EDX] = edx; arch/x86/kernel/cpu/common.c: c->x86_capability[CPUID_7_0_EBX] = ebx; arch/x86/kernel/cpu/common.c: c->x86_capability[CPUID_6_EAX] = cpuid_eax(0x00000006); arch/x86/kernel/cpu/common.c: c->x86_capability[CPUID_D_1_EAX] = eax; arch/x86/kernel/cpu/common.c: c->x86_capability[CPUID_F_0_EDX] = edx; ..... Why not follow it in KVM?