diff options
author | kaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk> | 2006-06-15 13:20:43 +0100 |
---|---|---|
committer | kaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk> | 2006-06-15 13:20:43 +0100 |
commit | 89f1d989d24d23141971c4fb47af356388be6bb2 (patch) | |
tree | 23a864b0110d7b05b29023b8edd26182bb5d7390 /extras/mini-os/events.c | |
parent | d406847ecc9f8c68261c618850eb52edcc2747be (diff) | |
download | xen-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.c | 12 |
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); } } |