[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] xen/evtchn: Purge ERROR_EXIT{,_DOM}()
commit e5ba5165cae654f4bb5023b74008f57b5649979d Author: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> AuthorDate: Tue Jun 13 17:06:47 2023 +0100 Commit: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> CommitDate: Tue Jun 20 17:07:35 2023 +0100 xen/evtchn: Purge ERROR_EXIT{,_DOM}() These interfere with code legibility by hiding control flow. Expand and drop them. * Rearrange the order of actions to write into rc, then render rc in the gdprintk(). * Drop redundant "rc = rc" assignments * Switch to using %pd for rendering domains As a side effect, this fixes several violations of MISRA rule 2.1 (dead code - the while() following a goto). No functional change. Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Reviewed-by: Julien Grall <jgrall@xxxxxxxxxx> --- xen/common/event_channel.c | 79 ++++++++++++++++++++++++++++++---------------- 1 file changed, 52 insertions(+), 27 deletions(-) diff --git a/xen/common/event_channel.c b/xen/common/event_channel.c index f5e0b12d15..a7a004a084 100644 --- a/xen/common/event_channel.c +++ b/xen/common/event_channel.c @@ -36,23 +36,6 @@ #include <asm/guest.h> #endif -#define ERROR_EXIT(_errno) \ - do { \ - gdprintk(XENLOG_WARNING, \ - "EVTCHNOP failure: error %d\n", \ - (_errno)); \ - rc = (_errno); \ - goto out; \ - } while ( 0 ) -#define ERROR_EXIT_DOM(_errno, _dom) \ - do { \ - gdprintk(XENLOG_WARNING, \ - "EVTCHNOP failure: domain %d, error %d\n", \ - (_dom)->domain_id, (_errno)); \ - rc = (_errno); \ - goto out; \ - } while ( 0 ) - #define consumer_is_xen(e) (!!(e)->xen_consumer) /* @@ -336,7 +319,11 @@ int evtchn_alloc_unbound(evtchn_alloc_unbound_t *alloc, evtchn_port_t port) port = rc = evtchn_get_port(d, port); if ( rc < 0 ) - ERROR_EXIT(rc); + { + gdprintk(XENLOG_WARNING, "EVTCHNOP failure: error %d\n", rc); + goto out; + } + rc = 0; chn = evtchn_from_port(d, port); @@ -412,17 +399,30 @@ int evtchn_bind_interdomain(evtchn_bind_interdomain_t *bind, struct domain *ld, lport = rc = evtchn_get_port(ld, lport); if ( rc < 0 ) - ERROR_EXIT(rc); + { + gdprintk(XENLOG_WARNING, "EVTCHNOP failure: error %d\n", rc); + goto out; + } + rc = 0; lchn = evtchn_from_port(ld, lport); rchn = _evtchn_from_port(rd, rport); if ( !rchn ) - ERROR_EXIT_DOM(-EINVAL, rd); + { + rc = -EINVAL; + gdprintk(XENLOG_WARNING, "EVTCHNOP failure: %pd, error %d\n", rd, rc); + goto out; + } + if ( (rchn->state != ECS_UNBOUND) || (rchn->u.unbound.remote_domid != ld->domain_id) ) - ERROR_EXIT_DOM(-EINVAL, rd); + { + rc = -EINVAL; + gdprintk(XENLOG_WARNING, "EVTCHNOP failure: %pd, error %d\n", rd, rc); + goto out; + } rc = xsm_evtchn_interdomain(XSM_HOOK, ld, lchn, rd, rchn); if ( rc ) @@ -487,11 +487,19 @@ int evtchn_bind_virq(evtchn_bind_virq_t *bind, evtchn_port_t port) write_lock(&d->event_lock); if ( read_atomic(&v->virq_to_evtchn[virq]) ) - ERROR_EXIT(-EEXIST); + { + rc = -EEXIST; + gdprintk(XENLOG_WARNING, "EVTCHNOP failure: error %d\n", rc); + goto out; + } port = rc = evtchn_get_port(d, port); if ( rc < 0 ) - ERROR_EXIT(rc); + { + gdprintk(XENLOG_WARNING, "EVTCHNOP failure: error %d\n", rc); + goto out; + } + rc = 0; chn = evtchn_from_port(d, port); @@ -535,7 +543,11 @@ static int evtchn_bind_ipi(evtchn_bind_ipi_t *bind) write_lock(&d->event_lock); if ( (port = get_free_port(d)) < 0 ) - ERROR_EXIT(port); + { + rc = port; + gdprintk(XENLOG_WARNING, "EVTCHNOP failure: error %d\n", rc); + goto out; + } chn = evtchn_from_port(d, port); @@ -599,16 +611,29 @@ static int evtchn_bind_pirq(evtchn_bind_pirq_t *bind) write_lock(&d->event_lock); if ( pirq_to_evtchn(d, pirq) != 0 ) - ERROR_EXIT(-EEXIST); + { + rc = -EEXIST; + gdprintk(XENLOG_WARNING, "EVTCHNOP failure: error %d\n", rc); + goto out; + } if ( (port = get_free_port(d)) < 0 ) - ERROR_EXIT(port); + { + rc = port; + gdprintk(XENLOG_WARNING, "EVTCHNOP failure: error %d\n", rc); + goto out; + } chn = evtchn_from_port(d, port); info = pirq_get_info(d, pirq); if ( !info ) - ERROR_EXIT(-ENOMEM); + { + rc = -ENOMEM; + gdprintk(XENLOG_WARNING, "EVTCHNOP failure: error %d\n", rc); + goto out; + } + info->evtchn = port; rc = (!is_hvm_domain(d) ? pirq_guest_bind(v, info, -- generated by git-patchbot for /home/xen/git/xen.git#master
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |