KVM: Simplify ifndef conditional usage in __kvm_set_memory_region()
Narrow down the controlled text inside the conditional so that it will include lpage_info and rmap stuff only. For this we change the way we check whether the slot is being created from "if (npages && !new.rmap)" to "if (npages && !old.npages)". We also stop checking if lpage_info is NULL when we create lpage_info because we do it from inside the slot creation code block. Signed-off-by: Takuya Yoshikawa <yoshikawa.takuya@oss.ntt.co.jp> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com> Signed-off-by: Avi Kivity <avi@redhat.com>
This commit is contained in:
parent
a64f273a08
commit
189a2f7b24
1 changed files with 8 additions and 21 deletions
|
@ -616,7 +616,6 @@ static int kvm_vm_release(struct inode *inode, struct file *filp)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef CONFIG_S390
|
|
||||||
/*
|
/*
|
||||||
* Allocation size is twice as large as the actual dirty bitmap size.
|
* Allocation size is twice as large as the actual dirty bitmap size.
|
||||||
* This makes it possible to do double buffering: see x86's
|
* This makes it possible to do double buffering: see x86's
|
||||||
|
@ -624,6 +623,7 @@ static int kvm_vm_release(struct inode *inode, struct file *filp)
|
||||||
*/
|
*/
|
||||||
static int kvm_create_dirty_bitmap(struct kvm_memory_slot *memslot)
|
static int kvm_create_dirty_bitmap(struct kvm_memory_slot *memslot)
|
||||||
{
|
{
|
||||||
|
#ifndef CONFIG_S390
|
||||||
unsigned long dirty_bytes = 2 * kvm_dirty_bitmap_bytes(memslot);
|
unsigned long dirty_bytes = 2 * kvm_dirty_bitmap_bytes(memslot);
|
||||||
|
|
||||||
if (dirty_bytes > PAGE_SIZE)
|
if (dirty_bytes > PAGE_SIZE)
|
||||||
|
@ -636,9 +636,9 @@ static int kvm_create_dirty_bitmap(struct kvm_memory_slot *memslot)
|
||||||
|
|
||||||
memslot->dirty_bitmap_head = memslot->dirty_bitmap;
|
memslot->dirty_bitmap_head = memslot->dirty_bitmap;
|
||||||
memslot->nr_dirty_pages = 0;
|
memslot->nr_dirty_pages = 0;
|
||||||
|
#endif /* !CONFIG_S390 */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif /* !CONFIG_S390 */
|
|
||||||
|
|
||||||
static int cmp_memslot(const void *slot1, const void *slot2)
|
static int cmp_memslot(const void *slot1, const void *slot2)
|
||||||
{
|
{
|
||||||
|
@ -695,9 +695,6 @@ static int create_lpage_info(struct kvm_memory_slot *slot, unsigned long npages)
|
||||||
int lpages;
|
int lpages;
|
||||||
int level = i + 2;
|
int level = i + 2;
|
||||||
|
|
||||||
if (slot->lpage_info[i])
|
|
||||||
continue;
|
|
||||||
|
|
||||||
lpages = gfn_to_index(slot->base_gfn + npages - 1,
|
lpages = gfn_to_index(slot->base_gfn + npages - 1,
|
||||||
slot->base_gfn, level) + 1;
|
slot->base_gfn, level) + 1;
|
||||||
|
|
||||||
|
@ -815,23 +812,18 @@ int __kvm_set_memory_region(struct kvm *kvm,
|
||||||
r = -ENOMEM;
|
r = -ENOMEM;
|
||||||
|
|
||||||
/* Allocate if a slot is being created */
|
/* Allocate if a slot is being created */
|
||||||
|
if (npages && !old.npages) {
|
||||||
|
new.user_alloc = user_alloc;
|
||||||
|
new.userspace_addr = mem->userspace_addr;
|
||||||
#ifndef CONFIG_S390
|
#ifndef CONFIG_S390
|
||||||
if (npages && !new.rmap) {
|
|
||||||
new.rmap = vzalloc(npages * sizeof(*new.rmap));
|
new.rmap = vzalloc(npages * sizeof(*new.rmap));
|
||||||
|
|
||||||
if (!new.rmap)
|
if (!new.rmap)
|
||||||
goto out_free;
|
goto out_free;
|
||||||
|
|
||||||
new.user_alloc = user_alloc;
|
if (create_lpage_info(&new, npages))
|
||||||
new.userspace_addr = mem->userspace_addr;
|
goto out_free;
|
||||||
|
#endif /* not defined CONFIG_S390 */
|
||||||
}
|
}
|
||||||
if (!npages)
|
|
||||||
goto skip_lpage;
|
|
||||||
|
|
||||||
if (create_lpage_info(&new, npages))
|
|
||||||
goto out_free;
|
|
||||||
|
|
||||||
skip_lpage:
|
|
||||||
|
|
||||||
/* Allocate page dirty bitmap if needed */
|
/* Allocate page dirty bitmap if needed */
|
||||||
if ((new.flags & KVM_MEM_LOG_DIRTY_PAGES) && !new.dirty_bitmap) {
|
if ((new.flags & KVM_MEM_LOG_DIRTY_PAGES) && !new.dirty_bitmap) {
|
||||||
|
@ -839,11 +831,6 @@ skip_lpage:
|
||||||
goto out_free;
|
goto out_free;
|
||||||
/* destroy any largepage mappings for dirty tracking */
|
/* destroy any largepage mappings for dirty tracking */
|
||||||
}
|
}
|
||||||
#else /* not defined CONFIG_S390 */
|
|
||||||
new.user_alloc = user_alloc;
|
|
||||||
if (user_alloc)
|
|
||||||
new.userspace_addr = mem->userspace_addr;
|
|
||||||
#endif /* not defined CONFIG_S390 */
|
|
||||||
|
|
||||||
if (!npages) {
|
if (!npages) {
|
||||||
struct kvm_memory_slot *slot;
|
struct kvm_memory_slot *slot;
|
||||||
|
|
Loading…
Add table
Reference in a new issue