On 3/12/24 10:15, Isaku Yamahata wrote: >>> - >>> - __vmx_exit(); >>> -} >>> -module_exit(vmx_exit); >>> - >>> -static int __init vmx_init(void) >>> +int __init vmx_init(void) >>> { >>> int r, cpu; >>> - if (!kvm_is_vmx_supported()) >>> - return -EOPNOTSUPP; >>> - >>> - /* >>> - * Note, hv_init_evmcs() touches only VMX knobs, i.e. there's nothing >>> - * to unwind if a later step fails. >>> - */ >>> - hv_init_evmcs(); >>> - >>> - /* vmx_hardware_disable() accesses loaded_vmcss_on_cpu. */ >>> - for_each_possible_cpu(cpu) >>> - INIT_LIST_HEAD(&per_cpu(loaded_vmcss_on_cpu, cpu)); >>> - >>> - r = kvm_x86_vendor_init(&vt_init_ops); >>> - if (r) >>> - return r; >>> - >>> /* >>> * Must be called after common x86 init so enable_ept is properly set >>> * up. Hand the parameter mitigation value in which was stored in >> I am wondering whether the first sentence of above comment should be >> moved to vt_init()? So vt_init() has whole information about the init >> sequence. > If we do so, we should move the call of "vmx_setup_l1d_flush() to vt_init(). > I hesitated to remove static of vmx_setup_l1d_flush(). I meant this one: "Must be called after common x86 init so enable_ept is properly set up" Not necessary to move vmx_setup_l1d_flush(). Regards Yin, Fengwei > --