Commit b0a806a4 authored by Keir Fraser's avatar Keir Fraser

minios: call do_hypervisor_callback directly from force_evtchn_callback

instead of unnecessarily going through the hypervisor.
Signed-off-by: default avatarSamuel Thibault <samuel.thibault@eu.citrix.com>
parent 7b9a2930
......@@ -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)
{
......
......@@ -24,6 +24,7 @@
#else
#error "Unsupported architecture"
#endif
#include <traps.h>
/*
* a placeholder for the start of day information passed up from the hypervisor
......@@ -37,7 +38,8 @@ extern union start_info_union start_info_union;
#define start_info (start_info_union.start_info)
/* hypervisor.c */
//void do_hypervisor_callback(struct pt_regs *regs);
void force_evtchn_callback(void);
void do_hypervisor_callback(struct pt_regs *regs);
void mask_evtchn(u32 port);
void unmask_evtchn(u32 port);
void clear_evtchn(u32 port);
......
......@@ -189,17 +189,6 @@ __synch_cmpxchg(volatile void *ptr, uint64_t old, uint64_t new, int size)
return ia64_cmpxchg_acq_64(ptr, old, new);
}
/*
* Force a proper event-channel callback from Xen after clearing the
* callback mask. We do this in a very simple manner, by making a call
* down into Xen. The pending flag will be checked by Xen on return.
*/
static inline void
force_evtchn_callback(void)
{
(void)HYPERVISOR_xen_version(0, NULL);
}
extern shared_info_t *HYPERVISOR_shared_info;
static inline int
......
......@@ -28,7 +28,6 @@ extern void do_exit(void) __attribute__((noreturn));
#include <xen/xen.h>
#define force_evtchn_callback() ((void)HYPERVISOR_xen_version(0, 0))
#define __KERNEL_CS FLAT_KERNEL_CS
#define __KERNEL_DS FLAT_KERNEL_DS
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment