All of lore.kernel.org
 help / color / mirror / Atom feed
From: Samuel Thibault <samuel.thibault@ens-lyon.org>
To: Juergen Gross <jgross@suse.com>
Cc: xen-devel@lists.xenproject.org,
	Anthony PERARD <anthony.perard@vates.tech>,
	Julien Grall <julien@xen.org>
Subject: Re: [PATCH v2 7/7] tools/xenstored: use new stable interface instead of libxenctrl
Date: Sun, 8 Dec 2024 21:38:45 +0100	[thread overview]
Message-ID: <Z1YD1TgATdCcyG9Z@begin> (raw)
In-Reply-To: <20241206130221.17773-8-jgross@suse.com>

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@suse.com>

Reviewed-by: Samuel Thibault <samuel.thibault@ens-lyon.org>

> ---
> 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@suse.com>
> ---
>  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 >> !"


      reply	other threads:[~2024-12-08 20:39 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-12-06 13:02 [PATCH v2 0/7] remove libxenctrl usage from xenstored Juergen Gross
2024-12-06 13:02 ` [PATCH v2 1/7] xen/xsm: make getdomaininfo xsm dummy checks more stringent Juergen Gross
2024-12-06 13:05   ` Daniel P. Smith
2024-12-06 13:02 ` [PATCH v2 2/7] tools: add a dedicated header file for barrier definitions Juergen Gross
2024-12-06 13:02 ` [PATCH v2 3/7] xen: add a domain unique id to each domain Juergen Gross
2024-12-06 13:02 ` [PATCH v2 4/7] xen: add bitmap to indicate per-domain state changes Juergen Gross
2024-12-09 16:52   ` Jan Beulich
2024-12-10 15:44     ` Jürgen Groß
2024-12-06 13:02 ` [PATCH v2 5/7] xen: add new domctl get_changed_domain Juergen Gross
2024-12-09 17:04   ` Jan Beulich
2024-12-10 15:52     ` Jürgen Groß
2024-12-10 16:29       ` Jan Beulich
2024-12-11  7:44         ` Jürgen Groß
2024-12-11  8:32           ` Jan Beulich
2024-12-06 13:02 ` [PATCH v2 6/7] tools/libs: add a new libxenmanage library Juergen Gross
2024-12-06 13:02 ` [PATCH v2 7/7] tools/xenstored: use new stable interface instead of libxenctrl Juergen Gross
2024-12-08 20:38   ` Samuel Thibault [this message]

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=Z1YD1TgATdCcyG9Z@begin \
    --to=samuel.thibault@ens-lyon.org \
    --cc=anthony.perard@vates.tech \
    --cc=jgross@suse.com \
    --cc=julien@xen.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.