aboutsummaryrefslogtreecommitdiffstats
path: root/extras/mini-os/events.c
diff options
context:
space:
mode:
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>2006-06-15 13:20:43 +0100
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>2006-06-15 13:20:43 +0100
commit89f1d989d24d23141971c4fb47af356388be6bb2 (patch)
tree23a864b0110d7b05b29023b8edd26182bb5d7390 /extras/mini-os/events.c
parentd406847ecc9f8c68261c618850eb52edcc2747be (diff)
downloadxen-89f1d989d24d23141971c4fb47af356388be6bb2.tar.gz
xen-89f1d989d24d23141971c4fb47af356388be6bb2.tar.bz2
xen-89f1d989d24d23141971c4fb47af356388be6bb2.zip
[MINI-OS] Fix for event initialisation in Mini-OS. All events are masked when
the system is started up. This prevents from getting spurious events between hypercall to bind an event-channel and registering appropriate event handler. Signed-off-by: Grzegorz Milos <gm281@cam.ac.uk>
Diffstat (limited to 'extras/mini-os/events.c')
-rw-r--r--extras/mini-os/events.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/extras/mini-os/events.c b/extras/mini-os/events.c
index e45a1364fe..2aa5349b37 100644
--- a/extras/mini-os/events.c
+++ b/extras/mini-os/events.c
@@ -35,24 +35,29 @@ int do_event(u32 port, struct pt_regs *regs)
ev_action_t *action;
if (port >= NR_EVS) {
printk("Port number too large: %d\n", port);
- return 0;
+ goto out;
}
action = &ev_actions[port];
action->count++;
if (!action->handler)
+ {
+ printk("Spurious event on port %d\n", port);
goto out;
+ }
if (action->status & EVS_DISABLED)
+ {
+ printk("Event on port %d disabled\n", port);
goto out;
+ }
/* call the handler */
action->handler(port, regs);
-
- clear_evtchn(port);
out:
+ clear_evtchn(port);
return 1;
}
@@ -135,6 +140,7 @@ void init_events(void)
{
ev_actions[i].status = EVS_DISABLED;
ev_actions[i].handler = default_handler;
+ mask_evtchn(i);
}
}