On 07/07/2017 15:50, Christian Borntraeger wrote: > kvm memslots are protected by srcu and not by rcu. We must use > srcu_dereference_check instead of rcu_dereference_check. > > Signed-off-by: Christian Borntraeger <borntraeger@xxxxxxxxxx> > Suggested-by: Paolo Bonzini <pbonzini@xxxxxxxxxx> > --- > include/linux/kvm_host.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h > index b3ca77a..3561e41 100644 > --- a/include/linux/kvm_host.h > +++ b/include/linux/kvm_host.h > @@ -568,7 +568,7 @@ void kvm_put_kvm(struct kvm *kvm); > > static inline struct kvm_memslots *__kvm_memslots(struct kvm *kvm, int as_id) > { > - return rcu_dereference_check(kvm->memslots[as_id], > + return srcu_dereference_check(kvm->memslots[as_id], &kvm->srcu, > srcu_read_lock_held(&kvm->srcu) > || lockdep_is_held(&kvm->slots_lock)); The condition can be simplified, since srcu_dereference_check is exactly calling srcu_read_lock_held. Paolo > } >