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:
Keir Fraser committed 2008-04-16 10:06:19 +01:00
1 parent 28baa78877
commit 796b445b00
4 files changed
+18 -13

No files matched your search

+15
View File
@@ -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)
{
+3 -1
View File
@@ -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);
-11
View File
@@ -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
-1
View File
@@ -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
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.