KVM
|
#include <linux/bits.h>
#include <linux/kvm.h>
#include <linux/irqreturn.h>
#include <linux/kref.h>
#include <linux/mutex.h>
#include <linux/spinlock.h>
#include <linux/static_key.h>
#include <linux/types.h>
#include <kvm/iodev.h>
#include <linux/list.h>
#include <linux/jump_label.h>
#include <linux/irqchip/arm-gic-v4.h>
Go to the source code of this file.
Classes | |
struct | vgic_global |
struct | irq_ops |
struct | vgic_irq |
struct | vgic_io_device |
struct | vgic_its |
struct | vgic_redist_region |
struct | vgic_dist |
struct | vgic_v2_cpu_if |
struct | vgic_v3_cpu_if |
struct | vgic_cpu |
Macros | |
#define | VGIC_V3_MAX_CPUS 512 |
#define | VGIC_V2_MAX_CPUS 8 |
#define | VGIC_NR_IRQS_LEGACY 256 |
#define | VGIC_NR_SGIS 16 |
#define | VGIC_NR_PPIS 16 |
#define | VGIC_NR_PRIVATE_IRQS (VGIC_NR_SGIS + VGIC_NR_PPIS) |
#define | VGIC_MAX_PRIVATE (VGIC_NR_PRIVATE_IRQS - 1) |
#define | VGIC_MAX_SPI 1019 |
#define | VGIC_MAX_RESERVED 1023 |
#define | VGIC_MIN_LPI 8192 |
#define | KVM_IRQCHIP_NUM_PINS (1020 - 32) |
#define | irq_is_ppi(irq) ((irq) >= VGIC_NR_SGIS && (irq) < VGIC_NR_PRIVATE_IRQS) |
#define | irq_is_spi(irq) |
#define | VGIC_V2_MAX_LRS (1 << 6) |
#define | VGIC_V3_MAX_LRS 16 |
#define | VGIC_V3_LR_INDEX(lr) (VGIC_V3_MAX_LRS - 1 - lr) |
#define | VGIC_IRQ_SW_RESAMPLE BIT(0) /* Clear the active state for resampling */ |
#define | KVM_VGIC_IMP_REV_2 2 /* GICv2 restorable groups */ |
#define | KVM_VGIC_IMP_REV_3 3 /* GICv3 GICR_CTLR.{IW,CES,RWP} */ |
#define | KVM_VGIC_IMP_REV_LATEST KVM_VGIC_IMP_REV_3 |
#define | irqchip_in_kernel(k) (!!((k)->arch.vgic.in_kernel)) |
#define | vgic_initialized(k) ((k)->arch.vgic.initialized) |
#define | vgic_ready(k) ((k)->arch.vgic.ready) |
#define | vgic_valid_spi(k, i) |
Enumerations | |
enum | vgic_type { VGIC_V2 , VGIC_V3 } |
enum | vgic_irq_config { VGIC_CONFIG_EDGE = 0 , VGIC_CONFIG_LEVEL } |
enum | iodev_type { IODEV_CPUIF , IODEV_DIST , IODEV_REDIST , IODEV_ITS } |
Functions | |
static bool | vgic_irq_needs_resampling (struct vgic_irq *irq) |
int | kvm_set_legacy_vgic_v2_addr (struct kvm *kvm, struct kvm_arm_device_addr *dev_addr) |
void | kvm_vgic_early_init (struct kvm *kvm) |
int | kvm_vgic_vcpu_init (struct kvm_vcpu *vcpu) |
int | kvm_vgic_create (struct kvm *kvm, u32 type) |
void | kvm_vgic_destroy (struct kvm *kvm) |
void | kvm_vgic_vcpu_destroy (struct kvm_vcpu *vcpu) |
int | kvm_vgic_map_resources (struct kvm *kvm) |
int | kvm_vgic_hyp_init (void) |
void | kvm_vgic_init_cpu_hardware (void) |
int | kvm_vgic_inject_irq (struct kvm *kvm, struct kvm_vcpu *vcpu, unsigned int intid, bool level, void *owner) |
int | kvm_vgic_map_phys_irq (struct kvm_vcpu *vcpu, unsigned int host_irq, u32 vintid, struct irq_ops *ops) |
int | kvm_vgic_unmap_phys_irq (struct kvm_vcpu *vcpu, unsigned int vintid) |
int | kvm_vgic_get_map (struct kvm_vcpu *vcpu, unsigned int vintid) |
bool | kvm_vgic_map_is_active (struct kvm_vcpu *vcpu, unsigned int vintid) |
int | kvm_vgic_vcpu_pending_irq (struct kvm_vcpu *vcpu) |
void | kvm_vgic_load (struct kvm_vcpu *vcpu) |
void | kvm_vgic_put (struct kvm_vcpu *vcpu) |
void | kvm_vgic_vmcr_sync (struct kvm_vcpu *vcpu) |
bool | kvm_vcpu_has_pending_irqs (struct kvm_vcpu *vcpu) |
void | kvm_vgic_sync_hwstate (struct kvm_vcpu *vcpu) |
void | kvm_vgic_flush_hwstate (struct kvm_vcpu *vcpu) |
void | kvm_vgic_reset_mapped_irq (struct kvm_vcpu *vcpu, u32 vintid) |
void | vgic_v3_dispatch_sgi (struct kvm_vcpu *vcpu, u64 reg, bool allow_group1) |
static int | kvm_vgic_get_max_vcpus (void) |
int | kvm_vgic_setup_default_irq_routing (struct kvm *kvm) |
int | kvm_vgic_set_owner (struct kvm_vcpu *vcpu, unsigned int intid, void *owner) |
int | kvm_vgic_v4_set_forwarding (struct kvm *kvm, int irq, struct kvm_kernel_irq_routing_entry *irq_entry) |
int | kvm_vgic_v4_unset_forwarding (struct kvm *kvm, int irq, struct kvm_kernel_irq_routing_entry *irq_entry) |
int | vgic_v4_load (struct kvm_vcpu *vcpu) |
void | vgic_v4_commit (struct kvm_vcpu *vcpu) |
int | vgic_v4_put (struct kvm_vcpu *vcpu) |
void | kvm_vgic_cpu_up (void) |
void | kvm_vgic_cpu_down (void) |
Variables | |
struct vgic_global | kvm_vgic_global_state |
struct static_key_false | vgic_v2_cpuif_trap |
struct static_key_false | vgic_v3_cpuif_trap |
#define irq_is_ppi | ( | irq | ) | ((irq) >= VGIC_NR_SGIS && (irq) < VGIC_NR_PRIVATE_IRQS) |
Definition at line 34 of file arm_vgic.h.
#define irq_is_spi | ( | irq | ) |
Definition at line 35 of file arm_vgic.h.
#define irqchip_in_kernel | ( | k | ) | (!!((k)->arch.vgic.in_kernel)) |
Definition at line 392 of file arm_vgic.h.
#define KVM_IRQCHIP_NUM_PINS (1020 - 32) |
Definition at line 32 of file arm_vgic.h.
#define KVM_VGIC_IMP_REV_2 2 /* GICv2 restorable groups */ |
Definition at line 234 of file arm_vgic.h.
#define KVM_VGIC_IMP_REV_3 3 /* GICv3 GICR_CTLR.{IW,CES,RWP} */ |
Definition at line 235 of file arm_vgic.h.
#define KVM_VGIC_IMP_REV_LATEST KVM_VGIC_IMP_REV_3 |
Definition at line 236 of file arm_vgic.h.
#define vgic_initialized | ( | k | ) | ((k)->arch.vgic.initialized) |
Definition at line 393 of file arm_vgic.h.
#define VGIC_IRQ_SW_RESAMPLE BIT(0) /* Clear the active state for resampling */ |
Definition at line 107 of file arm_vgic.h.
#define VGIC_MAX_PRIVATE (VGIC_NR_PRIVATE_IRQS - 1) |
Definition at line 28 of file arm_vgic.h.
#define VGIC_MAX_RESERVED 1023 |
Definition at line 30 of file arm_vgic.h.
#define VGIC_MAX_SPI 1019 |
Definition at line 29 of file arm_vgic.h.
#define VGIC_MIN_LPI 8192 |
Definition at line 31 of file arm_vgic.h.
#define VGIC_NR_IRQS_LEGACY 256 |
Definition at line 24 of file arm_vgic.h.
#define VGIC_NR_PPIS 16 |
Definition at line 26 of file arm_vgic.h.
#define VGIC_NR_PRIVATE_IRQS (VGIC_NR_SGIS + VGIC_NR_PPIS) |
Definition at line 27 of file arm_vgic.h.
#define VGIC_NR_SGIS 16 |
Definition at line 25 of file arm_vgic.h.
#define vgic_ready | ( | k | ) | ((k)->arch.vgic.ready) |
Definition at line 394 of file arm_vgic.h.
#define VGIC_V2_MAX_CPUS 8 |
Definition at line 23 of file arm_vgic.h.
#define VGIC_V2_MAX_LRS (1 << 6) |
Definition at line 88 of file arm_vgic.h.
#define VGIC_V3_LR_INDEX | ( | lr | ) | (VGIC_V3_MAX_LRS - 1 - lr) |
Definition at line 90 of file arm_vgic.h.
#define VGIC_V3_MAX_CPUS 512 |
Definition at line 22 of file arm_vgic.h.
#define VGIC_V3_MAX_LRS 16 |
Definition at line 89 of file arm_vgic.h.
#define vgic_valid_spi | ( | k, | |
i | |||
) |
Definition at line 395 of file arm_vgic.h.
enum iodev_type |
enum vgic_irq_config |
enum vgic_type |
int kvm_set_legacy_vgic_v2_addr | ( | struct kvm * | kvm, |
struct kvm_arm_device_addr * | dev_addr | ||
) |
bool kvm_vcpu_has_pending_irqs | ( | struct kvm_vcpu * | vcpu | ) |
void kvm_vgic_cpu_down | ( | void | ) |
void kvm_vgic_cpu_up | ( | void | ) |
int kvm_vgic_create | ( | struct kvm * | kvm, |
u32 | type | ||
) |
void kvm_vgic_destroy | ( | struct kvm * | kvm | ) |
void kvm_vgic_early_init | ( | struct kvm * | kvm | ) |
void kvm_vgic_flush_hwstate | ( | struct kvm_vcpu * | vcpu | ) |
int kvm_vgic_get_map | ( | struct kvm_vcpu * | vcpu, |
unsigned int | vintid | ||
) |
|
inlinestatic |
kvm_vgic_get_max_vcpus - Get the maximum number of VCPUs allowed by HW
The host's GIC naturally limits the maximum amount of VCPUs a guest can use.
Definition at line 411 of file arm_vgic.h.
int kvm_vgic_hyp_init | ( | void | ) |
void kvm_vgic_init_cpu_hardware | ( | void | ) |
int kvm_vgic_inject_irq | ( | struct kvm * | kvm, |
struct kvm_vcpu * | vcpu, | ||
unsigned int | intid, | ||
bool | level, | ||
void * | owner | ||
) |
void kvm_vgic_load | ( | struct kvm_vcpu * | vcpu | ) |
bool kvm_vgic_map_is_active | ( | struct kvm_vcpu * | vcpu, |
unsigned int | vintid | ||
) |
int kvm_vgic_map_phys_irq | ( | struct kvm_vcpu * | vcpu, |
unsigned int | host_irq, | ||
u32 | vintid, | ||
struct irq_ops * | ops | ||
) |
int kvm_vgic_map_resources | ( | struct kvm * | kvm | ) |
void kvm_vgic_put | ( | struct kvm_vcpu * | vcpu | ) |
void kvm_vgic_reset_mapped_irq | ( | struct kvm_vcpu * | vcpu, |
u32 | vintid | ||
) |
int kvm_vgic_set_owner | ( | struct kvm_vcpu * | vcpu, |
unsigned int | intid, | ||
void * | owner | ||
) |
int kvm_vgic_setup_default_irq_routing | ( | struct kvm * | kvm | ) |
kvm_vgic_setup_default_irq_routing: Setup a default flat gsi routing table mapping all SPIs
void kvm_vgic_sync_hwstate | ( | struct kvm_vcpu * | vcpu | ) |
int kvm_vgic_unmap_phys_irq | ( | struct kvm_vcpu * | vcpu, |
unsigned int | vintid | ||
) |
int kvm_vgic_v4_set_forwarding | ( | struct kvm * | kvm, |
int | irq, | ||
struct kvm_kernel_irq_routing_entry * | irq_entry | ||
) |
int kvm_vgic_v4_unset_forwarding | ( | struct kvm * | kvm, |
int | irq, | ||
struct kvm_kernel_irq_routing_entry * | irq_entry | ||
) |
void kvm_vgic_vcpu_destroy | ( | struct kvm_vcpu * | vcpu | ) |
int kvm_vgic_vcpu_init | ( | struct kvm_vcpu * | vcpu | ) |
int kvm_vgic_vcpu_pending_irq | ( | struct kvm_vcpu * | vcpu | ) |
void kvm_vgic_vmcr_sync | ( | struct kvm_vcpu * | vcpu | ) |
|
inlinestatic |
Definition at line 160 of file arm_vgic.h.
void vgic_v3_dispatch_sgi | ( | struct kvm_vcpu * | vcpu, |
u64 | reg, | ||
bool | allow_group1 | ||
) |
void vgic_v4_commit | ( | struct kvm_vcpu * | vcpu | ) |
int vgic_v4_load | ( | struct kvm_vcpu * | vcpu | ) |
int vgic_v4_put | ( | struct kvm_vcpu * | vcpu | ) |
|
extern |
|
extern |
|
extern |