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; |
