mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-09-04 18:30:18 +00:00
hv: vmcs: simplify update EOI-exit bitmap
1) The previous implementaion will recalculate the whole EOI-exit bitmap for each RTE once the destination, trigger mode, delivery mode or vector of a RTE has changed and update the EOI-exit bitmap for each vcpu of the VM. In this patch, only set the corresponding bit of EOI-exit bitmap for a vcpu when a level triggered interrupt has accepted in IRR or clear the corresponding bit of EOI-exit bitmap for a vcpu when a dege triggered interrupt has accepted in IRR which means only update a bit of EOI-exit bitmap in a vcpu when updating TMR. 2) Rename set eoi_exit related API to set eoi_exit_bitmap. Tracked-On: #1842 Signed-off-by: Li, Fei1 <fei1.li@intel.com> Acked-by: Eddie Dong <eddie.dong@intel.com>
This commit is contained in:
@@ -71,14 +71,14 @@
|
||||
/*
|
||||
* VCPU related APIs
|
||||
*/
|
||||
#define ACRN_REQUEST_EXCP 0U
|
||||
#define ACRN_REQUEST_EVENT 1U
|
||||
#define ACRN_REQUEST_EXTINT 2U
|
||||
#define ACRN_REQUEST_NMI 3U
|
||||
#define ACRN_REQUEST_EOI_EXIT_UPDATE 4U
|
||||
#define ACRN_REQUEST_EPT_FLUSH 5U
|
||||
#define ACRN_REQUEST_TRP_FAULT 6U
|
||||
#define ACRN_REQUEST_VPID_FLUSH 7U /* flush vpid tlb */
|
||||
#define ACRN_REQUEST_EXCP 0U
|
||||
#define ACRN_REQUEST_EVENT 1U
|
||||
#define ACRN_REQUEST_EXTINT 2U
|
||||
#define ACRN_REQUEST_NMI 3U
|
||||
#define ACRN_REQUEST_EOI_EXIT_BITMAP_UPDATE 4U
|
||||
#define ACRN_REQUEST_EPT_FLUSH 5U
|
||||
#define ACRN_REQUEST_TRP_FAULT 6U
|
||||
#define ACRN_REQUEST_VPID_FLUSH 7U /* flush vpid tlb */
|
||||
|
||||
#define save_segment(seg, SEG_NAME) \
|
||||
{ \
|
||||
@@ -503,14 +503,14 @@ void vcpu_set_guest_msr(struct acrn_vcpu *vcpu, uint32_t msr, uint64_t val);
|
||||
void vcpu_set_vmcs_eoi_exit(struct acrn_vcpu *vcpu);
|
||||
|
||||
/**
|
||||
* @brief reset eoi_exit_bitmap
|
||||
* @brief reset all eoi_exit_bitmaps
|
||||
*
|
||||
* @param[in] vcpu pointer to vcpu data structure
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
void vcpu_reset_eoi_exit_all(struct acrn_vcpu *vcpu);
|
||||
void vcpu_reset_eoi_exit_bitmaps(struct acrn_vcpu *vcpu);
|
||||
|
||||
/**
|
||||
* @brief set eoi_exit_bitmap bit
|
||||
@@ -520,9 +520,20 @@ void vcpu_reset_eoi_exit_all(struct acrn_vcpu *vcpu);
|
||||
* @param[in] vcpu pointer to vcpu data structure
|
||||
* @param[in] vector
|
||||
*
|
||||
* @return void
|
||||
* @return void
|
||||
*/
|
||||
void vcpu_set_eoi_exit(struct acrn_vcpu *vcpu, uint32_t vector);
|
||||
void vcpu_set_eoi_exit_bitmap(struct acrn_vcpu *vcpu, uint32_t vector);
|
||||
/**
|
||||
* @brief clear eoi_exit_bitmap bit
|
||||
*
|
||||
* Clear corresponding bit of vector in eoi_exit_bitmap
|
||||
*
|
||||
* @param[in] vcpu pointer to vcpu data structure
|
||||
* @param[in] vector
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
void vcpu_clear_eoi_exit_bitmap(struct acrn_vcpu *vcpu, uint32_t vector);
|
||||
/**
|
||||
* @brief set all the vcpu registers
|
||||
*
|
||||
|
Reference in New Issue
Block a user