From 6767a71fdd87ab218804a7f63ba71d4c2309b820 Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Mon, 2 Mar 2009 10:51:34 +0000 Subject: 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 Acked-by: Samuel Thibault --- extras/mini-os/events.c | 84 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 57 insertions(+), 27 deletions(-) (limited to 'extras/mini-os/events.c') 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: + */ -- cgit v1.2.3