|
@@ -208,9 +208,10 @@ int kvm_psci_version(struct kvm_vcpu *vcpu)
|
|
|
|
|
|
static int kvm_psci_0_2_call(struct kvm_vcpu *vcpu)
|
|
static int kvm_psci_0_2_call(struct kvm_vcpu *vcpu)
|
|
{
|
|
{
|
|
- int ret = 1;
|
|
|
|
|
|
+ struct kvm *kvm = vcpu->kvm;
|
|
unsigned long psci_fn = vcpu_get_reg(vcpu, 0) & ~((u32) 0);
|
|
unsigned long psci_fn = vcpu_get_reg(vcpu, 0) & ~((u32) 0);
|
|
unsigned long val;
|
|
unsigned long val;
|
|
|
|
+ int ret = 1;
|
|
|
|
|
|
switch (psci_fn) {
|
|
switch (psci_fn) {
|
|
case PSCI_0_2_FN_PSCI_VERSION:
|
|
case PSCI_0_2_FN_PSCI_VERSION:
|
|
@@ -230,7 +231,9 @@ static int kvm_psci_0_2_call(struct kvm_vcpu *vcpu)
|
|
break;
|
|
break;
|
|
case PSCI_0_2_FN_CPU_ON:
|
|
case PSCI_0_2_FN_CPU_ON:
|
|
case PSCI_0_2_FN64_CPU_ON:
|
|
case PSCI_0_2_FN64_CPU_ON:
|
|
|
|
+ mutex_lock(&kvm->lock);
|
|
val = kvm_psci_vcpu_on(vcpu);
|
|
val = kvm_psci_vcpu_on(vcpu);
|
|
|
|
+ mutex_unlock(&kvm->lock);
|
|
break;
|
|
break;
|
|
case PSCI_0_2_FN_AFFINITY_INFO:
|
|
case PSCI_0_2_FN_AFFINITY_INFO:
|
|
case PSCI_0_2_FN64_AFFINITY_INFO:
|
|
case PSCI_0_2_FN64_AFFINITY_INFO:
|
|
@@ -279,6 +282,7 @@ static int kvm_psci_0_2_call(struct kvm_vcpu *vcpu)
|
|
|
|
|
|
static int kvm_psci_0_1_call(struct kvm_vcpu *vcpu)
|
|
static int kvm_psci_0_1_call(struct kvm_vcpu *vcpu)
|
|
{
|
|
{
|
|
|
|
+ struct kvm *kvm = vcpu->kvm;
|
|
unsigned long psci_fn = vcpu_get_reg(vcpu, 0) & ~((u32) 0);
|
|
unsigned long psci_fn = vcpu_get_reg(vcpu, 0) & ~((u32) 0);
|
|
unsigned long val;
|
|
unsigned long val;
|
|
|
|
|
|
@@ -288,7 +292,9 @@ static int kvm_psci_0_1_call(struct kvm_vcpu *vcpu)
|
|
val = PSCI_RET_SUCCESS;
|
|
val = PSCI_RET_SUCCESS;
|
|
break;
|
|
break;
|
|
case KVM_PSCI_FN_CPU_ON:
|
|
case KVM_PSCI_FN_CPU_ON:
|
|
|
|
+ mutex_lock(&kvm->lock);
|
|
val = kvm_psci_vcpu_on(vcpu);
|
|
val = kvm_psci_vcpu_on(vcpu);
|
|
|
|
+ mutex_unlock(&kvm->lock);
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
val = PSCI_RET_NOT_SUPPORTED;
|
|
val = PSCI_RET_NOT_SUPPORTED;
|