Skip to content

Commit

Permalink
KVM: ia64: cleanup kvm_ia64_sync_dirty_log()
Browse files Browse the repository at this point in the history
kvm_ia64_sync_dirty_log() is a helper function for kvm_vm_ioctl_get_dirty_log()
which copies ia64's arch specific dirty bitmap to general one in memslot.
So doing sanity checks in this function is unnatural. We move these checks
outside of this and change the prototype appropriately.

Signed-off-by: Takuya Yoshikawa <[email protected]>
Signed-off-by: Avi Kivity <[email protected]>
  • Loading branch information
Takuya Yoshikawa authored and avikivity committed Aug 1, 2010
1 parent 4482b06 commit 979586e
Showing 1 changed file with 11 additions and 19 deletions.
30 changes: 11 additions & 19 deletions arch/ia64/kvm/kvm-ia64.c
Original file line number Diff line number Diff line change
Expand Up @@ -1795,25 +1795,15 @@ void kvm_arch_exit(void)
kvm_vmm_info = NULL;
}

static int kvm_ia64_sync_dirty_log(struct kvm *kvm,
struct kvm_dirty_log *log)
static void kvm_ia64_sync_dirty_log(struct kvm *kvm,
struct kvm_memory_slot *memslot)
{
struct kvm_memory_slot *memslot;
int r, i;
int i;
long base;
unsigned long n;
unsigned long *dirty_bitmap = (unsigned long *)(kvm->arch.vm_base +
offsetof(struct kvm_vm_data, kvm_mem_dirty_log));

r = -EINVAL;
if (log->slot >= KVM_MEMORY_SLOTS)
goto out;

memslot = &kvm->memslots->memslots[log->slot];
r = -ENOENT;
if (!memslot->dirty_bitmap)
goto out;

n = kvm_dirty_bitmap_bytes(memslot);
base = memslot->base_gfn / BITS_PER_LONG;

Expand All @@ -1823,9 +1813,6 @@ static int kvm_ia64_sync_dirty_log(struct kvm *kvm,
dirty_bitmap[base + i] = 0;
}
spin_unlock(&kvm->arch.dirty_log_lock);
r = 0;
out:
return r;
}

int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm,
Expand All @@ -1838,18 +1825,23 @@ int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm,

mutex_lock(&kvm->slots_lock);

r = kvm_ia64_sync_dirty_log(kvm, log);
if (r)
r = -EINVAL;
if (log->slot >= KVM_MEMORY_SLOTS)
goto out;

memslot = &kvm->memslots->memslots[log->slot];
r = -ENOENT;
if (!memslot->dirty_bitmap)
goto out;

kvm_ia64_sync_dirty_log(kvm, memslot);
r = kvm_get_dirty_log(kvm, log, &is_dirty);
if (r)
goto out;

/* If nothing is dirty, don't bother messing with page tables. */
if (is_dirty) {
kvm_flush_remote_tlbs(kvm);
memslot = &kvm->memslots->memslots[log->slot];
n = kvm_dirty_bitmap_bytes(memslot);
memset(memslot->dirty_bitmap, 0, n);
}
Expand Down

0 comments on commit 979586e

Please sign in to comment.