From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.16]) (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 7EC1314F961 for ; Tue, 27 Feb 2024 21:25:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.16 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709069111; cv=none; b=ZKOyFq1dpu5YPPh/iUP+IrUrpR4g0GCqYYMCw5x7ykynT7DACRJgtF/PmKWTbec3nkUgViLGxLyS1RV41Gn2m85EJwsARTo0k2tduDDVf4bvUNR60gU5/TAtSvl7npEFFDNstpiUFnjC3WitoQXhh7YH4aJKtZjptNxbJNRmfjU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709069111; c=relaxed/simple; bh=W80pqKoVc1vqxX/XGuHFDF0b+nJhSWWU10+X3joqYlo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Jrsg3tTps7ZWdmVkNe0w8WUX/k76a6uFAMsx8vLZnsDo806kuWyh/PFJ5OfDx1+yU4zxtiZglV4YpL1JnCOTMs8SPuuFKimzjDXd0g40qHza7yPCnsHBQ6A8hDBEFj6EV1PykRNOzv9jVj3JbB9yOCzLKVhmjeKWGctZYP1/7iU= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.helo=mgamail.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=glWGcGcH; arc=none smtp.client-ip=198.175.65.16 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.helo=mgamail.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="glWGcGcH" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1709069110; x=1740605110; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=W80pqKoVc1vqxX/XGuHFDF0b+nJhSWWU10+X3joqYlo=; b=glWGcGcHkVkfgXLFkpEkM+4Sc81tlCHRSyamdvebdUl0xHWwGphHG+Ui bIx9Q/cR2zpt0njp/fwdBZMES1ToTaoabLPirWyxuVBbmxF1tCWgpaUMi UC7404EbZT/qkliDVs7OItY3n++rXK4OKvIi4CG2y1A3X9lQcDV79X0Kw FmXc8A3n8EsFRBJgK7GUkWjwJgSVZULTjJqR9kAvz4Tj+nuTkrHuxTZPw B8qwzrGCep+6l60/MiuzaGnSpB1J/6qf2FxYh8kMl33f77XFMDmCkjTni NgveDMd9Qno7Mtxp6RuWILEmRLdKZLdSeKAASBOQA+1IcoGtj1NCTpRYR Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10996"; a="3566989" X-IronPort-AV: E=Sophos;i="6.06,188,1705392000"; d="scan'208";a="3566989" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orvoesa108.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Feb 2024 13:25:09 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10996"; a="937032910" X-IronPort-AV: E=Sophos;i="6.06,188,1705392000"; d="scan'208";a="937032910" Received: from black.fi.intel.com ([10.237.72.28]) by fmsmga001.fm.intel.com with ESMTP; 27 Feb 2024 13:25:02 -0800 Received: by black.fi.intel.com (Postfix, from userid 1000) id 48969812; Tue, 27 Feb 2024 23:24:56 +0200 (EET) From: "Kirill A. Shutemov" To: Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org Cc: "Rafael J. Wysocki" , Peter Zijlstra , Adrian Hunter , Kuppuswamy Sathyanarayanan , Elena Reshetova , Jun Nakajima , Rick Edgecombe , Tom Lendacky , "Kalra, Ashish" , Sean Christopherson , "Huang, Kai" , Baoquan He , kexec@lists.infradead.org, linux-coco@lists.linux.dev, linux-kernel@vger.kernel.org, "Kirill A. Shutemov" Subject: [PATCHv8 08/17] x86/tdx: Account shared memory Date: Tue, 27 Feb 2024 23:24:43 +0200 Message-ID: <20240227212452.3228893-9-kirill.shutemov@linux.intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240227212452.3228893-1-kirill.shutemov@linux.intel.com> References: <20240227212452.3228893-1-kirill.shutemov@linux.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 kernel will convert all shared memory back to private during kexec. The direct mapping page tables will provide information on which memory is shared. It is extremely important to convert all shared memory. If a page is missed, it will cause the second kernel to crash when it accesses it. Keep track of the number of shared pages. This will allow for cross-checking against the shared information in the direct mapping and reporting if the shared bit is lost. Signed-off-by: Kirill A. Shutemov --- arch/x86/coco/tdx/tdx.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/arch/x86/coco/tdx/tdx.c b/arch/x86/coco/tdx/tdx.c index 26fa47db5782..979891e97d83 100644 --- a/arch/x86/coco/tdx/tdx.c +++ b/arch/x86/coco/tdx/tdx.c @@ -38,6 +38,8 @@ #define TDREPORT_SUBTYPE_0 0 +static atomic_long_t nr_shared; + /* Called from __tdx_hypercall() for unrecoverable failure */ noinstr void __noreturn __tdx_hypercall_failed(void) { @@ -821,6 +823,11 @@ static int tdx_enc_status_change_finish(unsigned long vaddr, int numpages, if (!enc && !tdx_enc_status_changed(vaddr, numpages, enc)) return -EIO; + if (enc) + atomic_long_sub(numpages, &nr_shared); + else + atomic_long_add(numpages, &nr_shared); + return 0; } -- 2.43.0