mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-08-09 20:18:19 +00:00
hv: add more exception injection API
TO inject the - Invalid Opcode exception - Stack Fault exception - Alignment Check exception to guest. Signed-off-by: Yin Fengwei <fengwei.yin@intel.com> Reviewed-by: Jason Chen CJ <jason.cj.chen@intel.com> Acked-by: Anthony Xu <anthony.xu@intel.com>
This commit is contained in:
parent
96e99e3a72
commit
1a00d6c943
@ -282,22 +282,26 @@ static int vcpu_inject_lo_exception(struct vcpu *vcpu)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Inject external interrupt to guest */
|
||||
void vcpu_inject_extint(struct vcpu *vcpu)
|
||||
{
|
||||
vcpu_make_request(vcpu, ACRN_REQUEST_EXTINT);
|
||||
}
|
||||
|
||||
/* Inject NMI to guest */
|
||||
void vcpu_inject_nmi(struct vcpu *vcpu)
|
||||
{
|
||||
vcpu_make_request(vcpu, ACRN_REQUEST_NMI);
|
||||
}
|
||||
|
||||
/* Inject general protection exception(#GP) to guest */
|
||||
void vcpu_inject_gp(struct vcpu *vcpu, uint32_t err_code)
|
||||
{
|
||||
vcpu_queue_exception(vcpu, IDT_GP, err_code);
|
||||
vcpu_make_request(vcpu, ACRN_REQUEST_EXCP);
|
||||
}
|
||||
|
||||
/* Inject page fault exception(#PF) to guest */
|
||||
void vcpu_inject_pf(struct vcpu *vcpu, uint64_t addr, uint32_t err_code)
|
||||
{
|
||||
vcpu_set_cr2(vcpu, addr);
|
||||
@ -305,6 +309,27 @@ void vcpu_inject_pf(struct vcpu *vcpu, uint64_t addr, uint32_t err_code)
|
||||
vcpu_make_request(vcpu, ACRN_REQUEST_EXCP);
|
||||
}
|
||||
|
||||
/* Inject invalid opcode exception(#UD) to guest */
|
||||
void vcpu_inject_ud(struct vcpu *vcpu)
|
||||
{
|
||||
vcpu_queue_exception(vcpu, IDT_UD, 0);
|
||||
vcpu_make_request(vcpu, ACRN_REQUEST_EXCP);
|
||||
}
|
||||
|
||||
/* Inject alignment check exception(#AC) to guest */
|
||||
void vcpu_inject_ac(struct vcpu *vcpu)
|
||||
{
|
||||
vcpu_queue_exception(vcpu, IDT_AC, 0);
|
||||
vcpu_make_request(vcpu, ACRN_REQUEST_EXCP);
|
||||
}
|
||||
|
||||
/* Inject stack fault exception(#SS) to guest */
|
||||
void vcpu_inject_ss(struct vcpu *vcpu)
|
||||
{
|
||||
vcpu_queue_exception(vcpu, IDT_SS, 0);
|
||||
vcpu_make_request(vcpu, ACRN_REQUEST_EXCP);
|
||||
}
|
||||
|
||||
int interrupt_window_vmexit_handler(struct vcpu *vcpu)
|
||||
{
|
||||
uint32_t value32;
|
||||
|
@ -84,6 +84,9 @@ void vcpu_inject_extint(struct vcpu *vcpu);
|
||||
void vcpu_inject_nmi(struct vcpu *vcpu);
|
||||
void vcpu_inject_gp(struct vcpu *vcpu, uint32_t err_code);
|
||||
void vcpu_inject_pf(struct vcpu *vcpu, uint64_t addr, uint32_t err_code);
|
||||
void vcpu_inject_ud(struct vcpu *vcpu);
|
||||
void vcpu_inject_ac(struct vcpu *vcpu);
|
||||
void vcpu_inject_ss(struct vcpu *vcpu);
|
||||
void vcpu_make_request(struct vcpu *vcpu, uint16_t eventid);
|
||||
int vcpu_queue_exception(struct vcpu *vcpu, uint32_t vector, uint32_t err_code);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user