mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-09-21 16:57:20 +00:00
hv: keylocker: host keylocker iwkey context switch
Different vCPU may have different IWKeys. Hypervisor need do the iwkey context switch. This patch introduce a load_iwkey() function to do that. Switches the host iwkey when the switch_in vCPU satisfies: 1) keylocker feature enabled 2) Different from the current loaded one. Two opportunities to do the load_iwkey(): 1) Guest enables CR4.KL bit. 2) vCPU thread context switch. load_iwkey() costs ~600 cycles when do the load IWKey action. Tracked-On: #5695 Signed-off-by: Shuo A Liu <shuo.a.liu@intel.com> Acked-by: Eddie Dong <eddie.dong@intel.com>
This commit is contained in:
@@ -659,7 +659,7 @@ static inline void xrstors(const struct xsave_area *region_addr, uint64_t mask)
|
||||
"memory");
|
||||
}
|
||||
|
||||
static inline void loadiwkey(uint32_t eax)
|
||||
static inline void asm_loadiwkey(uint32_t eax)
|
||||
{
|
||||
asm volatile(".byte 0xf3, 0x0f, 0x38, 0xdc, 0xd1;": : "a" (eax));
|
||||
}
|
||||
|
@@ -602,6 +602,7 @@ struct acrn_vcpu *get_ever_run_vcpu(uint16_t pcpu_id);
|
||||
|
||||
void save_xsave_area(struct acrn_vcpu *vcpu, struct ext_context *ectx);
|
||||
void rstore_xsave_area(const struct acrn_vcpu *vcpu, const struct ext_context *ectx);
|
||||
void load_iwkey(struct acrn_vcpu *vcpu);
|
||||
|
||||
/**
|
||||
* @brief create a vcpu for the target vm
|
||||
|
@@ -59,6 +59,7 @@ struct per_cpu_region {
|
||||
#endif
|
||||
uint64_t shutdown_vm_bitmap;
|
||||
uint64_t tsc_suspend;
|
||||
struct acrn_vcpu *whose_iwkey;
|
||||
/*
|
||||
* We maintain a per-pCPU array of vCPUs. vCPUs of a VM won't
|
||||
* share same pCPU. So the maximum possible # of vCPUs that can
|
||||
|
Reference in New Issue
Block a user