From nobody Mon Feb 9 01:06:29 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) client-ip=170.10.129.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1652196069; cv=none; d=zohomail.com; s=zohoarc; b=Uu9n9H6bSGVaVhsDsG0B8dmLjs8/qq9zpYcel1dGkDisfm1pYaHHUR4+wUtnzWwsH1dCSPH5aUoOGKeWWwh6Ct5DgNYjyErNB5rI5vy+ov17X7c5TLODwfoVUXIX5MQrRp51nWVoXchwPHRyelYf1V6kXm93RUw3CB01lHkZm3s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1652196069; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=wXBlG8r76r3eNsoI5qeck297jjjrqQ7gDt2FXmbdU/k=; b=PpKwEnHPCoy2aENw+Hug9i38/2rL2WaRYk/gUgb8JJ5ajCwEMyn/OJdYLxCDRAzeFzE7Jxg6bR6FRSEZpovg5xBocNmMuQxP4CL0qTr3yDy4vdKejifhXOOMmTcy4r+H02bBz/x88BCs+xIw2/HmxUpoqX7f6a9up3i1I6bgLHU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.zohomail.com with SMTPS id 1652196069986595.7688525748086; Tue, 10 May 2022 08:21:09 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-653-vFIvGwNUOsaRR9LGYWuepQ-1; Tue, 10 May 2022 11:20:31 -0400 Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 6E4781C06EDE; Tue, 10 May 2022 15:20:24 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (unknown [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id 4EB42463E1C; Tue, 10 May 2022 15:20:24 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 20BB41947055; Tue, 10 May 2022 15:20:24 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 61637194705E for ; Tue, 10 May 2022 15:20:23 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 547732024CDA; Tue, 10 May 2022 15:20:23 +0000 (UTC) Received: from speedmetal.lan (unknown [10.40.208.14]) by smtp.corp.redhat.com (Postfix) with ESMTP id 82EA22024CBD for ; Tue, 10 May 2022 15:20:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1652196069; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=wXBlG8r76r3eNsoI5qeck297jjjrqQ7gDt2FXmbdU/k=; b=S/S3+avrgpBe9kxZd1xjZut8cPfmKfjJpU44dKJAbXZL58fZjhVd4lMJi2sq2850Iagrpu NUcsBDiC/0ne8k9aUQz7hGbFU0XNdbnhMvfe9FNZapnBOp1yaM+LjIgRlLQVYEblyZ0c+9 cRg2l87llQUpaNMlkoq01lIa0Mr2TLM= X-MC-Unique: vFIvGwNUOsaRR9LGYWuepQ-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Peter Krempa To: libvir-list@redhat.com Subject: [PATCH 07/37] qemu: domain: Store and update 'fdsetindex' across libvirtd restarts Date: Tue, 10 May 2022 17:19:43 +0200 Message-Id: <9c9a13a01fddbaa6a791d178771f06f609bae65b.1652195735.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" X-Scanned-By: MIMEDefang 2.85 on 10.11.54.10 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1652196070269100001 Content-Type: text/plain; charset="utf-8" While 'add-fd' qmp command gives the possibility to find an unused fdset ID when hot-adding fdsets, such usage is extremely inconvenient. This patch allows us to track the used fdset id so that we can avoid the need to check results and thus employ simpler code flow when hot-adding devices which use FD passing. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_domain.c | 5 +++ src/qemu/qemu_domain.h | 3 +- src/qemu/qemu_process.c | 31 +++++++++++++++++++ .../qemustatusxml2xmldata/backup-pull-in.xml | 1 + .../blockjob-blockdev-in.xml | 1 + .../blockjob-mirror-in.xml | 1 + .../migration-in-params-in.xml | 1 + .../migration-out-nbd-bitmaps-in.xml | 1 + .../migration-out-nbd-out.xml | 1 + .../migration-out-nbd-tls-out.xml | 1 + .../migration-out-params-in.xml | 1 + tests/qemustatusxml2xmldata/modern-in.xml | 1 + tests/qemustatusxml2xmldata/upgrade-out.xml | 1 + .../qemustatusxml2xmldata/vcpus-multi-in.xml | 1 + 14 files changed, 49 insertions(+), 1 deletion(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 7974cdb00b..a726e2624a 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -2372,6 +2372,8 @@ qemuDomainObjPrivateXMLFormat(virBuffer *buf, if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV)) virBufferAsprintf(buf, "\n", priv->noden= ameindex); + virBufferAsprintf(buf, "\n", priv->fdsetindex); + if (priv->memPrealloc) virBufferAddLit(buf, "\n"); @@ -3100,6 +3102,9 @@ qemuDomainObjPrivateXMLParse(xmlXPathContextPtr ctxt, goto error; } + if (virXPathUInt("string(./fdset/@index)", ctxt, &priv->fdsetindex) = =3D=3D 0) + priv->fdsetindexParsed =3D true; + priv->memPrealloc =3D virXPathBoolean("boolean(./memPrealloc)", ctxt) = =3D=3D 1; return 0; diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index c7125722e0..358f1c163f 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -204,8 +204,9 @@ struct _qemuDomainObjPrivate { /* counter for generating node names for qemu disks */ unsigned long long nodenameindex; - /* counter for generating IDs of fdsets - only relevant during startup= */ + /* counter for generating IDs of fdsets */ unsigned int fdsetindex; + bool fdsetindexParsed; /* qemuProcessStartCPUs stores the reason for starting vCPUs here for = the * RESUME event handler to use it */ diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 39ed10ee41..be10d2f3ac 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -2261,6 +2261,34 @@ qemuRefreshPRManagerState(virQEMUDriver *driver, } +static int +qemuProcessRefreshFdsetIndex(virDomainObj *vm) +{ + qemuDomainObjPrivate *priv =3D vm->privateData; + g_autoptr(qemuMonitorFdsets) fdsets =3D NULL; + size_t i; + int rc; + + /* if the previous index was in the status XML we don't need to update= it */ + if (priv->fdsetindexParsed) + return 0; + + qemuDomainObjEnterMonitor(priv->driver, vm); + rc =3D qemuMonitorQueryFdsets(priv->mon, &fdsets); + qemuDomainObjExitMonitor(vm); + + if (rc < 0) + return -1; + + for (i =3D 0; i < fdsets->nfdsets; i++) { + if (fdsets->fdsets[i].id >=3D priv->fdsetindex) + priv->fdsetindex =3D fdsets->fdsets[i].id + 1; + } + + return 0; +} + + static void qemuRefreshRTC(virQEMUDriver *driver, virDomainObj *vm) @@ -8923,6 +8951,9 @@ qemuProcessReconnect(void *opaque) if (qemuRefreshPRManagerState(driver, obj) < 0) goto error; + if (qemuProcessRefreshFdsetIndex(obj) < 0) + goto error; + qemuProcessReconnectCheckMemAliasOrderMismatch(obj); if (qemuConnectAgent(driver, obj) < 0) diff --git a/tests/qemustatusxml2xmldata/backup-pull-in.xml b/tests/qemusta= tusxml2xmldata/backup-pull-in.xml index 59c934d4f7..e7fdc6c478 100644 --- a/tests/qemustatusxml2xmldata/backup-pull-in.xml +++ b/tests/qemustatusxml2xmldata/backup-pull-in.xml @@ -234,6 +234,7 @@ + diff --git a/tests/qemustatusxml2xmldata/blockjob-blockdev-in.xml b/tests/q= emustatusxml2xmldata/blockjob-blockdev-in.xml index 52024f242c..b62b3149c2 100644 --- a/tests/qemustatusxml2xmldata/blockjob-blockdev-in.xml +++ b/tests/qemustatusxml2xmldata/blockjob-blockdev-in.xml @@ -233,6 +233,7 @@ + diff --git a/tests/qemustatusxml2xmldata/blockjob-mirror-in.xml b/tests/qem= ustatusxml2xmldata/blockjob-mirror-in.xml index 00c8e69adc..73fe437f87 100644 --- a/tests/qemustatusxml2xmldata/blockjob-mirror-in.xml +++ b/tests/qemustatusxml2xmldata/blockjob-mirror-in.xml @@ -22,6 +22,7 @@ + -2 diff --git a/tests/qemustatusxml2xmldata/migration-in-params-in.xml b/tests= /qemustatusxml2xmldata/migration-in-params-in.xml index f4bc5753c4..8b0878c82e 100644 --- a/tests/qemustatusxml2xmldata/migration-in-params-in.xml +++ b/tests/qemustatusxml2xmldata/migration-in-params-in.xml @@ -256,6 +256,7 @@ + -2 diff --git a/tests/qemustatusxml2xmldata/migration-out-nbd-bitmaps-in.xml b= /tests/qemustatusxml2xmldata/migration-out-nbd-bitmaps-in.xml index c88996f923..7d55db0996 100644 --- a/tests/qemustatusxml2xmldata/migration-out-nbd-bitmaps-in.xml +++ b/tests/qemustatusxml2xmldata/migration-out-nbd-bitmaps-in.xml @@ -343,6 +343,7 @@ + diff --git a/tests/qemustatusxml2xmldata/migration-out-nbd-out.xml b/tests/= qemustatusxml2xmldata/migration-out-nbd-out.xml index 039dcacc58..1a918c0b5a 100644 --- a/tests/qemustatusxml2xmldata/migration-out-nbd-out.xml +++ b/tests/qemustatusxml2xmldata/migration-out-nbd-out.xml @@ -259,6 +259,7 @@ + -2 diff --git a/tests/qemustatusxml2xmldata/migration-out-nbd-tls-out.xml b/te= sts/qemustatusxml2xmldata/migration-out-nbd-tls-out.xml index 3d1ddd5771..87c67f8300 100644 --- a/tests/qemustatusxml2xmldata/migration-out-nbd-tls-out.xml +++ b/tests/qemustatusxml2xmldata/migration-out-nbd-tls-out.xml @@ -288,6 +288,7 @@ + -2 diff --git a/tests/qemustatusxml2xmldata/migration-out-params-in.xml b/test= s/qemustatusxml2xmldata/migration-out-params-in.xml index cd9dbccd3a..73ac09fb92 100644 --- a/tests/qemustatusxml2xmldata/migration-out-params-in.xml +++ b/tests/qemustatusxml2xmldata/migration-out-params-in.xml @@ -270,6 +270,7 @@ + -2 diff --git a/tests/qemustatusxml2xmldata/modern-in.xml b/tests/qemustatusxm= l2xmldata/modern-in.xml index cc5fd1cb74..7759034f7a 100644 --- a/tests/qemustatusxml2xmldata/modern-in.xml +++ b/tests/qemustatusxml2xmldata/modern-in.xml @@ -261,6 +261,7 @@ + -2 diff --git a/tests/qemustatusxml2xmldata/upgrade-out.xml b/tests/qemustatus= xml2xmldata/upgrade-out.xml index 5218092cb9..ac2ffeddc2 100644 --- a/tests/qemustatusxml2xmldata/upgrade-out.xml +++ b/tests/qemustatusxml2xmldata/upgrade-out.xml @@ -258,6 +258,7 @@ + -2 diff --git a/tests/qemustatusxml2xmldata/vcpus-multi-in.xml b/tests/qemusta= tusxml2xmldata/vcpus-multi-in.xml index 7f0208453f..0b8bc37c15 100644 --- a/tests/qemustatusxml2xmldata/vcpus-multi-in.xml +++ b/tests/qemustatusxml2xmldata/vcpus-multi-in.xml @@ -308,6 +308,7 @@ + -2 --=20 2.35.1