mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-09-04 18:30:18 +00:00
HV: trusty: new hypercall to save/restore context of secure world
New field in VM's structure: sworld_snapshot: save cpu_context of secure world. New hypercall: HC_SAVE_RESTORE_SWORLD_CTX In UOS S3 suspend path: trusty kernel driver will call this hypercall to require Hypervisor save context of secure world. In UOS S3 resume path: virtual firmware will call this hypercall to require Hypervisor restore context of secure world. New bit in secure_world_control.flag: ctx_saved: indicate whether cpu_context of secure world is saved. Signed-off-by: Qi Yadong <yadong.qi@intel.com> Acked-by: Eddie Dong <eddie.dong@intel.com>
This commit is contained in:
@@ -71,3 +71,34 @@ int32_t hcall_initialize_trusty(struct vcpu *vcpu, uint64_t param)
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int64_t hcall_save_restore_sworld_ctx(struct vcpu *vcpu)
|
||||
{
|
||||
struct vm *vm = vcpu->vm;
|
||||
|
||||
if (!vm->sworld_control.flag.supported) {
|
||||
dev_dbg(ACRN_DBG_TRUSTY_HYCALL,
|
||||
"Secure World is not supported!\n");
|
||||
return -EPERM;
|
||||
}
|
||||
|
||||
/* Currently, Secure World is only running on vCPU0 */
|
||||
if (!is_vcpu_bsp(vcpu)) {
|
||||
dev_dbg(ACRN_DBG_TRUSTY_HYCALL,
|
||||
"This hypercall is only allowed from vcpu0!");
|
||||
return -EPERM;
|
||||
}
|
||||
|
||||
if (vm->sworld_control.flag.active) {
|
||||
save_sworld_context(vcpu);
|
||||
vm->sworld_control.flag.ctx_saved = 1UL;
|
||||
} else {
|
||||
if (vm->sworld_control.flag.ctx_saved) {
|
||||
restore_sworld_context(vcpu);
|
||||
vm->sworld_control.flag.ctx_saved = 0UL;
|
||||
vm->sworld_control.flag.active = 1UL;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user