Skip to contentSkip to conversation

KVM: mmu_shrink: kvm_mmu_zap_page requires slots_lock to be held

PATCH Applied Marcelo Tosatti 2 participants 2 messages Jul 3, 2008 – Jul 5, 2008

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

kvm_mmu_zap_page() needs slots lock held (rmap_remove->gfn_to_memslot, for example).

Since kvm_lock spinlock is held in mmu_shrink(), do a non-blocking down_read_trylock().

Untested.

arch/x86/kvm/mmu.c +3 -0
Index: kvm/arch/x86/kvm/mmu.c
===================================================================
@@ -1987,6 +1987,8 @@ static int mmu_shrink(int nr_to_scan, gf
 	list_for_each_entry(kvm, &vm_list, vm_list) {
 		int npages;
 
+		if (!down_read_trylock(&kvm->slots_lock))
+			continue;
 		spin_lock(&kvm->mmu_lock);
 		npages = kvm->arch.n_alloc_mmu_pages -
 			 kvm->arch.n_free_mmu_pages;
@@ -1999,6 +2001,7 @@ static int mmu_shrink(int nr_to_scan, gf
 		nr_to_scan--;
 
 		spin_unlock(&kvm->mmu_lock);
+		up_read(&kvm->slots_lock);
 	}
 	if (kvm_freed)
 		list_move_tail(&kvm_freed->vm_list, &vm_list);
Applied
#1 lore raw
Quoted 6 lines · Marcelo Tosatti

kvm_mmu_zap_page() needs slots lock held (rmap_remove->gfn_to_memslot, for example).

Since kvm_lock spinlock is held in mmu_shrink(), do a non-blocking down_read_trylock().

Applied, thanks.

Signature · 2 lines
I have a truly marvellous patch that fixes the bug which this
signature is too narrow to contain.