Lines Matching defs:kvm
23 bool kvm_page_track_write_tracking_enabled(struct kvm *kvm)
26 !tdp_enabled || kvm_shadow_root_allocated(kvm);
47 int kvm_page_track_create_memslot(struct kvm *kvm,
51 if (!kvm_page_track_write_tracking_enabled(kvm))
77 void __kvm_write_track_add_gfn(struct kvm *kvm, struct kvm_memory_slot *slot,
80 lockdep_assert_held_write(&kvm->mmu_lock);
82 lockdep_assert_once(lockdep_is_held(&kvm->slots_lock) ||
83 srcu_read_lock_held(&kvm->srcu));
85 if (KVM_BUG_ON(!kvm_page_track_write_tracking_enabled(kvm), kvm))
96 if (kvm_mmu_slot_gfn_write_protect(kvm, slot, gfn, PG_LEVEL_4K))
97 kvm_flush_remote_tlbs(kvm);
100 void __kvm_write_track_remove_gfn(struct kvm *kvm,
103 lockdep_assert_held_write(&kvm->mmu_lock);
105 lockdep_assert_once(lockdep_is_held(&kvm->slots_lock) ||
106 srcu_read_lock_held(&kvm->srcu));
108 if (KVM_BUG_ON(!kvm_page_track_write_tracking_enabled(kvm), kvm))
123 bool kvm_gfn_is_write_tracked(struct kvm *kvm,
131 if (!kvm_page_track_write_tracking_enabled(kvm))
139 void kvm_page_track_cleanup(struct kvm *kvm)
143 head = &kvm->arch.track_notifier_head;
147 int kvm_page_track_init(struct kvm *kvm)
151 head = &kvm->arch.track_notifier_head;
160 int kvm_page_track_register_notifier(struct kvm *kvm,
165 if (!kvm || kvm->mm != current->mm)
168 kvm_get_kvm(kvm);
170 head = &kvm->arch.track_notifier_head;
172 write_lock(&kvm->mmu_lock);
174 write_unlock(&kvm->mmu_lock);
183 void kvm_page_track_unregister_notifier(struct kvm *kvm,
188 head = &kvm->arch.track_notifier_head;
190 write_lock(&kvm->mmu_lock);
192 write_unlock(&kvm->mmu_lock);
195 kvm_put_kvm(kvm);
206 void __kvm_page_track_write(struct kvm *kvm, gpa_t gpa, const u8 *new, int bytes)
212 head = &kvm->arch.track_notifier_head;
229 void kvm_page_track_delete_slot(struct kvm *kvm, struct kvm_memory_slot *slot)
235 head = &kvm->arch.track_notifier_head;
252 * @kvm: the guest instance we are interested in.
255 int kvm_write_track_add_gfn(struct kvm *kvm, gfn_t gfn)
260 idx = srcu_read_lock(&kvm->srcu);
262 slot = gfn_to_memslot(kvm, gfn);
264 srcu_read_unlock(&kvm->srcu, idx);
268 write_lock(&kvm->mmu_lock);
269 __kvm_write_track_add_gfn(kvm, slot, gfn);
270 write_unlock(&kvm->mmu_lock);
272 srcu_read_unlock(&kvm->srcu, idx);
282 * @kvm: the guest instance we are interested in.
285 int kvm_write_track_remove_gfn(struct kvm *kvm, gfn_t gfn)
290 idx = srcu_read_lock(&kvm->srcu);
292 slot = gfn_to_memslot(kvm, gfn);
294 srcu_read_unlock(&kvm->srcu, idx);
298 write_lock(&kvm->mmu_lock);
299 __kvm_write_track_remove_gfn(kvm, slot, gfn);
300 write_unlock(&kvm->mmu_lock);
302 srcu_read_unlock(&kvm->srcu, idx);