Skip to content

Commit c4a92f1

Browse files
yanzhao56bonzini
authored andcommitted
KVM: Add parameter "kvm" to kvm_cpu_dirty_log_size() and its callers
Add a parameter "kvm" to kvm_cpu_dirty_log_size() and down to its callers: kvm_dirty_ring_get_rsvd_entries(), kvm_dirty_ring_alloc(). This is a preparation to make cpu_dirty_log_size a per-VM value rather than a system-wide value. No function changes expected. Signed-off-by: Yan Zhao <yan.y.zhao@intel.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
1 parent d789fa6 commit c4a92f1

File tree

4 files changed

+15
-13
lines changed

4 files changed

+15
-13
lines changed

arch/x86/kvm/mmu/mmu.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1311,7 +1311,7 @@ void kvm_arch_mmu_enable_log_dirty_pt_masked(struct kvm *kvm,
13111311
kvm_mmu_write_protect_pt_masked(kvm, slot, gfn_offset, mask);
13121312
}
13131313

1314-
int kvm_cpu_dirty_log_size(void)
1314+
int kvm_cpu_dirty_log_size(struct kvm *kvm)
13151315
{
13161316
return kvm_x86_ops.cpu_dirty_log_size;
13171317
}

include/linux/kvm_dirty_ring.h

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ struct kvm_dirty_ring {
3232
* If CONFIG_HAVE_HVM_DIRTY_RING not defined, kvm_dirty_ring.o should
3333
* not be included as well, so define these nop functions for the arch.
3434
*/
35-
static inline u32 kvm_dirty_ring_get_rsvd_entries(void)
35+
static inline u32 kvm_dirty_ring_get_rsvd_entries(struct kvm *kvm)
3636
{
3737
return 0;
3838
}
@@ -42,7 +42,7 @@ static inline bool kvm_use_dirty_bitmap(struct kvm *kvm)
4242
return true;
4343
}
4444

45-
static inline int kvm_dirty_ring_alloc(struct kvm_dirty_ring *ring,
45+
static inline int kvm_dirty_ring_alloc(struct kvm *kvm, struct kvm_dirty_ring *ring,
4646
int index, u32 size)
4747
{
4848
return 0;
@@ -71,11 +71,12 @@ static inline void kvm_dirty_ring_free(struct kvm_dirty_ring *ring)
7171

7272
#else /* CONFIG_HAVE_KVM_DIRTY_RING */
7373

74-
int kvm_cpu_dirty_log_size(void);
74+
int kvm_cpu_dirty_log_size(struct kvm *kvm);
7575
bool kvm_use_dirty_bitmap(struct kvm *kvm);
7676
bool kvm_arch_allow_write_without_running_vcpu(struct kvm *kvm);
77-
u32 kvm_dirty_ring_get_rsvd_entries(void);
78-
int kvm_dirty_ring_alloc(struct kvm_dirty_ring *ring, int index, u32 size);
77+
u32 kvm_dirty_ring_get_rsvd_entries(struct kvm *kvm);
78+
int kvm_dirty_ring_alloc(struct kvm *kvm, struct kvm_dirty_ring *ring,
79+
int index, u32 size);
7980

8081
/*
8182
* called with kvm->slots_lock held, returns the number of

virt/kvm/dirty_ring.c

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,14 @@
1111
#include <trace/events/kvm.h>
1212
#include "kvm_mm.h"
1313

14-
int __weak kvm_cpu_dirty_log_size(void)
14+
int __weak kvm_cpu_dirty_log_size(struct kvm *kvm)
1515
{
1616
return 0;
1717
}
1818

19-
u32 kvm_dirty_ring_get_rsvd_entries(void)
19+
u32 kvm_dirty_ring_get_rsvd_entries(struct kvm *kvm)
2020
{
21-
return KVM_DIRTY_RING_RSVD_ENTRIES + kvm_cpu_dirty_log_size();
21+
return KVM_DIRTY_RING_RSVD_ENTRIES + kvm_cpu_dirty_log_size(kvm);
2222
}
2323

2424
bool kvm_use_dirty_bitmap(struct kvm *kvm)
@@ -74,14 +74,15 @@ static void kvm_reset_dirty_gfn(struct kvm *kvm, u32 slot, u64 offset, u64 mask)
7474
KVM_MMU_UNLOCK(kvm);
7575
}
7676

77-
int kvm_dirty_ring_alloc(struct kvm_dirty_ring *ring, int index, u32 size)
77+
int kvm_dirty_ring_alloc(struct kvm *kvm, struct kvm_dirty_ring *ring,
78+
int index, u32 size)
7879
{
7980
ring->dirty_gfns = vzalloc(size);
8081
if (!ring->dirty_gfns)
8182
return -ENOMEM;
8283

8384
ring->size = size / sizeof(struct kvm_dirty_gfn);
84-
ring->soft_limit = ring->size - kvm_dirty_ring_get_rsvd_entries();
85+
ring->soft_limit = ring->size - kvm_dirty_ring_get_rsvd_entries(kvm);
8586
ring->dirty_index = 0;
8687
ring->reset_index = 0;
8788
ring->index = index;

virt/kvm/kvm_main.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4108,7 +4108,7 @@ static int kvm_vm_ioctl_create_vcpu(struct kvm *kvm, unsigned long id)
41084108
goto vcpu_free_run_page;
41094109

41104110
if (kvm->dirty_ring_size) {
4111-
r = kvm_dirty_ring_alloc(&vcpu->dirty_ring,
4111+
r = kvm_dirty_ring_alloc(kvm, &vcpu->dirty_ring,
41124112
id, kvm->dirty_ring_size);
41134113
if (r)
41144114
goto arch_vcpu_destroy;
@@ -4847,7 +4847,7 @@ static int kvm_vm_ioctl_enable_dirty_log_ring(struct kvm *kvm, u32 size)
48474847
return -EINVAL;
48484848

48494849
/* Should be bigger to keep the reserved entries, or a page */
4850-
if (size < kvm_dirty_ring_get_rsvd_entries() *
4850+
if (size < kvm_dirty_ring_get_rsvd_entries(kvm) *
48514851
sizeof(struct kvm_dirty_gfn) || size < PAGE_SIZE)
48524852
return -EINVAL;
48534853

0 commit comments

Comments
 (0)