[PATCH v5 10/15] KVM: Add kvm_arch_dirty_ring_size_updated() hook
From: Tian Zheng
Date: Tue Sep 29 2026 - 06:51:53 EST
Draining a CPU-side dirty log buffer into the dirty ring requires
sizing that buffer against the ring, which reserves room for a full
flush. Add a kvm_arch_dirty_ring_size_updated() hook called right
after kvm->dirty_ring_size is recorded, with a __weak no-op default.
arm64 will use it to pin its HDBSS buffer size in dirty-ring mode.
Signed-off-by: Tian Zheng <zhengtian10@xxxxxxxxxx>
---
include/linux/kvm_dirty_ring.h | 1 +
virt/kvm/dirty_ring.c | 4 ++++
virt/kvm/kvm_main.c | 1 +
3 files changed, 6 insertions(+)
diff --git a/include/linux/kvm_dirty_ring.h b/include/linux/kvm_dirty_ring.h
index eb10d87adf7d..c2b922791530 100644
--- a/include/linux/kvm_dirty_ring.h
+++ b/include/linux/kvm_dirty_ring.h
@@ -73,6 +73,7 @@ static inline void kvm_dirty_ring_free(struct kvm_dirty_ring *ring)
#else /* CONFIG_HAVE_KVM_DIRTY_RING */
int kvm_cpu_dirty_log_size(struct kvm *kvm);
+void kvm_arch_dirty_ring_size_updated(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(struct kvm *kvm);
diff --git a/virt/kvm/dirty_ring.c b/virt/kvm/dirty_ring.c
index 572b854edf74..784f53c95b54 100644
--- a/virt/kvm/dirty_ring.c
+++ b/virt/kvm/dirty_ring.c
@@ -16,6 +16,10 @@ int __weak kvm_cpu_dirty_log_size(struct kvm *kvm)
return 0;
}
+void __weak kvm_arch_dirty_ring_size_updated(struct kvm *kvm)
+{
+}
+
u32 kvm_dirty_ring_get_rsvd_entries(struct kvm *kvm)
{
return KVM_DIRTY_RING_RSVD_ENTRIES + kvm_cpu_dirty_log_size(kvm);
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index 85f42289748d..d109062f6a1c 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -5011,6 +5011,7 @@ static int kvm_vm_ioctl_enable_dirty_log_ring(struct kvm *kvm, u32 size)
r = -EINVAL;
} else {
kvm->dirty_ring_size = size;
+ kvm_arch_dirty_ring_size_updated(kvm);
r = 0;
}
--
2.43.0