diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2008-04-16 10:06:19 +0100 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2008-04-16 10:06:19 +0100 |
commit | 796b445b0080452f93f4a98af2d4fe8fea15ebf4 (patch) | |
tree | fb5721f7492c545ec056d9a3789769468b1e7999 /extras/mini-os/hypervisor.c | |
parent | 28baa78877ebda840603774d6a1e3e9da9546a6e (diff) | |
download | xen-796b445b0080452f93f4a98af2d4fe8fea15ebf4.tar.gz xen-796b445b0080452f93f4a98af2d4fe8fea15ebf4.tar.bz2 xen-796b445b0080452f93f4a98af2d4fe8fea15ebf4.zip |
minios: call do_hypervisor_callback directly from force_evtchn_callback
instead of unnecessarily going through the hypervisor.
Signed-off-by: Samuel Thibault <samuel.thibault@eu.citrix.com>
Diffstat (limited to 'extras/mini-os/hypervisor.c')
-rw-r--r-- | extras/mini-os/hypervisor.c | 15 |
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) { |