forked from Minki/linux
KVM: mmu: Refactor memslot copy
Factor out copying kvm_memslots from allocating the memory for new ones in preparation for adding a new lock to protect the arch-specific fields of the memslots. No functional change intended. Reviewed-by: David Hildenbrand <david@redhat.com> Signed-off-by: Ben Gardon <bgardon@google.com> Message-Id: <20210518173414.450044-4-bgardon@google.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
56dd1019c8
commit
ddc12f2a12
@ -1307,6 +1307,18 @@ static struct kvm_memslots *install_new_memslots(struct kvm *kvm,
|
||||
return old_memslots;
|
||||
}
|
||||
|
||||
static size_t kvm_memslots_size(int slots)
|
||||
{
|
||||
return sizeof(struct kvm_memslots) +
|
||||
(sizeof(struct kvm_memory_slot) * slots);
|
||||
}
|
||||
|
||||
static void kvm_copy_memslots(struct kvm_memslots *to,
|
||||
struct kvm_memslots *from)
|
||||
{
|
||||
memcpy(to, from, kvm_memslots_size(from->used_slots));
|
||||
}
|
||||
|
||||
/*
|
||||
* Note, at a minimum, the current number of used slots must be allocated, even
|
||||
* when deleting a memslot, as we need a complete duplicate of the memslots for
|
||||
@ -1316,19 +1328,16 @@ static struct kvm_memslots *kvm_dup_memslots(struct kvm_memslots *old,
|
||||
enum kvm_mr_change change)
|
||||
{
|
||||
struct kvm_memslots *slots;
|
||||
size_t old_size, new_size;
|
||||
|
||||
old_size = sizeof(struct kvm_memslots) +
|
||||
(sizeof(struct kvm_memory_slot) * old->used_slots);
|
||||
size_t new_size;
|
||||
|
||||
if (change == KVM_MR_CREATE)
|
||||
new_size = old_size + sizeof(struct kvm_memory_slot);
|
||||
new_size = kvm_memslots_size(old->used_slots + 1);
|
||||
else
|
||||
new_size = old_size;
|
||||
new_size = kvm_memslots_size(old->used_slots);
|
||||
|
||||
slots = kvzalloc(new_size, GFP_KERNEL_ACCOUNT);
|
||||
if (likely(slots))
|
||||
memcpy(slots, old, old_size);
|
||||
kvm_copy_memslots(slots, old);
|
||||
|
||||
return slots;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user