From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.8]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7DAC035FF49 for ; Thu, 12 Feb 2026 14:36:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.8 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770906985; cv=none; b=ReRBmCZLEURsjQ7Zn2+k9lerWsLv6/QjQnkutWk/QqX8uaJVY5FXyS3HGtr1eGXGYr1hbMUS51daHRcziudKfbGnSQ/w7iLci6CMcTs82wcpspA3tz0UWpj9KOmDOhzzK0f8yB++KRIB8opyS6nvwUonEMpTBn9++BDSRd/jgC8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770906985; c=relaxed/simple; bh=zwkWZFFVm60P2QwFX/e7Ve7KVFAIFmlNK9+fedDHPRc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=EhN0h6C0WW2v/NfLsJq4ufzMQFrXfFm0uM48n7fAGFOG/P05u9zsD9//E4r+lCe4MGCmCZHo7n+RNQ2nn4WLSUgibNW+uOCALy9cDrJrzlO03Z41J/8sbFqCVzka96v3+ng/WPtmrvuy95hLl9kd4jHmKI8OhngqYisP5KLpEj8= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=db4+TdQI; arc=none smtp.client-ip=192.198.163.8 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="db4+TdQI" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1770906983; x=1802442983; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=zwkWZFFVm60P2QwFX/e7Ve7KVFAIFmlNK9+fedDHPRc=; b=db4+TdQIGZ8OT0CFcJ4DLJwYWg+AOlR7CCvYAwb7WksSk+uYSI8laCKi Oc1w5EV+nYtRPl8ipk56QAB/x43Y8ing34tu7ZaRWksBBjDx2jidhH9H0 IRcIhjox4QGDcHp7Z6DyIXRDe2DotNNRcm5PyCO2GSOiEJxROt2h8a9CL MDcerU+dSjKXS0nQUFdKA0TB4eQIgPyDiUFEhPwSZlrEmdmK3tEdJ+pvc eRhRL9ULABOBzfUh5+SxSANZEi5Z4RFG6NsuGcGU69dIS/rzscf2Ga/pf dEsZVmIbotZDQw1W01tgy1AQYEkx6NyS+G2TEHWcBsuXmfW313HWdMNbM A==; X-CSE-ConnectionGUID: 6YH87ghMRMCE1zjIIA2xRg== X-CSE-MsgGUID: Wd54wKMlRHWg5uYsoxeU2g== X-IronPort-AV: E=McAfee;i="6800,10657,11699"; a="89662835" X-IronPort-AV: E=Sophos;i="6.21,286,1763452800"; d="scan'208";a="89662835" Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by fmvoesa102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Feb 2026 06:36:22 -0800 X-CSE-ConnectionGUID: ys3hN8RaS7KRupqUUROtYg== X-CSE-MsgGUID: vklTVCAoS3avnqBPKKYGow== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.21,286,1763452800"; d="scan'208";a="211428261" Received: from 984fee019967.jf.intel.com ([10.23.153.244]) by fmviesa006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Feb 2026 06:36:22 -0800 From: Chao Gao To: linux-coco@lists.linux.dev, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, x86@kernel.org Cc: reinette.chatre@intel.com, ira.weiny@intel.com, kai.huang@intel.com, dan.j.williams@intel.com, yilun.xu@linux.intel.com, sagis@google.com, vannapurve@google.com, paulmck@kernel.org, nik.borisov@suse.com, zhenzhong.duan@intel.com, seanjc@google.com, rick.p.edgecombe@intel.com, kas@kernel.org, dave.hansen@linux.intel.com, vishal.l.verma@intel.com, binbin.wu@linux.intel.com, tony.lindgren@linux.intel.com, Chao Gao , Thomas Gleixner , Ingo Molnar , Borislav Petkov , "H. Peter Anvin" Subject: [PATCH v4 12/24] x86/virt/seamldr: Abort updates if errors occurred midway Date: Thu, 12 Feb 2026 06:35:15 -0800 Message-ID: <20260212143606.534586-13-chao.gao@intel.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260212143606.534586-1-chao.gao@intel.com> References: <20260212143606.534586-1-chao.gao@intel.com> Precedence: bulk X-Mailing-List: linux-coco@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit The TDX Module update process has multiple steps, each of which may encounter failures. The current state machine of updates proceeds to the next step regardless of errors. But continuing updates when errors occur midway is pointless. Abort the update by setting a flag to indicate that a CPU has encountered an error, forcing all CPUs to exit the execution loop. Note that failing CPUs do not acknowledge the current step. This keeps all other CPUs waiting in the current step (since advancing to the next step requires all CPUs to acknowledge the current step) until they detect the fault flag and exit the loop. Signed-off-by: Chao Gao Reviewed-by: Xu Yilun Reviewed-by: Tony Lindgren --- v3: - Instead of fast-forward to the final stage, exit the execution loop directly. --- arch/x86/virt/vmx/tdx/seamldr.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/arch/x86/virt/vmx/tdx/seamldr.c b/arch/x86/virt/vmx/tdx/seamldr.c index 21d572d75769..70bc577e5957 100644 --- a/arch/x86/virt/vmx/tdx/seamldr.c +++ b/arch/x86/virt/vmx/tdx/seamldr.c @@ -202,6 +202,7 @@ enum tdp_state { static struct { enum tdp_state state; atomic_t thread_ack; + atomic_t failed; } tdp_data; static void set_target_state(enum tdp_state state) @@ -240,12 +241,16 @@ static int do_seamldr_install_module(void *params) default: break; } - ack_state(); + + if (ret) + atomic_inc(&tdp_data.failed); + else + ack_state(); } else { touch_nmi_watchdog(); rcu_momentary_eqs(); } - } while (curstate != TDP_DONE); + } while (curstate != TDP_DONE && !atomic_read(&tdp_data.failed)); return ret; } @@ -287,6 +292,7 @@ int seamldr_install_module(const u8 *data, u32 size) return -EBUSY; } + atomic_set(&tdp_data.failed, 0); set_target_state(TDP_START + 1); ret = stop_machine_cpuslocked(do_seamldr_install_module, params, cpu_online_mask); if (ret) -- 2.47.3