diff options
Diffstat (limited to 'arch/arm/kvm/psci.c')
| -rw-r--r-- | arch/arm/kvm/psci.c | 12 | 
1 files changed, 8 insertions, 4 deletions
diff --git a/arch/arm/kvm/psci.c b/arch/arm/kvm/psci.c index 4b94b513168d..ad6f6424f1d1 100644 --- a/arch/arm/kvm/psci.c +++ b/arch/arm/kvm/psci.c @@ -126,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; @@ -151,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;  }  | 
