aboutsummaryrefslogtreecommitdiff
path: root/kvm-all.c
diff options
context:
space:
mode:
authorAnthony Liguori <aliguori@us.ibm.com>2010-08-23 15:10:12 -0500
committerAnthony Liguori <aliguori@us.ibm.com>2010-08-23 15:10:12 -0500
commite945fb76271eb4c8ceed6bff417a0b98744e1af3 (patch)
treeecc17332bcce1ff6424f3e5dea01a9617c4f67dc /kvm-all.c
parent03b0ba70ab8a5b5d78907216345bd6982b692d4b (diff)
parent14542fea73f294b2a195a8e17c5a0dd15f60640e (diff)
downloadqemu-e945fb76271eb4c8ceed6bff417a0b98744e1af3.zip
qemu-e945fb76271eb4c8ceed6bff417a0b98744e1af3.tar.gz
qemu-e945fb76271eb4c8ceed6bff417a0b98744e1af3.tar.bz2
Merge remote branch 'qemu-kvm/uq/master' into staging
Diffstat (limited to 'kvm-all.c')
-rw-r--r--kvm-all.c19
1 files changed, 7 insertions, 12 deletions
diff --git a/kvm-all.c b/kvm-all.c
index d9a5dd0..58b0404 100644
--- a/kvm-all.c
+++ b/kvm-all.c
@@ -274,6 +274,9 @@ static int kvm_set_migration_log(int enable)
for (i = 0; i < ARRAY_SIZE(s->slots); i++) {
mem = &s->slots[i];
+ if (!mem->memory_size) {
+ continue;
+ }
if (!!(mem->flags & KVM_MEM_LOG_DIRTY_PAGES) == enable) {
continue;
}
@@ -429,18 +432,10 @@ static void kvm_set_phys_mem(target_phys_addr_t start_addr,
KVMSlot *mem, old;
int err;
- if (start_addr & ~TARGET_PAGE_MASK) {
- if (flags >= IO_MEM_UNASSIGNED) {
- if (!kvm_lookup_overlapping_slot(s, start_addr,
- start_addr + size)) {
- return;
- }
- fprintf(stderr, "Unaligned split of a KVM memory slot\n");
- } else {
- fprintf(stderr, "Only page-aligned memory slots supported\n");
- }
- abort();
- }
+ /* kvm works in page size chunks, but the function may be called
+ with sub-page size and unaligned start address. */
+ size = TARGET_PAGE_ALIGN(size);
+ start_addr = TARGET_PAGE_ALIGN(start_addr);
/* KVM does not support read-only slots */
phys_offset &= ~IO_MEM_ROM;