|
@@ -1424,7 +1424,7 @@ static int kvmgt_rw_gpa(unsigned long handle, unsigned long gpa,
|
|
|
{
|
|
|
struct kvmgt_guest_info *info;
|
|
|
struct kvm *kvm;
|
|
|
- int ret;
|
|
|
+ int idx, ret;
|
|
|
bool kthread = current->mm == NULL;
|
|
|
|
|
|
if (!handle_valid(handle))
|
|
@@ -1436,8 +1436,10 @@ static int kvmgt_rw_gpa(unsigned long handle, unsigned long gpa,
|
|
|
if (kthread)
|
|
|
use_mm(kvm->mm);
|
|
|
|
|
|
+ idx = srcu_read_lock(&kvm->srcu);
|
|
|
ret = write ? kvm_write_guest(kvm, gpa, buf, len) :
|
|
|
kvm_read_guest(kvm, gpa, buf, len);
|
|
|
+ srcu_read_unlock(&kvm->srcu, idx);
|
|
|
|
|
|
if (kthread)
|
|
|
unuse_mm(kvm->mm);
|