|
|
|
@ -40,6 +40,7 @@ |
|
|
|
|
#include <asm/cpu_regs_types.h> |
|
|
|
|
#include <asm/trap_def.h> |
|
|
|
|
#include <asm/kvm/guest/cpu.h> |
|
|
|
|
#include <asm/kvm/proc_context_types.h> |
|
|
|
|
|
|
|
|
|
#ifdef CONFIG_KVM_GUEST_HW_HCALL |
|
|
|
|
extern unsigned long light_hw_hypercall(unsigned long nr, |
|
|
|
@ -254,6 +255,8 @@ static inline unsigned long generic_hypercall6(unsigned long nr, |
|
|
|
|
#define KVM_HCALL_FAST_KERNEL_TAGGED_MEMORY_COPY 40 |
|
|
|
|
/* fast guest kernel tagged memory set */ |
|
|
|
|
#define KVM_HCALL_FAST_KERNEL_TAGGED_MEMORY_SET 41 |
|
|
|
|
/* update last 2 frmaes on guest kernel stack */ |
|
|
|
|
#define KVM_HCALL_UPDATE_GUEST_KERNEL_CRS 42 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct kvm_hw_stacks_flush { |
|
|
|
@ -404,7 +407,6 @@ HYPERVISOR_inject_interrupt(void) |
|
|
|
|
{ |
|
|
|
|
return light_hypercall0(KVM_HCALL_INJECT_INTERRUPT); |
|
|
|
|
} |
|
|
|
|
extern unsigned long kvm_hypervisor_inject_interrupt(void); |
|
|
|
|
static inline unsigned long |
|
|
|
|
HYPERVISOR_virqs_handled(void) |
|
|
|
|
{ |
|
|
|
@ -509,6 +511,14 @@ HYPERVISOR_fast_kernel_tagged_memory_set(void *addr, u64 val, u64 tag, size_t le |
|
|
|
|
return light_hypercall5(KVM_HCALL_FAST_KERNEL_TAGGED_MEMORY_SET, |
|
|
|
|
(unsigned long)addr, val, tag, len, strd_opcode); |
|
|
|
|
} |
|
|
|
|
static inline unsigned long |
|
|
|
|
HYPERVISOR_update_guest_kernel_crs(e2k_mem_crs_t *crs, e2k_mem_crs_t *prev_crs, |
|
|
|
|
e2k_mem_crs_t *p_prev_crs) |
|
|
|
|
{ |
|
|
|
|
return light_hypercall3(KVM_HCALL_UPDATE_GUEST_KERNEL_CRS, |
|
|
|
|
(unsigned long)crs, (unsigned long)prev_crs, |
|
|
|
|
(unsigned long)p_prev_crs); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* KVM hypervisor (host) <-> guest generic hypercalls list |
|
|
|
@ -689,6 +699,15 @@ HYPERVISOR_fast_kernel_tagged_memory_set(void *addr, u64 val, u64 tag, size_t le |
|
|
|
|
/* recovery faulted load */ |
|
|
|
|
/* value and tag to global */ |
|
|
|
|
/* register */ |
|
|
|
|
#define KVM_HCALL_PREPARE_MKCTXT_HW_USER_STACKS 145 |
|
|
|
|
|
|
|
|
|
#define KVM_HCALL_ADD_CTX_SIGNAL_STACK 146 |
|
|
|
|
/* create separate */ |
|
|
|
|
/* signal stack for context */ |
|
|
|
|
/* on host side */ |
|
|
|
|
#define KVM_HCALL_REMOVE_CTX_SIGNAL_STACK 147 |
|
|
|
|
/* remove signal stack for */ |
|
|
|
|
/* context on host side */ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
@ -904,10 +923,13 @@ HYPERVISOR_set_clockevent(unsigned long delta) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static inline unsigned long |
|
|
|
|
HYPERVISOR_complete_long_jump(kvm_long_jump_info_t *regs_state) |
|
|
|
|
HYPERVISOR_complete_long_jump(kvm_long_jump_info_t *regs_state, |
|
|
|
|
bool switch_stack, u64 to_key) |
|
|
|
|
{ |
|
|
|
|
return generic_hypercall1(KVM_HCALL_COMPLETE_LONG_JUMP, |
|
|
|
|
(unsigned long)regs_state); |
|
|
|
|
return generic_hypercall3(KVM_HCALL_COMPLETE_LONG_JUMP, |
|
|
|
|
(unsigned long)regs_state, |
|
|
|
|
(unsigned long)switch_stack, |
|
|
|
|
(unsigned long)to_key); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static inline unsigned long |
|
|
|
@ -1566,6 +1588,13 @@ static inline int HYPERVISOR_pv_enable_async_pf(u64 apf_reason_gpa, |
|
|
|
|
apf_ready_vector, irq_controller); |
|
|
|
|
} |
|
|
|
|
#endif /* CONFIG_KVM_ASYNC_PF */ |
|
|
|
|
static inline int |
|
|
|
|
HYPERVISOR_prepare_mkctxt_hw_user_stacks(kvm_proc_ctxt_hw_stacks_t *hw_stacks) |
|
|
|
|
{ |
|
|
|
|
return generic_hypercall1(KVM_HCALL_PREPARE_MKCTXT_HW_USER_STACKS, |
|
|
|
|
(unsigned long)hw_stacks); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* The structure to flush guest virtual space at the host shadow PTs |
|
|
|
@ -1622,4 +1651,17 @@ HYPERVISOR_wait_for_virq(int virq, bool in_progress) |
|
|
|
|
return generic_hypercall2(KVM_HCALL_WAIT_FOR_VIRQ, virq, in_progress); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static inline unsigned long |
|
|
|
|
HYPERVISOR_add_ctx_signal_stack(u64 key, bool is_main) |
|
|
|
|
{ |
|
|
|
|
return generic_hypercall2(KVM_HCALL_ADD_CTX_SIGNAL_STACK, |
|
|
|
|
key, is_main); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static inline void |
|
|
|
|
HYPERVISOR_remove_ctx_signal_stack(u64 key) |
|
|
|
|
{ |
|
|
|
|
generic_hypercall1(KVM_HCALL_REMOVE_CTX_SIGNAL_STACK, key); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#endif /* _ASM_E2K_HYPERCALL_H */ |
|
|
|
|