KVM
|
#include <linux/irqchip/arm-gic-v3.h>
#include <linux/irq.h>
#include <linux/irqdomain.h>
#include <linux/kstrtox.h>
#include <linux/kvm.h>
#include <linux/kvm_host.h>
#include <kvm/arm_vgic.h>
#include <asm/kvm_hyp.h>
#include <asm/kvm_mmu.h>
#include <asm/kvm_asm.h>
#include "vgic.h"
Go to the source code of this file.
Macros | |
#define | INITIAL_PENDBASER_VALUE |
Functions | |
void | vgic_v3_set_underflow (struct kvm_vcpu *vcpu) |
static bool | lr_signals_eoi_mi (u64 lr_val) |
void | vgic_v3_fold_lr_state (struct kvm_vcpu *vcpu) |
void | vgic_v3_populate_lr (struct kvm_vcpu *vcpu, struct vgic_irq *irq, int lr) |
void | vgic_v3_clear_lr (struct kvm_vcpu *vcpu, int lr) |
void | vgic_v3_set_vmcr (struct kvm_vcpu *vcpu, struct vgic_vmcr *vmcrp) |
void | vgic_v3_get_vmcr (struct kvm_vcpu *vcpu, struct vgic_vmcr *vmcrp) |
void | vgic_v3_enable (struct kvm_vcpu *vcpu) |
int | vgic_v3_lpi_sync_pending_status (struct kvm *kvm, struct vgic_irq *irq) |
static void | unmap_all_vpes (struct kvm *kvm) |
static void | map_all_vpes (struct kvm *kvm) |
int | vgic_v3_save_pending_tables (struct kvm *kvm) |
bool | vgic_v3_rdist_overlap (struct kvm *kvm, gpa_t base, size_t size) |
bool | vgic_v3_check_base (struct kvm *kvm) |
struct vgic_redist_region * | vgic_v3_rdist_free_slot (struct list_head *rd_regions) |
struct vgic_redist_region * | vgic_v3_rdist_region_from_index (struct kvm *kvm, u32 index) |
int | vgic_v3_map_resources (struct kvm *kvm) |
DEFINE_STATIC_KEY_FALSE (vgic_v3_cpuif_trap) | |
static int __init | early_group0_trap_cfg (char *buf) |
early_param ("kvm-arm.vgic_v3_group0_trap", early_group0_trap_cfg) | |
static int __init | early_group1_trap_cfg (char *buf) |
early_param ("kvm-arm.vgic_v3_group1_trap", early_group1_trap_cfg) | |
static int __init | early_common_trap_cfg (char *buf) |
early_param ("kvm-arm.vgic_v3_common_trap", early_common_trap_cfg) | |
static int __init | early_gicv4_enable (char *buf) |
early_param ("kvm-arm.vgic_v4_enable", early_gicv4_enable) | |
static bool | vgic_v3_broken_seis (void) |
int | vgic_v3_probe (const struct gic_kvm_info *info) |
void | vgic_v3_load (struct kvm_vcpu *vcpu) |
void | vgic_v3_vmcr_sync (struct kvm_vcpu *vcpu) |
void | vgic_v3_put (struct kvm_vcpu *vcpu) |
Variables | |
static bool | group0_trap |
static bool | group1_trap |
static bool | common_trap |
static bool | dir_trap |
static bool | gicv4_enable |
static const struct midr_range | broken_seis [] |
#define INITIAL_PENDBASER_VALUE |
DEFINE_STATIC_KEY_FALSE | ( | vgic_v3_cpuif_trap | ) |
|
static |
|
static |
|
static |
early_param | ( | "kvm-arm.vgic_v3_common_trap" | , |
early_common_trap_cfg | |||
) |
early_param | ( | "kvm-arm.vgic_v3_group0_trap" | , |
early_group0_trap_cfg | |||
) |
early_param | ( | "kvm-arm.vgic_v3_group1_trap" | , |
early_group1_trap_cfg | |||
) |
early_param | ( | "kvm-arm.vgic_v4_enable" | , |
early_gicv4_enable | |||
) |
|
static |
|
static |
Definition at line 363 of file vgic-v3.c.
|
static |
|
static |
bool vgic_v3_check_base | ( | struct kvm * | kvm | ) |
Definition at line 477 of file vgic-v3.c.
void vgic_v3_clear_lr | ( | struct kvm_vcpu * | vcpu, |
int | lr | ||
) |
void vgic_v3_enable | ( | struct kvm_vcpu * | vcpu | ) |
Definition at line 260 of file vgic-v3.c.
void vgic_v3_fold_lr_state | ( | struct kvm_vcpu * | vcpu | ) |
Definition at line 35 of file vgic-v3.c.
void vgic_v3_get_vmcr | ( | struct kvm_vcpu * | vcpu, |
struct vgic_vmcr * | vmcrp | ||
) |
void vgic_v3_load | ( | struct kvm_vcpu * | vcpu | ) |
Definition at line 720 of file vgic-v3.c.
int vgic_v3_lpi_sync_pending_status | ( | struct kvm * | kvm, |
struct vgic_irq * | irq | ||
) |
Definition at line 305 of file vgic-v3.c.
int vgic_v3_map_resources | ( | struct kvm * | kvm | ) |
void vgic_v3_populate_lr | ( | struct kvm_vcpu * | vcpu, |
struct vgic_irq * | irq, | ||
int | lr | ||
) |
Definition at line 107 of file vgic-v3.c.
int vgic_v3_probe | ( | const struct gic_kvm_info * | info | ) |
vgic_v3_probe - probe for a VGICv3 compatible interrupt controller @info: pointer to the GIC description
Returns 0 if the VGICv3 has been probed successfully, returns an error code otherwise
Definition at line 632 of file vgic-v3.c.
void vgic_v3_put | ( | struct kvm_vcpu * | vcpu | ) |
Definition at line 748 of file vgic-v3.c.
struct vgic_redist_region* vgic_v3_rdist_free_slot | ( | struct list_head * | rd_regions | ) |
vgic_v3_rdist_free_slot - Look up registered rdist regions and identify one which has free space to put a new rdist region.
@rd_regions: redistributor region list head
A redistributor regions maps n redistributors, n = region size / (2 x 64kB). Stride between redistributors is 0 and regions are filled in the index order.
Return: the redist region handle, if any, that has space to map a new rdist region.
Definition at line 513 of file vgic-v3.c.
bool vgic_v3_rdist_overlap | ( | struct kvm * | kvm, |
gpa_t | base, | ||
size_t | size | ||
) |
vgic_v3_rdist_overlap - check if a region overlaps with any existing redistributor region
@kvm: kvm handle @base: base of the region @size: size of region
Return: true if there is an overlap
Definition at line 460 of file vgic-v3.c.
struct vgic_redist_region* vgic_v3_rdist_region_from_index | ( | struct kvm * | kvm, |
u32 | index | ||
) |
int vgic_v3_save_pending_tables | ( | struct kvm * | kvm | ) |
vgic_v3_save_pending_tables - Save the pending tables into guest RAM kvm lock and all vcpu lock must be held
Definition at line 377 of file vgic-v3.c.
void vgic_v3_set_underflow | ( | struct kvm_vcpu * | vcpu | ) |
void vgic_v3_set_vmcr | ( | struct kvm_vcpu * | vcpu, |
struct vgic_vmcr * | vmcrp | ||
) |
void vgic_v3_vmcr_sync | ( | struct kvm_vcpu * | vcpu | ) |
|
static |