diff options
author | Avi Kivity <avi@redhat.com> | 2009-07-29 10:24:02 +0300 |
---|---|---|
committer | Avi Kivity <avi@redhat.com> | 2009-07-29 10:24:02 +0300 |
commit | 50ab87121432e4e7f4bd2bebdb9115e2f94b8403 (patch) | |
tree | 6ab9d10eb90d32274562d17acac74a634819428d /kvm-all.c | |
parent | Merge commit '9dfd7c7a00dd700de36ca58005a7cb3934a62efb' into upstream-merge (diff) | |
parent | QEMU BOCHS bios patches to use maxcpus value. (diff) | |
download | qemu-kvm-50ab87121432e4e7f4bd2bebdb9115e2f94b8403.tar.gz qemu-kvm-50ab87121432e4e7f4bd2bebdb9115e2f94b8403.tar.bz2 qemu-kvm-50ab87121432e4e7f4bd2bebdb9115e2f94b8403.zip |
Merge commit 'baef8a666c137fae513a195c8abeb80e1806d7bd' into upstream-merge
* commit 'baef8a666c137fae513a195c8abeb80e1806d7bd':
QEMU BOCHS bios patches to use maxcpus value.
Introduce -smp , maxcpus= flag to specify maximum number of CPUS.
Use Little Endian for Dirty Log
Use 64bit pointer for dirty log
HPET fixes for reg writes
slirp: Fix guestfwd for incoming data
Conflicts:
pc-bios/bios.bin (dropped)
Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'kvm-all.c')
-rw-r--r-- | kvm-all.c | 11 |
1 files changed, 7 insertions, 4 deletions
@@ -305,6 +305,11 @@ int kvm_set_migration_log(int enable) return 0; } +static int test_le_bit(unsigned long nr, unsigned char *addr) +{ + return (addr[nr >> 3] >> (nr & 7)) & 1; +} + /** * kvm_physical_sync_dirty_bitmap - Grab dirty bitmap from kernel space * This function updates qemu's dirty bitmap using cpu_physical_memory_set_dirty(). @@ -358,12 +363,10 @@ int kvm_physical_sync_dirty_bitmap(target_phys_addr_t start_addr, for (phys_addr = mem->start_addr, addr = mem->phys_offset; phys_addr < mem->start_addr + mem->memory_size; phys_addr += TARGET_PAGE_SIZE, addr += TARGET_PAGE_SIZE) { - unsigned long *bitmap = (unsigned long *)d.dirty_bitmap; + unsigned char *bitmap = (unsigned char *)d.dirty_bitmap; unsigned nr = (phys_addr - mem->start_addr) >> TARGET_PAGE_BITS; - unsigned word = nr / (sizeof(*bitmap) * 8); - unsigned bit = nr % (sizeof(*bitmap) * 8); - if ((bitmap[word] >> bit) & 1) { + if (test_le_bit(nr, bitmap)) { cpu_physical_memory_set_dirty(addr); } else if (r < 0) { /* When our KVM implementation doesn't know about dirty logging |