On 07/19/2010 06:30 PM, Gleb Natapov wrote:
Code that depends on particular memslot layout can track changes and adjust to new layout. diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index c13cc48..c74ffc0 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -177,6 +177,7 @@ struct kvm { raw_spinlock_t requests_lock; struct mutex slots_lock; struct mm_struct *mm; /* userspace tied to this vm */ + u32 memslot_version; struct kvm_memslots *memslots; struct srcu_struct srcu; #ifdef CONFIG_KVM_APIC_ARCHITECTURE diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index b78b794..292514c 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -733,6 +733,7 @@ skip_lpage: slots->memslots[mem->slot] = new; old_memslots = kvm->memslots; rcu_assign_pointer(kvm->memslots, slots); + kvm->memslot_version++; synchronize_srcu_expedited(&kvm->srcu); kvm_arch_commit_memory_region(kvm, mem, old, user_alloc);
How does this interact with rcu? Nothing enforces consistency between rcu_dereference(kvm->memslots) and kvm->memslot_version.
Should probably be rcu_dereference(kvm->memslots)->version. -- error compiling committee.c: too many arguments to function -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html