psci.c (ef5f97e9de9fc0d5bb6136de3d01d78c072a452f) | psci.c (6dcf7316e05eccded11fc640813c8a8879f271a6) |
---|---|
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * Copyright (C) 2012 - ARM Ltd 4 * Author: Marc Zyngier <marc.zyngier@arm.com> 5 */ 6 7#include <linux/arm-smccc.h> 8#include <linux/preempt.h> --- 425 unchanged lines hidden (view full) --- 434 * space), and < 0 (errors) 435 * 436 * Errors: 437 * -EINVAL: Unrecognized PSCI function 438 */ 439int kvm_psci_call(struct kvm_vcpu *vcpu) 440{ 441 u32 psci_fn = smccc_get_function(vcpu); | 1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * Copyright (C) 2012 - ARM Ltd 4 * Author: Marc Zyngier <marc.zyngier@arm.com> 5 */ 6 7#include <linux/arm-smccc.h> 8#include <linux/preempt.h> --- 425 unchanged lines hidden (view full) --- 434 * space), and < 0 (errors) 435 * 436 * Errors: 437 * -EINVAL: Unrecognized PSCI function 438 */ 439int kvm_psci_call(struct kvm_vcpu *vcpu) 440{ 441 u32 psci_fn = smccc_get_function(vcpu); |
442 int version = kvm_psci_version(vcpu); |
|
442 unsigned long val; 443 444 val = kvm_psci_check_allowed_function(vcpu, psci_fn); 445 if (val) { 446 smccc_set_retval(vcpu, val, 0, 0, 0); 447 return 1; 448 } 449 | 443 unsigned long val; 444 445 val = kvm_psci_check_allowed_function(vcpu, psci_fn); 446 if (val) { 447 smccc_set_retval(vcpu, val, 0, 0, 0); 448 return 1; 449 } 450 |
450 switch (kvm_psci_version(vcpu)) { | 451 switch (version) { |
451 case KVM_ARM_PSCI_1_1: 452 return kvm_psci_1_x_call(vcpu, 1); 453 case KVM_ARM_PSCI_1_0: 454 return kvm_psci_1_x_call(vcpu, 0); 455 case KVM_ARM_PSCI_0_2: 456 return kvm_psci_0_2_call(vcpu); 457 case KVM_ARM_PSCI_0_1: 458 return kvm_psci_0_1_call(vcpu); 459 default: | 452 case KVM_ARM_PSCI_1_1: 453 return kvm_psci_1_x_call(vcpu, 1); 454 case KVM_ARM_PSCI_1_0: 455 return kvm_psci_1_x_call(vcpu, 0); 456 case KVM_ARM_PSCI_0_2: 457 return kvm_psci_0_2_call(vcpu); 458 case KVM_ARM_PSCI_0_1: 459 return kvm_psci_0_1_call(vcpu); 460 default: |
460 return -EINVAL; | 461 WARN_ONCE(1, "Unknown PSCI version %d", version); 462 smccc_set_retval(vcpu, SMCCC_RET_NOT_SUPPORTED, 0, 0, 0); 463 return 1; |
461 } 462} | 464 } 465} |