diff options
Diffstat (limited to 'arch/arm/kvm/psci.c')
-rw-r--r-- | arch/arm/kvm/psci.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/arch/arm/kvm/psci.c b/arch/arm/kvm/psci.c index 0881bf169fbc..448f60e8d23c 100644 --- a/arch/arm/kvm/psci.c +++ b/arch/arm/kvm/psci.c | |||
@@ -54,15 +54,15 @@ static unsigned long kvm_psci_vcpu_on(struct kvm_vcpu *source_vcpu) | |||
54 | } | 54 | } |
55 | } | 55 | } |
56 | 56 | ||
57 | if (!vcpu) | 57 | /* |
58 | * Make sure the caller requested a valid CPU and that the CPU is | ||
59 | * turned off. | ||
60 | */ | ||
61 | if (!vcpu || !vcpu->arch.pause) | ||
58 | return KVM_PSCI_RET_INVAL; | 62 | return KVM_PSCI_RET_INVAL; |
59 | 63 | ||
60 | target_pc = *vcpu_reg(source_vcpu, 2); | 64 | target_pc = *vcpu_reg(source_vcpu, 2); |
61 | 65 | ||
62 | wq = kvm_arch_vcpu_wq(vcpu); | ||
63 | if (!waitqueue_active(wq)) | ||
64 | return KVM_PSCI_RET_INVAL; | ||
65 | |||
66 | kvm_reset_vcpu(vcpu); | 66 | kvm_reset_vcpu(vcpu); |
67 | 67 | ||
68 | /* Gracefully handle Thumb2 entry point */ | 68 | /* Gracefully handle Thumb2 entry point */ |
@@ -79,6 +79,7 @@ static unsigned long kvm_psci_vcpu_on(struct kvm_vcpu *source_vcpu) | |||
79 | vcpu->arch.pause = false; | 79 | vcpu->arch.pause = false; |
80 | smp_mb(); /* Make sure the above is visible */ | 80 | smp_mb(); /* Make sure the above is visible */ |
81 | 81 | ||
82 | wq = kvm_arch_vcpu_wq(vcpu); | ||
82 | wake_up_interruptible(wq); | 83 | wake_up_interruptible(wq); |
83 | 84 | ||
84 | return KVM_PSCI_RET_SUCCESS; | 85 | return KVM_PSCI_RET_SUCCESS; |