[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 13/68] kvm: Enable dirty ring for arm64
|
From: |
Paolo Bonzini |
|
Subject: |
[PULL 13/68] kvm: Enable dirty ring for arm64 |
|
Date: |
Wed, 17 May 2023 19:44:25 +0200 |
From: Gavin Shan <gshan@redhat.com>
arm64 has different capability from x86 to enable the dirty ring, which
is KVM_CAP_DIRTY_LOG_RING_ACQ_REL. Besides, arm64 also needs the backup
bitmap extension (KVM_CAP_DIRTY_LOG_RING_WITH_BITMAP) when 'kvm-arm-gicv3'
or 'arm-its-kvm' device is enabled. Here the extension is always enabled
and the unnecessary overhead to do the last stage of dirty log synchronization
when those two devices aren't used is introduced, but the overhead should
be very small and acceptable. The benefit is cover future cases where those
two devices are used without modifying the code.
Signed-off-by: Gavin Shan <gshan@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Tested-by: Zhenyu Zhang <zhenyzha@redhat.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Message-Id: <20230509022122.20888-5-gshan@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
accel/kvm/kvm-all.c | 23 +++++++++++++++++++++--
1 file changed, 21 insertions(+), 2 deletions(-)
diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c
index 5d0de9d0a8f8..7679f397aec0 100644
--- a/accel/kvm/kvm-all.c
+++ b/accel/kvm/kvm-all.c
@@ -1466,6 +1466,7 @@ static int kvm_dirty_ring_init(KVMState *s)
{
uint32_t ring_size = s->kvm_dirty_ring_size;
uint64_t ring_bytes = ring_size * sizeof(struct kvm_dirty_gfn);
+ unsigned int capability = KVM_CAP_DIRTY_LOG_RING;
int ret;
s->kvm_dirty_ring_size = 0;
@@ -1480,7 +1481,12 @@ static int kvm_dirty_ring_init(KVMState *s)
* Read the max supported pages. Fall back to dirty logging mode
* if the dirty ring isn't supported.
*/
- ret = kvm_vm_check_extension(s, KVM_CAP_DIRTY_LOG_RING);
+ ret = kvm_vm_check_extension(s, capability);
+ if (ret <= 0) {
+ capability = KVM_CAP_DIRTY_LOG_RING_ACQ_REL;
+ ret = kvm_vm_check_extension(s, capability);
+ }
+
if (ret <= 0) {
warn_report("KVM dirty ring not available, using bitmap method");
return 0;
@@ -1493,13 +1499,26 @@ static int kvm_dirty_ring_init(KVMState *s)
return -EINVAL;
}
- ret = kvm_vm_enable_cap(s, KVM_CAP_DIRTY_LOG_RING, 0, ring_bytes);
+ ret = kvm_vm_enable_cap(s, capability, 0, ring_bytes);
if (ret) {
error_report("Enabling of KVM dirty ring failed: %s. "
"Suggested minimum value is 1024.", strerror(-ret));
return -EIO;
}
+ /* Enable the backup bitmap if it is supported */
+ ret = kvm_vm_check_extension(s, KVM_CAP_DIRTY_LOG_RING_WITH_BITMAP);
+ if (ret > 0) {
+ ret = kvm_vm_enable_cap(s, KVM_CAP_DIRTY_LOG_RING_WITH_BITMAP, 0);
+ if (ret) {
+ error_report("Enabling of KVM dirty ring's backup bitmap failed: "
+ "%s. ", strerror(-ret));
+ return -EIO;
+ }
+
+ s->kvm_dirty_ring_with_bitmap = true;
+ }
+
s->kvm_dirty_ring_size = ring_size;
s->kvm_dirty_ring_bytes = ring_bytes;
--
2.40.1
- [PULL 01/68] target/i386: add support for FLUSH_L1D feature, (continued)
- [PULL 01/68] target/i386: add support for FLUSH_L1D feature, Paolo Bonzini, 2023/05/17
- [PULL 02/68] target/i386: add support for FB_CLEAR feature, Paolo Bonzini, 2023/05/17
- [PULL 06/68] target/i386: Fix and add some comments next to SSE/AVX instructions., Paolo Bonzini, 2023/05/17
- [PULL 08/68] target/i386: Fix exception classes for MOVNTPS/MOVNTPD., Paolo Bonzini, 2023/05/17
- [PULL 09/68] meson: Pass -j option to sphinx, Paolo Bonzini, 2023/05/17
- [PULL 04/68] target/i386: fix avx2 instructions vzeroall and vpermdq, Paolo Bonzini, 2023/05/17
- [PULL 07/68] target/i386: Fix exception classes for SSE/AVX instructions., Paolo Bonzini, 2023/05/17
- [PULL 11/68] kvm: Synchronize the backup bitmap in the last stage, Paolo Bonzini, 2023/05/17
- [PULL 10/68] migration: Add last stage indicator to global dirty log, Paolo Bonzini, 2023/05/17
- [PULL 12/68] kvm: Add helper kvm_dirty_ring_init(), Paolo Bonzini, 2023/05/17
- [PULL 13/68] kvm: Enable dirty ring for arm64,
Paolo Bonzini <=
- [PULL 16/68] scsi-generic: fix buffer overflow on block limits inquiry, Paolo Bonzini, 2023/05/17
- [PULL 14/68] tcg: round-robin: do not use mb_read for rr_current_cpu, Paolo Bonzini, 2023/05/17
- [PULL 17/68] make: clean after distclean deletes source files, Paolo Bonzini, 2023/05/17
- [PULL 18/68] python: shut up "pip install" during "make check-minreqs", Paolo Bonzini, 2023/05/17
- [PULL 15/68] coverity: the definitive COMPONENTS.md update, Paolo Bonzini, 2023/05/17
- [PULL 20/68] python: add mkvenv.py, Paolo Bonzini, 2023/05/17
- [PULL 28/68] mkvenv: work around broken pip installations on Debian 10, Paolo Bonzini, 2023/05/17
- [PULL 19/68] python: update pylint configuration, Paolo Bonzini, 2023/05/17
- [PULL 23/68] mkvenv: add ensure subcommand, Paolo Bonzini, 2023/05/17
- [PULL 21/68] mkvenv: add better error message for broken or missing ensurepip, Paolo Bonzini, 2023/05/17