|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen staging] tools/libxenevtchn: add xenevtchn_bind() under Mini-OS
commit 0929658c719754a57b6e16e3b8da8029638f9f11
Author: Juergen Gross <jgross@xxxxxxxx>
AuthorDate: Thu Jul 31 09:45:18 2025 +0200
Commit: Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Thu Jul 31 09:45:18 2025 +0200
tools/libxenevtchn: add xenevtchn_bind() under Mini-OS
In order to reactivate an event channel after kexec() of Mini-OS,
libxenevtchn needs to allocate the port data for the event channel
and set the handler again. Add a new interface xenevtchn_bind()
for that purpose, available under Mini-OS only.
Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
Reviewed-by: Jason Andryuk <jason.andryuk@xxxxxxx>
Acked-by: Anthony PERARD <anthony.perard@xxxxxxxxxx>
---
tools/include/xenevtchn.h | 13 +++++++++++++
tools/libs/evtchn/minios.c | 17 +++++++++++++++++
2 files changed, 30 insertions(+)
diff --git a/tools/include/xenevtchn.h b/tools/include/xenevtchn.h
index 1255c85178..5748af530b 100644
--- a/tools/include/xenevtchn.h
+++ b/tools/include/xenevtchn.h
@@ -173,6 +173,19 @@ int xenevtchn_unmask(xenevtchn_handle *xce, evtchn_port_t
port);
*/
int xenevtchn_restrict(xenevtchn_handle *xce, domid_t domid);
+#ifdef __MINIOS__
+/**
+ * Bind an event channel under Mini-OS.
+ *
+ * Bind an event channel specified by its known port after a kexec() of
+ * Mini-OS. This function is available under Mini-OS only!
+ *
+ * @parm xce handle to the open evtchn interface
+ * @parm port the event channel to bind again
+ * @return 0 on success, -1 on failure with errno set appropriately.
+ */
+int xenevtchn_bind(xenevtchn_handle *xce, evtchn_port_t port);
+#endif
#endif
/*
diff --git a/tools/libs/evtchn/minios.c b/tools/libs/evtchn/minios.c
index 0d2a201438..36e4201249 100644
--- a/tools/libs/evtchn/minios.c
+++ b/tools/libs/evtchn/minios.c
@@ -259,6 +259,23 @@ xenevtchn_port_or_error_t
xenevtchn_bind_interdomain(xenevtchn_handle *xce,
return local_port;
}
+int xenevtchn_bind(xenevtchn_handle *xce, evtchn_port_t port)
+{
+ struct port_info *port_info;
+ port_info = port_alloc(xce);
+ if ( port_info == NULL )
+ return -1;
+
+ printf("xenevtchn_bind(%"PRId32")\n", port);
+ bind_evtchn(port, evtchn_handler, xce);
+
+ port_info->bound = true;
+ port_info->port = port;
+ unmask_evtchn(port);
+
+ return 0;
+}
+
int xenevtchn_unbind(xenevtchn_handle *xce, evtchn_port_t port)
{
int fd = xce->fd;
--
generated by git-patchbot for /home/xen/git/xen.git#staging
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |