12
12
#include <linux/kvm_host.h>
13
13
#include <linux/uaccess.h>
14
14
15
- static void unlock_vcpus (struct kvm * kvm , int vcpu_lock_idx )
16
- {
17
- struct kvm_vcpu * tmp_vcpu ;
18
-
19
- for (; vcpu_lock_idx >= 0 ; vcpu_lock_idx -- ) {
20
- tmp_vcpu = kvm_get_vcpu (kvm , vcpu_lock_idx );
21
- mutex_unlock (& tmp_vcpu -> mutex );
22
- }
23
- }
24
-
25
- static void unlock_all_vcpus (struct kvm * kvm )
26
- {
27
- unlock_vcpus (kvm , atomic_read (& kvm -> online_vcpus ) - 1 );
28
- }
29
-
30
- static bool lock_all_vcpus (struct kvm * kvm )
31
- {
32
- struct kvm_vcpu * tmp_vcpu ;
33
- unsigned long c ;
34
-
35
- kvm_for_each_vcpu (c , tmp_vcpu , kvm ) {
36
- if (!mutex_trylock (& tmp_vcpu -> mutex )) {
37
- unlock_vcpus (kvm , c - 1 );
38
- return false;
39
- }
40
- }
41
-
42
- return true;
43
- }
44
-
45
15
static int aia_create (struct kvm_device * dev , u32 type )
46
16
{
47
17
int ret ;
@@ -53,7 +23,7 @@ static int aia_create(struct kvm_device *dev, u32 type)
53
23
return - EEXIST ;
54
24
55
25
ret = - EBUSY ;
56
- if (! lock_all_vcpus (kvm ))
26
+ if (kvm_trylock_all_vcpus (kvm ))
57
27
return ret ;
58
28
59
29
kvm_for_each_vcpu (i , vcpu , kvm ) {
@@ -65,7 +35,7 @@ static int aia_create(struct kvm_device *dev, u32 type)
65
35
kvm -> arch .aia .in_kernel = true;
66
36
67
37
out_unlock :
68
- unlock_all_vcpus (kvm );
38
+ kvm_unlock_all_vcpus (kvm );
69
39
return ret ;
70
40
}
71
41
0 commit comments