int msr;
        unsigned long *msr_bitmap_l1;
        unsigned long *msr_bitmap_l0 = vmx->nested.vmcs02.msr_bitmap;
+       struct hv_enlightened_vmcs *evmcs = vmx->nested.hv_evmcs;
        struct kvm_host_map *map = &vmx->nested.msr_bitmap_map;
 
        /* Nothing to do if the MSR bitmap is not in use.  */
            !nested_cpu_has(vmcs12, CPU_BASED_USE_MSR_BITMAPS))
                return false;
 
+       /*
+        * MSR bitmap update can be skipped when:
+        * - MSR bitmap for L1 hasn't changed.
+        * - Nested hypervisor (L1) is attempting to launch the same L2 as
+        *   before.
+        * - Nested hypervisor (L1) has enabled 'Enlightened MSR Bitmap' feature
+        *   and tells KVM (L0) there were no changes in MSR bitmap for L2.
+        */
+       if (!vmx->nested.force_msr_bitmap_recalc && evmcs &&
+           evmcs->hv_enlightenments_control.msr_bitmap &&
+           evmcs->hv_clean_fields & HV_VMX_ENLIGHTENED_CLEAN_FIELD_MSR_BITMAP)
+               return true;
+
        if (kvm_vcpu_map(vcpu, gpa_to_gfn(vmcs12->msr_bitmap), map))
                return false;