mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 02:30:03 +01:00
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>
This commit is contained in:
1 parent
28baa78877
commit
796b445b00
4 files changed
+18
-13
No files matched your search
@@ -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
|
||||
|
||||