6.其他注意事项
6.1.抢占SMC对非安全软件的影响
对安全有效负载的yeild SMC调用可以被非安全中断抢占,并且执行可以返回到非安全世界来处理中断(有关让步SMC的详细信息,请参阅SMC调用约定)。在这种情况下,SMC调用尚未完成其执行,执行必须返回到安全有效负载以恢复被抢占的SMC调用。这可以通过发出指示恢复被抢占的SMC的SMC呼叫来实现。
fast SMC不能被抢占,因此这种情况不会发生在fast SMC呼叫中。
在测试安全有效载荷实现中,TSP_FID_RESUME被指定为恢复SMC FID。需要注意的是,TSP_FID_RESUME是一个让步SMC,这意味着它也可以被抢占。假设P.STATE.I=0处于非安全状态,用于发出让步SMC的典型非安全软件序列如下所示:
int rc;
rc = smc(TSP_YIELD_SMC_FID, ...); /* Issue a Yielding SMC call */
/* The pending non-secure interrupt is handled by the interrupt handler
and returns back here. */
while (rc == SMC_PREEMPTED) { /* Check if the SMC call is preempted */
rc