From 26aa688655105f22dc67bb98c5def9a2fb1209e3 Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Sat, 24 Nov 2007 13:29:20 +0000 Subject: [Mini-OS] Make sure schedule() is called safely If a thread tries to sleep from a callback or with callbacks disabled, Mini-OS will completely lock, so make sure this never happens. Signed-off-by: Samuel Thibault --- extras/mini-os/hypervisor.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'extras/mini-os/hypervisor.c') diff --git a/extras/mini-os/hypervisor.c b/extras/mini-os/hypervisor.c index ed87845195..e84d34ccaf 100644 --- a/extras/mini-os/hypervisor.c +++ b/extras/mini-os/hypervisor.c @@ -33,6 +33,8 @@ ((sh)->evtchn_pending[idx] & \ ~(sh)->evtchn_mask[idx]) +int in_callback; + void do_hypervisor_callback(struct pt_regs *regs) { unsigned long l1, l2, l1i, l2i; @@ -41,6 +43,7 @@ void do_hypervisor_callback(struct pt_regs *regs) shared_info_t *s = HYPERVISOR_shared_info; vcpu_info_t *vcpu_info = &s->vcpu_info[cpu]; + in_callback = 1; vcpu_info->evtchn_upcall_pending = 0; /* NB. No need for a barrier here -- XCHG is a barrier on x86. */ @@ -59,6 +62,8 @@ void do_hypervisor_callback(struct pt_regs *regs) do_event(port, regs); } } + + in_callback = 0; } -- cgit v1.2.3