#include <linux/kvm_host.h>
#include <linux/kvm.h>
#include <linux/vmalloc.h>
#include <linux/kvm_dirty_ring.h>
#include <trace/events/kvm.h>
#include "kvm_mm.h"
int __weak kvm_cpu_dirty_log_size(void)
{ … }
u32 kvm_dirty_ring_get_rsvd_entries(void)
{ … }
bool kvm_use_dirty_bitmap(struct kvm *kvm)
{ … }
#ifndef CONFIG_NEED_KVM_DIRTY_RING_WITH_BITMAP
bool kvm_arch_allow_write_without_running_vcpu(struct kvm *kvm)
{ … }
#endif
static u32 kvm_dirty_ring_used(struct kvm_dirty_ring *ring)
{ … }
static bool kvm_dirty_ring_soft_full(struct kvm_dirty_ring *ring)
{ … }
static bool kvm_dirty_ring_full(struct kvm_dirty_ring *ring)
{ … }
static void kvm_reset_dirty_gfn(struct kvm *kvm, u32 slot, u64 offset, u64 mask)
{ … }
int kvm_dirty_ring_alloc(struct kvm_dirty_ring *ring, int index, u32 size)
{ … }
static inline void kvm_dirty_gfn_set_invalid(struct kvm_dirty_gfn *gfn)
{ … }
static inline void kvm_dirty_gfn_set_dirtied(struct kvm_dirty_gfn *gfn)
{ … }
static inline bool kvm_dirty_gfn_harvested(struct kvm_dirty_gfn *gfn)
{ … }
int kvm_dirty_ring_reset(struct kvm *kvm, struct kvm_dirty_ring *ring)
{ … }
void kvm_dirty_ring_push(struct kvm_vcpu *vcpu, u32 slot, u64 offset)
{ … }
bool kvm_dirty_ring_check_request(struct kvm_vcpu *vcpu)
{ … }
struct page *kvm_dirty_ring_get_page(struct kvm_dirty_ring *ring, u32 offset)
{ … }
void kvm_dirty_ring_free(struct kvm_dirty_ring *ring)
{ … }