On 21/06/2018 14:30, Vitaly Kuznetsov wrote: > +static __always_inline bool evmcs_needs_write(struct vcpu_vmx *vmx, > + u16 clean_field) > +{ > + if (vmx->nested.dirty_vmcs12) > + return true; Why is this needed? If it weren't for it, you could pass hv_evmcs directly to evmcs_needs_write, which would simplify the code a bit in the caller. Paolo > + return !(vmx->nested.hv_evmcs->hv_clean_fields & clean_field);