#include <linux/kvm_host.h>
#include <asm/kvm_page_track.h>
Go to the source code of this file.
|
bool | kvm_page_track_write_tracking_enabled (struct kvm *kvm) |
|
int | kvm_page_track_write_tracking_alloc (struct kvm_memory_slot *slot) |
|
void | kvm_page_track_free_memslot (struct kvm_memory_slot *slot) |
|
int | kvm_page_track_create_memslot (struct kvm *kvm, struct kvm_memory_slot *slot, unsigned long npages) |
|
void | __kvm_write_track_add_gfn (struct kvm *kvm, struct kvm_memory_slot *slot, gfn_t gfn) |
|
void | __kvm_write_track_remove_gfn (struct kvm *kvm, struct kvm_memory_slot *slot, gfn_t gfn) |
|
bool | kvm_gfn_is_write_tracked (struct kvm *kvm, const struct kvm_memory_slot *slot, gfn_t gfn) |
|
static int | kvm_page_track_init (struct kvm *kvm) |
|
static void | kvm_page_track_cleanup (struct kvm *kvm) |
|
static void | __kvm_page_track_write (struct kvm *kvm, gpa_t gpa, const u8 *new, int bytes) |
|
static void | kvm_page_track_delete_slot (struct kvm *kvm, struct kvm_memory_slot *slot) |
|
static bool | kvm_page_track_has_external_user (struct kvm *kvm) |
|
static void | kvm_page_track_write (struct kvm_vcpu *vcpu, gpa_t gpa, const u8 *new, int bytes) |
|
◆ __kvm_page_track_write()
static void __kvm_page_track_write |
( |
struct kvm * |
kvm, |
|
|
gpa_t |
gpa, |
|
|
const u8 * |
new, |
|
|
int |
bytes |
|
) |
| |
|
inlinestatic |
◆ __kvm_write_track_add_gfn()
void __kvm_write_track_add_gfn |
( |
struct kvm * |
kvm, |
|
|
struct kvm_memory_slot * |
slot, |
|
|
gfn_t |
gfn |
|
) |
| |
Definition at line 77 of file page_track.c.
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));
void kvm_flush_remote_tlbs(struct kvm *kvm)
bool kvm_mmu_slot_gfn_write_protect(struct kvm *kvm, struct kvm_memory_slot *slot, u64 gfn, int min_level)
void kvm_mmu_gfn_disallow_lpage(const struct kvm_memory_slot *slot, gfn_t gfn)
bool kvm_page_track_write_tracking_enabled(struct kvm *kvm)
static void update_gfn_write_track(struct kvm_memory_slot *slot, gfn_t gfn, short count)
◆ __kvm_write_track_remove_gfn()
void __kvm_write_track_remove_gfn |
( |
struct kvm * |
kvm, |
|
|
struct kvm_memory_slot * |
slot, |
|
|
gfn_t |
gfn |
|
) |
| |
Definition at line 100 of file page_track.c.
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));
void kvm_mmu_gfn_allow_lpage(const struct kvm_memory_slot *slot, gfn_t gfn)
◆ kvm_gfn_is_write_tracked()
bool kvm_gfn_is_write_tracked |
( |
struct kvm * |
kvm, |
|
|
const struct kvm_memory_slot * |
slot, |
|
|
gfn_t |
gfn |
|
) |
| |
Definition at line 123 of file page_track.c.
135 return !!READ_ONCE(slot->arch.gfn_write_track[index]);
static gfn_t gfn_to_index(gfn_t gfn, gfn_t base_gfn, int level)
◆ kvm_page_track_cleanup()
static void kvm_page_track_cleanup |
( |
struct kvm * |
kvm | ) |
|
|
inlinestatic |
◆ kvm_page_track_create_memslot()
int kvm_page_track_create_memslot |
( |
struct kvm * |
kvm, |
|
|
struct kvm_memory_slot * |
slot, |
|
|
unsigned long |
npages |
|
) |
| |
Definition at line 47 of file page_track.c.
static int __kvm_page_track_write_tracking_alloc(struct kvm_memory_slot *slot, unsigned long npages)
◆ kvm_page_track_delete_slot()
static void kvm_page_track_delete_slot |
( |
struct kvm * |
kvm, |
|
|
struct kvm_memory_slot * |
slot |
|
) |
| |
|
inlinestatic |
◆ kvm_page_track_free_memslot()
void kvm_page_track_free_memslot |
( |
struct kvm_memory_slot * |
slot | ) |
|
Definition at line 29 of file page_track.c.
31 kvfree(slot->arch.gfn_write_track);
32 slot->arch.gfn_write_track = NULL;
◆ kvm_page_track_has_external_user()
static bool kvm_page_track_has_external_user |
( |
struct kvm * |
kvm | ) |
|
|
inlinestatic |
◆ kvm_page_track_init()
static int kvm_page_track_init |
( |
struct kvm * |
kvm | ) |
|
|
inlinestatic |
◆ kvm_page_track_write()
static void kvm_page_track_write |
( |
struct kvm_vcpu * |
vcpu, |
|
|
gpa_t |
gpa, |
|
|
const u8 * |
new, |
|
|
int |
bytes |
|
) |
| |
|
inlinestatic |
Definition at line 50 of file page_track.h.
void kvm_mmu_track_write(struct kvm_vcpu *vcpu, gpa_t gpa, const u8 *new, int bytes)
static void __kvm_page_track_write(struct kvm *kvm, gpa_t gpa, const u8 *new, int bytes)
◆ kvm_page_track_write_tracking_alloc()
int kvm_page_track_write_tracking_alloc |
( |
struct kvm_memory_slot * |
slot | ) |
|
◆ kvm_page_track_write_tracking_enabled()
bool kvm_page_track_write_tracking_enabled |
( |
struct kvm * |
kvm | ) |
|
Definition at line 23 of file page_track.c.
25 return IS_ENABLED(CONFIG_KVM_EXTERNAL_WRITE_TRACKING) ||
static bool kvm_shadow_root_allocated(struct kvm *kvm)