kvm_mmu_write_protect_pt_masked(kvm, slot, gfn_offset, mask);
 }
 
-int kvm_cpu_dirty_log_size(void)
+int kvm_cpu_dirty_log_size(struct kvm *kvm)
 {
        return kvm_x86_ops.cpu_dirty_log_size;
 }
 
  * If CONFIG_HAVE_HVM_DIRTY_RING not defined, kvm_dirty_ring.o should
  * not be included as well, so define these nop functions for the arch.
  */
-static inline u32 kvm_dirty_ring_get_rsvd_entries(void)
+static inline u32 kvm_dirty_ring_get_rsvd_entries(struct kvm *kvm)
 {
        return 0;
 }
        return true;
 }
 
-static inline int kvm_dirty_ring_alloc(struct kvm_dirty_ring *ring,
+static inline int kvm_dirty_ring_alloc(struct kvm *kvm, struct kvm_dirty_ring *ring,
                                       int index, u32 size)
 {
        return 0;
 
 #else /* CONFIG_HAVE_KVM_DIRTY_RING */
 
-int kvm_cpu_dirty_log_size(void);
+int kvm_cpu_dirty_log_size(struct kvm *kvm);
 bool kvm_use_dirty_bitmap(struct kvm *kvm);
 bool kvm_arch_allow_write_without_running_vcpu(struct kvm *kvm);
-u32 kvm_dirty_ring_get_rsvd_entries(void);
-int kvm_dirty_ring_alloc(struct kvm_dirty_ring *ring, int index, u32 size);
+u32 kvm_dirty_ring_get_rsvd_entries(struct kvm *kvm);
+int kvm_dirty_ring_alloc(struct kvm *kvm, struct kvm_dirty_ring *ring,
+                        int index, u32 size);
 
 /*
  * called with kvm->slots_lock held, returns the number of
 
 #include <trace/events/kvm.h>
 #include "kvm_mm.h"
 
-int __weak kvm_cpu_dirty_log_size(void)
+int __weak kvm_cpu_dirty_log_size(struct kvm *kvm)
 {
        return 0;
 }
 
-u32 kvm_dirty_ring_get_rsvd_entries(void)
+u32 kvm_dirty_ring_get_rsvd_entries(struct kvm *kvm)
 {
-       return KVM_DIRTY_RING_RSVD_ENTRIES + kvm_cpu_dirty_log_size();
+       return KVM_DIRTY_RING_RSVD_ENTRIES + kvm_cpu_dirty_log_size(kvm);
 }
 
 bool kvm_use_dirty_bitmap(struct kvm *kvm)
        KVM_MMU_UNLOCK(kvm);
 }
 
-int kvm_dirty_ring_alloc(struct kvm_dirty_ring *ring, int index, u32 size)
+int kvm_dirty_ring_alloc(struct kvm *kvm, struct kvm_dirty_ring *ring,
+                        int index, u32 size)
 {
        ring->dirty_gfns = vzalloc(size);
        if (!ring->dirty_gfns)
                return -ENOMEM;
 
        ring->size = size / sizeof(struct kvm_dirty_gfn);
-       ring->soft_limit = ring->size - kvm_dirty_ring_get_rsvd_entries();
+       ring->soft_limit = ring->size - kvm_dirty_ring_get_rsvd_entries(kvm);
        ring->dirty_index = 0;
        ring->reset_index = 0;
        ring->index = index;
 
                goto vcpu_free_run_page;
 
        if (kvm->dirty_ring_size) {
-               r = kvm_dirty_ring_alloc(&vcpu->dirty_ring,
+               r = kvm_dirty_ring_alloc(kvm, &vcpu->dirty_ring,
                                         id, kvm->dirty_ring_size);
                if (r)
                        goto arch_vcpu_destroy;
                return -EINVAL;
 
        /* Should be bigger to keep the reserved entries, or a page */
-       if (size < kvm_dirty_ring_get_rsvd_entries() *
+       if (size < kvm_dirty_ring_get_rsvd_entries(kvm) *
            sizeof(struct kvm_dirty_gfn) || size < PAGE_SIZE)
                return -EINVAL;