[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] minios: cleanup events.c
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1235991094 0 # Node ID 08916e5135b39a4b2fa21e501e134abfee87a4ec # Parent 9c4a38f70b168d1f30652f099e696fa48df4b59f 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@xxxxxxxxxxxxx> Acked-by: Samuel Thibault <samuel.thibault@xxxxxxxxxxxx> --- extras/mini-os/events.c | 96 +++++++++++++++++++++++++++++++----------------- 1 files changed, 63 insertions(+), 33 deletions(-) diff -r 9c4a38f70b16 -r 08916e5135b3 extras/mini-os/events.c --- a/extras/mini-os/events.c Mon Mar 02 10:50:59 2009 +0000 +++ b/extras/mini-os/events.c Mon Mar 02 10:51:34 2009 +0000 @@ -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]; - - for (i = 0; i < NR_EVS; i++) - { - if (i == start_info.console.domU.evtchn || - i == start_info.store_evtchn) + int rc; + + for ( i = 0; i < NR_EVS; i++ ) + { + 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 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 @@ evtchn_port_t bind_evtchn(evtchn_port_t 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 @@ void unbind_evtchn(evtchn_port_t port ) void unbind_evtchn(evtchn_port_t port ) { struct evtchn_close close; - - if (ev_actions[port].handler == default_handler) + int rc; + + 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 ) - { - printk("Failed to bind virtual IRQ %d\n", virq); + if ( (rc = HYPERVISOR_event_channel_op(EVTCHNOP_bind_virq, &op)) != 0 ) + { + 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 ) - { - printk("Failed to bind physical IRQ %d\n", pirq); + if ( (rc = HYPERVISOR_event_channel_op(EVTCHNOP_bind_pirq, &op)) != 0 ) + { + 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 @@ int evtchn_alloc_unbound(domid_t pal, ev 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_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: + */ _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |