Re: [PATCH 26/26] KVM: x86: asi: Add some mitigations on address space transitions

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Brendan,

kernel test robot noticed the following build errors:

[auto build test ERROR on a38297e3fb012ddfa7ce0321a7e5a8daeb1872b6]

url:    https://github.com/intel-lab-lkp/linux/commits/Brendan-Jackman/mm-asi-Make-some-utility-functions-noinstr-compatible/20240713-012107
base:   a38297e3fb012ddfa7ce0321a7e5a8daeb1872b6
patch link:    https://lore.kernel.org/r/20240712-asi-rfc-24-v1-26-144b319a40d8%40google.com
patch subject: [PATCH 26/26] KVM: x86: asi: Add some mitigations on address space transitions
config: i386-buildonly-randconfig-004-20240714 (https://download.01.org/0day-ci/archive/20240714/202407141222.Av9rdSaZ-lkp@xxxxxxxxx/config)
compiler: clang version 18.1.5 (https://github.com/llvm/llvm-project 617a15a9eac96088ae5e9134248d8236e34b91b1)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240714/202407141222.Av9rdSaZ-lkp@xxxxxxxxx/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-kbuild-all/202407141222.Av9rdSaZ-lkp@xxxxxxxxx/

All errors (new ones prefixed by >>):

>> arch/x86/kvm/x86.c:9786:12: error: no member named 'post_asi_enter' in 'struct asi_hooks'
    9786 |         asi_hooks.post_asi_enter = ops->post_asi_enter;
         |         ~~~~~~~~~ ^
   1 error generated.


vim +9786 arch/x86/kvm/x86.c

  9726	
  9727	
  9728	int kvm_x86_vendor_init(struct kvm_x86_init_ops *ops)
  9729	{
  9730		u64 host_pat;
  9731		int r, cpu;
  9732	
  9733		guard(mutex)(&vendor_module_lock);
  9734	
  9735		if (kvm_x86_ops.hardware_enable) {
  9736			pr_err("already loaded vendor module '%s'\n", kvm_x86_ops.name);
  9737			return -EEXIST;
  9738		}
  9739	
  9740		/*
  9741		 * KVM explicitly assumes that the guest has an FPU and
  9742		 * FXSAVE/FXRSTOR. For example, the KVM_GET_FPU explicitly casts the
  9743		 * vCPU's FPU state as a fxregs_state struct.
  9744		 */
  9745		if (!boot_cpu_has(X86_FEATURE_FPU) || !boot_cpu_has(X86_FEATURE_FXSR)) {
  9746			pr_err("inadequate fpu\n");
  9747			return -EOPNOTSUPP;
  9748		}
  9749	
  9750		if (IS_ENABLED(CONFIG_PREEMPT_RT) && !boot_cpu_has(X86_FEATURE_CONSTANT_TSC)) {
  9751			pr_err("RT requires X86_FEATURE_CONSTANT_TSC\n");
  9752			return -EOPNOTSUPP;
  9753		}
  9754	
  9755		/*
  9756		 * KVM assumes that PAT entry '0' encodes WB memtype and simply zeroes
  9757		 * the PAT bits in SPTEs.  Bail if PAT[0] is programmed to something
  9758		 * other than WB.  Note, EPT doesn't utilize the PAT, but don't bother
  9759		 * with an exception.  PAT[0] is set to WB on RESET and also by the
  9760		 * kernel, i.e. failure indicates a kernel bug or broken firmware.
  9761		 */
  9762		if (rdmsrl_safe(MSR_IA32_CR_PAT, &host_pat) ||
  9763		    (host_pat & GENMASK(2, 0)) != 6) {
  9764			pr_err("host PAT[0] is not WB\n");
  9765			return -EIO;
  9766		}
  9767	
  9768		x86_emulator_cache = kvm_alloc_emulator_cache();
  9769		if (!x86_emulator_cache) {
  9770			pr_err("failed to allocate cache for x86 emulator\n");
  9771			return -ENOMEM;
  9772		}
  9773	
  9774		user_return_msrs = alloc_percpu(struct kvm_user_return_msrs);
  9775		if (!user_return_msrs) {
  9776			pr_err("failed to allocate percpu kvm_user_return_msrs\n");
  9777			r = -ENOMEM;
  9778			goto out_free_x86_emulator_cache;
  9779		}
  9780		kvm_nr_uret_msrs = 0;
  9781	
  9782		r = kvm_mmu_vendor_module_init();
  9783		if (r)
  9784			goto out_free_percpu;
  9785	
> 9786		asi_hooks.post_asi_enter = ops->post_asi_enter;
  9787		r = asi_register_class("KVM", &asi_hooks);
  9788		if (r < 0)
  9789			goto out_mmu_exit;
  9790		kvm_asi_index = r;
  9791	
  9792		if (boot_cpu_has(X86_FEATURE_XSAVE)) {
  9793			host_xcr0 = xgetbv(XCR_XFEATURE_ENABLED_MASK);
  9794			kvm_caps.supported_xcr0 = host_xcr0 & KVM_SUPPORTED_XCR0;
  9795		}
  9796	
  9797		rdmsrl_safe(MSR_EFER, &host_efer);
  9798	
  9799		if (boot_cpu_has(X86_FEATURE_XSAVES))
  9800			rdmsrl(MSR_IA32_XSS, host_xss);
  9801	
  9802		kvm_init_pmu_capability(ops->pmu_ops);
  9803	
  9804		if (boot_cpu_has(X86_FEATURE_ARCH_CAPABILITIES))
  9805			rdmsrl(MSR_IA32_ARCH_CAPABILITIES, host_arch_capabilities);
  9806	
  9807		r = ops->hardware_setup();
  9808		if (r != 0)
  9809			goto out_asi_unregister;
  9810	
  9811		kvm_ops_update(ops);
  9812	
  9813		for_each_online_cpu(cpu) {
  9814			smp_call_function_single(cpu, kvm_x86_check_cpu_compat, &r, 1);
  9815			if (r < 0)
  9816				goto out_unwind_ops;
  9817		}
  9818	
  9819		/*
  9820		 * Point of no return!  DO NOT add error paths below this point unless
  9821		 * absolutely necessary, as most operations from this point forward
  9822		 * require unwinding.
  9823		 */
  9824		kvm_timer_init();
  9825	
  9826		if (pi_inject_timer == -1)
  9827			pi_inject_timer = housekeeping_enabled(HK_TYPE_TIMER);
  9828	#ifdef CONFIG_X86_64
  9829		pvclock_gtod_register_notifier(&pvclock_gtod_notifier);
  9830	
  9831		if (hypervisor_is_type(X86_HYPER_MS_HYPERV))
  9832			set_hv_tscchange_cb(kvm_hyperv_tsc_notifier);
  9833	#endif
  9834	
  9835		kvm_register_perf_callbacks(ops->handle_intel_pt_intr);
  9836	
  9837		if (!kvm_cpu_cap_has(X86_FEATURE_XSAVES))
  9838			kvm_caps.supported_xss = 0;
  9839	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux