From: Matthew Barnes <matthew.barnes@cloud.com>
To: xen-devel@lists.xenproject.org
Cc: Matthew Barnes <matthew.barnes@cloud.com>,
Andrew Cooper <andrew.cooper3@citrix.com>,
George Dunlap <george.dunlap@citrix.com>,
Jan Beulich <jbeulich@suse.com>, Julien Grall <julien@xen.org>,
Stefano Stabellini <sstabellini@kernel.org>
Subject: [XEN PATCH v2 1/2] evtchn: Add error status indicators for evtchn_status hypercall
Date: Mon, 29 Apr 2024 14:42:41 +0100 [thread overview]
Message-ID: <2f9544433fd9bb5c4b7ccccbacc27bc928f57dfb.1714148012.git.matthew.barnes@cloud.com> (raw)
In-Reply-To: <cover.1714148012.git.matthew.barnes@cloud.com>
When the evtchn_status hypercall fails, it is not possible to determine
the cause of the error, since the library call returns -1 to the tool
and not the errno.
Because of this, lsevtchn is unable to determine whether to continue
event channel enumeration upon an evtchn_status hypercall error.
Add error status indicators for the eventchn_status hypercall for
lsevtchn to terminate its loop on, and keep other errors as failed
hypercalls.
Signed-off-by: Matthew Barnes <matthew.barnes@cloud.com>
---
xen/common/event_channel.c | 12 +++++++++++-
xen/include/public/event_channel.h | 2 ++
2 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/xen/common/event_channel.c b/xen/common/event_channel.c
index aceee0695f9f..0f11e71c3e6f 100644
--- a/xen/common/event_channel.c
+++ b/xen/common/event_channel.c
@@ -1030,7 +1030,17 @@ int evtchn_status(evtchn_status_t *status)
d = rcu_lock_domain_by_any_id(dom);
if ( d == NULL )
- return -ESRCH;
+ {
+ status->status = EVTCHNSTAT_dom_invalid;
+ return 0;
+ }
+
+ if ( !port_is_valid(d, port) )
+ {
+ status->status = EVTCHNSTAT_port_invalid;
+ rcu_unlock_domain(d);
+ return 0;
+ }
chn = _evtchn_from_port(d, port);
if ( !chn )
diff --git a/xen/include/public/event_channel.h b/xen/include/public/event_channel.h
index 0d91a1c4afab..29cbf43945b3 100644
--- a/xen/include/public/event_channel.h
+++ b/xen/include/public/event_channel.h
@@ -200,6 +200,8 @@ struct evtchn_status {
#define EVTCHNSTAT_pirq 3 /* Channel is bound to a phys IRQ line. */
#define EVTCHNSTAT_virq 4 /* Channel is bound to a virtual IRQ line */
#define EVTCHNSTAT_ipi 5 /* Channel is bound to a virtual IPI line */
+#define EVTCHNSTAT_dom_invalid 6 /* Given domain ID is not a valid domain */
+#define EVTCHNSTAT_port_invalid 7 /* Given port is not within valid range */
uint32_t status;
uint32_t vcpu; /* VCPU to which this channel is bound. */
union {
--
2.34.1
next prev parent reply other threads:[~2024-04-29 13:43 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-29 13:42 [XEN PATCH v2 0/2] Enumerate all allocated evtchns in lsevtchn Matthew Barnes
2024-04-29 13:42 ` Matthew Barnes [this message]
2024-04-30 12:19 ` [XEN PATCH v2 1/2] evtchn: Add error status indicators for evtchn_status hypercall Jan Beulich
2024-04-29 13:42 ` [XEN PATCH v2 2/2] tools/lsevtchn: Use new status identifiers in loop Matthew Barnes
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2f9544433fd9bb5c4b7ccccbacc27bc928f57dfb.1714148012.git.matthew.barnes@cloud.com \
--to=matthew.barnes@cloud.com \
--cc=andrew.cooper3@citrix.com \
--cc=george.dunlap@citrix.com \
--cc=jbeulich@suse.com \
--cc=julien@xen.org \
--cc=sstabellini@kernel.org \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).