Skip to content

Commit

Permalink
accel: kvm: Add aligment assert for kvm_log_clear_one_slot
Browse files Browse the repository at this point in the history
The parameters start and size are transfered from QEMU memory
emulation layer. It can promise that they are TARGET_PAGE_SIZE
aligned. However, KVM needs they are qemu_real_page_size aligned.

Though no caller breaks this aligned requirement currently, we'd
better add an explicit assert to avoid future breaking.

Signed-off-by: Keqian Zhu <zhukeqian1@huawei.com>
Acked-by: Peter Xu <peterx@redhat.com>
Reviewed-by: Andrew Jones <drjones@redhat.com>
Message-Id: <20201217014941.22872-3-zhukeqian1@huawei.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  • Loading branch information
Keqian Zhu authored and bonzini committed Mar 6, 2021
1 parent e0a8f99 commit 3920552
Showing 1 changed file with 7 additions and 0 deletions.
7 changes: 7 additions & 0 deletions accel/kvm/kvm-all.c
Expand Up @@ -673,6 +673,10 @@ static int kvm_physical_sync_dirty_bitmap(KVMMemoryListener *kml,
#define KVM_CLEAR_LOG_ALIGN (qemu_real_host_page_size << KVM_CLEAR_LOG_SHIFT)
#define KVM_CLEAR_LOG_MASK (-KVM_CLEAR_LOG_ALIGN)

/*
* As the granule of kvm dirty log is qemu_real_host_page_size,
* @start and @size are expected and restricted to align to it.
*/
static int kvm_log_clear_one_slot(KVMSlot *mem, int as_id, uint64_t start,
uint64_t size)
{
Expand All @@ -682,6 +686,9 @@ static int kvm_log_clear_one_slot(KVMSlot *mem, int as_id, uint64_t start,
unsigned long *bmap_clear = NULL, psize = qemu_real_host_page_size;
int ret;

/* Make sure start and size are qemu_real_host_page_size aligned */
assert(QEMU_IS_ALIGNED(start | size, psize));

/*
* We need to extend either the start or the size or both to
* satisfy the KVM interface requirement. Firstly, do the start
Expand Down

0 comments on commit 3920552

Please sign in to comment.