|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 7/7] tools/xenstored: use new stable interface instead of libxenctrl
Juergen Gross, le ven. 06 déc. 2024 14:02:21 +0100, a ecrit:
> Replace the current use of the unstable xc_domain_getinfo_single()
> interface with the stable domctl XEN_DOMCTL_get_domain_state call
> via the new libxenmanage library.
>
> This will remove the last usage of libxenctrl by Xenstore, so update
> the library dependencies accordingly.
>
> For now only do a direct replacement without using the functionality
> of obtaining information about domains having changed the state.
>
> Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
Reviewed-by: Samuel Thibault <samuel.thibault@xxxxxxxxxxxx>
> ---
> V1:
> - use library instead of direct hypercall, only replace current
> libxenctrl use case
>
> Please note that this patch can be committed only after the related
> Mini-OS patch "config: add support for libxenmanage" has gone in AND
> the Mini-OS commit-id has been updated in Config.mk accordingly!
>
> Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
> ---
> stubdom/Makefile | 8 ++---
> stubdom/mini-os.mk | 1 +
> tools/xenstored/Makefile | 2 +-
> tools/xenstored/Makefile.common | 2 +-
> tools/xenstored/core.h | 1 -
> tools/xenstored/domain.c | 52 ++++++++++++---------------------
> tools/xenstored/lu.c | 1 +
> tools/xenstored/lu_daemon.c | 1 +
> 8 files changed, 28 insertions(+), 40 deletions(-)
>
> diff --git a/stubdom/Makefile b/stubdom/Makefile
> index 2a81af28a1..ca800b243c 100644
> --- a/stubdom/Makefile
> +++ b/stubdom/Makefile
> @@ -307,7 +307,7 @@ endif
> # libraries under tools/libs
> #######
>
> -STUB_LIBS := toolcore toollog evtchn gnttab call foreignmemory devicemodel
> ctrl guest
> +STUB_LIBS := toolcore toollog evtchn gnttab call foreignmemory devicemodel
> ctrl guest manage
>
> LIBDEP_guest := cross-zlib
>
> @@ -465,7 +465,7 @@ grub: cross-polarssl grub-upstream $(CROSS_ROOT)
> grub-$(XEN_TARGET_ARCH)-minios-
> # xenstore
> ##########
>
> -xenstore-minios.gen.cfg: APP_LIBS = gnttab evtchn toollog ctrl
> +xenstore-minios.gen.cfg: APP_LIBS = gnttab evtchn toollog manage
> xenstore-minios.gen.cfg: xenstore-minios.cfg Makefile
> $(GEN_config) >$@
>
> @@ -480,7 +480,7 @@ xenstore: $(CROSS_ROOT) xenstore-minios-config.mk
> # xenstorepvh
> #############
>
> -xenstorepvh-minios.gen.cfg: APP_LIBS = gnttab evtchn toollog ctrl
> +xenstorepvh-minios.gen.cfg: APP_LIBS = gnttab evtchn toollog manage
> xenstorepvh-minios.gen.cfg: xenstorepvh-minios.cfg Makefile
> $(GEN_config) >$@
>
> @@ -523,7 +523,7 @@ else
> pv-grub-if-enabled:
> endif
>
> -XENSTORE_DEPS := libxenevtchn libxengnttab libxenctrl
> +XENSTORE_DEPS := libxenevtchn libxengnttab libxenmanage
>
> .PHONY: xenstore-stubdom
> xenstore-stubdom: mini-os-$(XEN_TARGET_ARCH)-xenstore $(XENSTORE_DEPS)
> xenstore
> diff --git a/stubdom/mini-os.mk b/stubdom/mini-os.mk
> index 7e4968e026..be32302f9e 100644
> --- a/stubdom/mini-os.mk
> +++ b/stubdom/mini-os.mk
> @@ -13,5 +13,6 @@ GNTTAB_PATH =
> $(XEN_ROOT)/stubdom/libs-$(MINIOS_TARGET_ARCH)/gnttab
> CALL_PATH = $(XEN_ROOT)/stubdom/libs-$(MINIOS_TARGET_ARCH)/call
> FOREIGNMEMORY_PATH =
> $(XEN_ROOT)/stubdom/libs-$(MINIOS_TARGET_ARCH)/foreignmemory
> DEVICEMODEL_PATH = $(XEN_ROOT)/stubdom/libs-$(MINIOS_TARGET_ARCH)/devicemodel
> +MANAGE_PATH = $(XEN_ROOT)/stubdom/libs-$(MINIOS_TARGET_ARCH)/manage
> CTRL_PATH = $(XEN_ROOT)/stubdom/libs-$(MINIOS_TARGET_ARCH)/ctrl
> GUEST_PATH = $(XEN_ROOT)/stubdom/libs-$(MINIOS_TARGET_ARCH)/guest
> diff --git a/tools/xenstored/Makefile b/tools/xenstored/Makefile
> index 09adfe1d50..81c42838e0 100644
> --- a/tools/xenstored/Makefile
> +++ b/tools/xenstored/Makefile
> @@ -5,7 +5,7 @@ include Makefile.common
>
> xenstored: LDLIBS += $(LDLIBS_libxenevtchn)
> xenstored: LDLIBS += $(LDLIBS_libxengnttab)
> -xenstored: LDLIBS += $(LDLIBS_libxenctrl)
> +xenstored: LDLIBS += $(LDLIBS_libxenmanage)
> xenstored: LDLIBS += -lrt
> xenstored: LDLIBS += $(SOCKET_LIBS)
>
> diff --git a/tools/xenstored/Makefile.common b/tools/xenstored/Makefile.common
> index 27fdb3b49e..271134fcc1 100644
> --- a/tools/xenstored/Makefile.common
> +++ b/tools/xenstored/Makefile.common
> @@ -12,7 +12,7 @@ XENSTORED_OBJS-$(CONFIG_MiniOS) += minios.o lu_minios.o
> # Include configure output (config.h)
> CFLAGS += -include $(XEN_ROOT)/tools/config.h
> CFLAGS += $(CFLAGS_libxenevtchn)
> -CFLAGS += $(CFLAGS_libxenctrl)
> +CFLAGS += $(CFLAGS_libxenmanage)
> CFLAGS += $(CFLAGS_libxentoolcore)
>
> $(XENSTORED_OBJS-y): CFLAGS += $(CFLAGS_libxengnttab)
> diff --git a/tools/xenstored/core.h b/tools/xenstored/core.h
> index e58779e88c..632886cecf 100644
> --- a/tools/xenstored/core.h
> +++ b/tools/xenstored/core.h
> @@ -19,7 +19,6 @@
> #ifndef _XENSTORED_CORE_H
> #define _XENSTORED_CORE_H
>
> -#include <xenctrl.h>
> #include <xengnttab.h>
>
> #include <sys/types.h>
> diff --git a/tools/xenstored/domain.c b/tools/xenstored/domain.c
> index 64c8fd0cc3..c0264d9477 100644
> --- a/tools/xenstored/domain.c
> +++ b/tools/xenstored/domain.c
> @@ -34,14 +34,15 @@
> #include "control.h"
>
> #include <xenevtchn.h>
> -#include <xenctrl.h>
> +#include <xenmanage.h>
> +#include <xen-barrier.h>
> #include <xen/grant_table.h>
>
> #ifdef __MINIOS__
> #include <mini-os/xenbus.h>
> #endif
>
> -static xc_interface **xc_handle;
> +static xenmanage_handle *xm_handle;
> xengnttab_handle **xgt_handle;
> static evtchn_port_t virq_port;
>
> @@ -619,32 +620,28 @@ static int destroy_domain(void *_domain)
> return 0;
> }
>
> -static bool get_domain_info(unsigned int domid, xc_domaininfo_t *dominfo)
> -{
> - return xc_domain_getinfo_single(*xc_handle, domid, dominfo) == 0;
> -}
> -
> static int check_domain(const void *k, void *v, void *arg)
> {
> - xc_domaininfo_t dominfo;
> + unsigned int state;
> struct connection *conn;
> - bool dom_valid;
> + int dom_invalid;
> struct domain *domain = v;
> bool *notify = arg;
>
> - dom_valid = get_domain_info(domain->domid, &dominfo);
> + dom_invalid = xenmanage_get_domain_info(xm_handle, domain->domid,
> + &state, NULL);
> if (!domain->introduced) {
> - if (!dom_valid)
> + if (dom_invalid)
> talloc_free(domain);
> return 0;
> }
> - if (dom_valid) {
> - if ((dominfo.flags & XEN_DOMINF_shutdown)
> + if (!dom_invalid) {
> + if ((state & XENMANAGE_GETDOMSTATE_STATE_SHUTDOWN)
> && !domain->shutdown) {
> domain->shutdown = true;
> *notify = true;
> }
> - if (!(dominfo.flags & XEN_DOMINF_dying))
> + if (!(state & XENMANAGE_GETDOMSTATE_STATE_DYING))
> return 0;
> }
> if (domain->conn) {
> @@ -786,10 +783,9 @@ static struct domain *find_or_alloc_domain(const void
> *ctx, unsigned int domid)
> static struct domain *find_or_alloc_existing_domain(unsigned int domid)
> {
> struct domain *domain;
> - xc_domaininfo_t dominfo;
>
> domain = find_domain_struct(domid);
> - if (!domain && get_domain_info(domid, &dominfo))
> + if (!domain && !xenmanage_get_domain_info(xm_handle, domid, NULL, NULL))
> domain = alloc_domain(NULL, domid);
>
> return domain;
> @@ -1187,12 +1183,6 @@ int do_reset_watches(const void *ctx, struct
> connection *conn,
> return 0;
> }
>
> -static int close_xc_handle(void *_handle)
> -{
> - xc_interface_close(*(xc_interface**)_handle);
> - return 0;
> -}
> -
> static int close_xgt_handle(void *_handle)
> {
> xengnttab_close(*(xengnttab_handle **)_handle);
> @@ -1258,15 +1248,9 @@ void domain_early_init(void)
> if (!domhash)
> barf_perror("Failed to allocate domain hashtable");
>
> - xc_handle = talloc(talloc_autofree_context(), xc_interface*);
> - if (!xc_handle)
> - barf_perror("Failed to allocate domain handle");
> -
> - *xc_handle = xc_interface_open(0,0,0);
> - if (!*xc_handle)
> - barf_perror("Failed to open connection to hypervisor");
> -
> - talloc_set_destructor(xc_handle, close_xc_handle);
> + xm_handle = xenmanage_open(NULL, 0);
> + if (!xm_handle)
> + barf_perror("Failed to open connection to libxenmanage");
>
> xgt_handle = talloc(talloc_autofree_context(), xengnttab_handle*);
> if (!xgt_handle)
> @@ -1306,6 +1290,8 @@ void domain_deinit(void)
> {
> if (virq_port)
> xenevtchn_unbind(xce_handle, virq_port);
> +
> + xenmanage_close(xm_handle);
> }
>
> /*
> @@ -1335,13 +1321,13 @@ int domain_alloc_permrefs(struct node_perms *perms)
> {
> unsigned int i, domid;
> struct domain *d;
> - xc_domaininfo_t dominfo;
>
> for (i = 0; i < perms->num; i++) {
> domid = perms->p[i].id;
> d = find_domain_struct(domid);
> if (!d) {
> - if (!get_domain_info(domid, &dominfo))
> + if (xenmanage_get_domain_info(xm_handle, domid,
> + NULL, NULL))
> perms->p[i].perms |= XS_PERM_IGNORE;
> else if (!alloc_domain(NULL, domid))
> return ENOMEM;
> diff --git a/tools/xenstored/lu.c b/tools/xenstored/lu.c
> index bec2a84e10..4fccbbc195 100644
> --- a/tools/xenstored/lu.c
> +++ b/tools/xenstored/lu.c
> @@ -11,6 +11,7 @@
> #include <stdlib.h>
> #include <syslog.h>
> #include <time.h>
> +#include <unistd.h>
> #include <sys/mman.h>
> #include <sys/stat.h>
>
> diff --git a/tools/xenstored/lu_daemon.c b/tools/xenstored/lu_daemon.c
> index 6df6c80a2a..88d8d9e1b3 100644
> --- a/tools/xenstored/lu_daemon.c
> +++ b/tools/xenstored/lu_daemon.c
> @@ -6,6 +6,7 @@
> */
>
> #include <syslog.h>
> +#include <unistd.h>
> #include <sys/stat.h>
>
> #include "talloc.h"
> --
> 2.43.0
>
--
Samuel
Client: "This program has been successfully installed."
Vendeur (surpris): "Et où voyez-vous une erreur ?"
Client: "C'est << HAS BEEN >> !"
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |