|
[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 |