Try to make some code simplications allowed by the mutex use
PATCH 1/1 Try to make some code simplications allowed by the mutex use
Try to make some code simplifications allowed by the use of a mutex instead of a spinlock. As we can keep the lock longer, we don't have to release it and then have to check if the environment has not been modified before re-taking it. We can remove kvm->busy and kvm->memory_config_version.
drivers/kvm/kvm.h +0 -2
@@ -407,8 +407,6 @@ struct kvm {int n_free_mmu_pages;struct hlist_head mmu_page_hash[KVM_NUM_MMU_PAGES ];struct kvm_vcpu *vcpus[KVM_MAX_VCPUS ]; -int memory_config_version; -int busy;unsigned long rmap_overflow;struct list_head vm_list;struct file *filp;
drivers/kvm/kvm_main.c +3 -35
@@ -615,7 +615,6 @@ static int kvm_vm_ioctl_set_memory_regiounsigned long i;struct kvm_memory_slot *memslot;struct kvm_memory_slot old, new; -int memory_config_version; r = -EINVAL ;/* General sanity checks */
@@ -635,10 +634,8 @@ static int kvm_vm_ioctl_set_memory_regioif (!npages) mem->flags &= ~KVM_MEM_LOG_DIRTY_PAGES ; -raced:mutex_lock (&kvm->lock); - memory_config_version = kvm->memory_config_version; new = old = *memslot; new.base_gfn = base_gfn;
@@ -661,11 +658,6 @@ raced: (base_gfn >= s->base_gfn + s->npages))) goto out_unlock; } -/* -* Do memory allocations outside lock. memory_config_version will -* detect any races. -*/ -mutex_unlock (&kvm->lock);/* Deallocate if slot is being removed */ if (!npages)
@@ -682,14 +674,14 @@ raced: new.phys_mem =vmalloc (npages *sizeof (struct page *));if (!new.phys_mem) - goto out_free; + goto out_unlock;memset (new.phys_mem,0 , npages *sizeof (struct page *));for (i =0 ; i < npages; ++i) { new.phys_mem[i] =alloc_page (GFP_HIGHUSER | __GFP_ZERO);if (!new.phys_mem[i]) - goto out_free; + goto out_unlock;set_page_private (new.phys_mem[i],0 ); } }
@@ -700,27 +692,14 @@ raced: new.dirty_bitmap =vmalloc (dirty_bytes);if (!new.dirty_bitmap) - goto out_free; + goto out_unlock;memset (new.dirty_bitmap,0 , dirty_bytes); } -mutex_lock (&kvm->lock); - -if (memory_config_version != kvm->memory_config_version) { -mutex_unlock (&kvm->lock); -kvm_free_physmem_slot (&new, &old); - goto raced; - } - - r = -EAGAIN ; -if (kvm->busy) - goto out_unlock; -if (mem->slot >= kvm->nmemslots) kvm->nmemslots = mem->slot +1 ; *memslot = new; - ++kvm->memory_config_version;kvm_mmu_slot_remove_write_access (kvm, mem->slot);kvm_flush_remote_tlbs (kvm);
@@ -732,7 +711,6 @@ raced: out_unlock:mutex_unlock (&kvm->lock); -out_free:kvm_free_physmem_slot (&new, &old); out:return r;
@@ -751,12 +729,6 @@ static int kvm_vm_ioctl_get_dirty_log(stmutex_lock (&kvm->lock); -/* -* Prevent changes to guest memory configuration even while the lock -* is not taken. -*/ - ++kvm->busy; -mutex_unlock (&kvm->lock); r = -EINVAL ;if (log->slot >=KVM_MEMORY_SLOTS ) goto out;
@@ -777,18 +749,14 @@ static int kvm_vm_ioctl_get_dirty_log(st/* If nothing is dirty, don't bother messing with page tables. */ if (any) { -mutex_lock (&kvm->lock);kvm_mmu_slot_remove_write_access (kvm, log->slot);kvm_flush_remote_tlbs (kvm);memset (memslot->dirty_bitmap,0 , n); -mutex_unlock (&kvm->lock); } r =0 ; out: -mutex_lock (&kvm->lock); - --kvm->busy;mutex_unlock (&kvm->lock);return r; }
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
kvm-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/kvm-devel
A message that is not in the archive (sent off-list or not yet received): 46D6BE75.6000605-6ktuUTfB/[email protected]
Avi Kivity
AppliedQuoted 6 lines · Laurent Vivier
Try to make some code simplifications allowed by the use of a mutex instead of a spinlock. As we can keep the lock longer, we don't have to release it and then have to check if the environment has not been modified before re-taking it. We can remove
kvm->busyandkvm->memory_config_version.
Applied, thanks.
Signature · 7 lines
error compiling committee.c: too many arguments to function ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2005. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/