> On 25 Jun 2019, at 11:51, Vitaly Kuznetsov <vkuznets@xxxxxxxxxx> wrote: > > Liran Alon <liran.alon@xxxxxxxxxx> writes: > >>> On 24 Jun 2019, at 16:30, Vitaly Kuznetsov <vkuznets@xxxxxxxxxx> wrote: >>> >>> >>> +bool nested_enlightened_vmentry(struct kvm_vcpu *vcpu, u64 *evmptr) >> >> I prefer to rename evmptr to evmcs_ptr. I think it’s more readable and sufficiently short. >> In addition, I think you should return either -1ull or assist_page.current_nested_vmcs. >> i.e. Don’t return evmcs_ptr by pointer but instead as a return-value >> and get rid of the bool. > > Actually no, sorry, I'm having second thoughts here: in handle_vmclear() > we don't care about the value of evmcs_ptr, we only want to check that > enlightened vmentry bit is enabled in assist page. If we switch to > checking evmcs_ptr against '-1', for example, we will make '-1' a magic > value which is not in the TLFS. Windows may decide to use it for > something else - and we will get a hard-to-debug bug again. I’m not sure I understand. You are worried that when guest have setup a valid assist-page and set enlighten_vmentry to true, that assist_page.current_nested_vmcs can be -1ull and still be considered a valid eVMCS? I don't think that's reasonable. i.e. I thought about having this version of the method: +u64 nested_enlightened_vmentry(struct kvm_vcpu *vcpu) +{ + struct hv_vp_assist_page assist_page; + + if (unlikely(!kvm_hv_get_assist_page(vcpu, &assist_page))) + return -1ull; + + if (unlikely(!assist_page.enlighten_vmentry)) + return -1ull; + + return assist_page.current_nested_vmcs; +} + -Liran > > If you still dislike nested_enlightened_vmentry() having the side effect > of fetching evmcs_ptr I can get rid of it by splitting the function into > two, however, it will be less efficient for > nested_vmx_handle_enlightened_vmptrld(). Or we can just leave things as > they are there and use the newly introduced function in handle_vmclear() > only. > > -- > Vitaly