Skip to content

Commit

Permalink
fix: Temporarily fix the free problem
Browse files Browse the repository at this point in the history
It need to free all created bitmaps but if we do it cause some problem
  • Loading branch information
PJTPJT committed Dec 7, 2017
1 parent 60623ee commit b48e0b7
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 26 deletions.
2 changes: 2 additions & 0 deletions kvm/x86/kvm_ft.c
Original file line number Diff line number Diff line change
Expand Up @@ -2402,7 +2402,9 @@ static int __diff_to_buf(unsigned long gfn, struct page *page1,
}

if (block == buf + sizeof(*header)) {
#ifdef ft_debug_mode_enable
printk("warning: not found diff page\n");
#endif
memset(header->h, 0xff, 16 * sizeof(__u8));
memcpy(block, page, 4096);
block += 4096;
Expand Down
33 changes: 7 additions & 26 deletions kvm/x86/kvm_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -568,37 +568,15 @@ static struct kvm_memslots *kvm_alloc_memslots(void)

static void kvm_destroy_dirty_bitmap(struct kvm_memory_slot *memslot)
{
if (!memslot->dirty_bitmap)
return;

//kvfree(memslot->dirty_bitmap);
//memslot->dirty_bitmap = NULL;
shared_pages_array_free(&memslot->epoch_dirty_bitmaps);
shared_pages_array_free(&memslot->epoch_gfn_to_put_offs);

if (memslot->lock_dirty_bitmap) {
kvm_kvfree(memslot->lock_dirty_bitmap);
memslot->lock_dirty_bitmap = NULL;
}

if (memslot->backup_transfer_bitmap) {
kvm_kvfree(memslot->backup_transfer_bitmap);
memslot->backup_transfer_bitmap = NULL;
}

if (memslot->epoch_gfn_to_put_off) {
kfree(memslot->epoch_gfn_to_put_off);
memslot->epoch_gfn_to_put_off = NULL;
}
if (!memslot->dirty_bitmap)
return;

kvfree(memslot->dirty_bitmap);
memslot->dirty_bitmap = NULL;
}

static void kvm_destroy_dirty_bitmap_init(struct kvm_memory_slot *memslot)
{
if (!memslot->dirty_bitmap)
return;

shared_pages_array_free(&memslot->epoch_dirty_bitmaps);
shared_pages_array_free(&memslot->epoch_gfn_to_put_offs);

Expand All @@ -617,8 +595,11 @@ static void kvm_destroy_dirty_bitmap_init(struct kvm_memory_slot *memslot)
memslot->epoch_gfn_to_put_off = NULL;
}

memslot->dirty_bitmap = NULL;
if (!memslot->dirty_bitmap)
return;

kvfree(memslot->dirty_bitmap);
memslot->dirty_bitmap = NULL;
}

/*
Expand Down

0 comments on commit b48e0b7

Please sign in to comment.