Use FFA_INTERRUPT rather than custom HF_FFA_RUN_WAKE_UP.
Change-Id: Iae4ba6bc6ce19bf217e1ca4cc65ff0da98757770
Signed-off-by: Andrew Walbran <qwandor@google.com>
diff --git a/main.c b/main.c
index 4c99259..ed5a9e6 100644
--- a/main.c
+++ b/main.c
@@ -363,11 +363,21 @@
ret = ffa_run(vcpu->vm->id, vcpu->vcpu_index);
switch (ret.func) {
- /* Preempted. */
+ /* Preempted, or wants to wake up another vCPU. */
case FFA_INTERRUPT_32:
+ {
+ ffa_vm_id_t vm_id = ffa_vm_id(ret);
+ ffa_vcpu_index_t vcpu_index = ffa_vcpu_index(ret);
+
+ if (vm_id >= FIRST_SECONDARY_VM_ID &&
+ vm_id != vcpu->vm->id) {
+ /* Wake up another vCPU. */
+ hf_handle_wake_up_request(vm_id, vcpu_index);
+ }
if (need_resched())
schedule();
break;
+ }
/* Yield. */
case FFA_YIELD_32:
@@ -397,12 +407,6 @@
atomic_set(&vcpu->waiting_for_message, 0);
break;
- /* Wake up another vcpu. */
- case HF_FFA_RUN_WAKE_UP:
- hf_handle_wake_up_request(ffa_vm_id(ret),
- ffa_vcpu_index(ret));
- break;
-
/* Response available. */
case FFA_MSG_SEND_32:
if (ffa_receiver(ret) == PRIMARY_VM_ID) {