aboutsummaryrefslogtreecommitdiffstats
path: root/extras/mini-os/hypervisor.c
diff options
context:
space:
mode:
Diffstat (limited to 'extras/mini-os/hypervisor.c')
-rw-r--r--extras/mini-os/hypervisor.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/extras/mini-os/hypervisor.c b/extras/mini-os/hypervisor.c
index e84d34ccaf..2840d789ef 100644
--- a/extras/mini-os/hypervisor.c
+++ b/extras/mini-os/hypervisor.c
@@ -66,6 +66,21 @@ void do_hypervisor_callback(struct pt_regs *regs)
in_callback = 0;
}
+void force_evtchn_callback(void)
+{
+ vcpu_info_t *vcpu;
+ vcpu = &HYPERVISOR_shared_info->vcpu_info[smp_processor_id()];
+ int save = vcpu->evtchn_upcall_mask;
+
+ while (vcpu->evtchn_upcall_pending) {
+ vcpu->evtchn_upcall_mask = 1;
+ barrier();
+ do_hypervisor_callback(NULL);
+ barrier();
+ vcpu->evtchn_upcall_mask = save;
+ barrier();
+ };
+}
inline void mask_evtchn(u32 port)
{