On Tue, Mar 13, 2018 at 03:12:02PM +1300, Kai Huang wrote: > It seems setup_pku() will call get_cpu_cap to restore c->x86_phys_bits > later? In which case I think you need to change setup_pku as well. Thanks for catching this. I think setup_pku() shouldn't call get_cpu_cap(). Any objections against this: diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c index 348cf4821240..ce10d8ae4cd6 100644 --- a/arch/x86/kernel/cpu/common.c +++ b/arch/x86/kernel/cpu/common.c @@ -362,6 +362,8 @@ static bool pku_disabled; static __always_inline void setup_pku(struct cpuinfo_x86 *c) { + u32 eax, ebx, ecx, edx; + /* check the boot processor, plus compile options for PKU: */ if (!cpu_feature_enabled(X86_FEATURE_PKU)) return; @@ -377,7 +379,8 @@ static __always_inline void setup_pku(struct cpuinfo_x86 *c) * cpuid bit to be set. We need to ensure that we * update that bit in this CPU's "cpu_info". */ - get_cpu_cap(c); + cpuid_count(0x00000007, 0, &eax, &ebx, &ecx, &edx); + c->x86_capability[CPUID_7_ECX] = ecx; } #ifdef CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS > And for the comments here, I think it can be refined. It is true that > VM guest needs to know bits of physical address, but this info is not > used only by VM. I think the reason we need to update is this is simply > the fact. Fair enough. Like this? diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c index e8ddc6dcfd53..ac45ba7398d9 100644 --- a/arch/x86/kernel/cpu/intel.c +++ b/arch/x86/kernel/cpu/intel.c @@ -612,11 +612,8 @@ static void detect_tme(struct cpuinfo_x86 *c) #endif /* - * Exclude KeyID bits from physical address bits. - * - * We have to do this even if we are not going to use KeyID bits - * ourself. VM guests still have to know that these bits are not usable - * for physical address. + * KeyID bits effectively lower number of physical address bits. + * Let's update cpuinfo_x86::x86_phys_bits to reflect the fact. */ c->x86_phys_bits -= keyid_bits; } -- Kirill A. Shutemov -- To unsubscribe from this list: send the line "unsubscribe linux-tip-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html
![]() |