KVM
|
#include <linux/cpu.h>
#include <linux/kvm.h>
#include <linux/kvm_host.h>
#include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/irqdomain.h>
#include <linux/uaccess.h>
#include <clocksource/arm_arch_timer.h>
#include <asm/arch_timer.h>
#include <asm/kvm_emulate.h>
#include <asm/kvm_hyp.h>
#include <asm/kvm_nested.h>
#include <kvm/arm_vgic.h>
#include <kvm/arm_arch_timer.h>
#include "trace.h"
Go to the source code of this file.
Macros | |
#define | assign_clear_set_bit(_pred, _bit, _clr, _set) |
Functions | |
static | DEFINE_STATIC_KEY_FALSE (has_gic_active_state) |
static bool | kvm_timer_irq_can_fire (struct arch_timer_context *timer_ctx) |
static void | kvm_timer_update_irq (struct kvm_vcpu *vcpu, bool new_level, struct arch_timer_context *timer_ctx) |
static bool | kvm_timer_should_fire (struct arch_timer_context *timer_ctx) |
static void | kvm_arm_timer_write (struct kvm_vcpu *vcpu, struct arch_timer_context *timer, enum kvm_arch_timer_regs treg, u64 val) |
static u64 | kvm_arm_timer_read (struct kvm_vcpu *vcpu, struct arch_timer_context *timer, enum kvm_arch_timer_regs treg) |
static bool | kvm_arch_timer_get_input_level (int vintid) |
static int | nr_timers (struct kvm_vcpu *vcpu) |
u32 | timer_get_ctl (struct arch_timer_context *ctxt) |
u64 | timer_get_cval (struct arch_timer_context *ctxt) |
static u64 | timer_get_offset (struct arch_timer_context *ctxt) |
static void | timer_set_ctl (struct arch_timer_context *ctxt, u32 ctl) |
static void | timer_set_cval (struct arch_timer_context *ctxt, u64 cval) |
static void | timer_set_offset (struct arch_timer_context *ctxt, u64 offset) |
u64 | kvm_phys_timer_read (void) |
void | get_timer_map (struct kvm_vcpu *vcpu, struct timer_map *map) |
static bool | userspace_irqchip (struct kvm *kvm) |
static void | soft_timer_start (struct hrtimer *hrt, u64 ns) |
static void | soft_timer_cancel (struct hrtimer *hrt) |
static irqreturn_t | kvm_arch_timer_handler (int irq, void *dev_id) |
static u64 | kvm_counter_compute_delta (struct arch_timer_context *timer_ctx, u64 val) |
static u64 | kvm_timer_compute_delta (struct arch_timer_context *timer_ctx) |
static bool | vcpu_has_wfit_active (struct kvm_vcpu *vcpu) |
static u64 | wfit_delay_ns (struct kvm_vcpu *vcpu) |
static u64 | kvm_timer_earliest_exp (struct kvm_vcpu *vcpu) |
static enum hrtimer_restart | kvm_bg_timer_expire (struct hrtimer *hrt) |
static enum hrtimer_restart | kvm_hrtimer_expire (struct hrtimer *hrt) |
int | kvm_cpu_has_pending_timer (struct kvm_vcpu *vcpu) |
void | kvm_timer_update_run (struct kvm_vcpu *vcpu) |
static void | timer_emulate (struct arch_timer_context *ctx) |
static void | set_cntvoff (u64 cntvoff) |
static void | set_cntpoff (u64 cntpoff) |
static void | timer_save_state (struct arch_timer_context *ctx) |
static void | kvm_timer_blocking (struct kvm_vcpu *vcpu) |
static void | kvm_timer_unblocking (struct kvm_vcpu *vcpu) |
static void | timer_restore_state (struct arch_timer_context *ctx) |
static void | set_timer_irq_phys_active (struct arch_timer_context *ctx, bool active) |
static void | kvm_timer_vcpu_load_gic (struct arch_timer_context *ctx) |
static void | kvm_timer_vcpu_load_nogic (struct kvm_vcpu *vcpu) |
static void | kvm_timer_vcpu_load_nested_switch (struct kvm_vcpu *vcpu, struct timer_map *map) |
static void | timer_set_traps (struct kvm_vcpu *vcpu, struct timer_map *map) |
void | kvm_timer_vcpu_load (struct kvm_vcpu *vcpu) |
bool | kvm_timer_should_notify_user (struct kvm_vcpu *vcpu) |
void | kvm_timer_vcpu_put (struct kvm_vcpu *vcpu) |
static void | unmask_vtimer_irq_user (struct kvm_vcpu *vcpu) |
void | kvm_timer_sync_user (struct kvm_vcpu *vcpu) |
void | kvm_timer_vcpu_reset (struct kvm_vcpu *vcpu) |
static void | timer_context_init (struct kvm_vcpu *vcpu, int timerid) |
void | kvm_timer_vcpu_init (struct kvm_vcpu *vcpu) |
void | kvm_timer_init_vm (struct kvm *kvm) |
void | kvm_timer_cpu_up (void) |
void | kvm_timer_cpu_down (void) |
int | kvm_arm_timer_set_reg (struct kvm_vcpu *vcpu, u64 regid, u64 value) |
static u64 | read_timer_ctl (struct arch_timer_context *timer) |
u64 | kvm_arm_timer_get_reg (struct kvm_vcpu *vcpu, u64 regid) |
u64 | kvm_arm_timer_read_sysreg (struct kvm_vcpu *vcpu, enum kvm_arch_timers tmr, enum kvm_arch_timer_regs treg) |
void | kvm_arm_timer_write_sysreg (struct kvm_vcpu *vcpu, enum kvm_arch_timers tmr, enum kvm_arch_timer_regs treg, u64 val) |
static int | timer_irq_set_vcpu_affinity (struct irq_data *d, void *vcpu) |
static int | timer_irq_set_irqchip_state (struct irq_data *d, enum irqchip_irq_state which, bool val) |
static void | timer_irq_eoi (struct irq_data *d) |
static void | timer_irq_ack (struct irq_data *d) |
static int | timer_irq_domain_alloc (struct irq_domain *domain, unsigned int virq, unsigned int nr_irqs, void *arg) |
static void | timer_irq_domain_free (struct irq_domain *domain, unsigned int virq, unsigned int nr_irqs) |
static void | kvm_irq_fixup_flags (unsigned int virq, u32 *flags) |
static int | kvm_irq_init (struct arch_timer_kvm_info *info) |
int __init | kvm_timer_hyp_init (bool has_gic) |
void | kvm_timer_vcpu_terminate (struct kvm_vcpu *vcpu) |
static bool | timer_irqs_are_valid (struct kvm_vcpu *vcpu) |
int | kvm_timer_enable (struct kvm_vcpu *vcpu) |
void | kvm_timer_init_vhe (void) |
int | kvm_arm_timer_set_attr (struct kvm_vcpu *vcpu, struct kvm_device_attr *attr) |
int | kvm_arm_timer_get_attr (struct kvm_vcpu *vcpu, struct kvm_device_attr *attr) |
int | kvm_arm_timer_has_attr (struct kvm_vcpu *vcpu, struct kvm_device_attr *attr) |
int | kvm_vm_ioctl_set_counter_offset (struct kvm *kvm, struct kvm_arm_counter_offset *offset) |
Variables | |
static struct timecounter * | timecounter |
static unsigned int | host_vtimer_irq |
static unsigned int | host_ptimer_irq |
static u32 | host_vtimer_irq_flags |
static u32 | host_ptimer_irq_flags |
static const u8 | default_ppi [] |
static struct irq_ops | arch_timer_irq_ops |
static struct irq_chip | timer_chip |
static const struct irq_domain_ops | timer_domain_ops |
#define assign_clear_set_bit | ( | _pred, | |
_bit, | |||
_clr, | |||
_set | |||
) |
Definition at line 705 of file arch_timer.c.
|
static |
void get_timer_map | ( | struct kvm_vcpu * | vcpu, |
struct timer_map * | map | ||
) |
|
static |
Definition at line 1485 of file arch_timer.c.
|
static |
Definition at line 224 of file arch_timer.c.
int kvm_arm_timer_get_attr | ( | struct kvm_vcpu * | vcpu, |
struct kvm_device_attr * | attr | ||
) |
Definition at line 1611 of file arch_timer.c.
u64 kvm_arm_timer_get_reg | ( | struct kvm_vcpu * | vcpu, |
u64 | regid | ||
) |
Definition at line 1107 of file arch_timer.c.
int kvm_arm_timer_has_attr | ( | struct kvm_vcpu * | vcpu, |
struct kvm_device_attr * | attr | ||
) |
|
static |
Definition at line 1132 of file arch_timer.c.
u64 kvm_arm_timer_read_sysreg | ( | struct kvm_vcpu * | vcpu, |
enum kvm_arch_timers | tmr, | ||
enum kvm_arch_timer_regs | treg | ||
) |
Definition at line 1167 of file arch_timer.c.
int kvm_arm_timer_set_attr | ( | struct kvm_vcpu * | vcpu, |
struct kvm_device_attr * | attr | ||
) |
int kvm_arm_timer_set_reg | ( | struct kvm_vcpu * | vcpu, |
u64 | regid, | ||
u64 | value | ||
) |
Definition at line 1048 of file arch_timer.c.
|
static |
Definition at line 1192 of file arch_timer.c.
void kvm_arm_timer_write_sysreg | ( | struct kvm_vcpu * | vcpu, |
enum kvm_arch_timers | tmr, | ||
enum kvm_arch_timer_regs | treg, | ||
u64 | val | ||
) |
Definition at line 1219 of file arch_timer.c.
|
static |
Definition at line 307 of file arch_timer.c.
|
static |
Definition at line 256 of file arch_timer.c.
int kvm_cpu_has_pending_timer | ( | struct kvm_vcpu * | vcpu | ) |
Definition at line 422 of file arch_timer.c.
|
static |
Definition at line 307 of file arch_timer.c.
|
static |
|
static |
Definition at line 1319 of file arch_timer.c.
u64 kvm_phys_timer_read | ( | void | ) |
|
static |
Definition at line 571 of file arch_timer.c.
|
static |
Definition at line 274 of file arch_timer.c.
void kvm_timer_cpu_down | ( | void | ) |
void kvm_timer_cpu_up | ( | void | ) |
|
static |
int kvm_timer_enable | ( | struct kvm_vcpu * | vcpu | ) |
Definition at line 1506 of file arch_timer.c.
int __init kvm_timer_hyp_init | ( | bool | has_gic | ) |
Definition at line 1367 of file arch_timer.c.
void kvm_timer_init_vhe | ( | void | ) |
void kvm_timer_init_vm | ( | struct kvm * | kvm | ) |
|
static |
Definition at line 279 of file arch_timer.c.
|
static |
Definition at line 380 of file arch_timer.c.
bool kvm_timer_should_notify_user | ( | struct kvm_vcpu * | vcpu | ) |
Definition at line 860 of file arch_timer.c.
void kvm_timer_sync_user | ( | struct kvm_vcpu * | vcpu | ) |
Definition at line 927 of file arch_timer.c.
|
static |
Definition at line 596 of file arch_timer.c.
|
static |
Definition at line 445 of file arch_timer.c.
void kvm_timer_update_run | ( | struct kvm_vcpu * | vcpu | ) |
Definition at line 430 of file arch_timer.c.
void kvm_timer_vcpu_init | ( | struct kvm_vcpu * | vcpu | ) |
Definition at line 1011 of file arch_timer.c.
void kvm_timer_vcpu_load | ( | struct kvm_vcpu * | vcpu | ) |
Definition at line 826 of file arch_timer.c.
|
static |
Definition at line 655 of file arch_timer.c.
|
static |
Definition at line 713 of file arch_timer.c.
|
static |
Definition at line 676 of file arch_timer.c.
void kvm_timer_vcpu_put | ( | struct kvm_vcpu * | vcpu | ) |
Definition at line 877 of file arch_timer.c.
void kvm_timer_vcpu_reset | ( | struct kvm_vcpu * | vcpu | ) |
Definition at line 938 of file arch_timer.c.
void kvm_timer_vcpu_terminate | ( | struct kvm_vcpu * | vcpu | ) |
Definition at line 1445 of file arch_timer.c.
int kvm_vm_ioctl_set_counter_offset | ( | struct kvm * | kvm, |
struct kvm_arm_counter_offset * | offset | ||
) |
Definition at line 1651 of file arch_timer.c.
|
static |
|
static |
Definition at line 1091 of file arch_timer.c.
|
static |
Definition at line 491 of file arch_timer.c.
|
static |
Definition at line 486 of file arch_timer.c.
|
inlinestatic |
|
static |
|
static |
|
static |
Definition at line 984 of file arch_timer.c.
|
static |
Definition at line 464 of file arch_timer.c.
u32 timer_get_ctl | ( | struct arch_timer_context * | ctxt | ) |
u64 timer_get_cval | ( | struct arch_timer_context * | ctxt | ) |
|
static |
|
static |
Definition at line 1272 of file arch_timer.c.
|
static |
Definition at line 1290 of file arch_timer.c.
|
static |
Definition at line 1299 of file arch_timer.c.
|
static |
Definition at line 1266 of file arch_timer.c.
|
static |
Definition at line 1252 of file arch_timer.c.
|
static |
Definition at line 1242 of file arch_timer.c.
|
static |
Definition at line 1452 of file arch_timer.c.
|
static |
Definition at line 603 of file arch_timer.c.
|
static |
Definition at line 497 of file arch_timer.c.
|
static |
|
static |
|
static |
|
static |
Definition at line 764 of file arch_timer.c.
|
static |
Definition at line 914 of file arch_timer.c.
|
inlinestatic |
|
static |
|
static |
Definition at line 293 of file arch_timer.c.
|
static |
Definition at line 52 of file arch_timer.c.
|
static |
Definition at line 34 of file arch_timer.c.
|
static |
Definition at line 28 of file arch_timer.c.
|
static |
Definition at line 30 of file arch_timer.c.
|
static |
Definition at line 27 of file arch_timer.c.
|
static |
Definition at line 29 of file arch_timer.c.
|
static |
Definition at line 26 of file arch_timer.c.
|
static |
Definition at line 1272 of file arch_timer.c.
|
static |
Definition at line 1299 of file arch_timer.c.