From nobody Mon Feb 9 17:59:38 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1769431133; cv=none; d=zohomail.com; s=zohoarc; b=k58DvxF7iB2YR2MyyoJ1OF2QL5cjqAPzVPQee4wdA2wdfwVpupUhDotetFtM+1dRZUc0xer9+A0B3SHotTX7OhZG5kmgSNXQ4VCbuGIQcxgdx1qxBb2O8TS3BBoRQqiI3chsilOrA7ft5OgrecvHFgPr8Bxa0lxvKGrwYHXqDP0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769431133; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=iUpp9/5MK/9rOTV+JoLYPs0Mz7pBOU04NRMcUG9gvbk=; b=cFGEEzBZDA3P4OhU8Jkp7bxOwDN3Fq0VqF8CnM30ycDQsrjt+/YJu6uz+3yo8bnnzNNEK9Fmp67EZ0WiuSKE0QsTrxLr7F4FXBamfRckdv3ggkpiUjfC6hklPQHlHHsm2vO3UE245+2O7iC0bw4Sp2iU3ZjXVbBhmnL5mXE/SIM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1769431133058390.08975629856866; Mon, 26 Jan 2026 04:38:53 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkLrM-0006Jc-Si; Mon, 26 Jan 2026 07:38:24 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vkLr8-00027q-Sj for qemu-devel@nongnu.org; Mon, 26 Jan 2026 07:38:11 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vkLr7-0004df-55 for qemu-devel@nongnu.org; Mon, 26 Jan 2026 07:38:10 -0500 Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-544-HJgXrQd7Ok22jlXRKOolSQ-1; Mon, 26 Jan 2026 07:38:03 -0500 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 25CAC18003FC; Mon, 26 Jan 2026 12:38:02 +0000 (UTC) Received: from sirius.home.kraxel.org (unknown [10.44.34.28]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 0860B1956053; Mon, 26 Jan 2026 12:38:01 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id DBF281800397; Mon, 26 Jan 2026 13:37:55 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1769431087; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=iUpp9/5MK/9rOTV+JoLYPs0Mz7pBOU04NRMcUG9gvbk=; b=DPbqM5XXIbQC6Jtqm7CLXR+24ciDHG3J41uBH5l37m5AfyjySj+winXnL0jTDo04tTz+gF 0pKpvu9VxM00Hq7T0q8mNM5QksLvBSWd0yqDvBtbEsru0sWVDm3KeGTfQwmJi/YfLYzqmj 47ZfA+RGrGkJ1TWYutaa7w+sYklr0oc= X-MC-Unique: HJgXrQd7Ok22jlXRKOolSQ-1 X-Mimecast-MFC-AGG-ID: HJgXrQd7Ok22jlXRKOolSQ_1769431082 From: Gerd Hoffmann To: qemu-devel@nongnu.org Cc: Gerd Hoffmann , Richard Henderson , Luigi Leonardi , Eduardo Habkost , Ani Sinha , Paolo Bonzini , "Michael S. Tsirkin" , Oliver Steffen , Marcel Apfelbaum , Stefano Garzarella Subject: [PATCH v3 3/5] igvm: move file load to complete callback Date: Mon, 26 Jan 2026 13:37:53 +0100 Message-ID: <20260126123755.357378-4-kraxel@redhat.com> In-Reply-To: <20260126123755.357378-1-kraxel@redhat.com> References: <20260126123755.357378-1-kraxel@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1769431135817158500 Content-Type: text/plain; charset="utf-8" Add UserCreatableClass->complete callback function for igvm-cfg object. Move file loading and parsing of the igvm file from the process function to the new complete() callback function. Keep the igvm file loaded after processing, release it in finalize() instead, so we parse it only once. Signed-off-by: Gerd Hoffmann Reviewed-by: Ani Sinha Reviewed-by: Stefano Garzarella --- include/system/igvm-internal.h | 5 +++++ backends/igvm-cfg.c | 18 ++++++++++++++++++ backends/igvm.c | 9 ++++----- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/include/system/igvm-internal.h b/include/system/igvm-internal.h index ac9e5683cc63..171cec8d0f6c 100644 --- a/include/system/igvm-internal.h +++ b/include/system/igvm-internal.h @@ -13,6 +13,8 @@ #include "qom/object.h" #include "hw/core/resettable.h" =20 +#include + struct IgvmCfg { ObjectClass parent_class; =20 @@ -22,7 +24,10 @@ struct IgvmCfg { * format. */ char *filename; + IgvmHandle file; ResettableState reset_state; }; =20 +IgvmHandle qigvm_file_init(char *filename, Error **errp); + #endif diff --git a/backends/igvm-cfg.c b/backends/igvm-cfg.c index e0df3eaa8efd..4014062e0f22 100644 --- a/backends/igvm-cfg.c +++ b/backends/igvm-cfg.c @@ -53,6 +53,13 @@ static void igvm_reset_exit(Object *obj, ResetType type) trace_igvm_reset_exit(type); } =20 +static void igvm_complete(UserCreatable *uc, Error **errp) +{ + IgvmCfg *igvm =3D IGVM_CFG(uc); + + igvm->file =3D qigvm_file_init(igvm->filename, errp); +} + OBJECT_DEFINE_TYPE_WITH_INTERFACES(IgvmCfg, igvm_cfg, IGVM_CFG, OBJECT, { TYPE_USER_CREATABLE }, { TYPE_RESETTABLE_INTERFACE }, @@ -62,6 +69,7 @@ static void igvm_cfg_class_init(ObjectClass *oc, const vo= id *data) { IgvmCfgClass *igvmc =3D IGVM_CFG_CLASS(oc); ResettableClass *rc =3D RESETTABLE_CLASS(oc); + UserCreatableClass *uc =3D USER_CREATABLE_CLASS(oc); =20 object_class_property_add_str(oc, "file", get_igvm, set_igvm); object_class_property_set_description(oc, "file", @@ -73,14 +81,24 @@ static void igvm_cfg_class_init(ObjectClass *oc, const = void *data) rc->phases.enter =3D igvm_reset_enter; rc->phases.hold =3D igvm_reset_hold; rc->phases.exit =3D igvm_reset_exit; + + uc->complete =3D igvm_complete; } =20 static void igvm_cfg_init(Object *obj) { + IgvmCfg *igvm =3D IGVM_CFG(obj); + + igvm->file =3D -1; qemu_register_resettable(obj); } =20 static void igvm_cfg_finalize(Object *obj) { + IgvmCfg *igvm =3D IGVM_CFG(obj); + qemu_unregister_resettable(obj); + if (igvm->file >=3D 0) { + igvm_free(igvm->file); + } } diff --git a/backends/igvm.c b/backends/igvm.c index fbb8300b6d01..a01e01a12a60 100644 --- a/backends/igvm.c +++ b/backends/igvm.c @@ -869,7 +869,7 @@ static int qigvm_handle_policy(QIgvm *ctx, Error **errp) return 0; } =20 -static IgvmHandle qigvm_file_init(char *filename, Error **errp) +IgvmHandle qigvm_file_init(char *filename, Error **errp) { IgvmHandle igvm; g_autofree uint8_t *buf =3D NULL; @@ -898,10 +898,11 @@ int qigvm_process_file(IgvmCfg *cfg, ConfidentialGues= tSupport *cgs, QIgvm ctx; =20 memset(&ctx, 0, sizeof(ctx)); - ctx.file =3D qigvm_file_init(cfg->filename, errp); - if (ctx.file < 0) { + if (cfg->file < 0) { + error_setg(errp, "No IGVM file loaded."); return -1; } + ctx.file =3D cfg->file; =20 /* * The ConfidentialGuestSupport object is optional and allows a confid= ential @@ -992,7 +993,5 @@ cleanup_parameters: g_free(ctx.id_auth); =20 cleanup: - igvm_free(ctx.file); - return retval; } --=20 2.52.0