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]

 



Hi, Paolo

Do you like this one?

On Tue, Sep 04, 2018 at 11:26:03PM +0800, Wei Yang wrote:
>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

-- 
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