From nobody Thu May 16 00:07:02 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=cloud.com ARC-Seal: i=1; a=rsa-sha256; t=1682678534; cv=none; d=zohomail.com; s=zohoarc; b=hsCpLLQ62ABeaG0E2+W4C1rzj+yXG0ZhcSHyhBr8FtmYc1smZm/IhEN85jQhL7atTlMyDltKd+TWpCk5lXdeho3my3st3YDgC/d2IVlqG3WohNj4/EavP8I2J+3BPcZbume6jiIb27bCTBDYUs58ztwZc91vaL5/YGj3TCT6y5M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1682678534; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=T4l1yE4xai3KjB0fNKNqHg0rUNasi8EVSaas8lld3vQ=; b=Grs3TOS+YemW87opGpLVFNQ80+ZAL+jV9yZLyoKcmDY4AwtW90A6i6tX4LWRdz05NtLjmKslc40WoooMezT1Bv31g6qAabuu28I8Si69NuwILumSBhqVYr9z9O8TyfuSIzcF8QAz/2N86zI9IZXnqyUCQEkKcnPk8z5+EyULwB8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1682678534644911.5758871749812; Fri, 28 Apr 2023 03:42:14 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.527251.819654 (Exim 4.92) (envelope-from ) id 1psLXl-0002Pi-Ul; Fri, 28 Apr 2023 10:41:37 +0000 Received: by outflank-mailman (output) from mailman id 527251.819654; Fri, 28 Apr 2023 10:41:37 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1psLXl-0002Pb-S9; Fri, 28 Apr 2023 10:41:37 +0000 Received: by outflank-mailman (input) for mailman id 527251; Fri, 28 Apr 2023 10:41:36 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1psLXk-0002Ac-N6 for xen-devel@lists.xenproject.org; Fri, 28 Apr 2023 10:41:36 +0000 Received: from mail-wr1-x42b.google.com (mail-wr1-x42b.google.com [2a00:1450:4864:20::42b]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 3fb6672f-e5b1-11ed-b224-6b7b168915f2; Fri, 28 Apr 2023 12:41:36 +0200 (CEST) Received: by mail-wr1-x42b.google.com with SMTP id ffacd0b85a97d-2f46348728eso5967202f8f.3 for ; Fri, 28 Apr 2023 03:41:36 -0700 (PDT) Received: from localhost.localdomain (default-46-102-197-194.interdsl.co.uk. [46.102.197.194]) by smtp.gmail.com with ESMTPSA id k6-20020a5d5246000000b002e71156b0fcsm20930378wrc.6.2023.04.28.03.41.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Apr 2023 03:41:34 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 3fb6672f-e5b1-11ed-b224-6b7b168915f2 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cloud.com; s=cloud; t=1682678495; x=1685270495; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=T4l1yE4xai3KjB0fNKNqHg0rUNasi8EVSaas8lld3vQ=; b=gGQYE0wnbv2u/2ujI0WT0Em2d7RlOT6NbB68Ao4yFN1CQrsbPYm3pGRGca5e5S21je LK5e5ebdxID3/tapawpLEny5pI6iapNe4ybB65OhR6gmfqjAplOhrEECZ/I5SXl1SmGZ oBDzpm8Hu6zDrlFtPZ6rQ19eZvzHj4r5ICLM4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682678495; x=1685270495; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=T4l1yE4xai3KjB0fNKNqHg0rUNasi8EVSaas8lld3vQ=; b=FlUEv5OXOJaLPAcAjsAW0UBhhYl+wiot4b+He5o7b7O45Nwx9NmW+EFVtCXHs1v6uF n4gspvLK9Xt4tF8vb8+g8iQEFzbVSfBWHxrdg77WE6VXm2v7cu/hCynKV7ue8mwM+eoN K3+57mpfVAzTM027R3vdzkbbrjPIExj4bmrLqH/quLN8nZc+kcFAKO+EiNFRuIEAi+b/ yGUKrQL/9omldubg2Bk6DRgj+S5LQxV3xkNA77cOQ84ff3/NVoOus726uFy3hcogEwz9 C06mMjAb/sei5v7ke3s4YYhcYCqKPE5KVoGdCxJTbkGtWhx/p/dQIaIWcFjDbiKMEE9z 0elQ== X-Gm-Message-State: AC+VfDwjN2/X27Ana9Z520a1nqFIYMGvDJrNV0UWbh+6a0rAp7r5E3Cd XOf4rRJuZpqt+dQoGy9ax5ESedgFjKv8ZdwHL3k= X-Google-Smtp-Source: ACHHUZ7+y4UzEtRzaUR1jtLZQSfoQhM4fDts/+72js+8UWSv9x7HCxBfeQORSOI42k1XUiS6jtyKWQ== X-Received: by 2002:adf:dc0f:0:b0:2e4:eebe:aee3 with SMTP id t15-20020adfdc0f000000b002e4eebeaee3mr3432484wri.60.1682678494942; Fri, 28 Apr 2023 03:41:34 -0700 (PDT) From: Alejandro Vallejo To: Xen-devel Cc: Alejandro Vallejo , Andrew Cooper , Wei Liu , Anthony PERARD , Juergen Gross Subject: [PATCH v2 1/7] tools: Make some callers of xc_domain_getinfo() use xc_domain_getinfolist() Date: Fri, 28 Apr 2023 11:41:18 +0100 Message-Id: <20230428104124.1044-2-alejandro.vallejo@cloud.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230428104124.1044-1-alejandro.vallejo@cloud.com> References: <20230428104124.1044-1-alejandro.vallejo@cloud.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @cloud.com) X-ZM-MESSAGEID: 1682678536839100001 Content-Type: text/plain; charset="utf-8" xc_domain_getinfo() is slow and prone to races because N hypercalls are needed to find information about N domains. xc_domain_getinfolist() finds the same information in a single hypercall as long as a big enough buffer is provided. Plus, xc_domain_getinfo() is disappearing on a future patch so migrate the callers interested in more than 1 domain to the the *list() version. Signed-off-by: Alejandro Vallejo Acked-by: Marek Marczykowski-G=C3=B3recki --- Cc: Andrew Cooper Cc: Wei Liu Cc: Anthony PERARD Cc: Juergen Gross --- tools/include/xenctrl.h | 12 ++++++++++++ tools/python/xen/lowlevel/xc/xc.c | 28 ++++++++++++++-------------- tools/xenmon/xenbaked.c | 6 +++--- 3 files changed, 29 insertions(+), 17 deletions(-) diff --git a/tools/include/xenctrl.h b/tools/include/xenctrl.h index 05967ecc92..f5bc7f58b6 100644 --- a/tools/include/xenctrl.h +++ b/tools/include/xenctrl.h @@ -468,6 +468,18 @@ typedef struct xc_dominfo { =20 typedef xen_domctl_getdomaininfo_t xc_domaininfo_t; =20 +static inline unsigned int dominfo_shutdown_reason(const xc_domaininfo_t *= info) +{ + return (info->flags >> XEN_DOMINF_shutdownshift) & XEN_DOMINF_shutdown= mask; +} + +static inline bool dominfo_shutdown_with(xc_domaininfo_t *info, unsigned i= nt expected_reason) +{ + /* The reason doesn't make sense unless the domain is actually shutdow= n */ + return (info->flags & XEN_DOMINF_shutdown) && + (dominfo_shutdown_reason(info) =3D=3D expected_reason); +} + typedef union=20 { #if defined(__i386__) || defined(__x86_64__) diff --git a/tools/python/xen/lowlevel/xc/xc.c b/tools/python/xen/lowlevel/= xc/xc.c index 35901c2d63..d7ce299650 100644 --- a/tools/python/xen/lowlevel/xc/xc.c +++ b/tools/python/xen/lowlevel/xc/xc.c @@ -342,7 +342,7 @@ static PyObject *pyxc_domain_getinfo(XcObject *self, uint32_t first_dom =3D 0; int max_doms =3D 1024, nr_doms, i; size_t j; - xc_dominfo_t *info; + xc_domaininfo_t *info; =20 static char *kwd_list[] =3D { "first_dom", "max_doms", NULL }; =20 @@ -350,11 +350,11 @@ static PyObject *pyxc_domain_getinfo(XcObject *self, &first_dom, &max_doms) ) return NULL; =20 - info =3D calloc(max_doms, sizeof(xc_dominfo_t)); + info =3D calloc(max_doms, sizeof(*info)); if (info =3D=3D NULL) return PyErr_NoMemory(); =20 - nr_doms =3D xc_domain_getinfo(self->xc_handle, first_dom, max_doms, in= fo); + nr_doms =3D xc_domain_getinfolist(self->xc_handle, first_dom, max_doms= , info); =20 if (nr_doms < 0) { @@ -368,21 +368,21 @@ static PyObject *pyxc_domain_getinfo(XcObject *self, info_dict =3D Py_BuildValue( "{s:i,s:i,s:i,s:i,s:i,s:i,s:i,s:i,s:i,s:i" ",s:L,s:L,s:L,s:i,s:i,s:i}", - "domid", (int)info[i].domid, + "domid", (int)info[i].domain, "online_vcpus", info[i].nr_online_vcpus, "max_vcpu_id", info[i].max_vcpu_id, - "hvm", info[i].hvm, - "dying", info[i].dying, - "crashed", info[i].crashed, - "shutdown", info[i].shutdown, - "paused", info[i].paused, - "blocked", info[i].blocked, - "running", info[i].running, - "mem_kb", (long long)info[i].nr_pages*(XC_PAGE_SIZE/1= 024), + "hvm", !!(info[i].flags & XEN_DOMINF_hvm_guest), + "dying", !!(info[i].flags & XEN_DOMINF_dying), + "crashed", dominfo_shutdown_with(&info[i], SHUTDOWN_cr= ash), + "shutdown", !!(info[i].flags & XEN_DOMINF_shutdown), + "paused", !!(info[i].flags & XEN_DOMINF_paused), + "blocked", !!(info[i].flags & XEN_DOMINF_blocked), + "running", !!(info[i].flags & XEN_DOMINF_running), + "mem_kb", (long long)info[i].tot_pages*(XC_PAGE_SIZE/= 1024), "cpu_time", (long long)info[i].cpu_time, - "maxmem_kb", (long long)info[i].max_memkb, + "maxmem_kb", (long long)(info[i].max_pages << (XC_PAGE_S= HIFT - 10)), "ssidref", (int)info[i].ssidref, - "shutdown_reason", info[i].shutdown_reason, + "shutdown_reason", dominfo_shutdown_reason(&info[i]), "cpupool", (int)info[i].cpupool); pyhandle =3D PyList_New(sizeof(xen_domain_handle_t)); if ( (pyhandle =3D=3D NULL) || (info_dict =3D=3D NULL) ) diff --git a/tools/xenmon/xenbaked.c b/tools/xenmon/xenbaked.c index 4dddbd20e2..8632b10ea4 100644 --- a/tools/xenmon/xenbaked.c +++ b/tools/xenmon/xenbaked.c @@ -775,7 +775,7 @@ static void global_init_domain(int domid, int idx) static int indexof(int domid) { int idx; - xc_dominfo_t dominfo[NDOMAINS]; + xc_domaininfo_t dominfo[NDOMAINS]; xc_interface *xc_handle; int ndomains; =20 @@ -797,7 +797,7 @@ static int indexof(int domid) =20 // call domaininfo hypercall to try and garbage collect unused entries xc_handle =3D xc_interface_open(0,0,0); - ndomains =3D xc_domain_getinfo(xc_handle, 0, NDOMAINS, dominfo); + ndomains =3D xc_domain_getinfolist(xc_handle, 0, NDOMAINS, dominfo); xc_interface_close(xc_handle); =20 // for each domain in our data, look for it in the system dominfo stru= cture @@ -808,7 +808,7 @@ static int indexof(int domid) int jdx; =20 for (jdx=3D0; jdx (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1682678529253360.0071336868531; Fri, 28 Apr 2023 03:42:09 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.527252.819664 (Exim 4.92) (envelope-from ) id 1psLXo-0002fj-6B; Fri, 28 Apr 2023 10:41:40 +0000 Received: by outflank-mailman (output) from mailman id 527252.819664; Fri, 28 Apr 2023 10:41:40 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1psLXo-0002fc-3S; Fri, 28 Apr 2023 10:41:40 +0000 Received: by outflank-mailman (input) for mailman id 527252; Fri, 28 Apr 2023 10:41:38 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1psLXm-0002Ac-E9 for xen-devel@lists.xenproject.org; Fri, 28 Apr 2023 10:41:38 +0000 Received: from mail-wm1-x32d.google.com (mail-wm1-x32d.google.com [2a00:1450:4864:20::32d]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 40cc4b21-e5b1-11ed-b224-6b7b168915f2; Fri, 28 Apr 2023 12:41:37 +0200 (CEST) Received: by mail-wm1-x32d.google.com with SMTP id 5b1f17b1804b1-3f195b164c4so54569655e9.1 for ; Fri, 28 Apr 2023 03:41:37 -0700 (PDT) Received: from localhost.localdomain (default-46-102-197-194.interdsl.co.uk. [46.102.197.194]) by smtp.gmail.com with ESMTPSA id k6-20020a5d5246000000b002e71156b0fcsm20930378wrc.6.2023.04.28.03.41.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Apr 2023 03:41:35 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 40cc4b21-e5b1-11ed-b224-6b7b168915f2 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cloud.com; s=cloud; t=1682678497; x=1685270497; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=GjNbfk0xALFvPg/Q2nqnzUi1rQe3ybCNF8EPFcCfhsg=; b=doXKRnIfGtk8X1UsxlUlwUs3hgezFypzhgo49lzUFmiP+ZMYZMkyUe54ma48a0dfFM 7sIZhmeAs+d0n7tHhabHuQLdK1Vmu0+FDPJuGtuoDCDueM1mRNwcH/Xie1W0kkDru9v7 jZpqSfb6GMf4L325KbTUfsuDPledE0aHomcG4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682678497; x=1685270497; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=GjNbfk0xALFvPg/Q2nqnzUi1rQe3ybCNF8EPFcCfhsg=; b=LLr2kt+8+qj6aiJHK+Aw+lfLUmsPkakz1XdLnJSKh1Dnpruod5yDZwGLFfegB0wgr0 FLyFIrL1OIWa0m9y5/odSWy92HEB3mosfmOF73jiIATVvikf6uoQ5QFIbgflNbHmV1R4 38NPZyBWkujhh+IYbJ/k2tRYGdIWEFTPSc23ytprkS9/gv6rrUx62VwVCxhUNn6YCMNG dIgOkGFAoktLZOhDEw1AJEpbcloDL9rNdwdhfoR2U7ndnc9TSMPBatri9uSu1mBMIo8J +/EFou8q/bvFma6fMS6zoT3+hX0VQYA7SH+H8+zA4e39pOiQ2wml4gRiTj0YRoOukUCA 1lSA== X-Gm-Message-State: AC+VfDyF0+3pVPg6cjGMFIuTr9tEBJR4Fg5+d0AAwtMSvlT/z2gIHvJ6 DXnQQ4n30CsacHdG2APNL84BgKZdOcNTxt0cyHQ= X-Google-Smtp-Source: ACHHUZ5zmHCUIvKa4yobrBKZfiTv65xktyXqTmuejeBm+sYxeGHsM6c+JXMfu169jy8KdVYhontodg== X-Received: by 2002:adf:dccc:0:b0:302:2d79:9f6e with SMTP id x12-20020adfdccc000000b003022d799f6emr2773957wrm.60.1682678496749; Fri, 28 Apr 2023 03:41:36 -0700 (PDT) From: Alejandro Vallejo To: Xen-devel Cc: Alejandro Vallejo , Andrew Cooper , Wei Liu , Anthony PERARD , Juergen Gross Subject: [PATCH v2 2/7] tools: Create xc_domain_getinfo_single() Date: Fri, 28 Apr 2023 11:41:19 +0100 Message-Id: <20230428104124.1044-3-alejandro.vallejo@cloud.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230428104124.1044-1-alejandro.vallejo@cloud.com> References: <20230428104124.1044-1-alejandro.vallejo@cloud.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @cloud.com) X-ZM-MESSAGEID: 1682678531128100001 Content-Type: text/plain; charset="utf-8" It's a stricter version of xc_domain_getinfo() where the returned domid always matches the requested domid or the error code shows an error instead. A few patches ahead usages of xc_domain_getinfo() are removed until only xc_domain_getinfo_single() and xc_domain_getinfolist() remain. Signed-off-by: Alejandro Vallejo Reviewed-by: Andrew Cooper --- Cc: Andrew Cooper Cc: Wei Liu Cc: Anthony PERARD Cc: Juergen Gross --- tools/include/xenctrl.h | 16 ++++++++++++++++ tools/libs/ctrl/xc_domain.c | 23 +++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/tools/include/xenctrl.h b/tools/include/xenctrl.h index f5bc7f58b6..685df1c7ba 100644 --- a/tools/include/xenctrl.h +++ b/tools/include/xenctrl.h @@ -703,6 +703,22 @@ int xc_vcpu_getaffinity(xc_interface *xch, int xc_domain_get_guest_width(xc_interface *xch, uint32_t domid, unsigned int *guest_width); =20 +/** + * This function will return information about a single domain. It looks + * up the domain by the provided domid and succeeds if the domain exists + * and is accesible by the current domain, or fails otherwise. A buffer + * may optionally passed on the `info` parameter in order to retrieve + * information about the domain. The buffer is ignored if NULL is + * passed instead. + * + * @parm xch a handle to an open hypervisor interface + * @parm domid domid to lookup + * @parm info Optional domain information buffer (may be NULL) + * @return 0 on success, otherwise the call failed and info is undefined + */ +int xc_domain_getinfo_single(xc_interface *xch, + uint32_t domid, + xc_domaininfo_t *info); =20 /** * This function will return information about one or more domains. It is diff --git a/tools/libs/ctrl/xc_domain.c b/tools/libs/ctrl/xc_domain.c index e939d07157..6b11775d4c 100644 --- a/tools/libs/ctrl/xc_domain.c +++ b/tools/libs/ctrl/xc_domain.c @@ -345,6 +345,29 @@ int xc_dom_vuart_init(xc_interface *xch, return rc; } =20 +int xc_domain_getinfo_single(xc_interface *xch, + uint32_t domid, + xc_domaininfo_t *info) +{ + struct xen_domctl domctl =3D { + .cmd =3D XEN_DOMCTL_getdomaininfo, + .domain =3D domid, + }; + + if ( do_domctl(xch, &domctl) < 0 ) + return -1; + + if ( domctl.u.getdomaininfo.domain !=3D domid ) { + errno =3D ESRCH; + return -1; + } + + if ( info ) + *info =3D domctl.u.getdomaininfo; + + return 0; +} + int xc_domain_getinfo(xc_interface *xch, uint32_t first_domid, unsigned int max_doms, --=20 2.34.1 From nobody Thu May 16 00:07:02 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=cloud.com ARC-Seal: i=1; a=rsa-sha256; t=1682678537; cv=none; d=zohomail.com; s=zohoarc; b=PC+BI3mOlPTvDqLFaN/hCeMb9GiX+eQZh+yofXoQMBPVhbt3rSw8lYce/njuhG62r0o3Vihv8uFYd7jl4bN5vc7ZtKyqrsKAYcyf95hzd9wULTyZZO2c2d+WSroql4Q3ZD+SA8KS0mTRxG98kOyG4zfNopMsPOa+GSwbXYnfE4k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1682678537; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ZUhXin/OPZZXRGBUuqUwhDZyM+uQc0DAORSurlrGu/k=; b=hrL1NOH/7ttsfAh2fimwPvzInKuM7fO8JP59jpEcZd29tWEL9HCsECNYw+ehbRjMj3fuDcLDd28hiOT12cXFKpIoA4d06xGfukpgfGHyUGMYcYu9X1AW6+aaEDc/lDpwOFCYwjLsP+uExyUKUPkrh0VC3uDtzK6m0i1NV1Ozf3s= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 168267853762927.700591543732344; Fri, 28 Apr 2023 03:42:17 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.527253.819675 (Exim 4.92) (envelope-from ) id 1psLXq-0002xG-Kh; Fri, 28 Apr 2023 10:41:42 +0000 Received: by outflank-mailman (output) from mailman id 527253.819675; Fri, 28 Apr 2023 10:41:42 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1psLXq-0002x7-HU; Fri, 28 Apr 2023 10:41:42 +0000 Received: by outflank-mailman (input) for mailman id 527253; Fri, 28 Apr 2023 10:41:41 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1psLXp-0002tZ-Di for xen-devel@lists.xenproject.org; Fri, 28 Apr 2023 10:41:41 +0000 Received: from mail-wr1-x430.google.com (mail-wr1-x430.google.com [2a00:1450:4864:20::430]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 41b60cc2-e5b1-11ed-8611-37d641c3527e; Fri, 28 Apr 2023 12:41:39 +0200 (CEST) Received: by mail-wr1-x430.google.com with SMTP id ffacd0b85a97d-2fc3f1d6f8cso6128360f8f.3 for ; Fri, 28 Apr 2023 03:41:39 -0700 (PDT) Received: from localhost.localdomain (default-46-102-197-194.interdsl.co.uk. [46.102.197.194]) by smtp.gmail.com with ESMTPSA id k6-20020a5d5246000000b002e71156b0fcsm20930378wrc.6.2023.04.28.03.41.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Apr 2023 03:41:37 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 41b60cc2-e5b1-11ed-8611-37d641c3527e DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cloud.com; s=cloud; t=1682678498; x=1685270498; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ZUhXin/OPZZXRGBUuqUwhDZyM+uQc0DAORSurlrGu/k=; b=DbzyUqqc6Cw2R8dr9vtDR53PFmBj/RuOITN0eOZONHdDlyEjXuN8SgfQV9y3x3WQUd Gx+j2mLhyNZRtRgHwB6UDFDSN9ROX1Kr/3PmRwwCts2TXhztfqeGuzzrBOMJh0iBplqA A6nM4qi7FXDYzCR+VP6cewiBdvF9NK0xzzCGA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682678498; x=1685270498; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ZUhXin/OPZZXRGBUuqUwhDZyM+uQc0DAORSurlrGu/k=; b=WhQpPhuqU+k7k3ehiQK8YNZqE1e/aK0If0pfgQ4WiK4pDPUAcKKtZ6C8fg65ukd9KH 6le6o6jnhIoNOn7APhMSCqE5wBOzwiJJih6Ss9BYuK7xceb35F5oj1HA2z9PXsJ7nSdC ev5Jo/aLsWkESGcKGz64BNzN9BpYyaq4j+MlDY9QEXR6zDYBoRI8VYbMZkBOMYVCNsXs 47FuGH41meOYxXh+LR8U80upKFpS0xMIP4qM69s4u68mBB1W/x+gjAwpNKA5N5/CtNe7 WBwkY+YLOqRVlvBbm1GWmFHBUojlHnLLr/g87mc758SPgrfe/PX3HcptxKzoHvjbQr8f vEFw== X-Gm-Message-State: AC+VfDxJ5QSMRnS8k87rHdH/rB1uPSa+DtVhwV0vzV+OlsuYqwZiS4UY 1DIW2wl4W80TpYtHiQG+Rcf1YwhdfVtGGT39f20= X-Google-Smtp-Source: ACHHUZ4zH2UeGBP+lfx0B2dTM3GHzvvs90ipnwa4Jzx0cFPfM1bp7lgtg0zeJbuzU+pqxW/QVhNW7Q== X-Received: by 2002:a5d:49c3:0:b0:2d8:47c7:7b52 with SMTP id t3-20020a5d49c3000000b002d847c77b52mr3576746wrs.9.1682678498391; Fri, 28 Apr 2023 03:41:38 -0700 (PDT) From: Alejandro Vallejo To: Xen-devel Cc: Alejandro Vallejo , Andrew Cooper , Wei Liu , Anthony PERARD Subject: [PATCH v2 3/7] tools: Refactor console/io.c to avoid using xc_domain_getinfo() Date: Fri, 28 Apr 2023 11:41:20 +0100 Message-Id: <20230428104124.1044-4-alejandro.vallejo@cloud.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230428104124.1044-1-alejandro.vallejo@cloud.com> References: <20230428104124.1044-1-alejandro.vallejo@cloud.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @cloud.com) X-ZM-MESSAGEID: 1682678539043100005 Content-Type: text/plain; charset="utf-8" It has 2 avoidable occurences * Check whether a domain is valid, which can be done faster with xc_domain_getinfo_single() * Domain discovery, which can be done much faster with the sysctl interface through xc_domain_getinfolist(). Signed-off-by: Alejandro Vallejo --- Cc: Andrew Cooper Cc: Wei Liu Cc: Anthony PERARD --- tools/console/daemon/io.c | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/tools/console/daemon/io.c b/tools/console/daemon/io.c index 6bfe96715b..c5972cb721 100644 --- a/tools/console/daemon/io.c +++ b/tools/console/daemon/io.c @@ -405,13 +405,7 @@ static void buffer_advance(struct buffer *buffer, size= _t len) =20 static bool domain_is_valid(int domid) { - bool ret; - xc_dominfo_t info; - - ret =3D (xc_domain_getinfo(xc, domid, 1, &info) =3D=3D 1 && - info.domid =3D=3D domid); - =09 - return ret; + return xc_domain_getinfo_single(xc, domid, NULL) =3D=3D 0; } =20 static int create_hv_log(void) @@ -961,24 +955,33 @@ static unsigned enum_pass =3D 0; =20 static void enum_domains(void) { - int domid =3D 1; - xc_dominfo_t dominfo; + /** + * Memory set aside to query the state of every + * domain in the hypervisor in a single hypercall. + */ + static xc_domaininfo_t domaininfo[DOMID_FIRST_RESERVED - 1]; + + int ret; struct domain *dom; =20 enum_pass++; =20 - while (xc_domain_getinfo(xc, domid, 1, &dominfo) =3D=3D 1) { - dom =3D lookup_domain(dominfo.domid); - if (dominfo.dying) { + /* Fetch info on every valid domain except for dom0 */ + ret =3D xc_domain_getinfolist(xc, 1, DOMID_FIRST_RESERVED - 1, domaininfo= ); + if (ret < 0) + return; + + for (size_t i =3D 0; i < ret; i++) { + dom =3D lookup_domain(domaininfo[i].domain); + if (domaininfo[i].flags & XEN_DOMINF_dying) { if (dom) shutdown_domain(dom); } else { if (dom =3D=3D NULL) - dom =3D create_domain(dominfo.domid); + dom =3D create_domain(domaininfo[i].domain); } if (dom) dom->last_seen =3D enum_pass; - domid =3D dominfo.domid + 1; } } =20 --=20 2.34.1 From nobody Thu May 16 00:07:02 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=cloud.com ARC-Seal: i=1; a=rsa-sha256; t=1682678535; cv=none; d=zohomail.com; s=zohoarc; b=MGyfd4ulM2NHQiVLZMbjM8Pa2JzFw2ikVVAtO+G+PSp0gcC9Cp4C1f/yn+yLeBzzsUAX21iK9wXXk30eaQZvM8De3qM3PpXE1btUAqJb1Ww3WbpepD00VbmUyZxkQfkFbG4m2oFxl2yTqSXhlRpLciOlOJrdz8dRNmUlKGV4B98= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1682678535; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=lOzH/Me/kjor0auj5RRaJFlmWnO3/lLM0su8aCzstvk=; b=ZVqS3vXBnuMuN+b87QQOY8BXUlRkBivZmdqfyeHymIF6znv5GeuXjtSpzCPR9yoR5Y9My36G16xm7gqZEG4Q4UR56gSGJG584OM2BdC84D3VreFqsv0PXaVC2UDzIssKydqqJFICHaFPTqc+w+iXqjK/0RNYV0RHNIPXfmGf6wE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1682678535544232.37935807734095; Fri, 28 Apr 2023 03:42:15 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.527254.819685 (Exim 4.92) (envelope-from ) id 1psLXr-0003EA-W9; Fri, 28 Apr 2023 10:41:43 +0000 Received: by outflank-mailman (output) from mailman id 527254.819685; Fri, 28 Apr 2023 10:41:43 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1psLXr-0003Dz-RK; Fri, 28 Apr 2023 10:41:43 +0000 Received: by outflank-mailman (input) for mailman id 527254; Fri, 28 Apr 2023 10:41:42 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1psLXq-0002tZ-Jf for xen-devel@lists.xenproject.org; Fri, 28 Apr 2023 10:41:42 +0000 Received: from mail-wm1-x32e.google.com (mail-wm1-x32e.google.com [2a00:1450:4864:20::32e]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 42a65b98-e5b1-11ed-8611-37d641c3527e; Fri, 28 Apr 2023 12:41:41 +0200 (CEST) Received: by mail-wm1-x32e.google.com with SMTP id 5b1f17b1804b1-3f19ab99540so72951255e9.2 for ; Fri, 28 Apr 2023 03:41:41 -0700 (PDT) Received: from localhost.localdomain (default-46-102-197-194.interdsl.co.uk. [46.102.197.194]) by smtp.gmail.com with ESMTPSA id k6-20020a5d5246000000b002e71156b0fcsm20930378wrc.6.2023.04.28.03.41.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Apr 2023 03:41:39 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 42a65b98-e5b1-11ed-8611-37d641c3527e DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cloud.com; s=cloud; t=1682678500; x=1685270500; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=lOzH/Me/kjor0auj5RRaJFlmWnO3/lLM0su8aCzstvk=; b=NHaNEcfqmhBB0K7GuSC9Ddm33qSow+5NVzw8VxsQR8/bNACoaK60FKoMk/zqilpjUw DlUTFZHePTkE/J3qQtaXJXc8U3vWhWS/6eAIuVgT6P6a5bVghUv8buhL7e8Wguisqm3d sg6U4Kc/diktbkSax4XkwCzQN0DdCJuE+V5b8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682678500; x=1685270500; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=lOzH/Me/kjor0auj5RRaJFlmWnO3/lLM0su8aCzstvk=; b=b0SQkHBBJtBUk52f2BIgfTzYywU0PquHTBeWM0qetgZfWFpJ967Gtu2sehg6rNtgUs mzMDVzQQNPcHJn03iaKRAUkIkABDeOCBNBtbSH4wEDDBdGz02PSaNEI60Px4RxgC3cRM 4hi5MvgDUi+Vw18c/tM7wOqPTrBCdYIDYutrHU0+K701GxSio5CsXJl/dtr6yG07+wXS 5Lyn8uXgCMuL3ZJU85CXM2N4GHEknHxB6fcPK3BJXY2G4igifs9TXGoXyrlhq9mC7ZG0 3j3JCfR6at0lqcErYKcULJgytl1BPSq85LVTKtGY/xQbpn0sc05m1v/Xq4gciJ3qltTu KvsA== X-Gm-Message-State: AC+VfDzqGgM7T9BLbTHhzUUrd1HNLVVSe2pUiLu4bCozkkBrqTUkyBJ3 0GfU3k6pwnD2cgvUcwb9fJ3h5l5oyYXXIG15Rps= X-Google-Smtp-Source: ACHHUZ7T9It8+eIvsRC61MTZIGXGbVOGfPIJ8eeWPp+1eUO3RxQkCwYc4oL4qaOxLg5L5AMyeGJBIQ== X-Received: by 2002:a5d:58d2:0:b0:2f4:215a:98c5 with SMTP id o18-20020a5d58d2000000b002f4215a98c5mr3211610wrf.70.1682678500025; Fri, 28 Apr 2023 03:41:40 -0700 (PDT) From: Alejandro Vallejo To: Xen-devel Cc: Alejandro Vallejo , Andrew Cooper , Wei Liu , Juergen Gross Subject: [PATCH v2 4/7] tools: Make init-xenstore-domain use xc_domain_getinfolist() Date: Fri, 28 Apr 2023 11:41:21 +0100 Message-Id: <20230428104124.1044-5-alejandro.vallejo@cloud.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230428104124.1044-1-alejandro.vallejo@cloud.com> References: <20230428104124.1044-1-alejandro.vallejo@cloud.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @cloud.com) X-ZM-MESSAGEID: 1682678537107100003 Content-Type: text/plain; charset="utf-8" It currently relies on xc_domain_getinfo() returning the next available domain past "first_domid", which is a feature that will disappear in a future patch. Furthermore and while at it, make it so the hypercall tries to fetch inform= ation about more than one domain per hypercall so we can (hopefully) get away wit= h a single hypercall in a typical system. Signed-off-by: Alejandro Vallejo --- Cc: Andrew Cooper Cc: Wei Liu Cc: Juergen Gross --- tools/helpers/init-xenstore-domain.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/tools/helpers/init-xenstore-domain.c b/tools/helpers/init-xens= tore-domain.c index 0950ba7dc5..e210a2677e 100644 --- a/tools/helpers/init-xenstore-domain.c +++ b/tools/helpers/init-xenstore-domain.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include =20 @@ -322,16 +323,19 @@ err: =20 static int check_domain(xc_interface *xch) { - xc_dominfo_t info; + xc_domaininfo_t info[8]; uint32_t dom; int ret; =20 dom =3D 1; - while ( (ret =3D xc_domain_getinfo(xch, dom, 1, &info)) =3D=3D 1 ) + while ( (ret =3D xc_domain_getinfolist(xch, dom, ARRAY_SIZE(info), inf= o)) > 0 ) { - if ( info.xenstore ) - return 1; - dom =3D info.domid + 1; + for ( size_t i =3D 0; i < ret; i++ ) + { + if ( info[i].flags & XEN_DOMINF_xs_domain ) + return 1; + } + dom =3D info[ret - 1].domain + 1; } if ( ret < 0 && errno !=3D ESRCH ) { --=20 2.34.1 From nobody Thu May 16 00:07:02 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=cloud.com ARC-Seal: i=1; a=rsa-sha256; t=1682678540; cv=none; d=zohomail.com; s=zohoarc; b=l2qTaj+gK8Akalg2DFxGqBxlEUvTji+zkmLDR1GV52n643Dl+5oPBGNMjq1FXlTYz030008yxNfMPpzPMR9/rEqkBdq0D7A5ugcsHBgJXmZC0tBXOC392hl/5CO1D2ItabVWmNEs7d4mR2hjtTO/1M7nVnkA6vPem+VlXmdthqE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1682678540; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=+HVWSE744l3OULZh4xSGmf/1IsRnzQuhvgEnpES8XSA=; b=MPLAcCyIPxzM6sjOMAM0JERG067wZksFPt9SRyyRL6hUdK2W90mT7E/ooAnv5qh585/XJPF9sIl/ruhsRkX2wDX7pv1ABGhVuGCF6OW1I7VQvrsV4tD8nHmMz0BLXLzaTdH5ehoMEgf1kcRoueB9Ivd+yVP2maU+eN3Az3nxdGI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1682678540788252.35507015939334; Fri, 28 Apr 2023 03:42:20 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.527255.819696 (Exim 4.92) (envelope-from ) id 1psLXt-0003VE-94; Fri, 28 Apr 2023 10:41:45 +0000 Received: by outflank-mailman (output) from mailman id 527255.819696; Fri, 28 Apr 2023 10:41:45 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1psLXt-0003V1-3q; Fri, 28 Apr 2023 10:41:45 +0000 Received: by outflank-mailman (input) for mailman id 527255; Fri, 28 Apr 2023 10:41:43 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1psLXr-0002Ac-GN for xen-devel@lists.xenproject.org; Fri, 28 Apr 2023 10:41:43 +0000 Received: from mail-wr1-x42a.google.com (mail-wr1-x42a.google.com [2a00:1450:4864:20::42a]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 43bd335a-e5b1-11ed-b224-6b7b168915f2; Fri, 28 Apr 2023 12:41:42 +0200 (CEST) Received: by mail-wr1-x42a.google.com with SMTP id ffacd0b85a97d-3010889c6ebso5961855f8f.2 for ; Fri, 28 Apr 2023 03:41:42 -0700 (PDT) Received: from localhost.localdomain (default-46-102-197-194.interdsl.co.uk. [46.102.197.194]) by smtp.gmail.com with ESMTPSA id k6-20020a5d5246000000b002e71156b0fcsm20930378wrc.6.2023.04.28.03.41.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Apr 2023 03:41:40 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 43bd335a-e5b1-11ed-b224-6b7b168915f2 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cloud.com; s=cloud; t=1682678501; x=1685270501; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=+HVWSE744l3OULZh4xSGmf/1IsRnzQuhvgEnpES8XSA=; b=VvNQ0dal8cGrhAqkRjUQvIbeMt5it4j2BZcrWYsk7wVhfIELfqIdSPro+LY4OnhPgx PQ+4akxOW9Ks7zKvxEJx/YGdnvyX58FVNARVvurBA88DRgdwOybD3kMnnzQ8raD0tE1/ 3gvcwRyHPhuBd5KP7GSoy5vPDTB75jFg+PqfY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682678501; x=1685270501; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=+HVWSE744l3OULZh4xSGmf/1IsRnzQuhvgEnpES8XSA=; b=SvePO8iJCnRD4eovakbs2F566pSp3Pcn0oMz4XpCeTUX8oJ4cEtuTzRuFxPBQCTNrM pavEeSZc27o1e+Ipd85cxefIrwwk5nd/LzVGBOONoU8Q4u28GFly36kT6bgEVBex0Y2F FE5OIRmoaiC+E4TRdF2PqG8zMRRAUMTN7E3qXXIsEqTII+rudcmCeOwQKrPmzai5eq3+ OAx8HW6wzZEWpeTdETxU59E+HH3kuOn7bDsvdbyDtaQuWJLckCLYdWsHcj40H51yV6DV rCKQ+Eqgi1hhoCjz0q0VO4Lp2qSxVTwlM6nqmZfaBrQJRf7vDybz77VOzu83OXi76cF7 +0ng== X-Gm-Message-State: AC+VfDweMLetR2W/qScM86FFr2TY+cXHq35rfo5zXjiAt4XZkG4qR6f9 aOUvmpWj5qOx4tXHJHMoYCmS/xFRIrfWHOapu0s= X-Google-Smtp-Source: ACHHUZ79L7YIHLjdQZubJbqtXhl3bN8DMD7+its5fbVq8tcieC29FXvNjK5bWE+tsktvZUY2dZeLmA== X-Received: by 2002:adf:f583:0:b0:2ce:a30d:f764 with SMTP id f3-20020adff583000000b002cea30df764mr3347215wro.21.1682678501700; Fri, 28 Apr 2023 03:41:41 -0700 (PDT) From: Alejandro Vallejo To: Xen-devel Cc: Alejandro Vallejo , Andrew Cooper , Wei Liu , Anthony PERARD , Juergen Gross Subject: [PATCH v2 5/7] tools: Modify single-domid callers of xc_domain_getinfolist() Date: Fri, 28 Apr 2023 11:41:22 +0100 Message-Id: <20230428104124.1044-6-alejandro.vallejo@cloud.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230428104124.1044-1-alejandro.vallejo@cloud.com> References: <20230428104124.1044-1-alejandro.vallejo@cloud.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @cloud.com) X-ZM-MESSAGEID: 1682678541024100007 Content-Type: text/plain; charset="utf-8" xc_domain_getinfolist() internally relies on a sysctl that performs a linear search for the domids. Many callers of xc_domain_getinfolist() who require information about a precise domid are much better off calling xc_domain_getinfo_single() instead, that will use the getdomaininfo domctl instead and ensure the returned domid matches the requested one. The domtctl will find the domid faster too, because that uses hashed lists. Signed-off-by: Alejandro Vallejo Reviewed-by: Andrew Cooper --- Cc: Andrew Cooper Cc: Wei Liu Cc: Anthony PERARD Cc: Juergen Gross --- tools/libs/light/libxl_dom.c | 15 +++++---------- tools/libs/light/libxl_dom_suspend.c | 7 +------ tools/libs/light/libxl_domain.c | 13 +++++-------- tools/libs/light/libxl_mem.c | 4 ++-- tools/libs/light/libxl_sched.c | 12 ++++-------- tools/xenpaging/xenpaging.c | 10 +++++----- 6 files changed, 22 insertions(+), 39 deletions(-) diff --git a/tools/libs/light/libxl_dom.c b/tools/libs/light/libxl_dom.c index 25fb716084..bd5d823581 100644 --- a/tools/libs/light/libxl_dom.c +++ b/tools/libs/light/libxl_dom.c @@ -32,8 +32,8 @@ libxl_domain_type libxl__domain_type(libxl__gc *gc, uint3= 2_t domid) xc_domaininfo_t info; int ret; =20 - ret =3D xc_domain_getinfolist(ctx->xch, domid, 1, &info); - if (ret !=3D 1 || info.domain !=3D domid) { + ret =3D xc_domain_getinfo_single(ctx->xch, domid, &info); + if (ret < 0) { LOG(ERROR, "unable to get domain type for domid=3D%"PRIu32, domid); return LIBXL_DOMAIN_TYPE_INVALID; } @@ -70,15 +70,10 @@ int libxl__domain_cpupool(libxl__gc *gc, uint32_t domid) xc_domaininfo_t info; int ret; =20 - ret =3D xc_domain_getinfolist(CTX->xch, domid, 1, &info); - if (ret !=3D 1) + ret =3D xc_domain_getinfo_single(CTX->xch, domid, &info); + if (ret < 0) { - LOGE(ERROR, "getinfolist failed %d", ret); - return ERROR_FAIL; - } - if (info.domain !=3D domid) - { - LOGE(ERROR, "got info for dom%d, wanted dom%d\n", info.domain, dom= id); + LOGED(ERROR, domid, "get domaininfo failed: %d", ret); return ERROR_FAIL; } return info.cpupool; diff --git a/tools/libs/light/libxl_dom_suspend.c b/tools/libs/light/libxl_= dom_suspend.c index 4fa22bb739..6091a5f3f6 100644 --- a/tools/libs/light/libxl_dom_suspend.c +++ b/tools/libs/light/libxl_dom_suspend.c @@ -332,13 +332,8 @@ static void suspend_common_wait_guest_check(libxl__egc= *egc, /* Convenience aliases */ const uint32_t domid =3D dsps->domid; =20 - ret =3D xc_domain_getinfolist(CTX->xch, domid, 1, &info); + ret =3D xc_domain_getinfo_single(CTX->xch, domid, &info); if (ret < 0) { - LOGED(ERROR, domid, "unable to check for status of guest"); - goto err; - } - - if (!(ret =3D=3D 1 && info.domain =3D=3D domid)) { LOGED(ERROR, domid, "guest we were suspending has been destroyed"); goto err; } diff --git a/tools/libs/light/libxl_domain.c b/tools/libs/light/libxl_domai= n.c index 7f0986c185..9fa4091859 100644 --- a/tools/libs/light/libxl_domain.c +++ b/tools/libs/light/libxl_domain.c @@ -349,16 +349,12 @@ int libxl_domain_info(libxl_ctx *ctx, libxl_dominfo *= info_r, int ret; GC_INIT(ctx); =20 - ret =3D xc_domain_getinfolist(ctx->xch, domid, 1, &xcinfo); + ret =3D xc_domain_getinfo_single(ctx->xch, domid, &xcinfo); if (ret<0) { - LOGED(ERROR, domid, "Getting domain info list"); + LOGED(ERROR, domid, "Getting domain info: %d", ret); GC_FREE; return ERROR_FAIL; } - if (ret=3D=3D0 || xcinfo.domain !=3D domid) { - GC_FREE; - return ERROR_DOMAIN_NOTFOUND; - } =20 if (info_r) libxl__xcinfo2xlinfo(ctx, &xcinfo, info_r); @@ -1657,14 +1653,15 @@ int libxl__resolve_domid(libxl__gc *gc, const char = *name, uint32_t *domid) libxl_vcpuinfo *libxl_list_vcpu(libxl_ctx *ctx, uint32_t domid, int *nr_vcpus_out, int *nr_cpus_out) { + int rc; GC_INIT(ctx); libxl_vcpuinfo *ptr, *ret; xc_domaininfo_t domaininfo; xc_vcpuinfo_t vcpuinfo; unsigned int nr_vcpus; =20 - if (xc_domain_getinfolist(ctx->xch, domid, 1, &domaininfo) !=3D 1) { - LOGED(ERROR, domid, "Getting infolist"); + if ((rc =3D xc_domain_getinfo_single(ctx->xch, domid, &domaininfo)) < = 0) { + LOGED(ERROR, domid, "Getting dominfo: %d", rc); GC_FREE; return NULL; } diff --git a/tools/libs/light/libxl_mem.c b/tools/libs/light/libxl_mem.c index 92ec09f4cf..44e554adba 100644 --- a/tools/libs/light/libxl_mem.c +++ b/tools/libs/light/libxl_mem.c @@ -323,8 +323,8 @@ retry_transaction: libxl__xs_printf(gc, t, GCSPRINTF("%s/memory/target", dompath), "%"PRIu64, new_target_memkb); =20 - r =3D xc_domain_getinfolist(ctx->xch, domid, 1, &info); - if (r !=3D 1 || info.domain !=3D domid) { + r =3D xc_domain_getinfo_single(ctx->xch, domid, &info); + if (r < 0) { abort_transaction =3D 1; rc =3D ERROR_FAIL; goto out; diff --git a/tools/libs/light/libxl_sched.c b/tools/libs/light/libxl_sched.c index 7c53dc60e6..b8d0b9ccd7 100644 --- a/tools/libs/light/libxl_sched.c +++ b/tools/libs/light/libxl_sched.c @@ -219,13 +219,11 @@ static int sched_credit_domain_set(libxl__gc *gc, uin= t32_t domid, xc_domaininfo_t domaininfo; int rc; =20 - rc =3D xc_domain_getinfolist(CTX->xch, domid, 1, &domaininfo); + rc =3D xc_domain_getinfo_single(CTX->xch, domid, &domaininfo); if (rc < 0) { - LOGED(ERROR, domid, "Getting domain info list"); + LOGED(ERROR, domid, "Getting domain info: %d", rc); return ERROR_FAIL; } - if (rc !=3D 1 || domaininfo.domain !=3D domid) - return ERROR_INVAL; =20 rc =3D xc_sched_credit_domain_get(CTX->xch, domid, &sdom); if (rc !=3D 0) { @@ -426,13 +424,11 @@ static int sched_credit2_domain_set(libxl__gc *gc, ui= nt32_t domid, xc_domaininfo_t info; int rc; =20 - rc =3D xc_domain_getinfolist(CTX->xch, domid, 1, &info); + rc =3D xc_domain_getinfo_single(CTX->xch, domid, &info); if (rc < 0) { - LOGED(ERROR, domid, "Getting domain info"); + LOGED(ERROR, domid, "Getting domain info: %d", rc); return ERROR_FAIL; } - if (rc !=3D 1 || info.domain !=3D domid) - return ERROR_INVAL; =20 rc =3D xc_sched_credit2_domain_get(CTX->xch, domid, &sdom); if (rc !=3D 0) { diff --git a/tools/xenpaging/xenpaging.c b/tools/xenpaging/xenpaging.c index 6e5490315d..c7a9a82477 100644 --- a/tools/xenpaging/xenpaging.c +++ b/tools/xenpaging/xenpaging.c @@ -169,8 +169,8 @@ static int xenpaging_get_tot_pages(struct xenpaging *pa= ging) xc_domaininfo_t domain_info; int rc; =20 - rc =3D xc_domain_getinfolist(xch, paging->vm_event.domain_id, 1, &doma= in_info); - if ( rc !=3D 1 ) + rc =3D xc_domain_getinfo_single(xch, paging->vm_event.domain_id, &doma= in_info); + if ( rc < 0 ) { PERROR("Error getting domain info"); return -1; @@ -424,9 +424,9 @@ static struct xenpaging *xenpaging_init(int argc, char = *argv[]) /* Get max_pages from guest if not provided via cmdline */ if ( !paging->max_pages ) { - rc =3D xc_domain_getinfolist(xch, paging->vm_event.domain_id, 1, - &domain_info); - if ( rc !=3D 1 ) + rc =3D xc_domain_getinfo_single(xch, paging->vm_event.domain_id, + &domain_info); + if ( rc < 0 ) { PERROR("Error getting domain info"); goto err; --=20 2.34.1 From nobody Thu May 16 00:07:02 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=cloud.com ARC-Seal: i=1; a=rsa-sha256; t=1682678547; cv=none; d=zohomail.com; s=zohoarc; b=jvtzZFo6LVmXQtJaiLjaZEUIaxcv5xJeUpiS9Zr0+D0PQiFXYPzE9LlzK2EFWH+0LezTRyqen3EQdcEeLDuC6kvk5CHBHgsJpSgu8wlVFpmvcaYObAPe1HzCPbZy8N8IcAN+1JtEddME8Rv2436A5+5VD1O0oUtKiATYRrXFFIU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1682678547; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=v99j2hJbcGtMSmVaaEeDO1EFctsPfye93KMdokSPlDU=; b=fo+3fk0SOq5eJIHlGVBaG5vEQ8/of1TvMQFxJvokOaWlXVPqh5iAUN/d5MXQNJvdQLzu/b+EtGwbrY/ssfDcO+yKtNAzDPJ11htneSzjZ4jp/1VpU07MDPpwJoOMTWnkN+opALyiiAHlT4E65h64MmVDi6kvJ9lBZwrfywM4TOM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1682678547396584.5892162453736; Fri, 28 Apr 2023 03:42:27 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.527256.819705 (Exim 4.92) (envelope-from ) id 1psLXv-0003pI-Kl; Fri, 28 Apr 2023 10:41:47 +0000 Received: by outflank-mailman (output) from mailman id 527256.819705; Fri, 28 Apr 2023 10:41:47 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1psLXv-0003op-G0; Fri, 28 Apr 2023 10:41:47 +0000 Received: by outflank-mailman (input) for mailman id 527256; Fri, 28 Apr 2023 10:41:46 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1psLXu-0002Ac-Fu for xen-devel@lists.xenproject.org; Fri, 28 Apr 2023 10:41:46 +0000 Received: from mail-wr1-x432.google.com (mail-wr1-x432.google.com [2a00:1450:4864:20::432]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 44caa373-e5b1-11ed-b224-6b7b168915f2; Fri, 28 Apr 2023 12:41:44 +0200 (CEST) Received: by mail-wr1-x432.google.com with SMTP id ffacd0b85a97d-2f6401ce8f8so6071363f8f.3 for ; Fri, 28 Apr 2023 03:41:44 -0700 (PDT) Received: from localhost.localdomain (default-46-102-197-194.interdsl.co.uk. [46.102.197.194]) by smtp.gmail.com with ESMTPSA id k6-20020a5d5246000000b002e71156b0fcsm20930378wrc.6.2023.04.28.03.41.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Apr 2023 03:41:42 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 44caa373-e5b1-11ed-b224-6b7b168915f2 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cloud.com; s=cloud; t=1682678503; x=1685270503; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=v99j2hJbcGtMSmVaaEeDO1EFctsPfye93KMdokSPlDU=; b=HFN66pEadT5faiUtIODgVjwCcmmlhtYuk/4HyLfZe8yu84lfRKcDWCr4W+f6vBIZmD 3TM7zxhELR1DzmCQNFndfyyk4WDypjLrPFzIJ48F7nit/AuyTcINSMN3lvAaOjOEQVbT SawXpuh9MO+E9Oq/IvKikXtNhIBX6/jORR3aM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682678503; x=1685270503; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=v99j2hJbcGtMSmVaaEeDO1EFctsPfye93KMdokSPlDU=; b=RrCm+DRrs9IrKMvbseIDnUN7Vu4mMdMRPSREVtlLV6CTClOzEW9qFvtHWpSizh4wpw ylf2WksvtnL0+ohHm93JLk0NT/wZL60zEkUaWrcNhcBDQHjVqyJ8W4XuONIM97+0MiqO VTUcCTr8mBOvlUDRB3E0z/7Mp0I7EYkIOgvIjqfxvMyiWncgQU1/8VsrCRfLPOKqAWD+ tWQoxxaJHWN1sBwlcaEfNSTz3UhgfR5A/b2vswYd7YS5pjVdA+ySECoCepG8R8DzpHMi VvTbXOZcAFJVzBsI3Ob/wpIYE9eZzo5Gz+w2RCfVpVcGxAGkQkdNA8q7ohMLnjztKbBt t5hg== X-Gm-Message-State: AC+VfDzl8012h1GgXymz9a5VZN2WJB+u+zzgHM7DopYJF3PKktHAeixW /2pELxl4Vll9ctBVvMSCLDxAahIZsq4hjpiGitU= X-Google-Smtp-Source: ACHHUZ4xuZX66cWz9P2umlvA4np83H6+V06TE5gRnqrWzrvdttDZmJrZwirz3y1zGIs+lncsZKt9PQ== X-Received: by 2002:a5d:4b50:0:b0:2fb:703d:1915 with SMTP id w16-20020a5d4b50000000b002fb703d1915mr3484814wrs.43.1682678503288; Fri, 28 Apr 2023 03:41:43 -0700 (PDT) From: Alejandro Vallejo To: Xen-devel Cc: Alejandro Vallejo , Andrew Cooper , Wei Liu , Anthony PERARD , Tim Deegan , George Dunlap , Juergen Gross Subject: [PATCH v2 6/7] tools: Use new xc function for some xc_domain_getinfo() calls Date: Fri, 28 Apr 2023 11:41:23 +0100 Message-Id: <20230428104124.1044-7-alejandro.vallejo@cloud.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230428104124.1044-1-alejandro.vallejo@cloud.com> References: <20230428104124.1044-1-alejandro.vallejo@cloud.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @cloud.com) X-ZM-MESSAGEID: 1682678549436100001 Content-Type: text/plain; charset="utf-8" Move calls that require a information about a single precisely identified domain to the new xc_domain_getinfo_single(). Signed-off-by: Alejandro Vallejo --- Cc: Andrew Cooper Cc: Wei Liu Cc: Anthony PERARD Cc: Tim Deegan Cc: George Dunlap Cc: Juergen Gross --- tools/console/client/main.c | 7 +++-- tools/debugger/kdd/kdd-xen.c | 6 +++-- tools/libs/ctrl/xc_domain.c | 9 +++---- tools/libs/ctrl/xc_pagetab.c | 7 +++-- tools/libs/ctrl/xc_private.c | 7 +++-- tools/libs/ctrl/xc_private.h | 7 ++--- tools/libs/guest/xg_core.c | 23 +++++++---------- tools/libs/guest/xg_core.h | 6 ++--- tools/libs/guest/xg_core_arm.c | 10 ++++---- tools/libs/guest/xg_core_x86.c | 18 ++++++------- tools/libs/guest/xg_cpuid_x86.c | 34 ++++++++++++------------- tools/libs/guest/xg_dom_boot.c | 16 +++--------- tools/libs/guest/xg_domain.c | 8 +++--- tools/libs/guest/xg_offline_page.c | 12 ++++----- tools/libs/guest/xg_private.h | 1 + tools/libs/guest/xg_resume.c | 19 +++++++------- tools/libs/guest/xg_sr_common.h | 2 +- tools/libs/guest/xg_sr_restore.c | 17 +++++-------- tools/libs/guest/xg_sr_restore_x86_pv.c | 2 +- tools/libs/guest/xg_sr_save.c | 26 ++++++++----------- tools/libs/guest/xg_sr_save_x86_pv.c | 6 ++--- tools/libs/light/libxl_dom.c | 4 +-- tools/libs/light/libxl_domain.c | 4 +-- tools/libs/light/libxl_sched.c | 20 +++++++-------- tools/libs/light/libxl_x86_acpi.c | 4 +-- tools/misc/xen-hvmcrash.c | 6 ++--- tools/misc/xen-lowmemd.c | 6 ++--- tools/misc/xen-mfndump.c | 22 +++++++--------- tools/misc/xen-vmtrace.c | 6 ++--- tools/vchan/vchan-socket-proxy.c | 6 ++--- tools/xenstore/xenstored_domain.c | 15 +++++------ tools/xentrace/xenctx.c | 8 +++--- 32 files changed, 157 insertions(+), 187 deletions(-) diff --git a/tools/console/client/main.c b/tools/console/client/main.c index 1a6fa162f7..6775006488 100644 --- a/tools/console/client/main.c +++ b/tools/console/client/main.c @@ -408,17 +408,16 @@ int main(int argc, char **argv) if (dom_path =3D=3D NULL) err(errno, "xs_get_domain_path()"); if (type =3D=3D CONSOLE_INVAL) { - xc_dominfo_t xcinfo; + xc_domaininfo_t xcinfo; xc_interface *xc_handle =3D xc_interface_open(0,0,0); if (xc_handle =3D=3D NULL) err(errno, "Could not open xc interface"); - if ( (xc_domain_getinfo(xc_handle, domid, 1, &xcinfo) !=3D 1) || - (xcinfo.domid !=3D domid) ) { + if (xc_domain_getinfo_single(xc_handle, domid, &xcinfo) < 0) { xc_interface_close(xc_handle); err(errno, "Failed to get domain information"); } /* default to pv console for pv guests and serial for hvm guests */ - if (xcinfo.hvm) + if (xcinfo.flags & XEN_DOMINF_hvm_guest) type =3D CONSOLE_SERIAL; else type =3D CONSOLE_PV; diff --git a/tools/debugger/kdd/kdd-xen.c b/tools/debugger/kdd/kdd-xen.c index e78c9311c4..b1a96bf4e2 100644 --- a/tools/debugger/kdd/kdd-xen.c +++ b/tools/debugger/kdd/kdd-xen.c @@ -570,7 +570,7 @@ kdd_guest *kdd_guest_init(char *arg, FILE *log, int ver= bosity) kdd_guest *g =3D NULL; xc_interface *xch =3D NULL; uint32_t domid; - xc_dominfo_t info; + xc_domaininfo_t info; =20 g =3D calloc(1, sizeof (kdd_guest)); if (!g)=20 @@ -590,7 +590,9 @@ kdd_guest *kdd_guest_init(char *arg, FILE *log, int ver= bosity) g->domid =3D domid; =20 /* Check that the domain exists and is HVM */ - if (xc_domain_getinfo(xch, domid, 1, &info) !=3D 1 || !info.hvm) + if (xc_domain_getinfo_single(xch, domid, &info) < 0) + goto err; + if (!(info.flags & XEN_DOMINF_hvm_guest)) goto err; =20 snprintf(g->id, (sizeof g->id) - 1,=20 diff --git a/tools/libs/ctrl/xc_domain.c b/tools/libs/ctrl/xc_domain.c index 6b11775d4c..533e3c1314 100644 --- a/tools/libs/ctrl/xc_domain.c +++ b/tools/libs/ctrl/xc_domain.c @@ -1959,15 +1959,14 @@ int xc_domain_memory_mapping( uint32_t add_mapping) { DECLARE_DOMCTL; - xc_dominfo_t info; + xc_domaininfo_t info; int ret =3D 0, rc; unsigned long done =3D 0, nr, max_batch_sz; =20 - if ( xc_domain_getinfo(xch, domid, 1, &info) !=3D 1 || - info.domid !=3D domid ) + if ( xc_domain_getinfo_single(xch, domid, &info) < 0 ) { - PERROR("Could not get info for domain"); - return -EINVAL; + PERROR("Could not get info for dom%u", domid); + return -1; } if ( !xc_core_arch_auto_translated_physmap(&info) ) return 0; diff --git a/tools/libs/ctrl/xc_pagetab.c b/tools/libs/ctrl/xc_pagetab.c index db25c20247..d9f886633a 100644 --- a/tools/libs/ctrl/xc_pagetab.c +++ b/tools/libs/ctrl/xc_pagetab.c @@ -29,17 +29,16 @@ unsigned long xc_translate_foreign_address(xc_interface *xch, uint32_t dom, int vcpu, unsigned long long vi= rt) { - xc_dominfo_t dominfo; + xc_domaininfo_t dominfo; uint64_t paddr, mask, pte =3D 0; int size, level, pt_levels =3D 2; void *map; =20 - if (xc_domain_getinfo(xch, dom, 1, &dominfo) !=3D 1=20 - || dominfo.domid !=3D dom) + if (xc_domain_getinfo_single(xch, dom, &dominfo) < 0) return 0; =20 /* What kind of paging are we dealing with? */ - if (dominfo.hvm) { + if (dominfo.flags & XEN_DOMINF_hvm_guest) { struct hvm_hw_cpu ctx; if (xc_domain_hvm_getcontext_partial(xch, dom, HVM_SAVE_CODE(CPU), vcpu, diff --git a/tools/libs/ctrl/xc_private.c b/tools/libs/ctrl/xc_private.c index 2f99a7d2cf..8dcebad401 100644 --- a/tools/libs/ctrl/xc_private.c +++ b/tools/libs/ctrl/xc_private.c @@ -441,11 +441,10 @@ int xc_machphys_mfn_list(xc_interface *xch, =20 long xc_get_tot_pages(xc_interface *xch, uint32_t domid) { - xc_dominfo_t info; - if ( (xc_domain_getinfo(xch, domid, 1, &info) !=3D 1) || - (info.domid !=3D domid) ) + xc_domaininfo_t info; + if ( xc_domain_getinfo_single(xch, domid, &info) < 0 ) return -1; - return info.nr_pages; + return info.tot_pages; } =20 int xc_copy_to_domain_page(xc_interface *xch, diff --git a/tools/libs/ctrl/xc_private.h b/tools/libs/ctrl/xc_private.h index 80dc464c93..8faabaea67 100644 --- a/tools/libs/ctrl/xc_private.h +++ b/tools/libs/ctrl/xc_private.h @@ -16,6 +16,7 @@ #ifndef XC_PRIVATE_H #define XC_PRIVATE_H =20 +#include #include #include #include @@ -420,12 +421,12 @@ void *xc_vm_event_enable(xc_interface *xch, uint32_t = domain_id, int param, int do_dm_op(xc_interface *xch, uint32_t domid, unsigned int nr_bufs, ...); =20 #if defined (__i386__) || defined (__x86_64__) -static inline int xc_core_arch_auto_translated_physmap(const xc_dominfo_t = *info) +static inline int xc_core_arch_auto_translated_physmap(const xc_domaininfo= _t *info) { - return info->hvm; + return info->flags & XEN_DOMINF_hvm_guest; } #elif defined (__arm__) || defined(__aarch64__) -static inline int xc_core_arch_auto_translated_physmap(const xc_dominfo_t = *info) +static inline int xc_core_arch_auto_translated_physmap(const xc_domaininfo= _t *info) { return 1; } diff --git a/tools/libs/guest/xg_core.c b/tools/libs/guest/xg_core.c index c52f1161c1..f83436d6cb 100644 --- a/tools/libs/guest/xg_core.c +++ b/tools/libs/guest/xg_core.c @@ -349,7 +349,7 @@ elfnote_dump_none(xc_interface *xch, void *args, dumpco= re_rtn_t dump_rtn) static int elfnote_dump_core_header( xc_interface *xch, - void *args, dumpcore_rtn_t dump_rtn, const xc_dominfo_t *info, + void *args, dumpcore_rtn_t dump_rtn, const xc_domaininfo_t *info, int nr_vcpus, unsigned long nr_pages) { int sts; @@ -361,7 +361,8 @@ elfnote_dump_core_header( =20 elfnote.descsz =3D sizeof(header); elfnote.type =3D XEN_ELFNOTE_DUMPCORE_HEADER; - header.xch_magic =3D info->hvm ? XC_CORE_MAGIC_HVM : XC_CORE_MAGIC; + header.xch_magic =3D (info->flags & XEN_DOMINF_hvm_guest) ? XC_CORE_MA= GIC_HVM + : XC_CORE_MAGI= C; header.xch_nr_vcpus =3D nr_vcpus; header.xch_nr_pages =3D nr_pages; header.xch_page_size =3D PAGE_SIZE; @@ -423,7 +424,7 @@ xc_domain_dumpcore_via_callback(xc_interface *xch, void *args, dumpcore_rtn_t dump_rtn) { - xc_dominfo_t info; + xc_domaininfo_t info; shared_info_any_t *live_shinfo =3D NULL; struct domain_info_context _dinfo =3D {}; struct domain_info_context *dinfo =3D &_dinfo; @@ -468,15 +469,15 @@ xc_domain_dumpcore_via_callback(xc_interface *xch, goto out; } =20 - if ( xc_domain_getinfo(xch, domid, 1, &info) !=3D 1 ) + if ( xc_domain_getinfo_single(xch, domid, &info) < 0 ) { - PERROR("Could not get info for domain"); + PERROR("Could not get info for dom%u", domid); goto out; } /* Map the shared info frame */ live_shinfo =3D xc_map_foreign_range(xch, domid, PAGE_SIZE, PROT_READ, info.shared_info_frame); - if ( !live_shinfo && !info.hvm ) + if ( !live_shinfo && !(info.flags & XEN_DOMINF_hvm_guest) ) { PERROR("Couldn't map live_shinfo"); goto out; @@ -517,12 +518,6 @@ xc_domain_dumpcore_via_callback(xc_interface *xch, dinfo->guest_width =3D sizeof(unsigned long); } =20 - if ( domid !=3D info.domid ) - { - PERROR("Domain %d does not exist", domid); - goto out; - } - ctxt =3D calloc(sizeof(*ctxt), info.max_vcpu_id + 1); if ( !ctxt ) { @@ -560,9 +555,9 @@ xc_domain_dumpcore_via_callback(xc_interface *xch, * all the array... * * We don't want to use the total potential size of the memory map - * since that is usually much higher than info.nr_pages. + * since that is usually much higher than info.tot_pages. */ - nr_pages =3D info.nr_pages; + nr_pages =3D info.tot_pages; =20 if ( !auto_translated_physmap ) { diff --git a/tools/libs/guest/xg_core.h b/tools/libs/guest/xg_core.h index aaca9e0a8b..ff577dad31 100644 --- a/tools/libs/guest/xg_core.h +++ b/tools/libs/guest/xg_core.h @@ -134,15 +134,15 @@ typedef struct xc_core_memory_map xc_core_memory_map_= t; struct xc_core_arch_context; int xc_core_arch_memory_map_get(xc_interface *xch, struct xc_core_arch_context *arch_ctxt, - xc_dominfo_t *info, shared_info_any_t *liv= e_shinfo, + xc_domaininfo_t *info, shared_info_any_t *= live_shinfo, xc_core_memory_map_t **mapp, unsigned int *nr_entries); int xc_core_arch_map_p2m(xc_interface *xch, struct domain_info_context *di= nfo, - xc_dominfo_t *info, shared_info_any_t *live_shinf= o, + xc_domaininfo_t *info, shared_info_any_t *live_sh= info, xen_pfn_t **live_p2m); =20 int xc_core_arch_map_p2m_writable(xc_interface *xch, struct domain_info_co= ntext *dinfo, - xc_dominfo_t *info, + xc_domaininfo_t *info, shared_info_any_t *live_shinfo, xen_pfn_t **live_p2m); =20 diff --git a/tools/libs/guest/xg_core_arm.c b/tools/libs/guest/xg_core_arm.c index de30cf0c31..34276152da 100644 --- a/tools/libs/guest/xg_core_arm.c +++ b/tools/libs/guest/xg_core_arm.c @@ -33,14 +33,14 @@ xc_core_arch_gpfn_may_present(struct xc_core_arch_conte= xt *arch_ctxt, =20 int xc_core_arch_memory_map_get(xc_interface *xch, struct xc_core_arch_context= *unused, - xc_dominfo_t *info, shared_info_any_t *live_sh= info, + xc_domaininfo_t *info, shared_info_any_t *live= _shinfo, xc_core_memory_map_t **mapp, unsigned int *nr_entries) { xen_pfn_t p2m_size =3D 0; xc_core_memory_map_t *map; =20 - if ( xc_domain_nr_gpfns(xch, info->domid, &p2m_size) < 0 ) + if ( xc_domain_nr_gpfns(xch, info->domain, &p2m_size) < 0 ) return -1; =20 map =3D malloc(sizeof(*map)); @@ -59,7 +59,7 @@ xc_core_arch_memory_map_get(xc_interface *xch, struct xc_= core_arch_context *unus } =20 static int -xc_core_arch_map_p2m_rw(xc_interface *xch, struct domain_info_context *din= fo, xc_dominfo_t *info, +xc_core_arch_map_p2m_rw(xc_interface *xch, struct domain_info_context *din= fo, xc_domaininfo_t *info, shared_info_any_t *live_shinfo, xen_pfn_t **live_p= 2m, int rw) { errno =3D ENOSYS; @@ -67,14 +67,14 @@ xc_core_arch_map_p2m_rw(xc_interface *xch, struct domai= n_info_context *dinfo, xc } =20 int -xc_core_arch_map_p2m(xc_interface *xch, struct domain_info_context *dinfo,= xc_dominfo_t *info, +xc_core_arch_map_p2m(xc_interface *xch, struct domain_info_context *dinfo,= xc_domaininfo_t *info, shared_info_any_t *live_shinfo, xen_pfn_t **live_p= 2m) { return xc_core_arch_map_p2m_rw(xch, dinfo, info, live_shinfo, live_p2m= , 0); } =20 int -xc_core_arch_map_p2m_writable(xc_interface *xch, struct domain_info_contex= t *dinfo, xc_dominfo_t *info, +xc_core_arch_map_p2m_writable(xc_interface *xch, struct domain_info_contex= t *dinfo, xc_domaininfo_t *info, shared_info_any_t *live_shinfo, xen_pfn_t **= live_p2m) { return xc_core_arch_map_p2m_rw(xch, dinfo, info, live_shinfo, live_p2m= , 1); diff --git a/tools/libs/guest/xg_core_x86.c b/tools/libs/guest/xg_core_x86.c index c5e4542ccc..dbd3a440f7 100644 --- a/tools/libs/guest/xg_core_x86.c +++ b/tools/libs/guest/xg_core_x86.c @@ -49,14 +49,14 @@ xc_core_arch_gpfn_may_present(struct xc_core_arch_conte= xt *arch_ctxt, =20 int xc_core_arch_memory_map_get(xc_interface *xch, struct xc_core_arch_context= *unused, - xc_dominfo_t *info, shared_info_any_t *live_sh= info, + xc_domaininfo_t *info, shared_info_any_t *live= _shinfo, xc_core_memory_map_t **mapp, unsigned int *nr_entries) { xen_pfn_t p2m_size =3D 0; xc_core_memory_map_t *map; =20 - if ( xc_domain_nr_gpfns(xch, info->domid, &p2m_size) < 0 ) + if ( xc_domain_nr_gpfns(xch, info->domain, &p2m_size) < 0 ) return -1; =20 map =3D malloc(sizeof(*map)); @@ -314,24 +314,24 @@ xc_core_arch_map_p2m_tree_rw(xc_interface *xch, struc= t domain_info_context *dinf } =20 static int -xc_core_arch_map_p2m_rw(xc_interface *xch, struct domain_info_context *din= fo, xc_dominfo_t *info, +xc_core_arch_map_p2m_rw(xc_interface *xch, struct domain_info_context *din= fo, xc_domaininfo_t *info, shared_info_any_t *live_shinfo, xen_pfn_t **live_p= 2m, int rw) { xen_pfn_t *p2m_frame_list =3D NULL; uint64_t p2m_cr3; - uint32_t dom =3D info->domid; + uint32_t dom =3D info->domain; int ret =3D -1; int err; =20 - if ( xc_domain_nr_gpfns(xch, info->domid, &dinfo->p2m_size) < 0 ) + if ( xc_domain_nr_gpfns(xch, info->domain, &dinfo->p2m_size) < 0 ) { ERROR("Could not get maximum GPFN!"); goto out; } =20 - if ( dinfo->p2m_size < info->nr_pages ) + if ( dinfo->p2m_size < info->tot_pages ) { - ERROR("p2m_size < nr_pages -1 (%lx < %lx", dinfo->p2m_size, info->= nr_pages - 1); + ERROR("p2m_size < nr_pages -1 (%lx < %"PRIx64, dinfo->p2m_size, in= fo->tot_pages - 1); goto out; } =20 @@ -366,14 +366,14 @@ out: } =20 int -xc_core_arch_map_p2m(xc_interface *xch, struct domain_info_context *dinfo,= xc_dominfo_t *info, +xc_core_arch_map_p2m(xc_interface *xch, struct domain_info_context *dinfo,= xc_domaininfo_t *info, shared_info_any_t *live_shinfo, xen_pfn_t **live_p= 2m) { return xc_core_arch_map_p2m_rw(xch, dinfo, info, live_shinfo, live_p2m= , 0); } =20 int -xc_core_arch_map_p2m_writable(xc_interface *xch, struct domain_info_contex= t *dinfo, xc_dominfo_t *info, +xc_core_arch_map_p2m_writable(xc_interface *xch, struct domain_info_contex= t *dinfo, xc_domaininfo_t *info, shared_info_any_t *live_shinfo, xen_pfn_t **= live_p2m) { return xc_core_arch_map_p2m_rw(xch, dinfo, info, live_shinfo, live_p2m= , 1); diff --git a/tools/libs/guest/xg_cpuid_x86.c b/tools/libs/guest/xg_cpuid_x8= 6.c index bd16a87e48..1519b5d556 100644 --- a/tools/libs/guest/xg_cpuid_x86.c +++ b/tools/libs/guest/xg_cpuid_x86.c @@ -281,7 +281,8 @@ static int xc_cpuid_xend_policy( xc_interface *xch, uint32_t domid, const struct xc_xend_cpuid *xend) { int rc; - xc_dominfo_t di; + bool hvm; + xc_domaininfo_t di; unsigned int nr_leaves, nr_msrs; uint32_t err_leaf =3D -1, err_subleaf =3D -1, err_msr =3D -1; /* @@ -291,13 +292,12 @@ static int xc_cpuid_xend_policy( xen_cpuid_leaf_t *host =3D NULL, *def =3D NULL, *cur =3D NULL; unsigned int nr_host, nr_def, nr_cur; =20 - if ( xc_domain_getinfo(xch, domid, 1, &di) !=3D 1 || - di.domid !=3D domid ) + if ( (rc =3D xc_domain_getinfo_single(xch, domid, &di)) < 0 ) { - ERROR("Failed to obtain d%d info", domid); - rc =3D -ESRCH; + PERROR("Failed to obtain d%d info", domid); goto fail; } + hvm =3D di.flags & XEN_DOMINF_hvm_guest; =20 rc =3D xc_cpu_policy_get_size(xch, &nr_leaves, &nr_msrs); if ( rc ) @@ -330,12 +330,12 @@ static int xc_cpuid_xend_policy( /* Get the domain type's default policy. */ nr_msrs =3D 0; nr_def =3D nr_leaves; - rc =3D get_system_cpu_policy(xch, di.hvm ? XEN_SYSCTL_cpu_policy_hvm_d= efault + rc =3D get_system_cpu_policy(xch, hvm ? XEN_SYSCTL_cpu_policy_hvm_defa= ult : XEN_SYSCTL_cpu_policy_pv_defa= ult, &nr_def, def, &nr_msrs, NULL); if ( rc ) { - PERROR("Failed to obtain %s def policy", di.hvm ? "hvm" : "pv"); + PERROR("Failed to obtain %s def policy", hvm ? "hvm" : "pv"); rc =3D -errno; goto fail; } @@ -428,7 +428,8 @@ int xc_cpuid_apply_policy(xc_interface *xch, uint32_t d= omid, bool restore, const struct xc_xend_cpuid *xend) { int rc; - xc_dominfo_t di; + bool hvm; + xc_domaininfo_t di; unsigned int i, nr_leaves, nr_msrs; xen_cpuid_leaf_t *leaves =3D NULL; struct cpu_policy *p =3D NULL; @@ -436,13 +437,12 @@ int xc_cpuid_apply_policy(xc_interface *xch, uint32_t= domid, bool restore, uint32_t host_featureset[FEATURESET_NR_ENTRIES] =3D {}; uint32_t len =3D ARRAY_SIZE(host_featureset); =20 - if ( xc_domain_getinfo(xch, domid, 1, &di) !=3D 1 || - di.domid !=3D domid ) + if ( (rc =3D xc_domain_getinfo_single(xch, domid, &di)) < 0 ) { - ERROR("Failed to obtain d%d info", domid); - rc =3D -ESRCH; + PERROR("Failed to obtain d%d info", domid); goto out; } + hvm =3D di.flags & XEN_DOMINF_hvm_guest; =20 rc =3D xc_cpu_policy_get_size(xch, &nr_leaves, &nr_msrs); if ( rc ) @@ -475,12 +475,12 @@ int xc_cpuid_apply_policy(xc_interface *xch, uint32_t= domid, bool restore, =20 /* Get the domain's default policy. */ nr_msrs =3D 0; - rc =3D get_system_cpu_policy(xch, di.hvm ? XEN_SYSCTL_cpu_policy_hvm_d= efault + rc =3D get_system_cpu_policy(xch, hvm ? XEN_SYSCTL_cpu_policy_hvm_defa= ult : XEN_SYSCTL_cpu_policy_pv_defa= ult, &nr_leaves, leaves, &nr_msrs, NULL); if ( rc ) { - PERROR("Failed to obtain %s default policy", di.hvm ? "hvm" : "pv"= ); + PERROR("Failed to obtain %s default policy", hvm ? "hvm" : "pv"); rc =3D -errno; goto out; } @@ -514,7 +514,7 @@ int xc_cpuid_apply_policy(xc_interface *xch, uint32_t d= omid, bool restore, p->feat.hle =3D test_bit(X86_FEATURE_HLE, host_featureset); p->feat.rtm =3D test_bit(X86_FEATURE_RTM, host_featureset); =20 - if ( di.hvm ) + if ( hvm ) { p->feat.mpx =3D test_bit(X86_FEATURE_MPX, host_featureset); } @@ -571,7 +571,7 @@ int xc_cpuid_apply_policy(xc_interface *xch, uint32_t d= omid, bool restore, { p->extd.itsc =3D itsc; =20 - if ( di.hvm ) + if ( hvm ) { p->basic.pae =3D pae; p->basic.vmx =3D nested_virt; @@ -579,7 +579,7 @@ int xc_cpuid_apply_policy(xc_interface *xch, uint32_t d= omid, bool restore, } } =20 - if ( !di.hvm ) + if ( !hvm ) { /* * On hardware without CPUID Faulting, PV guests see real topology. diff --git a/tools/libs/guest/xg_dom_boot.c b/tools/libs/guest/xg_dom_boot.c index 263a3f4c85..1dea534bba 100644 --- a/tools/libs/guest/xg_dom_boot.c +++ b/tools/libs/guest/xg_dom_boot.c @@ -164,7 +164,7 @@ void *xc_dom_boot_domU_map(struct xc_dom_image *dom, xe= n_pfn_t pfn, =20 int xc_dom_boot_image(struct xc_dom_image *dom) { - xc_dominfo_t info; + xc_domaininfo_t info; int rc; =20 DOMPRINTF_CALLED(dom->xch); @@ -174,19 +174,11 @@ int xc_dom_boot_image(struct xc_dom_image *dom) return rc; =20 /* collect some info */ - rc =3D xc_domain_getinfo(dom->xch, dom->guest_domid, 1, &info); - if ( rc < 0 ) - { - xc_dom_panic(dom->xch, XC_INTERNAL_ERROR, - "%s: getdomaininfo failed (rc=3D%d)", __FUNCTION__, r= c); - return rc; - } - if ( rc =3D=3D 0 || info.domid !=3D dom->guest_domid ) + if ( xc_domain_getinfo_single(dom->xch, dom->guest_domid, &info) < 0 ) { xc_dom_panic(dom->xch, XC_INTERNAL_ERROR, - "%s: Huh? No domains found (nr_domains=3D%d) " - "or domid mismatch (%d !=3D %d)", __FUNCTION__, - rc, info.domid, dom->guest_domid); + "%s: getdomaininfo failed (errno=3D%d)", + __FUNCTION__, rc, errno); return -1; } dom->shared_info_mfn =3D info.shared_info_frame; diff --git a/tools/libs/guest/xg_domain.c b/tools/libs/guest/xg_domain.c index f0e7748449..198f6f904a 100644 --- a/tools/libs/guest/xg_domain.c +++ b/tools/libs/guest/xg_domain.c @@ -37,7 +37,7 @@ int xc_map_domain_meminfo(xc_interface *xch, uint32_t dom= id, { struct domain_info_context _di; =20 - xc_dominfo_t info; + xc_domaininfo_t info; shared_info_any_t *live_shinfo; xen_capabilities_info_t xen_caps =3D ""; unsigned long i; @@ -49,9 +49,9 @@ int xc_map_domain_meminfo(xc_interface *xch, uint32_t dom= id, return -1; } =20 - if ( xc_domain_getinfo(xch, domid, 1, &info) !=3D 1 ) + if ( xc_domain_getinfo_single(xch, domid, &info) < 0 ) { - PERROR("Could not get domain info"); + PERROR("Could not get dominfo for dom%u", domid); return -1; } =20 @@ -86,7 +86,7 @@ int xc_map_domain_meminfo(xc_interface *xch, uint32_t dom= id, info.shared_info_frame); if ( !live_shinfo ) { - PERROR("Could not map the shared info frame (MFN 0x%lx)", + PERROR("Could not map the shared info frame (MFN 0x%"PRIx64")", info.shared_info_frame); return -1; } diff --git a/tools/libs/guest/xg_offline_page.c b/tools/libs/guest/xg_offli= ne_page.c index ccd0299f0f..292f73a3e7 100644 --- a/tools/libs/guest/xg_offline_page.c +++ b/tools/libs/guest/xg_offline_page.c @@ -370,7 +370,7 @@ static int clear_pte(xc_interface *xch, uint32_t domid, */ =20 static int is_page_exchangable(xc_interface *xch, uint32_t domid, xen_pfn_= t mfn, - xc_dominfo_t *info) + xc_domaininfo_t *info) { uint32_t status; int rc; @@ -381,7 +381,7 @@ static int is_page_exchangable(xc_interface *xch, uint3= 2_t domid, xen_pfn_t mfn, DPRINTF("Dom0's page can't be LM"); return 0; } - if (info->hvm) + if (info->flags & XEN_DOMINF_hvm_guest) { DPRINTF("Currently we can only live change PV guest's page\n"); return 0; @@ -462,7 +462,7 @@ err0: /* The domain should be suspended when called here */ int xc_exchange_page(xc_interface *xch, uint32_t domid, xen_pfn_t mfn) { - xc_dominfo_t info; + xc_domaininfo_t info; struct xc_domain_meminfo minfo; struct xc_mmu *mmu =3D NULL; struct pte_backup old_ptes =3D {NULL, 0, 0}; @@ -477,13 +477,13 @@ int xc_exchange_page(xc_interface *xch, uint32_t domi= d, xen_pfn_t mfn) xen_pfn_t *m2p_table; unsigned long max_mfn; =20 - if ( xc_domain_getinfo(xch, domid, 1, &info) !=3D 1 ) + if ( xc_domain_getinfo_single(xch, domid, &info) < 0 ) { - ERROR("Could not get domain info"); + PERROR("Could not get domain info for dom%u", domid); return -1; } =20 - if (!info.shutdown || info.shutdown_reason !=3D SHUTDOWN_suspend) + if (!dominfo_shutdown_with(&info, SHUTDOWN_suspend)) { errno =3D EINVAL; ERROR("Can't exchange page unless domain is suspended\n"); diff --git a/tools/libs/guest/xg_private.h b/tools/libs/guest/xg_private.h index e729a8106c..d73947094f 100644 --- a/tools/libs/guest/xg_private.h +++ b/tools/libs/guest/xg_private.h @@ -16,6 +16,7 @@ #ifndef XG_PRIVATE_H #define XG_PRIVATE_H =20 +#include #include #include #include diff --git a/tools/libs/guest/xg_resume.c b/tools/libs/guest/xg_resume.c index 77e2451a3c..2965965e5b 100644 --- a/tools/libs/guest/xg_resume.c +++ b/tools/libs/guest/xg_resume.c @@ -26,28 +26,27 @@ static int modify_returncode(xc_interface *xch, uint32_t domid) { vcpu_guest_context_any_t ctxt; - xc_dominfo_t info; + xc_domaininfo_t info; xen_capabilities_info_t caps; struct domain_info_context _dinfo =3D {}; struct domain_info_context *dinfo =3D &_dinfo; int rc; =20 - if ( xc_domain_getinfo(xch, domid, 1, &info) !=3D 1 || - info.domid !=3D domid ) + if ( xc_domain_getinfo_single(xch, domid, &info) < 0 ) { - PERROR("Could not get domain info"); + PERROR("Could not get info for dom%u", domid); return -1; } =20 - if ( !info.shutdown || (info.shutdown_reason !=3D SHUTDOWN_suspend) ) + if ( !dominfo_shutdown_with(&info, SHUTDOWN_suspend) ) { ERROR("Dom %d not suspended: (shutdown %d, reason %d)", domid, - info.shutdown, info.shutdown_reason); + info.flags & XEN_DOMINF_shutdown, dominfo_shutdown_reason(&i= nfo)); errno =3D EINVAL; return -1; } =20 - if ( info.hvm ) + if ( info.flags & XEN_DOMINF_hvm_guest ) { /* HVM guests without PV drivers have no return code to modify. */ uint64_t irq =3D 0; @@ -133,7 +132,7 @@ static int xc_domain_resume_hvm(xc_interface *xch, uint= 32_t domid) static int xc_domain_resume_any(xc_interface *xch, uint32_t domid) { DECLARE_DOMCTL; - xc_dominfo_t info; + xc_domaininfo_t info; int i, rc =3D -1; #if defined(__i386__) || defined(__x86_64__) struct domain_info_context _dinfo =3D { .guest_width =3D 0, @@ -146,7 +145,7 @@ static int xc_domain_resume_any(xc_interface *xch, uint= 32_t domid) xen_pfn_t *p2m =3D NULL; #endif =20 - if ( xc_domain_getinfo(xch, domid, 1, &info) !=3D 1 ) + if ( xc_domain_getinfo_single(xch, domid, &info) < 0 ) { PERROR("Could not get domain info"); return rc; @@ -156,7 +155,7 @@ static int xc_domain_resume_any(xc_interface *xch, uint= 32_t domid) * (x86 only) Rewrite store_mfn and console_mfn back to MFN (from PFN). */ #if defined(__i386__) || defined(__x86_64__) - if ( info.hvm ) + if ( info.flags & XEN_DOMINF_hvm_guest ) return xc_domain_resume_hvm(xch, domid); =20 if ( xc_domain_get_guest_width(xch, domid, &dinfo->guest_width) !=3D 0= ) diff --git a/tools/libs/guest/xg_sr_common.h b/tools/libs/guest/xg_sr_commo= n.h index 36d45ef56f..2f058ee3a6 100644 --- a/tools/libs/guest/xg_sr_common.h +++ b/tools/libs/guest/xg_sr_common.h @@ -220,7 +220,7 @@ struct xc_sr_context /* Plain VM, or checkpoints over time. */ xc_stream_type_t stream_type; =20 - xc_dominfo_t dominfo; + xc_domaininfo_t dominfo; =20 union /* Common save or restore data. */ { diff --git a/tools/libs/guest/xg_sr_restore.c b/tools/libs/guest/xg_sr_rest= ore.c index 7314a24cf9..6767c9f5cc 100644 --- a/tools/libs/guest/xg_sr_restore.c +++ b/tools/libs/guest/xg_sr_restore.c @@ -852,6 +852,7 @@ int xc_domain_restore(xc_interface *xch, int io_fd, uin= t32_t dom, xc_stream_type_t stream_type, struct restore_callbacks *callbacks, int send_back_f= d) { + bool hvm; xen_pfn_t nr_pfns; struct xc_sr_context ctx =3D { .xch =3D xch, @@ -887,20 +888,15 @@ int xc_domain_restore(xc_interface *xch, int io_fd, u= int32_t dom, break; } =20 - if ( xc_domain_getinfo(xch, dom, 1, &ctx.dominfo) !=3D 1 ) + if ( xc_domain_getinfo_single(xch, dom, &ctx.dominfo) < 0 ) { - PERROR("Failed to get domain info"); - return -1; - } - - if ( ctx.dominfo.domid !=3D dom ) - { - ERROR("Domain %u does not exist", dom); + PERROR("Failed to get info for dom%u", dom); return -1; } =20 + hvm =3D ctx.dominfo.flags & XEN_DOMINF_hvm_guest; DPRINTF("fd %d, dom %u, hvm %u, stream_type %d", - io_fd, dom, ctx.dominfo.hvm, stream_type); + io_fd, dom, hvm, stream_type); =20 ctx.domid =3D dom; =20 @@ -914,8 +910,7 @@ int xc_domain_restore(xc_interface *xch, int io_fd, uin= t32_t dom, } =20 ctx.restore.p2m_size =3D nr_pfns; - ctx.restore.ops =3D ctx.dominfo.hvm - ? restore_ops_x86_hvm : restore_ops_x86_pv; + ctx.restore.ops =3D hvm ? restore_ops_x86_hvm : restore_ops_x86_pv; =20 if ( restore(&ctx) ) return -1; diff --git a/tools/libs/guest/xg_sr_restore_x86_pv.c b/tools/libs/guest/xg_= sr_restore_x86_pv.c index dc50b0f5a8..eaeb97f4a0 100644 --- a/tools/libs/guest/xg_sr_restore_x86_pv.c +++ b/tools/libs/guest/xg_sr_restore_x86_pv.c @@ -903,7 +903,7 @@ static int handle_shared_info(struct xc_sr_context *ctx, ctx->dominfo.shared_info_frame); if ( !guest_shinfo ) { - PERROR("Failed to map Shared Info at mfn %#lx", + PERROR("Failed to map Shared Info at mfn %#"PRIx64, ctx->dominfo.shared_info_frame); goto err; } diff --git a/tools/libs/guest/xg_sr_save.c b/tools/libs/guest/xg_sr_save.c index 9853d8d846..b0b30b4bc2 100644 --- a/tools/libs/guest/xg_sr_save.c +++ b/tools/libs/guest/xg_sr_save.c @@ -336,19 +336,17 @@ static int suspend_domain(struct xc_sr_context *ctx) } =20 /* Refresh domain information. */ - if ( (xc_domain_getinfo(xch, ctx->domid, 1, &ctx->dominfo) !=3D 1) || - (ctx->dominfo.domid !=3D ctx->domid) ) + if ( xc_domain_getinfo_single(xch, ctx->domid, &ctx->dominfo) < 0 ) { PERROR("Unable to refresh domain information"); return -1; } =20 /* Confirm the domain has actually been paused. */ - if ( !ctx->dominfo.shutdown || - (ctx->dominfo.shutdown_reason !=3D SHUTDOWN_suspend) ) + if ( !dominfo_shutdown_with(&ctx->dominfo, SHUTDOWN_suspend) ) { ERROR("Domain has not been suspended: shutdown %d, reason %d", - ctx->dominfo.shutdown, ctx->dominfo.shutdown_reason); + ctx->dominfo.flags & XEN_DOMINF_shutdown, dominfo_shutdown_r= eason(&ctx->dominfo)); return -1; } =20 @@ -893,8 +891,7 @@ static int save(struct xc_sr_context *ctx, uint16_t gue= st_type) if ( rc ) goto err; =20 - if ( !ctx->dominfo.shutdown || - (ctx->dominfo.shutdown_reason !=3D SHUTDOWN_suspend) ) + if ( !dominfo_shutdown_with(&ctx->dominfo, SHUTDOWN_suspend) ) { ERROR("Domain has not been suspended"); rc =3D -1; @@ -989,6 +986,7 @@ int xc_domain_save(xc_interface *xch, int io_fd, uint32= _t dom, .fd =3D io_fd, .stream_type =3D stream_type, }; + bool hvm; =20 /* GCC 4.4 (of CentOS 6.x vintage) can' t initialise anonymous unions.= */ ctx.save.callbacks =3D callbacks; @@ -996,17 +994,13 @@ int xc_domain_save(xc_interface *xch, int io_fd, uint= 32_t dom, ctx.save.debug =3D !!(flags & XCFLAGS_DEBUG); ctx.save.recv_fd =3D recv_fd; =20 - if ( xc_domain_getinfo(xch, dom, 1, &ctx.dominfo) !=3D 1 ) + if ( xc_domain_getinfo_single(xch, dom, &ctx.dominfo) < 0 ) { PERROR("Failed to get domain info"); return -1; } =20 - if ( ctx.dominfo.domid !=3D dom ) - { - ERROR("Domain %u does not exist", dom); - return -1; - } + hvm =3D ctx.dominfo.flags & XEN_DOMINF_hvm_guest; =20 /* Sanity check stream_type-related parameters */ switch ( stream_type ) @@ -1018,7 +1012,7 @@ int xc_domain_save(xc_interface *xch, int io_fd, uint= 32_t dom, assert(callbacks->checkpoint && callbacks->postcopy); /* Fallthrough */ case XC_STREAM_PLAIN: - if ( ctx.dominfo.hvm ) + if ( hvm ) assert(callbacks->switch_qemu_logdirty); break; =20 @@ -1028,11 +1022,11 @@ int xc_domain_save(xc_interface *xch, int io_fd, ui= nt32_t dom, } =20 DPRINTF("fd %d, dom %u, flags %u, hvm %d", - io_fd, dom, flags, ctx.dominfo.hvm); + io_fd, dom, flags, hvm); =20 ctx.domid =3D dom; =20 - if ( ctx.dominfo.hvm ) + if ( hvm ) { ctx.save.ops =3D save_ops_x86_hvm; return save(&ctx, DHDR_TYPE_X86_HVM); diff --git a/tools/libs/guest/xg_sr_save_x86_pv.c b/tools/libs/guest/xg_sr_= save_x86_pv.c index 4964f1f7b8..f3d7a7a71a 100644 --- a/tools/libs/guest/xg_sr_save_x86_pv.c +++ b/tools/libs/guest/xg_sr_save_x86_pv.c @@ -20,7 +20,7 @@ static int map_shinfo(struct xc_sr_context *ctx) xch, ctx->domid, PAGE_SIZE, PROT_READ, ctx->dominfo.shared_info_fr= ame); if ( !ctx->x86.pv.shinfo ) { - PERROR("Failed to map shared info frame at mfn %#lx", + PERROR("Failed to map shared info frame at mfn %#"PRIx64, ctx->dominfo.shared_info_frame); return -1; } @@ -943,7 +943,7 @@ static int normalise_pagetable(struct xc_sr_context *ct= x, const uint64_t *src, #ifdef __i386__ if ( mfn =3D=3D INVALID_MFN ) { - if ( !ctx->dominfo.paused ) + if ( !(ctx->dominfo.flags & XEN_DOMINF_paused) ) errno =3D EAGAIN; else { @@ -965,7 +965,7 @@ static int normalise_pagetable(struct xc_sr_context *ct= x, const uint64_t *src, =20 if ( !mfn_in_pseudophysmap(ctx, mfn) ) { - if ( !ctx->dominfo.paused ) + if ( !(ctx->dominfo.flags & XEN_DOMINF_paused) ) errno =3D EAGAIN; else { diff --git a/tools/libs/light/libxl_dom.c b/tools/libs/light/libxl_dom.c index bd5d823581..94fef37401 100644 --- a/tools/libs/light/libxl_dom.c +++ b/tools/libs/light/libxl_dom.c @@ -34,7 +34,7 @@ libxl_domain_type libxl__domain_type(libxl__gc *gc, uint3= 2_t domid) =20 ret =3D xc_domain_getinfo_single(ctx->xch, domid, &info); if (ret < 0) { - LOG(ERROR, "unable to get domain type for domid=3D%"PRIu32, domid); + LOGED(ERROR, domid, "unable to get dominfo"); return LIBXL_DOMAIN_TYPE_INVALID; } if (info.flags & XEN_DOMINF_hvm_guest) { @@ -73,7 +73,7 @@ int libxl__domain_cpupool(libxl__gc *gc, uint32_t domid) ret =3D xc_domain_getinfo_single(CTX->xch, domid, &info); if (ret < 0) { - LOGED(ERROR, domid, "get domaininfo failed: %d", ret); + LOGED(ERROR, domid, "get domaininfo failed"); return ERROR_FAIL; } return info.cpupool; diff --git a/tools/libs/light/libxl_domain.c b/tools/libs/light/libxl_domai= n.c index 9fa4091859..5709b3e62f 100644 --- a/tools/libs/light/libxl_domain.c +++ b/tools/libs/light/libxl_domain.c @@ -351,7 +351,7 @@ int libxl_domain_info(libxl_ctx *ctx, libxl_dominfo *in= fo_r, =20 ret =3D xc_domain_getinfo_single(ctx->xch, domid, &xcinfo); if (ret<0) { - LOGED(ERROR, domid, "Getting domain info: %d", ret); + LOGED(ERROR, domid, "Getting domain info"); GC_FREE; return ERROR_FAIL; } @@ -1661,7 +1661,7 @@ libxl_vcpuinfo *libxl_list_vcpu(libxl_ctx *ctx, uint3= 2_t domid, unsigned int nr_vcpus; =20 if ((rc =3D xc_domain_getinfo_single(ctx->xch, domid, &domaininfo)) < = 0) { - LOGED(ERROR, domid, "Getting dominfo: %d", rc); + LOGED(ERROR, domid, "Getting dominfo"); GC_FREE; return NULL; } diff --git a/tools/libs/light/libxl_sched.c b/tools/libs/light/libxl_sched.c index b8d0b9ccd7..b87e490d12 100644 --- a/tools/libs/light/libxl_sched.c +++ b/tools/libs/light/libxl_sched.c @@ -221,7 +221,7 @@ static int sched_credit_domain_set(libxl__gc *gc, uint3= 2_t domid, =20 rc =3D xc_domain_getinfo_single(CTX->xch, domid, &domaininfo); if (rc < 0) { - LOGED(ERROR, domid, "Getting domain info: %d", rc); + LOGED(ERROR, domid, "Getting domain info"); return ERROR_FAIL; } =20 @@ -426,7 +426,7 @@ static int sched_credit2_domain_set(libxl__gc *gc, uint= 32_t domid, =20 rc =3D xc_domain_getinfo_single(CTX->xch, domid, &info); if (rc < 0) { - LOGED(ERROR, domid, "Getting domain info: %d", rc); + LOGED(ERROR, domid, "Getting domain info"); return ERROR_FAIL; } =20 @@ -498,10 +498,10 @@ static int sched_rtds_vcpu_get(libxl__gc *gc, uint32_= t domid, { uint32_t num_vcpus; int i, r, rc; - xc_dominfo_t info; + xc_domaininfo_t info; struct xen_domctl_schedparam_vcpu *vcpus; =20 - r =3D xc_domain_getinfo(CTX->xch, domid, 1, &info); + r =3D xc_domain_getinfo_single(CTX->xch, domid, &info); if (r < 0) { LOGED(ERROR, domid, "Getting domain info"); rc =3D ERROR_FAIL; @@ -552,10 +552,10 @@ static int sched_rtds_vcpu_get_all(libxl__gc *gc, uin= t32_t domid, { uint32_t num_vcpus; int i, r, rc; - xc_dominfo_t info; + xc_domaininfo_t info; struct xen_domctl_schedparam_vcpu *vcpus; =20 - r =3D xc_domain_getinfo(CTX->xch, domid, 1, &info); + r =3D xc_domain_getinfo_single(CTX->xch, domid, &info); if (r < 0) { LOGED(ERROR, domid, "Getting domain info"); rc =3D ERROR_FAIL; @@ -602,10 +602,10 @@ static int sched_rtds_vcpu_set(libxl__gc *gc, uint32_= t domid, int r, rc; int i; uint16_t max_vcpuid; - xc_dominfo_t info; + xc_domaininfo_t info; struct xen_domctl_schedparam_vcpu *vcpus; =20 - r =3D xc_domain_getinfo(CTX->xch, domid, 1, &info); + r =3D xc_domain_getinfo_single(CTX->xch, domid, &info); if (r < 0) { LOGED(ERROR, domid, "Getting domain info"); rc =3D ERROR_FAIL; @@ -662,11 +662,11 @@ static int sched_rtds_vcpu_set_all(libxl__gc *gc, uin= t32_t domid, int r, rc; int i; uint16_t max_vcpuid; - xc_dominfo_t info; + xc_domaininfo_t info; struct xen_domctl_schedparam_vcpu *vcpus; uint32_t num_vcpus; =20 - r =3D xc_domain_getinfo(CTX->xch, domid, 1, &info); + r =3D xc_domain_getinfo_single(CTX->xch, domid, &info); if (r < 0) { LOGED(ERROR, domid, "Getting domain info"); rc =3D ERROR_FAIL; diff --git a/tools/libs/light/libxl_x86_acpi.c b/tools/libs/light/libxl_x86= _acpi.c index 22eb160659..796b009d0c 100644 --- a/tools/libs/light/libxl_x86_acpi.c +++ b/tools/libs/light/libxl_x86_acpi.c @@ -87,14 +87,14 @@ static int init_acpi_config(libxl__gc *gc, { xc_interface *xch =3D dom->xch; uint32_t domid =3D dom->guest_domid; - xc_dominfo_t info; + xc_domaininfo_t info; struct hvm_info_table *hvminfo; int i, r, rc; =20 config->dsdt_anycpu =3D config->dsdt_15cpu =3D dsdt_pvh; config->dsdt_anycpu_len =3D config->dsdt_15cpu_len =3D dsdt_pvh_len; =20 - r =3D xc_domain_getinfo(xch, domid, 1, &info); + r =3D xc_domain_getinfo_single(xch, domid, &info); if (r < 0) { LOG(ERROR, "getdomaininfo failed (rc=3D%d)", r); rc =3D ERROR_FAIL; diff --git a/tools/misc/xen-hvmcrash.c b/tools/misc/xen-hvmcrash.c index 4f0dabcb18..1d058fa40a 100644 --- a/tools/misc/xen-hvmcrash.c +++ b/tools/misc/xen-hvmcrash.c @@ -48,7 +48,7 @@ main(int argc, char **argv) { int domid; xc_interface *xch; - xc_dominfo_t dominfo; + xc_domaininfo_t dominfo; int ret; uint32_t len; uint8_t *buf; @@ -66,13 +66,13 @@ main(int argc, char **argv) exit(1); } =20 - ret =3D xc_domain_getinfo(xch, domid, 1, &dominfo); + ret =3D xc_domain_getinfo_single(xch, domid, &dominfo); if (ret < 0) { perror("xc_domain_getinfo"); exit(1); } =20 - if (!dominfo.hvm) { + if (!(dominfo.flags & XEN_DOMINF_hvm_guest)) { fprintf(stderr, "domain %d is not HVM\n", domid); exit(1); } diff --git a/tools/misc/xen-lowmemd.c b/tools/misc/xen-lowmemd.c index a3a2741242..9d5cb549a8 100644 --- a/tools/misc/xen-lowmemd.c +++ b/tools/misc/xen-lowmemd.c @@ -38,7 +38,7 @@ void cleanup(void) #define BUFSZ 512 void handle_low_mem(void) { - xc_dominfo_t dom0_info; + xc_domaininfo_t dom0_info; xc_physinfo_t info; unsigned long long free_pages, dom0_pages, diff, dom0_target; char data[BUFSZ], error[BUFSZ]; @@ -58,13 +58,13 @@ void handle_low_mem(void) return; diff =3D THRESHOLD_PG - free_pages;=20 =20 - if (xc_domain_getinfo(xch, 0, 1, &dom0_info) < 1) + if (xc_domain_getinfo_single(xch, 0, &dom0_info) < 0) { perror("Failed to get dom0 info"); return; } =20 - dom0_pages =3D (unsigned long long) dom0_info.nr_pages; + dom0_pages =3D (unsigned long long) dom0_info.tot_pages; printf("Dom0 pages: 0x%llx:%llu\n", dom0_pages, dom0_pages); dom0_target =3D dom0_pages - diff; if (dom0_target <=3D DOM0_FLOOR_PG) diff --git a/tools/misc/xen-mfndump.c b/tools/misc/xen-mfndump.c index b32c95e262..8863ece3f5 100644 --- a/tools/misc/xen-mfndump.c +++ b/tools/misc/xen-mfndump.c @@ -74,7 +74,7 @@ int dump_m2p_func(int argc, char *argv[]) int dump_p2m_func(int argc, char *argv[]) { struct xc_domain_meminfo minfo; - xc_dominfo_t info; + xc_domaininfo_t info; unsigned long i; int domid; =20 @@ -85,8 +85,7 @@ int dump_p2m_func(int argc, char *argv[]) } domid =3D atoi(argv[0]); =20 - if ( xc_domain_getinfo(xch, domid, 1, &info) !=3D 1 || - info.domid !=3D domid ) + if ( xc_domain_getinfo_single(xch, domid, &info) < 0 ) { ERROR("Failed to obtain info for domain %d\n", domid); return -1; @@ -158,7 +157,7 @@ int dump_p2m_func(int argc, char *argv[]) int dump_ptes_func(int argc, char *argv[]) { struct xc_domain_meminfo minfo; - xc_dominfo_t info; + xc_domaininfo_t info; void *page =3D NULL; unsigned long i, max_mfn; int domid, pte_num, rc =3D 0; @@ -172,8 +171,7 @@ int dump_ptes_func(int argc, char *argv[]) domid =3D atoi(argv[0]); mfn =3D strtoul(argv[1], NULL, 16); =20 - if ( xc_domain_getinfo(xch, domid, 1, &info) !=3D 1 || - info.domid !=3D domid ) + if ( xc_domain_getinfo_single(xch, domid, &info) < 0 ) { ERROR("Failed to obtain info for domain %d\n", domid); return -1; @@ -266,7 +264,7 @@ int dump_ptes_func(int argc, char *argv[]) int lookup_pte_func(int argc, char *argv[]) { struct xc_domain_meminfo minfo; - xc_dominfo_t info; + xc_domaininfo_t info; void *page =3D NULL; unsigned long i, j; int domid, pte_num; @@ -280,8 +278,7 @@ int lookup_pte_func(int argc, char *argv[]) domid =3D atoi(argv[0]); mfn =3D strtoul(argv[1], NULL, 16); =20 - if ( xc_domain_getinfo(xch, domid, 1, &info) !=3D 1 || - info.domid !=3D domid ) + if ( xc_domain_getinfo_single(xch, domid, &info) < 0 ) { ERROR("Failed to obtain info for domain %d\n", domid); return -1; @@ -336,7 +333,7 @@ int lookup_pte_func(int argc, char *argv[]) =20 int memcmp_mfns_func(int argc, char *argv[]) { - xc_dominfo_t info1, info2; + xc_domaininfo_t info1, info2; void *page1 =3D NULL, *page2 =3D NULL; int domid1, domid2; xen_pfn_t mfn1, mfn2; @@ -352,9 +349,8 @@ int memcmp_mfns_func(int argc, char *argv[]) mfn1 =3D strtoul(argv[1], NULL, 16); mfn2 =3D strtoul(argv[3], NULL, 16); =20 - if ( xc_domain_getinfo(xch, domid1, 1, &info1) !=3D 1 || - xc_domain_getinfo(xch, domid2, 1, &info2) !=3D 1 || - info1.domid !=3D domid1 || info2.domid !=3D domid2) + if ( xc_domain_getinfo_single(xch, domid1, &info1) < 0 || + xc_domain_getinfo_single(xch, domid2, &info2) < 0) { ERROR("Failed to obtain info for domains\n"); return -1; diff --git a/tools/misc/xen-vmtrace.c b/tools/misc/xen-vmtrace.c index 5b688a54af..ba2ce17a17 100644 --- a/tools/misc/xen-vmtrace.c +++ b/tools/misc/xen-vmtrace.c @@ -133,15 +133,15 @@ int main(int argc, char **argv) =20 while ( !interrupted ) { - xc_dominfo_t dominfo; + xc_domaininfo_t dominfo; =20 if ( get_more_data() ) goto out; =20 usleep(1000 * 100); =20 - if ( xc_domain_getinfo(xch, domid, 1, &dominfo) !=3D 1 || - dominfo.domid !=3D domid || dominfo.shutdown ) + if ( xc_domain_getinfo_single(xch, domid, &dominfo) < 0 || + (dominfo.flags & XEN_DOMINF_shutdown) ) { if ( get_more_data() ) goto out; diff --git a/tools/vchan/vchan-socket-proxy.c b/tools/vchan/vchan-socket-pr= oxy.c index e1d959c6d1..9c4c336b03 100644 --- a/tools/vchan/vchan-socket-proxy.c +++ b/tools/vchan/vchan-socket-proxy.c @@ -222,7 +222,7 @@ static struct libxenvchan *connect_vchan(int domid, con= st char *path) { struct libxenvchan *ctrl =3D NULL; struct xs_handle *xs =3D NULL; xc_interface *xc =3D NULL; - xc_dominfo_t dominfo; + xc_domaininfo_t dominfo; char **watch_ret; unsigned int watch_num; int ret; @@ -254,12 +254,12 @@ static struct libxenvchan *connect_vchan(int domid, c= onst char *path) { if (ctrl) break; =20 - ret =3D xc_domain_getinfo(xc, domid, 1, &dominfo); + ret =3D xc_domain_getinfo_single(xc, domid, &dominfo); /* break the loop if domain is definitely not there anymore, but * continue if it is or the call failed (like EPERM) */ if (ret =3D=3D -1 && errno =3D=3D ESRCH) break; - if (ret =3D=3D 1 && (dominfo.domid !=3D (uint32_t)domid || dominfo= .dying)) + if (ret =3D=3D 0 && (dominfo.flags & XEN_DOMINF_dying)) break; } =20 diff --git a/tools/xenstore/xenstored_domain.c b/tools/xenstore/xenstored_d= omain.c index f62be2245c..aeb7595ae1 100644 --- a/tools/xenstore/xenstored_domain.c +++ b/tools/xenstore/xenstored_domain.c @@ -339,15 +339,14 @@ static int destroy_domain(void *_domain) return 0; } =20 -static bool get_domain_info(unsigned int domid, xc_dominfo_t *dominfo) +static bool get_domain_info(unsigned int domid, xc_domaininfo_t *dominfo) { - return xc_domain_getinfo(*xc_handle, domid, 1, dominfo) =3D=3D 1 && - dominfo->domid =3D=3D domid; + return xc_domain_getinfo_single(*xc_handle, domid, dominfo) =3D=3D 0; } =20 static int check_domain(const void *k, void *v, void *arg) { - xc_dominfo_t dominfo; + xc_domaininfo_t dominfo; struct connection *conn; bool dom_valid; struct domain *domain =3D v; @@ -360,12 +359,12 @@ static int check_domain(const void *k, void *v, void = *arg) return 0; } if (dom_valid) { - if ((dominfo.crashed || dominfo.shutdown) + if ((dominfo.flags & XEN_DOMINF_shutdown) && !domain->shutdown) { domain->shutdown =3D true; *notify =3D true; } - if (!dominfo.dying) + if (!(dominfo.flags & XEN_DOMINF_dying)) return 0; } if (domain->conn) { @@ -486,7 +485,7 @@ 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_dominfo_t dominfo; + xc_domaininfo_t dominfo; =20 domain =3D find_domain_struct(domid); if (!domain && get_domain_info(domid, &dominfo)) @@ -1010,7 +1009,7 @@ int domain_alloc_permrefs(struct node_perms *perms) { unsigned int i, domid; struct domain *d; - xc_dominfo_t dominfo; + xc_domaininfo_t dominfo; =20 for (i =3D 0; i < perms->num; i++) { domid =3D perms->p[i].id; diff --git a/tools/xentrace/xenctx.c b/tools/xentrace/xenctx.c index 85ba0c0fa6..9acb9db460 100644 --- a/tools/xentrace/xenctx.c +++ b/tools/xentrace/xenctx.c @@ -92,7 +92,7 @@ static struct xenctx { int do_stack; #endif int kernel_start_set; - xc_dominfo_t dominfo; + xc_domaininfo_t dominfo; } xenctx; =20 struct symbol { @@ -989,7 +989,7 @@ static void dump_ctx(int vcpu) =20 #if defined(__i386__) || defined(__x86_64__) { - if (xenctx.dominfo.hvm) { + if (xenctx.dominfo.flags & XEN_DOMINF_hvm_guest) { struct hvm_hw_cpu cpuctx; xen_capabilities_info_t xen_caps =3D ""; if (xc_domain_hvm_getcontext_partial( @@ -1269,9 +1269,9 @@ int main(int argc, char **argv) exit(-1); } =20 - ret =3D xc_domain_getinfo(xenctx.xc_handle, xenctx.domid, 1, &xenctx.d= ominfo); + ret =3D xc_domain_getinfo_single(xenctx.xc_handle, xenctx.domid, &xenc= tx.dominfo); if (ret < 0) { - perror("xc_domain_getinfo"); + perror("xc_domain_getinfo_single"); exit(-1); } =20 --=20 2.34.1 From nobody Thu May 16 00:07:02 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=cloud.com ARC-Seal: i=1; a=rsa-sha256; t=1682678551; cv=none; d=zohomail.com; s=zohoarc; b=A411az4xsAgLmCjasx4/RXebA4TJSCO2ZxHM+dZN1ol19bAP6ta0EmwIIRc41M73bWTsblxjwSbogEIzamtqCIRMupnTRX9+w/wl5hnGLb4+kl6xPVM7Ak8pejMFm9ThNe9xm7GxjF5KZEscRwXK9+vUI27LbtH5H5t9W5kV358= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1682678551; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=elEycC0m0QwhjrI/cCyPmElzCeDcTnaeFu39NnQQmM4=; b=QmksvdtV6YO+rr8AKHIP3J8E5iwSF2lrPRsgi7iKT76zH2MNPvZ0PXg6mAp0Uxicv6JgFFqsO9foaiYHvXsQbQjqy0BACSXFof/lvRHK8jwL0/1A4TW96zSUGfrhkkoakw5Cm869BWUvKYhD6NykoxjrdP6mvcBb6QKRFzIluk4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1682678551194262.6047982025109; Fri, 28 Apr 2023 03:42:31 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.527257.819710 (Exim 4.92) (envelope-from ) id 1psLXw-0003tJ-39; Fri, 28 Apr 2023 10:41:48 +0000 Received: by outflank-mailman (output) from mailman id 527257.819710; Fri, 28 Apr 2023 10:41:47 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1psLXv-0003sp-R1; Fri, 28 Apr 2023 10:41:47 +0000 Received: by outflank-mailman (input) for mailman id 527257; Fri, 28 Apr 2023 10:41:47 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1psLXu-0002Ac-Uz for xen-devel@lists.xenproject.org; Fri, 28 Apr 2023 10:41:46 +0000 Received: from mail-wr1-x42e.google.com (mail-wr1-x42e.google.com [2a00:1450:4864:20::42e]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 45b8f029-e5b1-11ed-b224-6b7b168915f2; Fri, 28 Apr 2023 12:41:46 +0200 (CEST) Received: by mail-wr1-x42e.google.com with SMTP id ffacd0b85a97d-2f95231618aso6131763f8f.1 for ; Fri, 28 Apr 2023 03:41:46 -0700 (PDT) Received: from localhost.localdomain (default-46-102-197-194.interdsl.co.uk. [46.102.197.194]) by smtp.gmail.com with ESMTPSA id k6-20020a5d5246000000b002e71156b0fcsm20930378wrc.6.2023.04.28.03.41.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Apr 2023 03:41:43 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 45b8f029-e5b1-11ed-b224-6b7b168915f2 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cloud.com; s=cloud; t=1682678505; x=1685270505; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=elEycC0m0QwhjrI/cCyPmElzCeDcTnaeFu39NnQQmM4=; b=hC/PZiuATFhzTmZYjkhbaeHmZK6LjbbDcfC9oLcOccrJjMDYraxZuYkn0v1xMmz/Gx +tu2+qJvczbTi8wVU4opXXncC+RZGlNwMBd1mgrJwajRv3oDJ3L+ag7JQKQ4GxyXjRr0 MqvqZ2+GO8pgAswESbH3H1NLjAroNuar5opew= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682678505; x=1685270505; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=elEycC0m0QwhjrI/cCyPmElzCeDcTnaeFu39NnQQmM4=; b=NgW8j/U+7lNThrnqILMuiyWtJed3ShEUYHaNhHLYng3A4vJUbEdLxZMBvYEqLSeUYa Zb6dvZphIWgH0mTTCg5MTkOtGp2HEQNsNy8vhSWRuNhrFgkGYvIs7z9ZkwpWBvITfKQo zyeZi7Tm4gjiB6NFmVQJ3j9hZu0bYbgsOOBgE5TkE8nz+7ZHvPt/SDda+HttSrN3vty2 8ryvfaFmKuOQzgbs6VoVUmsEGuVtbrt7EdMd/N82s20d+ou/JudyyVXpkmXadUmyVELv hvBB7VM8EaGmpU94TkTiqKs24shWjdFkAus0ihnv/vosHf/dB3X/K31w5qOyvAYApzJw trVQ== X-Gm-Message-State: AC+VfDzCWlMA+bP6yvuCB8Qr6XMLf2fYthPQ42gaTV5Pu3ZzTmJQKyfD XK33KU1WP5/weyElCUkoHJW9QPDagHa3LJ8QmSQ= X-Google-Smtp-Source: ACHHUZ4EX2u22zMI6e8UKRVUTZvFp8QMKnPqfpUIQgBLJ/iq77hFmLT3SbznD0IrDjoU6i6pKGJ06A== X-Received: by 2002:adf:f70c:0:b0:304:a7ca:1052 with SMTP id r12-20020adff70c000000b00304a7ca1052mr3342986wrp.35.1682678505001; Fri, 28 Apr 2023 03:41:45 -0700 (PDT) From: Alejandro Vallejo To: Xen-devel Cc: Alejandro Vallejo , Andrew Cooper , George Dunlap , Jan Beulich , Julien Grall , Stefano Stabellini , Wei Liu , Anthony PERARD , Juergen Gross Subject: [PATCH v2 7/7] domctl: Modify XEN_DOMCTL_getdomaininfo to fail if domid is not found Date: Fri, 28 Apr 2023 11:41:24 +0100 Message-Id: <20230428104124.1044-8-alejandro.vallejo@cloud.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230428104124.1044-1-alejandro.vallejo@cloud.com> References: <20230428104124.1044-1-alejandro.vallejo@cloud.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @cloud.com) X-ZM-MESSAGEID: 1682678553220100001 Content-Type: text/plain; charset="utf-8" It previously mimicked the getdomaininfo sysctl semantics by returning the first domid higher than the requested domid that does exist. This unintuitive behaviour causes quite a few mistakes and makes the call needlessly slow in its error path. This patch removes the fallback search, returning -ESRCH if the requested domain doesn't exist. Domain discovery can still be done through the sysctl interface as that performs a linear search on the list of domains. With this modification the xc_domain_getinfo() function is deprecated and removed to make sure it's not mistakenly used expecting the old behaviour. The new xc wrapper is xc_domain_getinfo_single(). All previous callers of xc_domain_getinfo() have been updated to use xc_domain_getinfo_single() or xc_domain_getinfolist() instead. This also means xc_dominfo_t is no longer used by anything and can be purged. Resolves: xen-project/xen#105 Signed-off-by: Alejandro Vallejo --- Cc: Andrew Cooper Cc: George Dunlap Cc: Jan Beulich Cc: Julien Grall Cc: Stefano Stabellini Cc: Wei Liu Cc: Anthony PERARD Cc: Juergen Gross --- tools/include/xenctrl.h | 43 -------------------- tools/libs/ctrl/xc_domain.c | 72 ---------------------------------- tools/libs/guest/xg_dom_boot.c | 2 +- xen/common/domctl.c | 32 +-------------- 4 files changed, 3 insertions(+), 146 deletions(-) diff --git a/tools/include/xenctrl.h b/tools/include/xenctrl.h index 685df1c7ba..04d33db305 100644 --- a/tools/include/xenctrl.h +++ b/tools/include/xenctrl.h @@ -444,28 +444,6 @@ typedef struct xc_core_header { * DOMAIN MANAGEMENT FUNCTIONS */ =20 -typedef struct xc_dominfo { - uint32_t domid; - uint32_t ssidref; - unsigned int dying:1, crashed:1, shutdown:1, - paused:1, blocked:1, running:1, - hvm:1, debugged:1, xenstore:1, hap:1; - unsigned int shutdown_reason; /* only meaningful if shutdown=3D=3D1 */ - unsigned long nr_pages; /* current number, not maximum */ - unsigned long nr_outstanding_pages; - unsigned long nr_shared_pages; - unsigned long nr_paged_pages; - unsigned long shared_info_frame; - uint64_t cpu_time; - unsigned long max_memkb; - unsigned int nr_online_vcpus; - unsigned int max_vcpu_id; - xen_domain_handle_t handle; - unsigned int cpupool; - uint8_t gpaddr_bits; - struct xen_arch_domainconfig arch_config; -} xc_dominfo_t; - typedef xen_domctl_getdomaininfo_t xc_domaininfo_t; =20 static inline unsigned int dominfo_shutdown_reason(const xc_domaininfo_t *= info) @@ -720,27 +698,6 @@ int xc_domain_getinfo_single(xc_interface *xch, uint32_t domid, xc_domaininfo_t *info); =20 -/** - * This function will return information about one or more domains. It is - * designed to iterate over the list of domains. If a single domain is - * requested, this function will return the next domain in the list - if - * one exists. It is, therefore, important in this case to make sure the - * domain requested was the one returned. - * - * @parm xch a handle to an open hypervisor interface - * @parm first_domid the first domain to enumerate information from. Doma= ins - * are currently enumerate in order of creation. - * @parm max_doms the number of elements in info - * @parm info an array of max_doms size that will contain the information = for - * the enumerated domains. - * @return the number of domains enumerated or -1 on error - */ -int xc_domain_getinfo(xc_interface *xch, - uint32_t first_domid, - unsigned int max_doms, - xc_dominfo_t *info); - - /** * This function will set the execution context for the specified vcpu. * diff --git a/tools/libs/ctrl/xc_domain.c b/tools/libs/ctrl/xc_domain.c index 533e3c1314..724fa6f753 100644 --- a/tools/libs/ctrl/xc_domain.c +++ b/tools/libs/ctrl/xc_domain.c @@ -357,84 +357,12 @@ int xc_domain_getinfo_single(xc_interface *xch, if ( do_domctl(xch, &domctl) < 0 ) return -1; =20 - if ( domctl.u.getdomaininfo.domain !=3D domid ) { - errno =3D ESRCH; - return -1; - } - if ( info ) *info =3D domctl.u.getdomaininfo; =20 return 0; } =20 -int xc_domain_getinfo(xc_interface *xch, - uint32_t first_domid, - unsigned int max_doms, - xc_dominfo_t *info) -{ - unsigned int nr_doms; - uint32_t next_domid =3D first_domid; - DECLARE_DOMCTL; - int rc =3D 0; - - memset(info, 0, max_doms*sizeof(xc_dominfo_t)); - - for ( nr_doms =3D 0; nr_doms < max_doms; nr_doms++ ) - { - domctl.cmd =3D XEN_DOMCTL_getdomaininfo; - domctl.domain =3D next_domid; - if ( (rc =3D do_domctl(xch, &domctl)) < 0 ) - break; - info->domid =3D domctl.domain; - - info->dying =3D !!(domctl.u.getdomaininfo.flags&XEN_DOMINF_dyin= g); - info->shutdown =3D !!(domctl.u.getdomaininfo.flags&XEN_DOMINF_shut= down); - info->paused =3D !!(domctl.u.getdomaininfo.flags&XEN_DOMINF_paus= ed); - info->blocked =3D !!(domctl.u.getdomaininfo.flags&XEN_DOMINF_bloc= ked); - info->running =3D !!(domctl.u.getdomaininfo.flags&XEN_DOMINF_runn= ing); - info->hvm =3D !!(domctl.u.getdomaininfo.flags&XEN_DOMINF_hvm_= guest); - info->debugged =3D !!(domctl.u.getdomaininfo.flags&XEN_DOMINF_debu= gged); - info->xenstore =3D !!(domctl.u.getdomaininfo.flags&XEN_DOMINF_xs_d= omain); - info->hap =3D !!(domctl.u.getdomaininfo.flags&XEN_DOMINF_hap); - - info->shutdown_reason =3D - (domctl.u.getdomaininfo.flags>>XEN_DOMINF_shutdownshift) & - XEN_DOMINF_shutdownmask; - - if ( info->shutdown && (info->shutdown_reason =3D=3D SHUTDOWN_cras= h) ) - { - info->shutdown =3D 0; - info->crashed =3D 1; - } - - info->ssidref =3D domctl.u.getdomaininfo.ssidref; - info->nr_pages =3D domctl.u.getdomaininfo.tot_pages; - info->nr_outstanding_pages =3D domctl.u.getdomaininfo.outstanding_= pages; - info->nr_shared_pages =3D domctl.u.getdomaininfo.shr_pages; - info->nr_paged_pages =3D domctl.u.getdomaininfo.paged_pages; - info->max_memkb =3D domctl.u.getdomaininfo.max_pages << (PAGE_SHIF= T-10); - info->shared_info_frame =3D domctl.u.getdomaininfo.shared_info_fra= me; - info->cpu_time =3D domctl.u.getdomaininfo.cpu_time; - info->nr_online_vcpus =3D domctl.u.getdomaininfo.nr_online_vcpus; - info->max_vcpu_id =3D domctl.u.getdomaininfo.max_vcpu_id; - info->cpupool =3D domctl.u.getdomaininfo.cpupool; - info->gpaddr_bits =3D domctl.u.getdomaininfo.gpaddr_bits; - info->arch_config =3D domctl.u.getdomaininfo.arch_config; - - memcpy(info->handle, domctl.u.getdomaininfo.handle, - sizeof(xen_domain_handle_t)); - - next_domid =3D (uint16_t)domctl.domain + 1; - info++; - } - - if ( nr_doms =3D=3D 0 ) - return rc; - - return nr_doms; -} - int xc_domain_getinfolist(xc_interface *xch, uint32_t first_domain, unsigned int max_domains, diff --git a/tools/libs/guest/xg_dom_boot.c b/tools/libs/guest/xg_dom_boot.c index 1dea534bba..dc858a1567 100644 --- a/tools/libs/guest/xg_dom_boot.c +++ b/tools/libs/guest/xg_dom_boot.c @@ -178,7 +178,7 @@ int xc_dom_boot_image(struct xc_dom_image *dom) { xc_dom_panic(dom->xch, XC_INTERNAL_ERROR, "%s: getdomaininfo failed (errno=3D%d)", - __FUNCTION__, rc, errno); + __FUNCTION__, errno); return -1; } dom->shared_info_mfn =3D info.shared_info_frame; diff --git a/xen/common/domctl.c b/xen/common/domctl.c index ad71ad8a4c..24a14996e6 100644 --- a/xen/common/domctl.c +++ b/xen/common/domctl.c @@ -314,7 +314,7 @@ long do_domctl(XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_d= omctl) /* fall through */ default: d =3D rcu_lock_domain_by_id(op->domain); - if ( !d && op->cmd !=3D XEN_DOMCTL_getdomaininfo ) + if ( !d ) return -ESRCH; } =20 @@ -534,42 +534,14 @@ long do_domctl(XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u= _domctl) =20 case XEN_DOMCTL_getdomaininfo: { - domid_t dom =3D DOMID_INVALID; - - if ( !d ) - { - ret =3D -EINVAL; - if ( op->domain >=3D DOMID_FIRST_RESERVED ) - break; - - rcu_read_lock(&domlist_read_lock); - - dom =3D op->domain; - for_each_domain ( d ) - if ( d->domain_id >=3D dom ) - break; - } - - ret =3D -ESRCH; - if ( d =3D=3D NULL ) - goto getdomaininfo_out; - ret =3D xsm_getdomaininfo(XSM_HOOK, d); if ( ret ) - goto getdomaininfo_out; + break; =20 getdomaininfo(d, &op->u.getdomaininfo); =20 op->domain =3D op->u.getdomaininfo.domain; copyback =3D 1; - - getdomaininfo_out: - /* When d was non-NULL upon entry, no cleanup is needed. */ - if ( dom =3D=3D DOMID_INVALID ) - break; - - rcu_read_unlock(&domlist_read_lock); - d =3D NULL; break; } =20 --=20 2.34.1