aboutsummaryrefslogtreecommitdiffstats
path: root/extras/mini-os/events.c
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2009-03-02 10:51:34 +0000
committerKeir Fraser <keir.fraser@citrix.com>2009-03-02 10:51:34 +0000
commit6767a71fdd87ab218804a7f63ba71d4c2309b820 (patch)
treea16ef56017eb98fa30f333ab5325252efd61fe70 /extras/mini-os/events.c
parent6976b9a7c20dce349dccfb0eec658af5fa9af3c5 (diff)
downloadxen-6767a71fdd87ab218804a7f63ba71d4c2309b820.tar.gz
xen-6767a71fdd87ab218804a7f63ba71d4c2309b820.tar.bz2
xen-6767a71fdd87ab218804a7f63ba71d4c2309b820.zip
minios: cleanup events.c
Don't throw away hypercall error codes. They might be useful. Also some minor coding style cleanups. Signed-off-by: Rolf Neugebauer <rolf.neugebauer@netronome.com> Acked-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
Diffstat (limited to 'extras/mini-os/events.c')
-rw-r--r--extras/mini-os/events.c84
1 files changed, 57 insertions, 27 deletions
diff --git a/extras/mini-os/events.c b/extras/mini-os/events.c
index 95ad4e4ed5..9ca78d0016 100644
--- a/extras/mini-os/events.c
+++ b/extras/mini-os/events.c
@@ -42,19 +42,23 @@ void unbind_all_ports(void)
int cpu = 0;
shared_info_t *s = HYPERVISOR_shared_info;
vcpu_info_t *vcpu_info = &s->vcpu_info[cpu];
+ int rc;
- for (i = 0; i < NR_EVS; i++)
+ for ( i = 0; i < NR_EVS; i++ )
{
- if (i == start_info.console.domU.evtchn ||
- i == start_info.store_evtchn)
+ if ( i == start_info.console.domU.evtchn ||
+ i == start_info.store_evtchn)
continue;
- if (test_and_clear_bit(i, bound_ports))
+
+ if ( test_and_clear_bit(i, bound_ports) )
{
struct evtchn_close close;
printk("port %d still bound!\n", i);
mask_evtchn(i);
close.port = i;
- HYPERVISOR_event_channel_op(EVTCHNOP_close, &close);
+ rc = HYPERVISOR_event_channel_op(EVTCHNOP_close, &close);
+ if ( rc )
+ printk("WARN: close_port %s failed rc=%d. ignored\n", i, rc);
clear_evtchn(i);
}
}
@@ -71,8 +75,9 @@ int do_event(evtchn_port_t port, struct pt_regs *regs)
clear_evtchn(port);
- if (port >= NR_EVS) {
- printk("Port number too large: %d\n", port);
+ if ( port >= NR_EVS )
+ {
+ printk("WARN: do_event(): Port number too large: %d\n", port);
return 1;
}
@@ -89,9 +94,9 @@ int do_event(evtchn_port_t port, struct pt_regs *regs)
evtchn_port_t bind_evtchn(evtchn_port_t port, evtchn_handler_t handler,
void *data)
{
- if(ev_actions[port].handler != default_handler)
+ if ( ev_actions[port].handler != default_handler )
printk("WARN: Handler for port %d already registered, replacing\n",
- port);
+ port);
ev_actions[port].data = data;
wmb();
@@ -104,8 +109,9 @@ evtchn_port_t bind_evtchn(evtchn_port_t port, evtchn_handler_t handler,
void unbind_evtchn(evtchn_port_t port )
{
struct evtchn_close close;
+ int rc;
- if (ev_actions[port].handler == default_handler)
+ if ( ev_actions[port].handler == default_handler )
printk("WARN: No handler for port %d when unbinding\n", port);
mask_evtchn(port);
clear_evtchn(port);
@@ -116,37 +122,43 @@ void unbind_evtchn(evtchn_port_t port )
clear_bit(port, bound_ports);
close.port = port;
- HYPERVISOR_event_channel_op(EVTCHNOP_close, &close);
+ rc = HYPERVISOR_event_channel_op(EVTCHNOP_close, &close);
+ if ( rc )
+ printk("WARN: close_port %s failed rc=%d. ignored\n", port, rc);
+
}
evtchn_port_t bind_virq(uint32_t virq, evtchn_handler_t handler, void *data)
{
evtchn_bind_virq_t op;
+ int rc;
/* Try to bind the virq to a port */
op.virq = virq;
op.vcpu = smp_processor_id();
- if ( HYPERVISOR_event_channel_op(EVTCHNOP_bind_virq, &op) != 0 )
+ if ( (rc = HYPERVISOR_event_channel_op(EVTCHNOP_bind_virq, &op)) != 0 )
{
- printk("Failed to bind virtual IRQ %d\n", virq);
+ printk("Failed to bind virtual IRQ %d with rc=%d\n", virq, rc);
return -1;
}
bind_evtchn(op.port, handler, data);
return op.port;
}
-evtchn_port_t bind_pirq(uint32_t pirq, int will_share, evtchn_handler_t handler, void *data)
+evtchn_port_t bind_pirq(uint32_t pirq, int will_share,
+ evtchn_handler_t handler, void *data)
{
evtchn_bind_pirq_t op;
+ int rc;
/* Try to bind the pirq to a port */
op.pirq = pirq;
op.flags = will_share ? BIND_PIRQ__WILL_SHARE : 0;
- if ( HYPERVISOR_event_channel_op(EVTCHNOP_bind_pirq, &op) != 0 )
+ if ( (rc = HYPERVISOR_event_channel_op(EVTCHNOP_bind_pirq, &op)) != 0 )
{
- printk("Failed to bind physical IRQ %d\n", pirq);
+ printk("Failed to bind physical IRQ %d with rc=%d\n", pirq, rc);
return -1;
}
bind_evtchn(op.port, handler, data);
@@ -173,7 +185,8 @@ void init_events(void)
asm volatile("movl %0,%%fs ; movl %0,%%gs" :: "r" (0));
wrmsrl(0xc0000101, &cpu0_pda); /* 0xc0000101 is MSR_GS_BASE */
cpu0_pda.irqcount = -1;
- cpu0_pda.irqstackptr = (void*) (((unsigned long)irqstack + 2 * STACK_SIZE) & ~(STACK_SIZE - 1));
+ cpu0_pda.irqstackptr = (void*) (((unsigned long)irqstack + 2 * STACK_SIZE)
+ & ~(STACK_SIZE - 1));
#endif
/* initialize event handler */
for ( i = 0; i < NR_EVS; i++ )
@@ -207,15 +220,19 @@ void default_handler(evtchn_port_t port, struct pt_regs *regs, void *ignore)
int evtchn_alloc_unbound(domid_t pal, evtchn_handler_t handler,
void *data, evtchn_port_t *port)
{
- int err;
+ int rc;
+
evtchn_alloc_unbound_t op;
op.dom = DOMID_SELF;
op.remote_dom = pal;
- err = HYPERVISOR_event_channel_op(EVTCHNOP_alloc_unbound, &op);
- if (err)
- return err;
+ rc = HYPERVISOR_event_channel_op(EVTCHNOP_alloc_unbound, &op);
+ if ( rc )
+ {
+ printk("ERROR: alloc_unbound failed with rc=%d", rc);
+ return rc;
+ }
*port = bind_evtchn(op.port, handler, data);
- return err;
+ return rc;
}
/* Connect to a port so as to allow the exchange of notifications with
@@ -225,15 +242,28 @@ int evtchn_bind_interdomain(domid_t pal, evtchn_port_t remote_port,
evtchn_handler_t handler, void *data,
evtchn_port_t *local_port)
{
- int err;
+ int rc;
evtchn_port_t port;
evtchn_bind_interdomain_t op;
op.remote_dom = pal;
op.remote_port = remote_port;
- err = HYPERVISOR_event_channel_op(EVTCHNOP_bind_interdomain, &op);
- if (err)
- return err;
+ rc = HYPERVISOR_event_channel_op(EVTCHNOP_bind_interdomain, &op);
+ if ( rc )
+ {
+ printk("ERROR: bind_interdomain failed with rc=%d", rc);
+ return rc;
+ }
port = op.local_port;
*local_port = bind_evtchn(port, handler, data);
- return err;
+ return rc;
}
+
+/*
+ * Local variables:
+ * mode: C
+ * c-set-style: "BSD"
+ * c-basic-offset: 4
+ * tab-width: 4
+ * indent-tabs-mode: nil
+ * End:
+ */