@@ -105,3 +105,8 @@ int gzvm_handle_guest_idle(struct gzvm_vcpu *vcpu)
return ret;
}
+
+void gzvm_handle_guest_ipi(struct gzvm_vcpu *vcpu)
+{
+ gzvm_vcpu_wakeup_all(vcpu->gzvm);
+}
@@ -184,6 +184,9 @@ static long gzvm_vcpu_run(struct gzvm_vcpu *vcpu, void __user *argp)
case GZVM_EXIT_IDLE:
gzvm_handle_guest_idle(vcpu);
break;
+ case GZVM_EXIT_IPI:
+ gzvm_handle_guest_ipi(vcpu);
+ break;
case GZVM_EXIT_UNKNOWN:
fallthrough;
default:
@@ -241,6 +241,7 @@ int gzvm_handle_relinquish(struct gzvm_vcpu *vcpu, phys_addr_t ipa);
bool gzvm_handle_guest_hvc(struct gzvm_vcpu *vcpu);
bool gzvm_arch_handle_guest_hvc(struct gzvm_vcpu *vcpu);
int gzvm_handle_guest_idle(struct gzvm_vcpu *vcpu);
+void gzvm_handle_guest_ipi(struct gzvm_vcpu *vcpu);
void gzvm_vcpu_wakeup_all(struct gzvm *gzvm);
int gzvm_arch_create_device(u16 vm_id, struct gzvm_create_device *gzvm_dev);
@@ -189,6 +189,7 @@ enum {
GZVM_EXIT_SHUTDOWN = 0x92920009,
GZVM_EXIT_GZ = 0x9292000a,
GZVM_EXIT_IDLE = 0x9292000b,
+ GZVM_EXIT_IPI = 0x9292000d,
};
/* exception definitions of GZVM_EXIT_EXCEPTION */