[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 26/45] kvm: Take into account the unaligned section size when prep
From: |
Paolo Bonzini |
Subject: |
[PULL 26/45] kvm: Take into account the unaligned section size when preparing bitmap |
Date: |
Tue, 15 Dec 2020 12:54:26 -0500 |
From: Zenghui Yu <yuzenghui@huawei.com>
The kernel KVM_CLEAR_DIRTY_LOG interface has align requirement on both the
start and the size of the given range of pages. We have been careful to
handle the unaligned cases when performing CLEAR on one slot. But it seems
that we forget to take the unaligned *size* case into account when
preparing bitmap for the interface, and we may end up clearing dirty status
for pages outside of [start, start + size).
If the size is unaligned, let's go through the slow path to manipulate a
temp bitmap for the interface so that we won't bother with those unaligned
bits at the end of bitmap.
I don't think this can happen in practice since the upper layer would
provide us with the alignment guarantee. I'm not sure if kvm-all could rely
on it. And this patch is mainly intended to address correctness of the
specific algorithm used inside kvm_log_clear_one_slot().
Signed-off-by: Zenghui Yu <yuzenghui@huawei.com>
Message-Id: <20201208114013.875-1-yuzenghui@huawei.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
accel/kvm/kvm-all.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c
index 666b9ab96c..389eaace72 100644
--- a/accel/kvm/kvm-all.c
+++ b/accel/kvm/kvm-all.c
@@ -745,7 +745,7 @@ static int kvm_log_clear_one_slot(KVMSlot *mem, int as_id,
uint64_t start,
assert(bmap_start % BITS_PER_LONG == 0);
/* We should never do log_clear before log_sync */
assert(mem->dirty_bmap);
- if (start_delta) {
+ if (start_delta || bmap_npages - size / psize) {
/* Slow path - we need to manipulate a temp bitmap */
bmap_clear = bitmap_new(bmap_npages);
bitmap_copy_with_src_offset(bmap_clear, mem->dirty_bmap,
@@ -758,7 +758,10 @@ static int kvm_log_clear_one_slot(KVMSlot *mem, int as_id,
uint64_t start,
bitmap_clear(bmap_clear, 0, start_delta);
d.dirty_bitmap = bmap_clear;
} else {
- /* Fast path - start address aligns well with BITS_PER_LONG */
+ /*
+ * Fast path - both start and size align well with BITS_PER_LONG
+ * (or the end of memory slot)
+ */
d.dirty_bitmap = mem->dirty_bmap + BIT_WORD(bmap_start);
}
--
2.26.2
- [PULL 10/45] vl: make qemu_get_machine_opts static, (continued)
- [PULL 10/45] vl: make qemu_get_machine_opts static, Paolo Bonzini, 2020/12/15
- [PULL 23/45] Remove the deprecated -show-cursor option, Paolo Bonzini, 2020/12/15
- [PULL 15/45] vl: Add an -action option specifying response to guest events, Paolo Bonzini, 2020/12/15
- [PULL 13/45] monitor: allow quitting while in preconfig state, Paolo Bonzini, 2020/12/15
- [PULL 16/45] vl: Add option to avoid stopping VM upon guest panic, Paolo Bonzini, 2020/12/15
- [PULL 21/45] docs/system: Move the list of removed features to a separate file, Paolo Bonzini, 2020/12/15
- [PULL 07/45] chardev: do not use machine_init_done, Paolo Bonzini, 2020/12/15
- [PULL 17/45] qtest/pvpanic: Test panic option that allows VM to continue, Paolo Bonzini, 2020/12/15
- [PULL 18/45] msix: assert that accesses are within bounds, Paolo Bonzini, 2020/12/15
- [PULL 22/45] Remove the deprecated -realtime option, Paolo Bonzini, 2020/12/15
- [PULL 26/45] kvm: Take into account the unaligned section size when preparing bitmap,
Paolo Bonzini <=
- [PULL 25/45] scsi: fix device removal race vs IO restart callback on resume, Paolo Bonzini, 2020/12/15
- [PULL 27/45] qemu-option: simplify search for end of key, Paolo Bonzini, 2020/12/15
- [PULL 36/45] tests: remove GCC < 4 fallbacks, Paolo Bonzini, 2020/12/15
- [PULL 32/45] qemu/atomic: Drop special case for unsupported compiler, Paolo Bonzini, 2020/12/15
- [PULL 35/45] qemu-plugin.h: remove GCC < 4, Paolo Bonzini, 2020/12/15
- [PULL 42/45] linux-user: remove GNUC check, Paolo Bonzini, 2020/12/15
- [PULL 20/45] accel/tcg: Remove deprecated '-tb-size' option, Paolo Bonzini, 2020/12/15
- [PULL 28/45] qemu-option: pass QemuOptsList to opts_accepts_any, Paolo Bonzini, 2020/12/15
- [PULL 24/45] icount: improve exec nocache usage, Paolo Bonzini, 2020/12/15
- [PULL 29/45] vl: rename local variable in configure_accelerators, Paolo Bonzini, 2020/12/15