From nobody Tue Feb 10 02:28:13 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=1768224317; cv=none; d=zohomail.com; s=zohoarc; b=fma1G/IX947WzdmROyjV7/63kSzoM6A7vJG0CrJuWM9fjTpvczdBwvagx+wTjdeE3MUMtb5N+szUgU6zz4aN5dXwd3pv6fo97TyQjRPXJh4eoxcutf+bslvCm+BVsrqNfYThZY3Osxtgz0NAsq9jyEkRJQ3jBl0wJ9a9/W9mbjc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768224317; 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=re0muZmMrtqo8EWO5a5L2LHVK2cH9w5XVHhtUQzVCdc=; b=UtQJ1tGHqrUGtk/niBB11PLyL/ZbmqBQNl/khAUpXHszCnHmvvAiQLvjXGztmE57aXwH4+YUG/Cu9ZRXaLEWyDcedYOPA3VwY1XVunv2xwNbBImmP+4EozjBMhphX3N2VT3Cc2Arm0WkCD7xtv7xwnuZLTQpDyu13j02OtJIhK4= 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 1768224317740724.9661834290672; Mon, 12 Jan 2026 05:25:17 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vfHui-0004aZ-TO; Mon, 12 Jan 2026 08:24:57 -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 1vfHtz-00039p-6k for qemu-devel@nongnu.org; Mon, 12 Jan 2026 08:24:16 -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 1vfHtt-0003mo-NI for qemu-devel@nongnu.org; Mon, 12 Jan 2026 08:24:07 -0500 Received: from mail-pg1-f198.google.com (mail-pg1-f198.google.com [209.85.215.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-330-01dExezYNliTDv5FfB0VdQ-1; Mon, 12 Jan 2026 08:24:04 -0500 Received: by mail-pg1-f198.google.com with SMTP id 41be03b00d2f7-c5539b9adc3so1865634a12.1 for ; Mon, 12 Jan 2026 05:24:03 -0800 (PST) Received: from rhel9-box.lan ([110.227.88.119]) by smtp.googlemail.com with ESMTPSA id 41be03b00d2f7-c4cc05cd87asm17544771a12.15.2026.01.12.05.24.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Jan 2026 05:24:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1768224245; 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=re0muZmMrtqo8EWO5a5L2LHVK2cH9w5XVHhtUQzVCdc=; b=VvYyC24BdqmIrXz7Drcs7jT5i4u2nk0zQFCMvAx0ycanW0lzfaOfiI6j8dQ/agxNHjlRzo 5nF+nlsmKL3UNQBwLFWVMq4ZQ/LrjwlDwxG36CYVYbDZawqCR7ES9ft+xjD8TbsxBOzxlV SZRfRgLMSqj6ErtGeHka1NiM33am/S4= X-MC-Unique: 01dExezYNliTDv5FfB0VdQ-1 X-Mimecast-MFC-AGG-ID: 01dExezYNliTDv5FfB0VdQ_1768224243 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1768224243; x=1768829043; darn=nongnu.org; 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=re0muZmMrtqo8EWO5a5L2LHVK2cH9w5XVHhtUQzVCdc=; b=j/oDPFOX+wBnykqgnCNgZ8jbQzwxFeLIGXussIT7sxT3SyYH02ZdP5Rpf562ge3dZl 3ArIPh/ISAYN7CXaCMsUph7f5OFtlSLWIatbhE+x9r62jy8FwqwCeQEAK99WHKFQtb96 ymP8CeN4BDlalqbcYn2WYOjctz0QndLpwYRSy8i9nlfZuFdn7iffKOqzf7VP3zh3vvi2 aEZVDYoLegEOp/gvjctLzwSDQ7jhg4w5ME+YRBKvtH86ziDlYr3fWJrcK1tY9CLbOSvu 3JdmXma2PIobWqKNH2mQLAiOTeHCwGX3qgzXbVbAH+71HlR1Cc2n1Ke3fdXK02tAAyAL nZ/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768224243; x=1768829043; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=re0muZmMrtqo8EWO5a5L2LHVK2cH9w5XVHhtUQzVCdc=; b=WS1FbCcnDi+74uKHZhLFzq6+FPJe0AyWQv2QCbY8khZTP/FzOOn1itJplyuT1pkZS4 pCZ94BtJ+VT8QcPFqSf7sO/baHAjfF89v4Np/b/F/vbRiQN/1GaRgQA6Se6MqCQxWaF7 QIhKkVqqQ0+FzpFZlajlr3mXrtClBCisqG6mu6tpKJ4vsdvJMgnVZgdVivEcsA9eoMHf tXIUGS6f3D5hBVCfx0+90iti/8++041pZz9SPyBbHaY2Ol+0o5nBDCPfNinnzztV8lZq pBrJXX9fUh7VLi8aeZ3UV0E4Rj8UT+qjGbgOU2IL+xFmTw3y2LZ3AOrzbjyQIwLd55p9 WZaQ== X-Forwarded-Encrypted: i=1; AJvYcCX0YgQq6Rhd80KNBufkow0B0xptiWB1No0cmMacZGzAf7PhJCfIsuC3DpQ6JeQAzeNC9yeBaIIZmtPG@nongnu.org X-Gm-Message-State: AOJu0Yz1jmLoH9xTXtFrZ+Wx5C1YB5eIP/kq93cWm91ZQhUhcoiW4fWR XggYMUYNb1f/g94NY6VgSjHUnEUHIdq3RpsmFBPjwh16s0G6Bd1SOkzE/QtzKlfSdGZbKL5IdnE SRlWs1lbtPHTULgx3Zeyq8Njufk7FZ2gnTGe6AOGOhTowaISvNzBy9QLZ X-Gm-Gg: AY/fxX7ANjntdNv6Ur+GztSgGIQtjBCKRH4flb87nBMwbKUnbA4kcAHa1reE2yY8slD 7qsi1IFcDHPwlR1TTDD/w9q4QT6ZqOMJQj0aZ8soOdwDqBnHtEHgS/1M4ySI+oxE0NDSeiYIbxB NNRY6fMdIiwqiGaG0R+1q8MfD+ALt+O87cTiLcLYxgDDtGodAgiPDnavlm+9Xw0njdZroVY+OmG 4sHgzPQEEJosziiBy6lFEv9b6/OgAMpaDcI4m7eWyFivqTIJySRAfiMRZEzJNNoDf43WcbVSwW/ cgbjRJ9dvccKSzhi7uuw/o/iLr+lyZgQ7wdNEncZ9+dR4Xvu2B7Xz6a9jbHLXY9vQffapvUuyK8 bczLu/WXfgWpJnIKjCp2vLfYk1qo0NXlJmyVjlZIusKE= X-Received: by 2002:a05:6a20:5493:b0:366:14ac:8c6d with SMTP id adf61e73a8af0-3898f9cf622mr16237020637.67.1768224242888; Mon, 12 Jan 2026 05:24:02 -0800 (PST) X-Google-Smtp-Source: AGHT+IGjz1PJMGZym0PSu5C9k8ojaJS95nPXlOCAztYTfHj1g2CJ3fKTkb5Z0vZjd85rOHWGK+xRjg== X-Received: by 2002:a05:6a20:5493:b0:366:14ac:8c6d with SMTP id adf61e73a8af0-3898f9cf622mr16237004637.67.1768224242460; Mon, 12 Jan 2026 05:24:02 -0800 (PST) From: Ani Sinha To: Paolo Bonzini , Marcelo Tosatti Cc: Ani Sinha , kvm@vger.kernel.org, qemu-devel@nongnu.org Subject: [PATCH v2 14/32] i386/tdx: finalize TDX guest state upon reset Date: Mon, 12 Jan 2026 18:52:27 +0530 Message-ID: <20260112132259.76855-15-anisinha@redhat.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20260112132259.76855-1-anisinha@redhat.com> References: <20260112132259.76855-1-anisinha@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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 (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=anisinha@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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1768224319558158501 Content-Type: text/plain; charset="utf-8" When the confidential virtual machine KVM file descriptor changes due to the guest reset, some TDX specific setup steps needs to be done again. This includes finalizing the inital guest launch state again. This change re-executes some parts of the TDX setup during the device reset phaze using= a resettable interface. This finalizes the guest launch state again and locks it in. Machine done notifier which was previously used is no longer needed = as the same code is now executed as a part of VM reset. Signed-off-by: Ani Sinha --- target/i386/kvm/tdx.c | 38 +++++++++++++++++++++++++++++++----- target/i386/kvm/tdx.h | 1 + target/i386/kvm/trace-events | 3 +++ 3 files changed, 37 insertions(+), 5 deletions(-) diff --git a/target/i386/kvm/tdx.c b/target/i386/kvm/tdx.c index b595eabb6a..cba07785f7 100644 --- a/target/i386/kvm/tdx.c +++ b/target/i386/kvm/tdx.c @@ -19,6 +19,7 @@ #include "crypto/hash.h" #include "system/kvm_int.h" #include "system/runstate.h" +#include "system/reset.h" #include "system/system.h" #include "system/ramblock.h" #include "system/address-spaces.h" @@ -38,6 +39,7 @@ #include "kvm_i386.h" #include "tdx.h" #include "tdx-quote-generator.h" +#include "trace.h" =20 #include "standard-headers/asm-x86/kvm_para.h" =20 @@ -389,9 +391,19 @@ static void tdx_finalize_vm(Notifier *notifier, void *= unused) CONFIDENTIAL_GUEST_SUPPORT(tdx_guest)->ready =3D true; } =20 -static Notifier tdx_machine_done_notify =3D { - .notify =3D tdx_finalize_vm, -}; +static void tdx_handle_reset(Object *obj, ResetType type) +{ + if (!runstate_is_running() && !phase_check(PHASE_MACHINE_READY)) { + return; + } + + if (!kvm_enable_hypercall(BIT_ULL(KVM_HC_MAP_GPA_RANGE))) { + error_setg(&error_fatal, "KVM_HC_MAP_GPA_RANGE not enabled for gue= st"); + } + + tdx_finalize_vm(NULL, NULL); + trace_tdx_handle_reset(); +} =20 /* * Some CPUID bits change from fixed1 to configurable bits when TDX module @@ -738,8 +750,6 @@ static int tdx_kvm_init(ConfidentialGuestSupport *cgs, = Error **errp) */ kvm_readonly_mem_allowed =3D false; =20 - qemu_add_machine_init_done_notifier(&tdx_machine_done_notify); - tdx_guest =3D tdx; return 0; } @@ -1505,6 +1515,7 @@ OBJECT_DEFINE_TYPE_WITH_INTERFACES(TdxGuest, TDX_GUEST, X86_CONFIDENTIAL_GUEST, { TYPE_USER_CREATABLE }, + { TYPE_RESETTABLE_INTERFACE }, { NULL }) =20 static void tdx_guest_init(Object *obj) @@ -1538,20 +1549,37 @@ static void tdx_guest_init(Object *obj) =20 tdx->event_notify_vector =3D -1; tdx->event_notify_apicid =3D -1; + qemu_register_resettable(obj); } =20 static void tdx_guest_finalize(Object *obj) { } =20 +static ResettableState *tdx_reset_state(Object *obj) +{ + TdxGuest *tdx =3D TDX_GUEST(obj); + return &tdx->reset_state; +} + static void tdx_guest_class_init(ObjectClass *oc, const void *data) { ConfidentialGuestSupportClass *klass =3D CONFIDENTIAL_GUEST_SUPPORT_CL= ASS(oc); X86ConfidentialGuestClass *x86_klass =3D X86_CONFIDENTIAL_GUEST_CLASS(= oc); + ResettableClass *rc =3D RESETTABLE_CLASS(oc); =20 klass->kvm_init =3D tdx_kvm_init; x86_klass->kvm_type =3D tdx_kvm_type; x86_klass->cpu_instance_init =3D tdx_cpu_instance_init; x86_klass->adjust_cpuid_features =3D tdx_adjust_cpuid_features; x86_klass->check_features =3D tdx_check_features; + + /* + * the exit phase makes sure sev handles reset after all legacy resets + * have taken place (in the hold phase) and IGVM has also properly + * set up the boot state. + */ + rc->phases.exit =3D tdx_handle_reset; + rc->get_state =3D tdx_reset_state; + } diff --git a/target/i386/kvm/tdx.h b/target/i386/kvm/tdx.h index 1c38faf983..264fbe530c 100644 --- a/target/i386/kvm/tdx.h +++ b/target/i386/kvm/tdx.h @@ -70,6 +70,7 @@ typedef struct TdxGuest { =20 uint32_t event_notify_vector; uint32_t event_notify_apicid; + ResettableState reset_state; } TdxGuest; =20 #ifdef CONFIG_TDX diff --git a/target/i386/kvm/trace-events b/target/i386/kvm/trace-events index 1f4786f687..47473001d8 100644 --- a/target/i386/kvm/trace-events +++ b/target/i386/kvm/trace-events @@ -14,3 +14,6 @@ kvm_xen_soft_reset(void) "" kvm_xen_set_shared_info(uint64_t gfn) "shared info at gfn 0x%" PRIx64 kvm_xen_set_vcpu_attr(int cpu, int type, uint64_t gpa) "vcpu attr cpu %d t= ype %d gpa 0x%" PRIx64 kvm_xen_set_vcpu_callback(int cpu, int vector) "callback vcpu %d vector %d" + +# tdx.c +tdx_handle_reset(void) "" --=20 2.42.0