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:
Qi Yadong
2018-05-25 13:08:04 +08:00
committed by lijinxia
parent 3225b16e5f
commit 2fc3bdec40
7 changed files with 85 additions and 5 deletions

View File

@@ -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;
}