Re: [PATCH v2] KVM: leverage change to adjust slots->used_slots in update_memslots()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Any comment on this one?

On Wed, Aug 22, 2018 at 09:57:11PM +0800, Wei Yang wrote:
>update_memslots() is only called by __kvm_set_memory_region(), in which
>"change" is calculated and indicates how to adjust slots->used_slots
>
>  * increase by one if it is KVM_MR_CREATE
>  * decrease by one if it is KVM_MR_DELETE
>  * not change for others
>
>This patch adjusts slots->used_slots in update_memslots() based on "change"
>value instead of re-calculate those states again.
>
>Signed-off-by: Wei Yang <richard.weiyang@xxxxxxxxx>
>
>---
>v2: use switch on change instead of encode the adjustment in it.
>    add warning in case the status is not correct
>
>---
> virt/kvm/kvm_main.c | 23 ++++++++++++++---------
> 1 file changed, 14 insertions(+), 9 deletions(-)
>
>diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
>index 0df592c4f09f..692885c1457f 100644
>--- a/virt/kvm/kvm_main.c
>+++ b/virt/kvm/kvm_main.c
>@@ -802,20 +802,25 @@ static int kvm_create_dirty_bitmap(struct kvm_memory_slot *memslot)
>  * sorted array and known changed memslot position.
>  */
> static void update_memslots(struct kvm_memslots *slots,
>-			    struct kvm_memory_slot *new)
>+			    struct kvm_memory_slot *new,
>+			    enum kvm_mr_change change)
> {
> 	int id = new->id;
> 	int i = slots->id_to_index[id];
> 	struct kvm_memory_slot *mslots = slots->memslots;
> 
> 	WARN_ON(mslots[i].id != id);
>-	if (!new->npages) {
>-		WARN_ON(!mslots[i].npages);
>-		if (mslots[i].npages)
>-			slots->used_slots--;
>-	} else {
>-		if (!mslots[i].npages)
>-			slots->used_slots++;
>+	switch (change) {
>+	case KVM_MR_CREATE:
>+		slots->used_slots++;
>+		WARN_ON(mslots[i].npages || !new->npages);
>+		break;
>+	case KVM_MR_DELETE:
>+		slots->used_slots--;
>+		WARN_ON(new->npages || !mslots[i].npages);
>+		break;
>+	default:
>+		break;
> 	}
> 
> 	while (i < KVM_MEM_SLOTS_NUM - 1 &&
>@@ -1051,7 +1056,7 @@ int __kvm_set_memory_region(struct kvm *kvm,
> 		memset(&new.arch, 0, sizeof(new.arch));
> 	}
> 
>-	update_memslots(slots, &new);
>+	update_memslots(slots, &new, change);
> 	old_memslots = install_new_memslots(kvm, as_id, slots);
> 
> 	kvm_arch_commit_memory_region(kvm, mem, &old, &new, change);
>-- 
>2.15.1

-- 
Wei Yang
Help you, Help me



[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux