diff options
author | Alex Shi <alex.shi@linaro.org> | 2016-01-22 17:08:54 +0800 |
---|---|---|
committer | Alex Shi <alex.shi@linaro.org> | 2016-01-22 17:08:54 +0800 |
commit | efab1adba28d9ebbfa86808375fc085c4e84e746 (patch) | |
tree | c82080ef077c5ea9e50a8308404c599710d6301f /arch/arm/kvm/psci.c | |
parent | 039b7fca24dba50c09e60b23494ba3c4d19aac7d (diff) | |
parent | eb7d99ea962fa62f487246462a2777ac918c8895 (diff) |
Merge remote-tracking branch 'v4.1/topic/PSCI' into linux-linaro-lsk-v4.1lsk-v4.1-16.01
Diffstat (limited to 'arch/arm/kvm/psci.c')
-rw-r--r-- | arch/arm/kvm/psci.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/arch/arm/kvm/psci.c b/arch/arm/kvm/psci.c index 531e922486b2..ad6f6424f1d1 100644 --- a/arch/arm/kvm/psci.c +++ b/arch/arm/kvm/psci.c @@ -24,6 +24,8 @@ #include <asm/kvm_psci.h> #include <asm/kvm_host.h> +#include <uapi/linux/psci.h> + /* * This is an implementation of the Power State Coordination Interface * as described in ARM document number ARM DEN 0022A. @@ -124,7 +126,7 @@ static unsigned long kvm_psci_vcpu_on(struct kvm_vcpu *source_vcpu) static unsigned long kvm_psci_vcpu_affinity_info(struct kvm_vcpu *vcpu) { - int i; + int i, matching_cpus = 0; unsigned long mpidr; unsigned long target_affinity; unsigned long target_affinity_mask; @@ -149,12 +151,16 @@ static unsigned long kvm_psci_vcpu_affinity_info(struct kvm_vcpu *vcpu) */ kvm_for_each_vcpu(i, tmp, kvm) { mpidr = kvm_vcpu_get_mpidr_aff(tmp); - if (((mpidr & target_affinity_mask) == target_affinity) && - !tmp->arch.pause) { - return PSCI_0_2_AFFINITY_LEVEL_ON; + if ((mpidr & target_affinity_mask) == target_affinity) { + matching_cpus++; + if (!tmp->arch.pause) + return PSCI_0_2_AFFINITY_LEVEL_ON; } } + if (!matching_cpus) + return PSCI_RET_INVALID_PARAMS; + return PSCI_0_2_AFFINITY_LEVEL_OFF; } |