KVM
Macros | Functions
arm_psci.h File Reference
#include <linux/kvm_host.h>
#include <uapi/linux/psci.h>
Include dependency graph for arm_psci.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define KVM_ARM_PSCI_0_1   PSCI_VERSION(0, 1)
 
#define KVM_ARM_PSCI_0_2   PSCI_VERSION(0, 2)
 
#define KVM_ARM_PSCI_1_0   PSCI_VERSION(1, 0)
 
#define KVM_ARM_PSCI_1_1   PSCI_VERSION(1, 1)
 
#define KVM_ARM_PSCI_LATEST   KVM_ARM_PSCI_1_1
 

Functions

static int kvm_psci_version (struct kvm_vcpu *vcpu)
 
int kvm_psci_call (struct kvm_vcpu *vcpu)
 

Macro Definition Documentation

◆ KVM_ARM_PSCI_0_1

#define KVM_ARM_PSCI_0_1   PSCI_VERSION(0, 1)

Definition at line 13 of file arm_psci.h.

◆ KVM_ARM_PSCI_0_2

#define KVM_ARM_PSCI_0_2   PSCI_VERSION(0, 2)

Definition at line 14 of file arm_psci.h.

◆ KVM_ARM_PSCI_1_0

#define KVM_ARM_PSCI_1_0   PSCI_VERSION(1, 0)

Definition at line 15 of file arm_psci.h.

◆ KVM_ARM_PSCI_1_1

#define KVM_ARM_PSCI_1_1   PSCI_VERSION(1, 1)

Definition at line 16 of file arm_psci.h.

◆ KVM_ARM_PSCI_LATEST

#define KVM_ARM_PSCI_LATEST   KVM_ARM_PSCI_1_1

Definition at line 18 of file arm_psci.h.

Function Documentation

◆ kvm_psci_call()

int kvm_psci_call ( struct kvm_vcpu *  vcpu)

kvm_psci_call - handle PSCI call if r0 value is in range @vcpu: Pointer to the VCPU struct

Handle PSCI calls from guests through traps from HVC instructions. The calling convention is similar to SMC calls to the secure world where the function number is placed in r0.

This function returns: > 0 (success), 0 (success but exit to user space), and < 0 (errors)

Errors: -EINVAL: Unrecognized PSCI function

Definition at line 439 of file psci.c.

440 {
441  u32 psci_fn = smccc_get_function(vcpu);
442  int version = kvm_psci_version(vcpu);
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 
451  switch (version) {
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:
461  WARN_ONCE(1, "Unknown PSCI version %d", version);
462  smccc_set_retval(vcpu, SMCCC_RET_NOT_SUPPORTED, 0, 0, 0);
463  return 1;
464  }
465 }
static u32 smccc_get_function(struct kvm_vcpu *vcpu)
static void smccc_set_retval(struct kvm_vcpu *vcpu, unsigned long a0, unsigned long a1, unsigned long a2, unsigned long a3)
#define KVM_ARM_PSCI_1_0
Definition: arm_psci.h:15
#define KVM_ARM_PSCI_0_1
Definition: arm_psci.h:13
#define KVM_ARM_PSCI_0_2
Definition: arm_psci.h:14
#define KVM_ARM_PSCI_1_1
Definition: arm_psci.h:16
static int kvm_psci_version(struct kvm_vcpu *vcpu)
Definition: arm_psci.h:20
static unsigned long kvm_psci_check_allowed_function(struct kvm_vcpu *vcpu, u32 fn)
Definition: psci.c:229
static int kvm_psci_1_x_call(struct kvm_vcpu *vcpu, u32 minor)
Definition: psci.c:315
static int kvm_psci_0_2_call(struct kvm_vcpu *vcpu)
Definition: psci.c:240
static int kvm_psci_0_1_call(struct kvm_vcpu *vcpu)
Definition: psci.c:403
Here is the call graph for this function:
Here is the caller graph for this function:

◆ kvm_psci_version()

static int kvm_psci_version ( struct kvm_vcpu *  vcpu)
inlinestatic

Definition at line 20 of file arm_psci.h.

21 {
22  /*
23  * Our PSCI implementation stays the same across versions from
24  * v0.2 onward, only adding the few mandatory functions (such
25  * as FEATURES with 1.0) that are required by newer
26  * revisions. It is thus safe to return the latest, unless
27  * userspace has instructed us otherwise.
28  */
29  if (vcpu_has_feature(vcpu, KVM_ARM_VCPU_PSCI_0_2)) {
30  if (vcpu->kvm->arch.psci_version)
31  return vcpu->kvm->arch.psci_version;
32 
33  return KVM_ARM_PSCI_LATEST;
34  }
35 
36  return KVM_ARM_PSCI_0_1;
37 }
#define KVM_ARM_PSCI_LATEST
Definition: arm_psci.h:18
Here is the caller graph for this function: