From nobody Wed Nov 27 08:32:34 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=@intel.com; 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=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1700032853; cv=none; d=zohomail.com; s=zohoarc; b=HrQzcvRQOzx05mz9MUSEmTMrSk2QKXK2oI4kkWJRg7gp6mRMYPMZB889J3jmxiD2TLvBVLL6eIeYUHg1YsHyKR44AlkvAtRimDNbUdAK0pEVI/4Q9YOKPbed4+f8h7gqfPKwDlq29wOvxhIGBvqEdR8eFrBIc5j9MrgZO2qzCrU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1700032853; 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=ZNmZASE2eVdLYcTOa+KjdVikXMGMp8wv/6Nq1o5f254=; b=bPm8wUKtOIyed5MIgBuRy1+2T7G1QN6zPGAE/cPFKuUuQPYq2wmqqfegEYqdvnn4UaOof4lblpFrJqNCB0fGiiGCTFej6G5VG162e4/FjzDA87t0Q5q8Lf7YuewodKCymWWEkJQSpapwW82OrfioBTbEg+MGHO5PB+uq3rm/9og= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=@intel.com; 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=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1700032853801613.7610148251662; Tue, 14 Nov 2023 23:20:53 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1r3ABr-0004pj-4q; Wed, 15 Nov 2023 02:19:59 -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 1r3ABp-0004bE-3S for qemu-devel@nongnu.org; Wed, 15 Nov 2023 02:19:57 -0500 Received: from mgamail.intel.com ([192.55.52.115]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1r3ABm-0003bE-34 for qemu-devel@nongnu.org; Wed, 15 Nov 2023 02:19:56 -0500 Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Nov 2023 23:19:53 -0800 Received: from lxy-clx-4s.sh.intel.com ([10.239.48.52]) by orsmga003.jf.intel.com with ESMTP; 14 Nov 2023 23:19:43 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1700032794; x=1731568794; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=YEcoHggTNp3SWmCyqSzPRp4dnOuhAVXArV6J4/gEuPY=; b=WB391ZDmQUU5KZBXTj6h2qd9FIXRYK5Zvrw8Nk1PCRkVK4QE8sHIdj+C zg1Hrz7b+kHsgBs77nna2WcXQb65xHxBtfKzyBcxueNN55HRIV4UPbzSh QviqhoiDXEJ124/QzlrUjOO+yYAXaQ5gzvCDcqAYUT6SMwbHgBp9Ia0hB U1HvqfS0ITEUJQNvU167pqlhnqa33OW0rwlbjjq0ij1cCyleIFp3HbqeI T7CN0NzdGrwkMxObPnTTOjXTYyxO/F1wBNasuNJtWt7CegklEoJYLkh57 XQQ18d1DZnxYqDPAWlNCjrs/BC5QxnhPvUziZe7RzBf0x8P+wPUVvpuJn g==; X-IronPort-AV: E=McAfee;i="6600,9927,10894"; a="390623017" X-IronPort-AV: E=Sophos;i="6.03,304,1694761200"; d="scan'208";a="390623017" X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10894"; a="714799276" X-IronPort-AV: E=Sophos;i="6.03,304,1694761200"; d="scan'208";a="714799276" From: Xiaoyao Li To: Paolo Bonzini , David Hildenbrand , Igor Mammedov , "Michael S . Tsirkin" , Marcel Apfelbaum , Richard Henderson , Peter Xu , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Cornelia Huck , =?UTF-8?q?Daniel=20P=20=2E=20Berrang=C3=A9?= , Eric Blake , Markus Armbruster , Marcelo Tosatti Cc: qemu-devel@nongnu.org, kvm@vger.kernel.org, xiaoyao.li@intel.com, Michael Roth , Sean Christopherson , Claudio Fontana , Gerd Hoffmann , Isaku Yamahata , Chenyi Qiang Subject: [PATCH v3 35/70] i386/tdx: Make memory type private by default Date: Wed, 15 Nov 2023 02:14:44 -0500 Message-Id: <20231115071519.2864957-36-xiaoyao.li@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231115071519.2864957-1-xiaoyao.li@intel.com> References: <20231115071519.2864957-1-xiaoyao.li@intel.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 client-ip=192.55.52.115; envelope-from=xiaoyao.li@intel.com; helo=mgamail.intel.com X-Spam_score_int: -23 X-Spam_score: -2.4 X-Spam_bar: -- X-Spam_report: (-2.4 / 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, HK_RANDOM_ENVFROM=0.999, HK_RANDOM_FROM=0.999, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: 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 @intel.com) X-ZM-MESSAGEID: 1700032854102100001 Content-Type: text/plain; charset="utf-8" By default (due to the recent UPM change), restricted memory attribute is shared. Convert the memory region from shared to private at the memory slot creation time. add kvm region registering function to check the flag and convert the region, and add memory listener to TDX guest code to set the flag to the possible memory region. Without this patch - Secure-EPT violation on private area - KVM_MEMORY_FAULT EXIT (kvm -> qemu) - qemu converts the 4K page from shared to private - Resume VCPU execution - Secure-EPT violation again - KVM resolves EPT Violation This also prevents huge page because page conversion is done at 4K granularity. Although it's possible to merge 4K private mapping into 2M large page, it slows guest boot. With this patch - After memory slot creation, convert the region from private to shared - Secure-EPT violation on private area. - KVM resolves EPT Violation Originated-from: Isaku Yamahata Signed-off-by: Xiaoyao Li --- include/exec/memory.h | 1 + target/i386/kvm/tdx.c | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/include/exec/memory.h b/include/exec/memory.h index bdc4b98efe70..c8b0385b19ad 100644 --- a/include/exec/memory.h +++ b/include/exec/memory.h @@ -850,6 +850,7 @@ struct IOMMUMemoryRegion { #define MEMORY_LISTENER_PRIORITY_MIN 0 #define MEMORY_LISTENER_PRIORITY_ACCEL 10 #define MEMORY_LISTENER_PRIORITY_DEV_BACKEND 10 +#define MEMORY_LISTENER_PRIORITY_ACCEL_HIGH 20 =20 /** * struct MemoryListener: callbacks structure for updates to the physical = memory map diff --git a/target/i386/kvm/tdx.c b/target/i386/kvm/tdx.c index 50e68f9c1a41..82a1b010746a 100644 --- a/target/i386/kvm/tdx.c +++ b/target/i386/kvm/tdx.c @@ -19,6 +19,7 @@ #include "standard-headers/asm-x86/kvm_para.h" #include "sysemu/kvm.h" #include "sysemu/sysemu.h" +#include "exec/address-spaces.h" =20 #include "hw/i386/x86.h" #include "kvm_i386.h" @@ -619,6 +620,19 @@ out: return r; } =20 +static void tdx_guest_region_add(MemoryListener *listener, + MemoryRegionSection *section) +{ + memory_region_set_default_private(section->mr); +} + +static MemoryListener tdx_memory_listener =3D { + .name =3D TYPE_TDX_GUEST, + .region_add =3D tdx_guest_region_add, + /* Higher than KVM memory listener =3D 10. */ + .priority =3D MEMORY_LISTENER_PRIORITY_ACCEL_HIGH, +}; + static bool tdx_guest_get_sept_ve_disable(Object *obj, Error **errp) { TdxGuest *tdx =3D TDX_GUEST(obj); @@ -690,6 +704,12 @@ OBJECT_DEFINE_TYPE_WITH_INTERFACES(TdxGuest, static void tdx_guest_init(Object *obj) { TdxGuest *tdx =3D TDX_GUEST(obj); + static bool memory_listener_registered =3D false; + + if (!memory_listener_registered) { + memory_listener_register(&tdx_memory_listener, &address_space_memo= ry); + memory_listener_registered =3D true; + } =20 qemu_mutex_init(&tdx->lock); =20 --=20 2.34.1