From nobody Sun Jul 26 10:08:59 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=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1783464337; cv=none; d=zohomail.com; s=zohoarc; b=ZZWu2c/cpf4SgCYlaYDJRWvIF5WrjGWc2ddbD6j+WmYasSqHtJOogYT/JVPiqn6NBbOouPRW7lacIhg9DlSZGfgwLb+YB/lPoidxqhceVay8bxvlMpGfvjUGGTd5NhUamyW/ymuyYSiCW4z6ahDBS943FIm2XXB9TBl+UbR5JPk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783464337; 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=F62mc8Tl1Cc4gPDKV45QBXhrquRdA4ftBDpPYYJztPY=; b=eHI7jN2t3EMFov/Wer5o8TXCozznvvgSEFHRRBDSZ1hwOAoQAQ2NUgWrw/SCOD4r+B6hIWodFh/NE4TPIGX7/WqUgiYrXDmBjuwHADuLR7yI8711lf+UDayZ1odJDgxjHxbznBuVoEEJUWYtDp6PT8OzIoeW+8xww5yoxUro15k= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1783464337586632.1333309287668; Tue, 7 Jul 2026 15:45:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1whEVh-0001F0-0o; Tue, 07 Jul 2026 18:43:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1whEVf-0001DF-6u for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:23 -0400 Received: from mail-pl1-x631.google.com ([2607:f8b0:4864:20::631]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1whEVb-00044Z-BG for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:22 -0400 Received: by mail-pl1-x631.google.com with SMTP id d9443c01a7336-2cc8e87f29bso660665ad.2 for ; Tue, 07 Jul 2026 15:43:12 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:46c8:dda7:40fa:8958]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ccc9d3bbaesm18183805ad.57.2026.07.07.15.43.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jul 2026 15:43:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1783464191; x=1784068991; 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:content-type; bh=F62mc8Tl1Cc4gPDKV45QBXhrquRdA4ftBDpPYYJztPY=; b=eJbwYrbdhPPwpOMp3aD0eHTM5aS/ks0OClPXQQvOtedmCVziD53jodfcHae+VnS4JP /KnCfRAHGmAmXteuGYgNlBlHGjHymUfOXNM8sO3fmrcmjMUSBT3E7ptoSC05dt6Z2FkT 8o+mlEatFn2m2U11yw7LAiowjQlekDrWzQ6dXRXgs1j7fv7VdMNu2EZlbQ1xoMpDi2tE JaTeuvLpi1iLxcd88WE66rKcCaw/Waspk2T911p8wf4CCtA0HdHzA1rrcDFdVNhi3c6f Qnmt9SI/YSxNYAP6ENKklS6h37HRRL/2NPHbHL2LO3EuUWe5/eSHrFfBg9SW9ySgHTfA 3UyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783464191; x=1784068991; 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:content-type; bh=F62mc8Tl1Cc4gPDKV45QBXhrquRdA4ftBDpPYYJztPY=; b=ZNDGqotSGI4fPW3Y3KwpKs+/0qv7zUJ2ti58XA07YkXZ9yCS019pBGyaVJNMzawbXN 97zm+b8l9olytVsKtqHvbexL+Wwe1mqSU0sMNbuJIPxfmosQpf8nlGzo2YIiHRtmdFMH uGoR1MQl4EOnRr0Z9pkJtIivMVy3NU3yFZRyJGhePnarytfPNVPGVEZDxQx4I7rDF5Je h658ME4z7XFZQOyZQm+kt/SbPYQRChCs3Rr71DLpjCZvqYA4vm419O65YgjO5lekoMgZ FLzo2rlRbNs+M7yS1T9NG0mfD+B3MoymfxmnMxsyTObiSZxZQauiVjaayQolxC0pWmXO dp4w== X-Gm-Message-State: AOJu0Ywx0HTh234IEnRsGGevx8wddY8NVbRFZocGJ3aJljMD+IQuE21U y/oRkelz5F1EZ3Q1a/BRvzF2oa9eI+m70Kjn0eyN9cFtlsUgcHRNPxHy7BObn4uIyfU= X-Gm-Gg: AfdE7cmCB+7L9tVZJ5qVwgMhkDQ9t4Qs+VnBQXZuIv/gsvMoLQcShEes0MRG+/3eAuS zrmg1Z17L80rkgm4kYj9Hq/xa9BhtVbuLw5OlS2bGFFGqfhmOrFe9ctHxKbKKwv/kZeTzELhDt6 d0EjBKNg+wdKeZjEjZXPp+spMeMczS+uzsh5EzyD9NOU3NDq9Lw90dpyDOVlpnapubFrKlQcaX9 HUKRJZkcSxG2ymWFqrqZA2qHFOuIGgl/fkHa1ryR1+k2dAA9kRm/H1Vu1NyRxhazxsL3ILln8Vf N9pTXh8XLCucHptUzxdN/oe1GDOM4Pw7X99jZM0JkDObrcWazdPHK3C7z5cfxGHWaqZni0H9pAr FJ6UzGNGkWFTDU+3e3PHt/KmUj7oM6trkeBbXPoNJ4fu95bT4+pjfYgLjurHNMbMjq3wiSPJIY9 MympMpnydPaKsjIaVd5bn7gkIQjbO7jm9YrnAMsvA= X-Received: by 2002:a17:903:3c2e:b0:2c9:97a8:afe8 with SMTP id d9443c01a7336-2ccbf087de6mr67975145ad.43.1783464191172; Tue, 07 Jul 2026 15:43:11 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, jpb@kernel.org, lorenzo.pieralisi@linaro.org Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v1 01/25] linux-headers: Add RME related definitions Date: Tue, 7 Jul 2026 16:42:42 -0600 Message-ID: <20260707224306.1202330-2-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260707224306.1202330-1-mathieu.poirier@linaro.org> References: <20260707224306.1202330-1-mathieu.poirier@linaro.org> 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::631; envelope-from=mathieu.poirier@linaro.org; helo=mail-pl1-x631.google.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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1783464339227158500 Content-Type: text/plain; charset="utf-8" From: Jean-Philippe Brucker This is a temporary patch intended for testing purposes only. It provides definitions related to supporting Realms by the QEMU-VMM. Signed-off-by: Jean-Philippe Brucker Signed-off-by: Mathieu Poirier --- linux-headers/asm-arm64/kvm.h | 9 +++++++++ linux-headers/linux/kvm.h | 21 +++++++++++++++++---- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/linux-headers/asm-arm64/kvm.h b/linux-headers/asm-arm64/kvm.h index 6aefe7973814..4c08631ec7d2 100644 --- a/linux-headers/asm-arm64/kvm.h +++ b/linux-headers/asm-arm64/kvm.h @@ -208,6 +208,15 @@ struct kvm_arm_counter_offset { __u64 reserved; }; =20 +#define KVM_ARM_RMI_POPULATE_FLAGS_MEASURE (1 << 0) +struct kvm_arm_rmi_populate { + __u64 base; + __u64 size; + __u64 source_uaddr; + __u32 flags; + __u32 reserved; +}; + #define KVM_ARM_TAGS_TO_GUEST 0 #define KVM_ARM_TAGS_FROM_GUEST 1 =20 diff --git a/linux-headers/linux/kvm.h b/linux-headers/linux/kvm.h index 50e87ed72c20..dae6e5ba8457 100644 --- a/linux-headers/linux/kvm.h +++ b/linux-headers/linux/kvm.h @@ -685,11 +685,21 @@ struct kvm_enable_cap { #define KVM_S390_SIE_PAGE_OFFSET 1 =20 /* - * On arm64, machine type can be used to request the physical - * address size for the VM. Bits[7-0] are reserved for the guest - * PA size shift (i.e, log2(PA_Size)). For backward compatibility, - * value 0 implies the default IPA size, 40bits. + * On arm64, machine type can be used to request both the machine type and + * the physical address size for the VM. + * + * Bits[31-30] are reserved for the ARM specific machine type. + * + * Bits[7-0] are reserved for the guest PA size shift (i.e, log2(PA_Size)). + * For backward compatibility, value 0 implies the default IPA size, 40bit= s. */ +#define KVM_VM_TYPE_ARM_SHIFT 30 +#define KVM_VM_TYPE_ARM_MASK (0x3ULL << KVM_VM_TYPE_ARM_SHIFT) +#define KVM_VM_TYPE_ARM(_type) \ + (((_type) << KVM_VM_TYPE_ARM_SHIFT) & KVM_VM_TYPE_ARM_MASK) +#define KVM_VM_TYPE_ARM_NORMAL KVM_VM_TYPE_ARM(0) +#define KVM_VM_TYPE_ARM_REALM KVM_VM_TYPE_ARM(1) + #define KVM_VM_TYPE_ARM_IPA_SIZE_MASK 0xffULL #define KVM_VM_TYPE_ARM_IPA_SIZE(x) \ ((x) & KVM_VM_TYPE_ARM_IPA_SIZE_MASK) @@ -719,6 +729,8 @@ struct kvm_enable_cap { #define KVM_GET_EMULATED_CPUID _IOWR(KVMIO, 0x09, struct kvm_cpuid2) #define KVM_GET_MSR_FEATURE_INDEX_LIST _IOWR(KVMIO, 0x0a, struct kvm_ms= r_list) =20 +#define KVM_ARM_RMI_POPULATE _IOWR(KVMIO, 0xd7, struct kvm_arm_rmi_popul= ate) + /* * Extension capability list. */ @@ -985,6 +997,7 @@ struct kvm_enable_cap { #define KVM_CAP_S390_USER_OPEREXEC 246 #define KVM_CAP_S390_KEYOP 247 #define KVM_CAP_S390_VSIE_ESAMODE 248 +#define KVM_CAP_ARM_RMI 249 =20 struct kvm_irq_routing_irqchip { __u32 irqchip; --=20 2.43.0 From nobody Sun Jul 26 10:08:59 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=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1783464239; cv=none; d=zohomail.com; s=zohoarc; b=IO9+7Bpy2tP1TyvklGiXgJlBJwpo92/2LKE5QqDTf6xoMZOBfMymAn7ly6JR+1MCPMRHsA2LVUFzkV7QZpP7xSTioAGv1xQVc6LdOBQosQAGQxZWt0mXHYrzSzGnuyiknaOxdpvdTYFe0vuvOpxUC6RRs/KnshCIuhoBXAURFfA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783464239; 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=R71DJ1s0zDCfKOKIafJMIMtfyKJnrf0v9yatLVZyeqA=; b=k3BPbezCqPrPATu+uC1rvlI9fEgUk9vrz9AiOHTB8G/9w7dbDNVPyTXRbdTYfFIjr5DqKU7JADyaZrb7WcnscEY0Sj/Yiv42zTtc/tT50KyISB0ezGxmXSuohw+mRp4YdFQ0F9gzWuVr2Umy1upDBTPnYkBB6IqNoefD1Fdoia0= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1783464239406323.18952083267834; Tue, 7 Jul 2026 15:43:59 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1whEVg-0001EC-J9; Tue, 07 Jul 2026 18:43:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1whEVf-0001DH-Bg for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:23 -0400 Received: from mail-pl1-x629.google.com ([2607:f8b0:4864:20::629]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1whEVc-00044r-G2 for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:23 -0400 Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-2c9b1edf2bdso1108015ad.1 for ; Tue, 07 Jul 2026 15:43:15 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:46c8:dda7:40fa:8958]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ccc9d3bbaesm18183805ad.57.2026.07.07.15.43.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jul 2026 15:43:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1783464194; x=1784068994; 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=R71DJ1s0zDCfKOKIafJMIMtfyKJnrf0v9yatLVZyeqA=; b=n7N7mfMvtXuaAlkWm0RiROqcX5mX7Ibl1cgUKSf489djjERAAlHDSiUR/YiA8GRwAB 6YmASsjFZz2+qUOIbnXoLdZS3krx8EG409uCxhhA89pUN4/jo75Xa369E1z1g2/qtIDX 4mrE96zt8xI7bFZeE7t6Hge9JMklK4CbZCk9/znr15eK4EwRDkK0RvjtgXDS59SM9RXD KxwemFUJY634nFbRa4309gLAUlUGsBYVcd9H2Jlr/knKthTDyNahxqzlKiWSVJOZA1sU 1yj0wJW3Je0yEt8M7mgGreePhSSvyzjsV0JwtAq/m8lsi8KE/RU+6VUuV/5sSby7W4N6 8eug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783464194; x=1784068994; 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=R71DJ1s0zDCfKOKIafJMIMtfyKJnrf0v9yatLVZyeqA=; b=Xew16/3fPLArbXANCRlFHQYl5VbeyuD1+Dbws9eiqOd1VusUBD2SI8yCvbi0v8T/qN eJ/5qRERT5/viN0IBxv94yUOzGu6E13CY4CH8Ne4qSomTn5lmWazOdmSCJS9Z/T2d+Pf srjv8mM5e5Cdv5HOyj7xs8L1D7/AwMWprQZXuVRo610EzxAqVoGUvLnb+n3p7PUoQD+O ni4gESdRXcZwebpARM7o328w0tzE+evaM/wyoV7Htq6ROsHghneWPq8kTum8fREBxY6P hl9fEly/CgU0ct47j9HgxPz8m4h9KLa9E+vAWv1sdpNdteSWr0pm1jlGd3mm9K+VBy8M IGwA== X-Gm-Message-State: AOJu0YxGrUErHicAHNf5p1B7b8uzRgLFu/RsxR3BpGV32RrmjqpbEPql 8HcDQb0LOVYVsBaJSfeUeWDKXK+NMDMOwSDG2zv2bmOa9oqRtBYqlgWpBdxUhXoeGjE= X-Gm-Gg: AfdE7cluPkuptCUyhSfw3UuEfqhGasNTZmYW229oj55Fx0/jN7Da9nUOH3Ox1cHMsCu w3laTluUh2Qum8iP0Hlamw9nZJbd4AEgtCLEKStSVDh7vSvX7EGzMIBjjblBoxTHN7mDRS0QUHY PzHR4/4W9CYGz9OCul8YQY+ej3dTUIaS2JBzhzXSSSIZDhEs7B4SsBPjPrvvnodrVPVwDmgfXSu yE4JvfHTf6eTqJjL0exMrjp81gIdgXc44Hn5OBIzgO66WRhCXoeW7a6gjgIAyIGaAyxDa0B4I8q /HhtFD3lGODSwyM0ctTEaKmoOYSXvBs+Uk6qrDT7hfRQbC3plYBvMK618zt8Mtrhm444P3w3yQK YHooX8ypPkVLtCh4qdVp8oS8x5YoAHYIOK9nMGhzgljORNKQmivl5U6N5A2ieLp43T1hmvJr3mB friN9joK2VQJWs/PPDAlSzzOb7MWJjjppaoaswgLM= X-Received: by 2002:a17:902:d4d1:b0:2cc:d192:50b5 with SMTP id d9443c01a7336-2ccd19251e8mr33153885ad.34.1783464194073; Tue, 07 Jul 2026 15:43:14 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, jpb@kernel.org, lorenzo.pieralisi@linaro.org Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v1 02/25] target/arm/kvm: Return immediately on error in kvm_arch_init() Date: Tue, 7 Jul 2026 16:42:43 -0600 Message-ID: <20260707224306.1202330-3-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260707224306.1202330-1-mathieu.poirier@linaro.org> References: <20260707224306.1202330-1-mathieu.poirier@linaro.org> 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::629; envelope-from=mathieu.poirier@linaro.org; helo=mail-pl1-x629.google.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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=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 @linaro.org) X-ZM-MESSAGEID: 1783464241721158500 Content-Type: text/plain; charset="utf-8" From: Jean-Philippe Brucker Returning an error to kvm_init() is fatal anyway, no need to continue the initialization. Leave the `ret` variable in the function scope because it will be reused when adding RME support. Signed-off-by: Jean-Philippe Brucker Signed-off-by: Mathieu Poirier Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- target/arm/kvm.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/target/arm/kvm.c b/target/arm/kvm.c index d40a6a985914..ed99be7fd80c 100644 --- a/target/arm/kvm.c +++ b/target/arm/kvm.c @@ -596,7 +596,7 @@ int kvm_arch_get_default_type(MachineState *ms) =20 int kvm_arch_init(MachineState *ms, KVMState *s) { - int ret =3D 0; + int ret; /* For ARM interrupt delivery is always asynchronous, * whether we are using an in-kernel VGIC or not. */ @@ -618,7 +618,7 @@ int kvm_arch_init(MachineState *ms, KVMState *s) !kvm_check_extension(s, KVM_CAP_ARM_IRQ_LINE_LAYOUT_2)) { error_report("Using more than 256 vcpus requires a host kernel " "with KVM_CAP_ARM_IRQ_LINE_LAYOUT_2"); - ret =3D -EINVAL; + return -EINVAL; } =20 if (kvm_check_extension(s, KVM_CAP_ARM_NISV_TO_USER)) { @@ -640,13 +640,14 @@ int kvm_arch_init(MachineState *ms, KVMState *s) warn_report("Eager Page Split support not available"); } else if (!(s->kvm_eager_split_size & sizes)) { error_report("Eager Page Split requested chunk size not valid"= ); - ret =3D -EINVAL; + return -EINVAL; } else { ret =3D kvm_vm_enable_cap(s, KVM_CAP_ARM_EAGER_SPLIT_CHUNK_SIZ= E, 0, s->kvm_eager_split_size); if (ret < 0) { error_report("Enabling of Eager Page Split failed: %s", strerror(-ret)); + return ret; } } } @@ -659,7 +660,7 @@ int kvm_arch_init(MachineState *ms, KVMState *s) hw_breakpoints =3D g_array_sized_new(true, true, sizeof(HWBreakpoint), max_hw_bps); =20 - return ret; + return 0; } =20 unsigned long kvm_arch_vcpu_id(CPUState *cpu) --=20 2.43.0 From nobody Sun Jul 26 10:08:59 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=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1783464349; cv=none; d=zohomail.com; s=zohoarc; b=Dm4nfx8GB1k1dfSCOHVj8XhXk9kwIl60k3/snS28iOidH/YbIVFiVCOSA1jc1LTqXh0A6EH5S+NcB05ZwmqmhlOkCzGfWXanSETiwGGhSqutYuhMZHLyG0ihCelccD9nzMGmhdSFczBph6AHOFhoFcE4FqC8QuAfPV3uPeb9gxE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783464349; 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=/EtuxP6qUgKAfe4TZdc89W+i3osoTftywciSv3aaq0s=; b=NV4grkuNb3b8YjgSB+NOTBtb5LstNy4AZYN35272SfaEiL9vHQoxTzDJnEICfuAzz8flklJ8dr7aJjR3AFJUbMcpwAEBcxvET8X7TcKLR5u3z+fJ1lTimva9ktgqId0rKNxYjL2KHEkg3OaV7ckWTzrY4TC8uFs/29sPhFVT0ic= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1783464349593554.4941117799262; Tue, 7 Jul 2026 15:45:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1whEVh-0001Gt-Sp; Tue, 07 Jul 2026 18:43:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1whEVf-0001DS-HC for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:23 -0400 Received: from mail-pl1-x62a.google.com ([2607:f8b0:4864:20::62a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1whEVc-000453-GY for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:23 -0400 Received: by mail-pl1-x62a.google.com with SMTP id d9443c01a7336-2cad8076b01so949835ad.2 for ; Tue, 07 Jul 2026 15:43:16 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:46c8:dda7:40fa:8958]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ccc9d3bbaesm18183805ad.57.2026.07.07.15.43.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jul 2026 15:43:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1783464196; x=1784068996; 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:content-type; bh=/EtuxP6qUgKAfe4TZdc89W+i3osoTftywciSv3aaq0s=; b=PUcAquOsanYQdx0KGMjkqnmiyUtmQe3HnB9TSMDsEX1H6chFwu5k5XAk66Ohw95D9V pa2afuhu3D/ox0WmZnRQwlvbnOgVs7964JFA3Pf69V+uY/7cfzwKr9QXuNJkKAlVtmKx p0O3yaPZpxEVkkMmsjIZYE2ftSrnEXg/Ub8/5E2HhhzPcBoCvLGYFE8HlQRETJq0pVK0 vlZBcKc5m0NtJyXmyN+2UZcewWwNcX8xSBxJV7Ar6GAYuLgZFL53c99FT/YuDL5rv8uR 4BAhPw4xMXd4B7Sva/XpIVhZfWptnNL9Xuv5kMh1G8J1HftZvVxQ/GVXuVJtSK2JyhfX cn+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783464196; x=1784068996; 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:content-type; bh=/EtuxP6qUgKAfe4TZdc89W+i3osoTftywciSv3aaq0s=; b=BowK/w9zWVH+dKRbEFuxP2v5CqCFCKrmCp3c5+NopEFmqVLZfs7n32NJo4G/MRPW9/ 1vocUpIxrUqW8oHFbD6QGbrgV3WpHPT+aE+2WAPjig16QnRvaWxyCyFAtlo6Z4e14Uck KNMZ6KBO2q3dq+nB2egSWgq0HPJVIIyxryc8T7wb4wsKk5huActZbgrkKlXwlxFZgk1g Oou255R1RjeFbAkmJTBwRM+EDPevHtqJTgVYoLciGUlxNMjT7j+KGr/t+y5s+YNpFsGW T19hRK2wgaPVqTkEUU00FzSJx+VBlJz+WOdScr5NgRdW1kh2Iq4zqdyrx7vNSW28EI1O m3ew== X-Gm-Message-State: AOJu0YylwP1QnAL4Gl509Nqrac5Jhf1ZdNcngZhheOngr9TYcz44pLgB 0KlvZlVLp6woN+E4wGbh+/d64DTgoL9lFglQNhqDnbMQgrLjjf/J725SjaQOdkaXLI4= X-Gm-Gg: AfdE7cn4Oax8YTKsX/Lm/rHEEXqrA3Udh221VTs6P9zxxrxwLQH6vQ4jeaL0pkJbtqT 4yroCB+xPL0kfm3GHG1SNm8VBeqLW99U1hmtVprC7mTqmDlxc6jeriiQxu4KsTMgKW1bmWecsti UtYYfDTJjK9UA+SDzx+kACOl/3TViYhMPcdH/juGWDbbtby6269zuwPCGKFV9ZcIfxhGBuBStEE PMvrLANrfDXDdOv+gYd/nZ7b7xm85Qu5RzeARSk2c4L7ITiXabnFlIVcfk1SvJprq7YE3hw7Eis lmde6CYvlWlij4+X/BkIQ7FwxxYT/zJH6VZZi0mey4c0NvrAppdDGvK8ctij/HwGqi+4nKSuSyE sckdE7m1S9AoLfK8K8nlP43Ej0obwjcg51lXicTh+sneUF738Of6wKWtt7rD2Utf+8GLIC+1FDk eEumIVQ3w+PvgP72psEku/v3f+njjkHKNxbqvXXXk= X-Received: by 2002:a17:903:384c:b0:2cc:90aa:8787 with SMTP id d9443c01a7336-2ccbe724a21mr71744795ad.6.1783464195895; Tue, 07 Jul 2026 15:43:15 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, jpb@kernel.org, lorenzo.pieralisi@linaro.org Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v1 03/25] target/arm: Add confidential guest support Date: Tue, 7 Jul 2026 16:42:44 -0600 Message-ID: <20260707224306.1202330-4-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260707224306.1202330-1-mathieu.poirier@linaro.org> References: <20260707224306.1202330-1-mathieu.poirier@linaro.org> 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62a; envelope-from=mathieu.poirier@linaro.org; helo=mail-pl1-x62a.google.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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=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 @linaro.org) X-ZM-MESSAGEID: 1783464351268158500 Content-Type: text/plain; charset="utf-8" From: Jean-Philippe Brucker Add a new RmeGuest object, inheriting from ConfidentialGuestSupport, to support the Arm Realm Management Extension (RME). It is instantiated by passing on the command-line: -M virt,confidential-guest-support=3D -object rme-guest,id=3D[,options...] This is only the skeleton. Support will be added in following patches. Signed-off-by: Jean-Philippe Brucker Signed-off-by: Mathieu Poirier --- docs/system/confidential-guest-support.rst | 1 + qapi/qom.json | 1 + target/arm/kvm-rme.c | 42 ++++++++++++++++++++++ target/arm/meson.build | 5 ++- 4 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 target/arm/kvm-rme.c diff --git a/docs/system/confidential-guest-support.rst b/docs/system/confi= dential-guest-support.rst index 562a7c3c2852..abb56923ad13 100644 --- a/docs/system/confidential-guest-support.rst +++ b/docs/system/confidential-guest-support.rst @@ -42,5 +42,6 @@ Currently supported confidential guest mechanisms are: * POWER Protected Execution Facility (PEF) (see :ref:`power-papr-protected= -execution-facility-pef`) * s390x Protected Virtualization (PV) (see :doc:`s390x/protvirt`) * AWS Nitro Enclaves (see :doc:`nitro`) +* Arm Realm Management Extension (RME) =20 Other mechanisms may be supported in future. diff --git a/qapi/qom.json b/qapi/qom.json index dd45ac1087c3..285d32c2cce3 100644 --- a/qapi/qom.json +++ b/qapi/qom.json @@ -1241,6 +1241,7 @@ { 'name': 'pr-manager-helper', 'if': 'CONFIG_LINUX' }, 'qtest', + 'rme-guest', 'rng-builtin', 'rng-egd', { 'name': 'rng-random', diff --git a/target/arm/kvm-rme.c b/target/arm/kvm-rme.c new file mode 100644 index 000000000000..42e1d1e7b859 --- /dev/null +++ b/target/arm/kvm-rme.c @@ -0,0 +1,42 @@ +/* + * QEMU Arm RME support + * + * SPDX-License-Identifier: GPL-2.0-or-later + * + * Copyright Linaro 2026 + */ + +#include "qemu/osdep.h" + +#include "hw/core/boards.h" +#include "hw/core/cpu.h" +#include "kvm_arm.h" +#include "migration/blocker.h" +#include "qapi/error.h" +#include "qom/object_interfaces.h" +#include "system/confidential-guest-support.h" +#include "system/kvm.h" +#include "system/runstate.h" + +#define TYPE_RME_GUEST "rme-guest" +OBJECT_DECLARE_SIMPLE_TYPE(RmeGuest, RME_GUEST) + +struct RmeGuest { + ConfidentialGuestSupport parent_obj; +}; + +OBJECT_DEFINE_SIMPLE_TYPE_WITH_INTERFACES(RmeGuest, rme_guest, RME_GUEST, + CONFIDENTIAL_GUEST_SUPPORT, + { TYPE_USER_CREATABLE }, { }) + +static void rme_guest_class_init(ObjectClass *oc, const void *data) +{ +} + +static void rme_guest_init(Object *obj) +{ +} + +static void rme_guest_finalize(Object *obj) +{ +} diff --git a/target/arm/meson.build b/target/arm/meson.build index 4412fde065f2..aff52a3f6eeb 100644 --- a/target/arm/meson.build +++ b/target/arm/meson.build @@ -31,7 +31,10 @@ arm_common_user_system_ss.add(when: 'TARGET_AARCH64', if= _true: files( arm_common_system_ss.add(files( 'arm-qmp-cmds.c', )) -arm_system_ss.add(when: 'CONFIG_KVM', if_true: files('hyp_gdbstub.c', 'kvm= .c')) +arm_system_ss.add(when: 'CONFIG_KVM', if_true: files( + 'hyp_gdbstub.c', + 'kvm.c', + 'kvm-rme.c')) arm_system_ss.add(when: 'CONFIG_HVF', if_true: files('hyp_gdbstub.c')) =20 arm_user_ss.add(files('cpu.c')) --=20 2.43.0 From nobody Sun Jul 26 10:08:59 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=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1783464378; cv=none; d=zohomail.com; s=zohoarc; b=lLwS6TAzR7ogDRKdUPOMf3gyjBUszZm/ZHfJBzgiP/34JyALUxfES+FTlzDzqtmCuvII0licXaqLSoOOCpGZ7RBy+NNz0HamovK1bIn/w6Djq8I1XRY8b5Eh4Q8VTLPusvZG7yz5xR4B7XqlqkuDlCfbfwy1LxmAr9ga+bvRXDc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783464378; 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=dR3NfNdVtBBic7lSVzoRn85byyneAw/58XsEkxNw3ag=; b=nKWVHdATSlyVzFno7cwEeB2aYHpivStqpvQE3F1BT8Wk0icELLWvdfz0VyeLu7QqmVGm71vbHuuGT4GraAvWBzKygekZHWuYCBbD1EwIqA9yJb9NDdaT484sqNf/QlRBreu+rD6UGQLVjT3aeLumOa78JRBO13z+/79HrsHwwFk= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1783464378714930.9866759536505; Tue, 7 Jul 2026 15:46:18 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1whEVi-0001HD-67; Tue, 07 Jul 2026 18:43:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1whEVg-0001EG-KX for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:24 -0400 Received: from mail-pl1-x62e.google.com ([2607:f8b0:4864:20::62e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1whEVc-00045J-HX for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:24 -0400 Received: by mail-pl1-x62e.google.com with SMTP id d9443c01a7336-2cc7ef7ec27so1332935ad.1 for ; Tue, 07 Jul 2026 15:43:19 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:46c8:dda7:40fa:8958]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ccc9d3bbaesm18183805ad.57.2026.07.07.15.43.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jul 2026 15:43:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1783464199; x=1784068999; 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:content-type; bh=dR3NfNdVtBBic7lSVzoRn85byyneAw/58XsEkxNw3ag=; b=MSvhoSF6ruHad/lRBTnZAUYk9KvxhJgtb5+6Rqr4Xs1TTGNhqQhgqAKNogyvym9CL3 FUIH8gMuQTrjBsPVOF2r5R9U7onAtyEbZ+1z45I4HUH9xoWv4O7+mchKMO14m2QKIMMa v8FugXW7CNUp5ssZuD7z36oXN1f+4cJ3nLGG/WvLbj7kQP7AolhT+erqhB0STCvBfR2+ U/2LTeU+O/fXq+AL75SOdeO6TVG2eFm19/MK6CuUK65NJno85cUUP+wNssBDhuu/ju4m Fxjl0HsemasiVLplUzj68HNe4wODAAGZzcrfhs33Hu7NZ4KNh/kDSSNISpRlLDuA3z9h vigg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783464199; x=1784068999; 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:content-type; bh=dR3NfNdVtBBic7lSVzoRn85byyneAw/58XsEkxNw3ag=; b=MC+DqMkVxcnlai2Wu+V9khjRTeL3jfuwtJjiV//THHd/ac34LHi6CjSsgSgWnOSjyL 3Wzgp4H3Mu5LXlCOE76lumEVmFlBCO+2EXsFZBXkEJAT7wjOHj17XL2u4/ZOM9eqTDY+ ffKkPdRsN/FMoUzGLQDrxR1RxCWgEVjlHBgXauNMrNP5IU2ohiGjPTZ86OBD2CxZdaZl ClpAxbFZw2FgE7exIaXelrEPuBoFS90LxCnG2SFhNJ+osgEmFyLc+E32qAI+eqz0EovR 5H7QqV4u0BmdCvGv1aGN5eY4GF3HOf0q7NhsIvrMVC/x9rqkuDqdbaKkLtToscFxJ8KK Npzg== X-Gm-Message-State: AOJu0Yx6AVMEDfOc/X9Ja7txl/mfJdHLZuNB3IBpDbk0QM3Y/35El/LK 0qkBcnyaUnEsMCoe0bpADKejxEXg9BrL95/EoVxyQH+kIGpZL/uP8hn6968tCooX9Bs= X-Gm-Gg: AfdE7clLnGZl5UahObdnowPix8IwMyCGm3EFr7CgOoRLOegJjCXy3949j6To4P2gNpS XgVmydpDj1RZSfQmQTZClB+2qpkvXGv5R5KEmNrS7KVB6Pjw/PaG8o5MEvKHAY7+wQ0ybnECnHk 84GGbdDfXmO7V2381lMwaYLy5PLMtbnbki6vJxsmxHCHSNH021QzFUBpqOuwx/mGA5qYuMjENGJ 1W1qXh1XGzGCqdkSZvBDTnDNa1cIPzCboGEEzPu0A8JL2bCxWtbEAg3sKKxDUunQY6spTChZpCN 3nHv2W2qYce9JgzwwUw5gAhrufW8TxoGf4gBc8xDc9ux+jmDF5YFetMozU42A1uCHtIJtVgkshF oI+3b+E2ntavc7rowCOYMQcQ1he/ebsPPxpq3wL0MVspg81vTqjI3bmZzO8gMiaqwElEBcdHwsi 1ENs9XCY/O27M2x9qDQjJ3stvKv8yHShdQOBbtyUY= X-Received: by 2002:a17:902:daca:b0:2ca:e565:7b15 with SMTP id d9443c01a7336-2ccbe50aa04mr67799045ad.10.1783464198645; Tue, 07 Jul 2026 15:43:18 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, jpb@kernel.org, lorenzo.pieralisi@linaro.org Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v1 04/25] target/arm/kvm-rme: Add mechanic to initialize realms Date: Tue, 7 Jul 2026 16:42:45 -0600 Message-ID: <20260707224306.1202330-5-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260707224306.1202330-1-mathieu.poirier@linaro.org> References: <20260707224306.1202330-1-mathieu.poirier@linaro.org> 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62e; envelope-from=mathieu.poirier@linaro.org; helo=mail-pl1-x62e.google.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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1783464379434158500 Content-Type: text/plain; charset="utf-8" From: Jean-Philippe Brucker Initialise an @rme_guest object and install a handler to get notified when the Realm is ready to start. That way we can finish reading the Realm once we know everything is in place. Signed-off-by: Jean-Philippe Brucker Signed-off-by: Mathieu Poirier --- target/arm/kvm-rme.c | 50 +++++++++++++++++++++++++++++++++++++++++++ target/arm/kvm-stub.c | 5 +++++ target/arm/kvm.c | 7 +++++- target/arm/kvm_arm.h | 9 ++++++++ 4 files changed, 70 insertions(+), 1 deletion(-) diff --git a/target/arm/kvm-rme.c b/target/arm/kvm-rme.c index 42e1d1e7b859..b86b9d6a25cb 100644 --- a/target/arm/kvm-rme.c +++ b/target/arm/kvm-rme.c @@ -13,6 +13,7 @@ #include "kvm_arm.h" #include "migration/blocker.h" #include "qapi/error.h" +#include "qemu/error-report.h" #include "qom/object_interfaces.h" #include "system/confidential-guest-support.h" #include "system/kvm.h" @@ -29,14 +30,63 @@ OBJECT_DEFINE_SIMPLE_TYPE_WITH_INTERFACES(RmeGuest, rme= _guest, RME_GUEST, CONFIDENTIAL_GUEST_SUPPORT, { TYPE_USER_CREATABLE }, { }) =20 +static RmeGuest *rme_guest; + +static void rme_vm_state_change(void *opaque, bool running, RunState state) +{ + if (!running) { + return; + } + + kvm_mark_guest_state_protected(); +} + static void rme_guest_class_init(ObjectClass *oc, const void *data) { } =20 static void rme_guest_init(Object *obj) { + if (rme_guest) { + error_report("a single instance of RmeGuest is supported"); + exit(1); + } + rme_guest =3D RME_GUEST(obj); } =20 static void rme_guest_finalize(Object *obj) { } + +int kvm_arm_rme_init(MachineState *ms, KVMState *s) +{ + static Error *rme_mig_blocker; + ConfidentialGuestSupport *cgs =3D ms->cgs; + + if (!rme_guest) { + return 0; + } + + if (!cgs) { + error_report("missing -machine confidential-guest-support paramete= r"); + return -EINVAL; + } + + if (!kvm_vm_check_extension(s, KVM_CAP_ARM_RMI)) { + error_report("KVM doesn't support Realms"); + return -ENODEV; + } + + error_setg(&rme_mig_blocker, "RME: migration is not implemented"); + migrate_add_blocker(&rme_mig_blocker, &error_fatal); + + /* + * The realm activation is done last, when the VM starts, after all im= ages + * have been loaded and all vcpus finalized. + */ + qemu_add_vm_change_state_handler(rme_vm_state_change, NULL); + + cgs->require_guest_memfd =3D true; + cgs->ready =3D true; + return 0; +} diff --git a/target/arm/kvm-stub.c b/target/arm/kvm-stub.c index 88cbe8d85c41..eec1ca3dd2e5 100644 --- a/target/arm/kvm-stub.c +++ b/target/arm/kvm-stub.c @@ -119,3 +119,8 @@ char *kvm_print_register_name(uint64_t regidx) { g_assert_not_reached(); } + +int kvm_arm_rme_init(MachineState *ms, KVMState *s) +{ + g_assert_not_reached(); +} diff --git a/target/arm/kvm.c b/target/arm/kvm.c index ed99be7fd80c..28d5643d6779 100644 --- a/target/arm/kvm.c +++ b/target/arm/kvm.c @@ -660,7 +660,12 @@ int kvm_arch_init(MachineState *ms, KVMState *s) hw_breakpoints =3D g_array_sized_new(true, true, sizeof(HWBreakpoint), max_hw_bps); =20 - return 0; + ret =3D kvm_arm_rme_init(ms, s); + if (ret) { + error_report("Failed to enable RME: %s", strerror(-ret)); + } + + return ret; } =20 unsigned long kvm_arch_vcpu_id(CPUState *cpu) diff --git a/target/arm/kvm_arm.h b/target/arm/kvm_arm.h index e7c40fb003e4..6d058b0e08a2 100644 --- a/target/arm/kvm_arm.h +++ b/target/arm/kvm_arm.h @@ -240,4 +240,13 @@ void arm_gic_cap_kvm_probe(GICCapability *v2, GICCapab= ility *v3); */ char *kvm_print_register_name(uint64_t regidx); =20 +/** + * kvm_arm_rme_init + * @ms: the machine state + * @s: State of KVM + * + * Prepare the machine to be a Realm, if the user enabled it. + */ +int kvm_arm_rme_init(MachineState *ms, KVMState *s); + #endif --=20 2.43.0 From nobody Sun Jul 26 10:08:59 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=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1783464331; cv=none; d=zohomail.com; s=zohoarc; b=mPutMP8mCxcsf789FQXVo2PfCwtTaH2YCNjCbMzK1gEMGdyGB8u9AEo/7/Stt4oabRSsF05Hazgc3yB/TUwDVTx3UXEEqYjw9bS8FsKd8cP5L2k8pwznKyUOaecaehCRYeiDk3YXNoVRf+umbxsxncMXjgkutWiy0AzdnJgK4Sk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783464331; 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=LPqEyUzT++gNY9WDAWkbqlVC0xxiLcUKrinmqOFE5ZQ=; b=FDeXj3Fbd8LRTS2Fr5I5HTzGy7Rd1B/o8vYj/No00d6TjqmFyMEjxcZ6URiQHPr/v0FGvHzssEs2ORGv+Pq8rTyv5gkv3VNkSRaQ+44GbNVUp6pQ0V3l+F3b7DvcIgwrTXFTn8d+tyhRqNtFPwJPo2EDxofz6UuLXuvQcGCCKYw= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1783464331120926.3867435649162; Tue, 7 Jul 2026 15:45:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1whEVj-0001I2-IT; Tue, 07 Jul 2026 18:43:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1whEVi-0001HL-Eu for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:26 -0400 Received: from mail-pl1-x632.google.com ([2607:f8b0:4864:20::632]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1whEVe-00045z-Gw for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:26 -0400 Received: by mail-pl1-x632.google.com with SMTP id d9443c01a7336-2caf228a910so564905ad.2 for ; Tue, 07 Jul 2026 15:43:22 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:46c8:dda7:40fa:8958]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ccc9d3bbaesm18183805ad.57.2026.07.07.15.43.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jul 2026 15:43:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1783464200; x=1784069000; 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:content-type; bh=LPqEyUzT++gNY9WDAWkbqlVC0xxiLcUKrinmqOFE5ZQ=; b=QQOLSDrQRmS708rQdWI9huj2NuCRPbphgJ1qeMDh4HtIaR1kSaxLn96KJQvVqCYd3+ XuwUj4ZMvbiFXQ+kwu+IfRW17oRbqeslaMquloOYcu+vpXJYwLCF8jn4UfuBLKLjQEEb p7z5X9f88uWDGSyqjjhCXkRAd06heUtpRehv8a/fSKzG7aMkcqRlxKJ3dqraVTfQ+fIN eQXRfgubqntKHNfno9LW4CK1Dfz8fmPIEoF8IuOB3jkv29UvLuXb8O+hG6gEx5bmRLUo f8JB8NpofW7B4V3puxE2ZeKVwW1qH4SdeFObzFxb8bgfNuuktaYCdYpv5bOjpJF+5UzW fbnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783464200; x=1784069000; 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:content-type; bh=LPqEyUzT++gNY9WDAWkbqlVC0xxiLcUKrinmqOFE5ZQ=; b=Ex8VnwR7TnOKjP6WNp1J0mxAena8NDXlXfGb69B7U4gXTbxlL2ism2oB00KkEFguBn XsJOG+6X5bJXBLo1yrtJTYEZPv0D97lWfpelQAU8NgBsgbBZY1XdxLIl8pEXZCTDALgq tY2rGuZL449Uk3WvZhz37MUzntPTNfyZmM/7t7KQ2tzSzDADujwj+bbRrRcdZSCzLIO8 SoAfVj5GWHBWME40htuwxZdeVu9DGSztuhHY5DeNxB8vem3n0hbfQVCr/UqGGaMBJ16t FLBcpZ5qzbf616PUPoYsooXBsFrx5USCoFtULRGSnCw8EEjMXrEZgscI6/rXPPJQLz6o jq8Q== X-Gm-Message-State: AOJu0YxtEShIMA4ru7jTlEl5Zdapb0H+Rz63OJp2+ayRx/lD8I2vyHc6 p5CZgMRlrC6uqCqu9EV3L+MTaaCgZDbVubHIYutBRyn6Jd9pJ1rNl1+BV8DMBJiq3Rs= X-Gm-Gg: AfdE7cktsEQ6HKg981xAtb3Aj+a77/SsOtzRhKifHEXB7J75oEUXzifqpO7Oq33VD56 btbJsMOp7ABwZJ0tkElqlbmjhFqFYVUSLwKMok7PRjwkoG4GZTksK9u+CKvaf/CwOGEGHL762LY uFPObnaBL/OKXNPM8p9+7SEtTtdsGQrBM3IwZBsv8H/W7rVdD7++Ru2AXfD6mmwPqHgtX/Kpy1I FDk41kRIrmwVHg9WEJh76YUMEQzQCW778GEl12jm0zYCeZNyYCKHvim6s1pbYoz78vvZpkNO3l+ HWaGYfulat7pwPMeJelq15O8XyVvT04LiJTQfBgjlxtPZ7R/kS/haHe6meCeLPht2qiT+gax4qy t50KYMWGz+TG4PqsVO8Hp1K6AP+R4irS3/7+yoGVtpmvC/miRxOD2704zdbHg83IAHK0bFBX1J9 yyZ9oZSyBda5020eYWS6ol2QOsV/P5OEZUXZwYGXE= X-Received: by 2002:a17:902:d4c7:b0:2ca:ce91:f027 with SMTP id d9443c01a7336-2ccbf08784fmr61937065ad.36.1783464200536; Tue, 07 Jul 2026 15:43:20 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, jpb@kernel.org, lorenzo.pieralisi@linaro.org Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v1 05/25] target/arm/kvm: Split kvm_arch_get/put_registers Date: Tue, 7 Jul 2026 16:42:46 -0600 Message-ID: <20260707224306.1202330-6-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260707224306.1202330-1-mathieu.poirier@linaro.org> References: <20260707224306.1202330-1-mathieu.poirier@linaro.org> 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::632; envelope-from=mathieu.poirier@linaro.org; helo=mail-pl1-x632.google.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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1783464333171158500 Content-Type: text/plain; charset="utf-8" From: Jean-Philippe Brucker For a Realm, KVM is much more restrictive on the registers a VMM can initialize. To prepare for Realm VM initialization, split the get/put register functions for a non-secure VM in their own function. Signed-off-by: Jean-Philippe Brucker Signed-off-by: Mathieu Poirier --- target/arm/kvm.c | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/target/arm/kvm.c b/target/arm/kvm.c index 28d5643d6779..b609f29c11c6 100644 --- a/target/arm/kvm.c +++ b/target/arm/kvm.c @@ -2163,7 +2163,7 @@ static int kvm_arch_put_sve(CPUState *cs, uint32_t vq= , bool have_ffr) return 0; } =20 -int kvm_arch_put_registers(CPUState *cs, KvmPutState level, Error **errp) +static int kvm_arm_put_core_regs(CPUState *cs, Error **errp) { uint64_t val; uint32_t fpr; @@ -2266,6 +2266,19 @@ int kvm_arch_put_registers(CPUState *cs, KvmPutState= level, Error **errp) return ret; } =20 + return 0; +} + +int kvm_arch_put_registers(CPUState *cs, KvmPutState level, Error **errp) +{ + int ret; + ARMCPU *cpu =3D ARM_CPU(cs); + + ret =3D kvm_arm_put_core_regs(cs, errp); + if (ret) { + return ret; + } + write_cpustate_to_list(cpu, true); =20 if (!write_list_to_kvmstate(cpu, level)) { @@ -2348,7 +2361,7 @@ static int kvm_arch_get_sve(CPUState *cs, uint32_t vq= , bool have_ffr) return 0; } =20 -int kvm_arch_get_registers(CPUState *cs, Error **errp) +static int kvm_arm_get_core_regs(CPUState *cs, Error **errp) { uint64_t val; unsigned int el; @@ -2451,6 +2464,19 @@ int kvm_arch_get_registers(CPUState *cs, Error **err= p) } vfp_set_fpcr(env, fpr); =20 + return 0; +} + +int kvm_arch_get_registers(CPUState *cs, Error **errp) +{ + int ret; + ARMCPU *cpu =3D ARM_CPU(cs); + + ret =3D kvm_arm_get_core_regs(cs, errp); + if (ret) { + return ret; + } + ret =3D kvm_get_vcpu_events(cpu); if (ret) { return ret; --=20 2.43.0 From nobody Sun Jul 26 10:08:59 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=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1783464410; cv=none; d=zohomail.com; s=zohoarc; b=KfAJQihcO0irC7+yvyOZu3t3cjdKZv8qQG8n5opfcwEXrD5RvoJYqHYlFlxJ0dcoDAFFlSXL0+v0pEZdAX6g4lwKuq7wnMytnhnXwTlkBWxMpSvRPSoGPoI1fEtsC+/FrxTJ3pj0QhSmfxVfCoRAI9l3TFxD3QFhLrC9KN7gw4U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783464410; 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=S+Uo2EB9jLwY0LEkC0O2VfYLiSzWX0HxD0y0hCTws0U=; b=P/VPOu+cmdnUCwDsCqXkLYZnGHjHlGBScmOVgKJ+QoOWhXNuli5QOgmTtZHiFc2wOEuzURZN3J09Vj7fZHMgrdAeAwryalFPL526qwuSo8RMjO7rDov4aJxt1RJFW45s6FOWuainwCiR71UTNrDsdkYQLddcC+MjgMTYxTU12Is= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1783464410692109.26484279095234; Tue, 7 Jul 2026 15:46:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1whEVl-0001Jd-1X; Tue, 07 Jul 2026 18:43:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1whEVj-0001Hj-3c for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:27 -0400 Received: from mail-pl1-x62d.google.com ([2607:f8b0:4864:20::62d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1whEVg-00047N-1t for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:26 -0400 Received: by mail-pl1-x62d.google.com with SMTP id d9443c01a7336-2cace91f112so823855ad.0 for ; Tue, 07 Jul 2026 15:43:23 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:46c8:dda7:40fa:8958]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ccc9d3bbaesm18183805ad.57.2026.07.07.15.43.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jul 2026 15:43:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1783464203; x=1784069003; 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=S+Uo2EB9jLwY0LEkC0O2VfYLiSzWX0HxD0y0hCTws0U=; b=RU6tVLs+XzWnh1zZEQNAStKReKTInR3IZUZUaqjn17moDpi2ykq/wCnJRSnDN0GXBc INwhHbSixX+woY1ro2p6stCtldTJmr49isLiXcoBtRXEVRgwqmN+PyJkovmqpR3P6rxX gArznS7ojnbVr+aDbi/VK4PiNFaCRBHA/JHz+bLzQQQwHROE6124gUIgtVI9n6mdnlgz wUZ5+3zPTiiTxgXdt//YJVQPlbvb4GqyuLeOv4PhzPwuEy/8VOUL7gFDt6yHvtxsV7Vg 5+v4/FDEv09RCy8yJ03u2NQc7AHOLvFoEpVIcE4wSDsssAepvMEudiLlhYFYEcEnJ4t/ bYug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783464203; x=1784069003; 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=S+Uo2EB9jLwY0LEkC0O2VfYLiSzWX0HxD0y0hCTws0U=; b=V81qpVHski4M0mzvFQi0sHQVmVxg275nF/3IO0xd6ENPXXKDh5N3urbJazdDqGv2w5 P/uIuw10TFlF/G/jDBvEKzw/9S0yGBS+aYq68ZADlx9lwdME/+/LxX4hvdF6kttPlQxF 9BYn42JWZj/dIsDHV+KnRZu1/JwnqFroWs+VO7Oy4pM+g5B+gPTNqrw2cJEAttBDIb8p KHAG9BCIbb07r5DOPjz8gIXBcPjGC2GEVr1vrG8aZRDuxlZ+TdD92Zseb1Y8XrvcQthw J2Zr4A0xGMCvx7nyldWny1cVH/Mgui/IXzNrEIodi84IzfL9TAFmrenqkS4IAhVNxN0G rtsw== X-Gm-Message-State: AOJu0Yxhky35G3E8JfwQfPfFX74IN/H+cvGa9OruXJsdRdoQQuv/qHbB JQNQkW8hOgKXgXwMi0lQSR/vPZEpeN+BC5JpsIHy28gCpJlJ42nmI+d7cQKRCsQ/9QM= X-Gm-Gg: AfdE7cnC8PDtV2sykXfBByB+p10jlg84Zu3Ftk4BOYJeLqZ1KKlajbiKXte9v/SXftj LTnRo8YK8wX5QQP2sFjrWXRcFAyNBwhSAWpq8GnjsJUabVWtJJOCK/20KuSKWRLjA3HPu+aX3z5 X8knmeTDXru6emXBrJThBjXGUYTY1h7lSo1zI3OLtdLO41kPR9/kJTH4xJw+eZR3X7gHb5ribLj 74nOWma0msG0iZ9mhsfCtErye//r+E1b/KdvOIXzXedFtuMW2zeZKYBEEyOVhei3tZ+f4d4HdBk ahX/3A2meW875ZrG/2Axz+Vvx4TX6LCc9YB00bmuHTwnrCrQsgQpzk4hqo8yxrcPI6VSiYzx920 XSRDK9rdLMq0gYzu5OY1H2KADcM5L+iTqXwF6YylX8sjh+EPLH3uR00trdi5zuZC2kVpMbNwaMO uTbdOLMZbfigAu+W+gKvKE3jYQylAnn37It1QZeC3SHhXKICNUKg== X-Received: by 2002:a17:903:3843:b0:2cb:ea0b:9164 with SMTP id d9443c01a7336-2ccbe3feba0mr70429385ad.6.1783464202589; Tue, 07 Jul 2026 15:43:22 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, jpb@kernel.org, lorenzo.pieralisi@linaro.org Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v1 06/25] target/arm/kvm-rme: Initialize vCPU Date: Tue, 7 Jul 2026 16:42:47 -0600 Message-ID: <20260707224306.1202330-7-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260707224306.1202330-1-mathieu.poirier@linaro.org> References: <20260707224306.1202330-1-mathieu.poirier@linaro.org> 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62d; envelope-from=mathieu.poirier@linaro.org; helo=mail-pl1-x62d.google.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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1783464411562158500 Content-Type: text/plain; charset="utf-8" From: Jean-Philippe Brucker The target code calls kvm_arm_vcpu_init() to mark the vCPU as part of a Realm. For a Realm vCPU, only x0-x7 can be set at runtime. Before boot, the PC can also be set, and is ignored at runtime. KVM also accepts a few system register changes during initial configuration, as returned by KVM_GET_REG_LIST. Signed-off-by: Jean-Philippe Brucker Signed-off-by: Mathieu Poirier --- target/arm/cpu.h | 3 +++ target/arm/kvm-rme.c | 9 ++++++++ target/arm/kvm-stub.c | 5 ++++ target/arm/kvm.c | 54 +++++++++++++++++++++++++++++++++++++++++-- target/arm/kvm_arm.h | 10 ++++++++ 5 files changed, 79 insertions(+), 2 deletions(-) diff --git a/target/arm/cpu.h b/target/arm/cpu.h index 03a30afcbed1..c7927036360c 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -1055,6 +1055,9 @@ struct ArchCPU { /* KVM steal time */ OnOffAuto kvm_steal_time; =20 + /* Realm Management Extension */ + bool kvm_rme; + /* Uniprocessor system with MP extensions */ bool mp_is_up; =20 diff --git a/target/arm/kvm-rme.c b/target/arm/kvm-rme.c index b86b9d6a25cb..90c1d30ba24c 100644 --- a/target/arm/kvm-rme.c +++ b/target/arm/kvm-rme.c @@ -90,3 +90,12 @@ int kvm_arm_rme_init(MachineState *ms, KVMState *s) cgs->ready =3D true; return 0; } + +void kvm_arm_rme_vcpu_init(ARMCPU *cpu) +{ + if (!rme_guest) { + return; + } + + cpu->kvm_rme =3D true; +} diff --git a/target/arm/kvm-stub.c b/target/arm/kvm-stub.c index eec1ca3dd2e5..4ab6f08637d1 100644 --- a/target/arm/kvm-stub.c +++ b/target/arm/kvm-stub.c @@ -124,3 +124,8 @@ int kvm_arm_rme_init(MachineState *ms, KVMState *s) { g_assert_not_reached(); } + +void kvm_arm_rme_vcpu_init(ARMCPU *cpu) +{ + g_assert_not_reached(); +} diff --git a/target/arm/kvm.c b/target/arm/kvm.c index b609f29c11c6..4c212ed0c337 100644 --- a/target/arm/kvm.c +++ b/target/arm/kvm.c @@ -2009,6 +2009,8 @@ int kvm_arch_init_vcpu(CPUState *cs) cpu->kvm_init_features[0] |=3D 1 << KVM_ARM_VCPU_HAS_EL2; } =20 + kvm_arm_rme_vcpu_init(cpu); + /* Do KVM_ARM_VCPU_INIT ioctl */ ret =3D kvm_arm_vcpu_init(cpu); if (ret) { @@ -2163,6 +2165,29 @@ static int kvm_arch_put_sve(CPUState *cs, uint32_t v= q, bool have_ffr) return 0; } =20 +static int kvm_arm_rme_put_core_regs(CPUState *cs, Error **errp) +{ + int i, ret; + ARMCPU *cpu =3D ARM_CPU(cs); + CPUARMState *env =3D &cpu->env; + + /* The RME ABI only allows us to set 8 GPRs and the PC */ + for (i =3D 0; i < 8; i++) { + ret =3D kvm_set_one_reg(cs, AARCH64_CORE_REG(regs.regs[i]), + &env->xregs[i]); + if (ret) { + return ret; + } + } + + ret =3D kvm_set_one_reg(cs, AARCH64_CORE_REG(regs.pc), &env->pc); + if (ret) { + return ret; + } + + return 0; +} + static int kvm_arm_put_core_regs(CPUState *cs, Error **errp) { uint64_t val; @@ -2274,7 +2299,11 @@ int kvm_arch_put_registers(CPUState *cs, KvmPutState= level, Error **errp) int ret; ARMCPU *cpu =3D ARM_CPU(cs); =20 - ret =3D kvm_arm_put_core_regs(cs, errp); + if (cpu->kvm_rme) { + ret =3D kvm_arm_rme_put_core_regs(cs, errp); + } else { + ret =3D kvm_arm_put_core_regs(cs, errp); + } if (ret) { return ret; } @@ -2361,6 +2390,23 @@ static int kvm_arch_get_sve(CPUState *cs, uint32_t v= q, bool have_ffr) return 0; } =20 +static int kvm_arm_rme_get_core_regs(CPUState *cs, Error **errp) +{ + int i, ret; + ARMCPU *cpu =3D ARM_CPU(cs); + CPUARMState *env =3D &cpu->env; + + for (i =3D 0; i < 8; i++) { + ret =3D kvm_get_one_reg(cs, AARCH64_CORE_REG(regs.regs[i]), + &env->xregs[i]); + if (ret) { + return ret; + } + } + + return 0; +} + static int kvm_arm_get_core_regs(CPUState *cs, Error **errp) { uint64_t val; @@ -2472,7 +2518,11 @@ int kvm_arch_get_registers(CPUState *cs, Error **err= p) int ret; ARMCPU *cpu =3D ARM_CPU(cs); =20 - ret =3D kvm_arm_get_core_regs(cs, errp); + if (cpu->kvm_rme) { + ret =3D kvm_arm_rme_get_core_regs(cs, errp); + } else { + ret =3D kvm_arm_get_core_regs(cs, errp); + } if (ret) { return ret; } diff --git a/target/arm/kvm_arm.h b/target/arm/kvm_arm.h index 6d058b0e08a2..12ed1eee18b4 100644 --- a/target/arm/kvm_arm.h +++ b/target/arm/kvm_arm.h @@ -249,4 +249,14 @@ char *kvm_print_register_name(uint64_t regidx); */ int kvm_arm_rme_init(MachineState *ms, KVMState *s); =20 +/** + * kvm_arm_rme_vcpu_init + * @cs: the CPU + * + * If the user requested a Realm, setup the given vCPU accordingly. Realm = vCPUs + * behave a little differently, for example most of their register state is + * hidden from the host. + */ +void kvm_arm_rme_vcpu_init(ARMCPU *cpu); + #endif --=20 2.43.0 From nobody Sun Jul 26 10:08:59 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=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1783464316; cv=none; d=zohomail.com; s=zohoarc; b=EXwq1NuTheI1GIiyJ73goYYThizlgsI6erdv48X/ebFKpZ67NTeF4cb7ILmj0yLTCJb/w1gqZByyr7fN85E2pDGG3ju463dO9A2XvJG/ezmz9fkYtCNy1ms0Ly4gcqzJ2FO5jrsEPKz2PDy1mjO9s37h1hsw66sBZ6o9kpx63Is= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783464316; 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=lBJ/QDAyECFxsw9vQUS2oMzovvSIiQI/RHhlqrlamsA=; b=Wwi0py6kFW1LHrqbNLRRTBUaXac9M0qFrV6c3rh3FjKvJdp28VciklHIAxApGtkff73qXHM6jqoXietrFUG4AHbvVua7sNMu/yJPNAsb42i/vQUbz67PYt6hIvPgNMXr/xl8WeA8K+BwT+y7HSHFwFsIfGnrn5kmh0UQA5cNN8Y= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1783464316572717.2230839049981; Tue, 7 Jul 2026 15:45:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1whEVl-0001Jv-P9; Tue, 07 Jul 2026 18:43:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1whEVk-0001IM-3T for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:28 -0400 Received: from mail-pl1-x62f.google.com ([2607:f8b0:4864:20::62f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1whEVh-00048A-QG for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:27 -0400 Received: by mail-pl1-x62f.google.com with SMTP id d9443c01a7336-2cc891373e0so786935ad.2 for ; Tue, 07 Jul 2026 15:43:25 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:46c8:dda7:40fa:8958]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ccc9d3bbaesm18183805ad.57.2026.07.07.15.43.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jul 2026 15:43:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1783464204; x=1784069004; 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:content-type; bh=lBJ/QDAyECFxsw9vQUS2oMzovvSIiQI/RHhlqrlamsA=; b=vwnX51fQI4FMc+cwwoW5Z+IUChh1Umk91yLOTqz3qXmt2QDnH9Jj6H2w9RxLNileIK PYDiA8GHNxzpMJrLYOB5lbRLRcX/rzWswI9j0p5P+xVIqbqkotfXLtO4zUr2/whMwQda G5ijXTFhGFtj6rpwML1GRB0Zh/NjoMHAkSfHgSJU3WmFl0bDeZfBDVzMj+qNRxdHnUgg +nD0wt6Mj5HSK8n+GGUyOo4yvg2C3WCDHYlJ+WDcLEoHZHXvBK5EV6ApPadVPqdBu8zt PeuOh+Zcs8YHUA3sllQTV+aKv4aGgWs5MZ8kWkMnGtZvgiP9eSbio1nB/5/2xBwHV5lX VmYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783464204; x=1784069004; 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:content-type; bh=lBJ/QDAyECFxsw9vQUS2oMzovvSIiQI/RHhlqrlamsA=; b=aebC/Rs1fmzxNxj8eH4Bo1gYtAiWh4S2MUYMeL6T9WXqq6rhlC8BUKM01oeX5/7XfL +YoCUkC1aJ7CC5aRzXyUKjXHcv9hNwwSBE4763lvhZzYd++gjgcx8J7D8phQAJ4fp2hN PVr+JYfBlfNfnuYfBic5ACitIOmVT7qfgXFD+4t5gU8BZa4SHUFWbdDRBReVr2riGLhY 5tXgN/K9VdcY+qk9OByu/d7q3ki6o1FuoYI1noheQo4l45BFacAZbsKCl5R82I02TmGk jeb244OtRat6pyQUq0yEInYcGHIIfKSzXUnJRCtax12+aByKB3H8dxpGSMdhA7zdm9Zv dNpA== X-Gm-Message-State: AOJu0YzLgRUpLBOorHuOW3+OMXqRGRYlkBGmGaV/uCywKv5E5RRuZjJA fj3JoVzQM4o6I8xQnYO5IhTJWBQogVXeTaL5GYl3F1gmmxLvCTTTsETHR7LdMghS/uM= X-Gm-Gg: AfdE7ck5zTg33CbPkuIWZYv8NwaLcBLk4CtWLnK3PDxdoBB4K9JQruIv9yCC+bF8j4g MaOe4K4dOSBHak3rTIsKzh63+dWRKKzXGiaC3aolKc/VDHGut7wQw60Z6YzfGk+4QEAhkcpET42 ATh9BHWJhMS5bLeHiXCu5sKK3ZeYCsKlotW3MiIzvgmh0VfuyNY3kLJ5umrPOuy5WKMhXvDGd64 QMO43Tn7aI1TZDWWi/7K0lPJYDfICKKYRtMoBmCmRazeY19rN3SFQICYaQeIBmzk3GchzcWblT8 AT3+3MNjQxB/Il9Rc0536xGqXAU/QkVAYxwwc29PAQmBUw+VRd+lfOywrFuhKqW4Wj2zkjuokFE 092TiMock5pyp/FyY1lKeb2sCbtlLMrmd+k9GjVoczAzGFhWlNzrcdTG5AeTWg3Ry0hTwGcq/jl /ip4FNiMr180+XAgG0IDzIhV8FYTNYJ8m5GfHf/UI= X-Received: by 2002:a17:903:1a0f:b0:2c9:97a7:b1eb with SMTP id d9443c01a7336-2ccbf06aea0mr62459205ad.42.1783464204248; Tue, 07 Jul 2026 15:43:24 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, jpb@kernel.org, lorenzo.pieralisi@linaro.org Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v1 07/25] target/arm/kvm: Create scratch Realm VM when requested Date: Tue, 7 Jul 2026 16:42:48 -0600 Message-ID: <20260707224306.1202330-8-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260707224306.1202330-1-mathieu.poirier@linaro.org> References: <20260707224306.1202330-1-mathieu.poirier@linaro.org> 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62f; envelope-from=mathieu.poirier@linaro.org; helo=mail-pl1-x62f.google.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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1783464317137158500 Content-Type: text/plain; charset="utf-8" From: Jean-Philippe Brucker When a Realm is requested, create a scratch Realm VM by setting bit 8 of the argument given to the KVM_CREATE_VM ioctl(). Bit 7-0 are reserved for the guest PA size. Signed-off-by: Jean-Philippe Brucker Signed-off-by: Mathieu Poirier --- target/arm/kvm-rme.c | 8 ++++++++ target/arm/kvm-stub.c | 5 +++++ target/arm/kvm.c | 4 +++- target/arm/kvm_arm.h | 8 ++++++++ 4 files changed, 24 insertions(+), 1 deletion(-) diff --git a/target/arm/kvm-rme.c b/target/arm/kvm-rme.c index 90c1d30ba24c..f763d5ed6199 100644 --- a/target/arm/kvm-rme.c +++ b/target/arm/kvm-rme.c @@ -99,3 +99,11 @@ void kvm_arm_rme_vcpu_init(ARMCPU *cpu) =20 cpu->kvm_rme =3D true; } + +int kvm_arm_rme_vm_type(void) +{ + if (rme_guest) { + return KVM_VM_TYPE_ARM_REALM; + } + return 0; +} diff --git a/target/arm/kvm-stub.c b/target/arm/kvm-stub.c index 4ab6f08637d1..6d52f172c5df 100644 --- a/target/arm/kvm-stub.c +++ b/target/arm/kvm-stub.c @@ -129,3 +129,8 @@ void kvm_arm_rme_vcpu_init(ARMCPU *cpu) { g_assert_not_reached(); } + +int kvm_arm_rme_vm_type(void) +{ + g_assert_not_reached(); +} diff --git a/target/arm/kvm.c b/target/arm/kvm.c index 4c212ed0c337..6aa1cd04e484 100644 --- a/target/arm/kvm.c +++ b/target/arm/kvm.c @@ -108,6 +108,7 @@ bool kvm_arm_create_scratch_host_vcpu(int *fdarray, { int ret =3D 0, kvmfd =3D -1, vmfd =3D -1, cpufd =3D -1; int max_vm_pa_size; + int vm_type; =20 kvmfd =3D qemu_open_old("/dev/kvm", O_RDWR); if (kvmfd < 0) { @@ -117,8 +118,9 @@ bool kvm_arm_create_scratch_host_vcpu(int *fdarray, if (max_vm_pa_size < 0) { max_vm_pa_size =3D 0; } + vm_type =3D kvm_arm_rme_vm_type(); do { - vmfd =3D ioctl(kvmfd, KVM_CREATE_VM, max_vm_pa_size); + vmfd =3D ioctl(kvmfd, KVM_CREATE_VM, max_vm_pa_size | vm_type); } while (vmfd =3D=3D -1 && errno =3D=3D EINTR); if (vmfd < 0) { goto err; diff --git a/target/arm/kvm_arm.h b/target/arm/kvm_arm.h index 12ed1eee18b4..65ec1b970606 100644 --- a/target/arm/kvm_arm.h +++ b/target/arm/kvm_arm.h @@ -259,4 +259,12 @@ int kvm_arm_rme_init(MachineState *ms, KVMState *s); */ void kvm_arm_rme_vcpu_init(ARMCPU *cpu); =20 +/** + * kvm_arm_rme_vm_type + * @ms: the machine state + * + * Returns the Realm KVM VM type if the user requested a Realm, 0 otherwis= e. + */ +int kvm_arm_rme_vm_type(void); + #endif --=20 2.43.0 From nobody Sun Jul 26 10:08:59 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=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1783464281; cv=none; d=zohomail.com; s=zohoarc; b=OVOUpY4YOjb/4ob5x3yGFQmDgXUNRzY5Nlvh7aqI1PjXd6P+8a/cHLDVc/IDOfTFPUe9XkR18OSGbdpptRWZq2ApnJQE3KUgpfB/5b+5kTZpp2GFXTK8MAcwKUHYY4K3/2nZ2VT5n/rBpmEZv/fOuX/g8BrMS5LJLt6Rz8nJdaE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783464281; 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=+Hja6qHGPQODpxQ8LqX3XJ4cmNcTjvVv4dMZ2DbbCzg=; b=Ejgrvnwl2oPVF98PcggM8Hx2BwFEbe6hU3VMKbOR0Vz+ggHeB/ojlZtseYx07r4bEj2VLxOquJ66hJrEsygw5y2PkhkQIXumHKF9wbjtYnNsh8ABknznDlp1OQYt42gUqatJSBV/Ez/VKY5RduXfFQf7KsM26jLL6XIJQ769EKo= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1783464281325872.668409960287; Tue, 7 Jul 2026 15:44:41 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1whEVm-0001KU-Ub; Tue, 07 Jul 2026 18:43:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1whEVl-0001Jq-IT for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:29 -0400 Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1whEVj-00048w-ST for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:29 -0400 Received: by mail-pj1-x1031.google.com with SMTP id 98e67ed59e1d1-3856d6fbcb3so47203a91.2 for ; Tue, 07 Jul 2026 15:43:27 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:46c8:dda7:40fa:8958]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ccc9d3bbaesm18183805ad.57.2026.07.07.15.43.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jul 2026 15:43:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1783464206; x=1784069006; 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:content-type; bh=+Hja6qHGPQODpxQ8LqX3XJ4cmNcTjvVv4dMZ2DbbCzg=; b=EzxeLIpzj3uV3ofwOWi+JVWrGYk2yqT2IpRGZBWsYEUExy42YdjJPkMji5pHJyICVE 2VOTuT2F4SLRkT3dOgZtePM7CZ4jh5MLC1EMhmszeb5fjWxRAGirMaNAvEEEkNp0/oJj hy5bBXXCdH+1ycXDp8Ol6y4KjsY7a+/UAgKTRpyqqRbC+2RZZ5hJo16zQprScMa47uo3 v00PnBQXT3ZAUfNKwZpN95fMV9IwmL4czN4RMixukhVATCvXqthyj7CwpBt3aBfBifah BirLEFBsWRRLsZURUGirT1XBiWOlepxnO4o1CsE4IZfRJDRgyclwxmfTpbNwHSDIekvb UPEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783464206; x=1784069006; 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:content-type; bh=+Hja6qHGPQODpxQ8LqX3XJ4cmNcTjvVv4dMZ2DbbCzg=; b=qbR39iSnjmH+useRG3G8ko4dwFngaBY7HlBGsck/fgqUQMfeY2SbOMfk9ey6dO+A+h tcznYFn+weFCSyIZrDzs+xG9l747cp+HA1D/Xe5YAtzOYGhmua5DjCtdN3pKP7qqoYCt LYzkAAOXYqmVf4SYn1wt2M3EvzXzXI9IQw2hl7nM7704objEUZ169QpMOQZU2aIUiah2 1TpMEtLLq7sdtEdK/uMESYSIIa7hHipBOqHRIr/7cXb7T7BLpGroypG8z+elTfpjkURl 0j/qNvxxYb1ZvR8UKXYy5cLFF/E+Dvfl87O7nLZbrxQSTLc0WpbSUMipo4dbVHPmZFeT hi4w== X-Gm-Message-State: AOJu0YyoKMXJKVJEcugBZkRXRqLp2OMjiaG3UVff2m82ipoknaOFIQxd OfVQ1lx1BvQQbDEf/XdrjEUJUYTK+DIjSr8QlTwJVb+FE6PskLOcTJ73r/Gqws+044E= X-Gm-Gg: AfdE7ckDU0vWJNXMxFrVbE6zzlhNhSNhdjiN2LTxUk2p2HO6uktwzxtP0ZgSGR10cko IW9LzAjJW1dsqiHOOmn/3fSQpbwhdH5BPq1fnbBrywSOje92FVEYsPLuYffZ1MvZtjKTNzOiz2v fYsCRkw1bVy6eO//H0cG8JI6T4hyq0iki6J8lneg7J5PNQGgpe7WYxFof1CnWYgosuwSQnmg5HF eYr3rOSkjuP3U1Vr+tSetNFkzTFMHOkGZHE49+jME61j5muu+hxDJMCErH5tdyxT+iBiVGMglnt f3vjJ2KVtrRbO3iydLb8FQ0f4C4la7Zw6Ji+/AYveZ0zmXoB3FTJvnfaqUEYq7YJppHr+5xVzMQ 3fG7xNOQ+zf3aJMOAlaScKCoTyUKLyAjhhbw70Hp7cp/JsMdmlOSy+qXPzI9Kx4bmceIbjICYK0 1EyK9lNSm8bibYJiX9gUFqMoGB1IqDolmmhOg+06250uRgDb53rg== X-Received: by 2002:a17:90b:3808:b0:37f:9cdf:f037 with SMTP id 98e67ed59e1d1-387572b3d9fmr6146459a91.26.1783464206246; Tue, 07 Jul 2026 15:43:26 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, jpb@kernel.org, lorenzo.pieralisi@linaro.org Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v1 08/25] target/arm/kvm: Use kvm_vm_check_extension() where necessary Date: Tue, 7 Jul 2026 16:42:49 -0600 Message-ID: <20260707224306.1202330-9-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260707224306.1202330-1-mathieu.poirier@linaro.org> References: <20260707224306.1202330-1-mathieu.poirier@linaro.org> 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1031; envelope-from=mathieu.poirier@linaro.org; helo=mail-pj1-x1031.google.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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=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 @linaro.org) X-ZM-MESSAGEID: 1783464282921158500 Content-Type: text/plain; charset="utf-8" From: Jean-Philippe Brucker The Arm KVM code can return different values from KVM_CHECK_EXTENSION depending on the VM type. Use kvm_vm_check_extension() where necessary to ensure we get the right response from KVM. Signed-off-by: Jean-Philippe Brucker Signed-off-by: Mathieu Poirier --- target/arm/kvm.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/target/arm/kvm.c b/target/arm/kvm.c index 6aa1cd04e484..c69b5310c184 100644 --- a/target/arm/kvm.c +++ b/target/arm/kvm.c @@ -328,7 +328,7 @@ static void kvm_arm_get_host_cpu_features(ARMHostCPUFea= tures *ahcf) 1 << KVM_ARM_VCPU_PTRAUTH_GENERIC); } =20 - if (kvm_check_extension(kvm_state, KVM_CAP_ARM_PMU_V3)) { + if (kvm_vm_check_extension(kvm_state, KVM_CAP_ARM_PMU_V3)) { init.features[0] |=3D 1 << KVM_ARM_VCPU_PMU_V3; pmu_supported =3D true; features |=3D 1ULL << ARM_FEATURE_PMU; @@ -654,11 +654,11 @@ int kvm_arch_init(MachineState *ms, KVMState *s) } } =20 - max_hw_wps =3D kvm_check_extension(s, KVM_CAP_GUEST_DEBUG_HW_WPS); + max_hw_wps =3D kvm_vm_check_extension(s, KVM_CAP_GUEST_DEBUG_HW_WPS); hw_watchpoints =3D g_array_sized_new(true, true, sizeof(HWWatchpoint), max_hw_wps); =20 - max_hw_bps =3D kvm_check_extension(s, KVM_CAP_GUEST_DEBUG_HW_BPS); + max_hw_bps =3D kvm_vm_check_extension(s, KVM_CAP_GUEST_DEBUG_HW_BPS); hw_breakpoints =3D g_array_sized_new(true, true, sizeof(HWBreakpoint), max_hw_bps); =20 @@ -1905,7 +1905,7 @@ void kvm_arm_pvtime_init(ARMCPU *cpu, uint64_t ipa) =20 void kvm_arm_steal_time_finalize(ARMCPU *cpu, Error **errp) { - bool has_steal_time =3D kvm_check_extension(kvm_state, KVM_CAP_STEAL_T= IME); + bool has_steal_time =3D kvm_vm_check_extension(kvm_state, KVM_CAP_STEA= L_TIME); =20 if (cpu->kvm_steal_time =3D=3D ON_OFF_AUTO_AUTO) { if (!has_steal_time || !arm_feature(&cpu->env, ARM_FEATURE_AARCH64= )) { --=20 2.43.0 From nobody Sun Jul 26 10:08:59 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=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1783464300; cv=none; d=zohomail.com; s=zohoarc; b=XKwomD1hxn96VsEiocISJ9l65pG2y2BrVOoRAGaHCHJkq0NfyLOcKlZ0X6y8UIYbHCZAKNeB2AASO2++Hdd1EXMyfQwWOdaRFnq0wuT3MlSzQ+/3qaiftKKENA98kl2SY8/qj87zFmGvtmxm63KV0NCbOBO/6hx9uLPk3axFSbI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783464300; 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=eFExSdxFK8RfkshviK2HeeDzgoNR/sUY6pTQO70u6q8=; b=OK0dExJau5ao9Dbd+096RjuuQIkva6CqcuJdz4Q4uxWnib2FLg1FK7CRS8R55W2SjhyFYrN+fnzSH/DU7kyCuUBubzSCtS0ziHLIn0YPvG82Ym9WuGilvIoK82VXYBiPP/TKfXzcl/p1Q7jrODfNqkYH4E9+6OsbS2nMQ7lGDpE= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1783464300667607.9284276605623; Tue, 7 Jul 2026 15:45:00 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1whEVq-0001LJ-DH; Tue, 07 Jul 2026 18:43:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1whEVn-0001KV-3D for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:31 -0400 Received: from mail-pl1-x632.google.com ([2607:f8b0:4864:20::632]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1whEVl-00049U-93 for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:30 -0400 Received: by mail-pl1-x632.google.com with SMTP id d9443c01a7336-2c9bd2f8bf7so17178345ad.1 for ; Tue, 07 Jul 2026 15:43:28 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:46c8:dda7:40fa:8958]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ccc9d3bbaesm18183805ad.57.2026.07.07.15.43.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jul 2026 15:43:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1783464208; x=1784069008; 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=eFExSdxFK8RfkshviK2HeeDzgoNR/sUY6pTQO70u6q8=; b=Clx6au72z/MhnXd/dDzx53vg3zw+KKQuDi2XRwVfOUBfX2qqTGB+Pt5cfSVsAKzxsR OeergP7JY0bDX5KuJbyaLGLKqLpJoY7Ws+6V/gAXkC2nC7BEqN9a5yRuUa8p9L9dAddw IwuTQTkYukC9u3L2ulpSldNdHOwE6R7lKg7/3ivbJzdIsoCNLGqnY38KTNe4O9QrRxZe vuWpcqf+W/QHeI/4NJk7aFFXBOlxXfnWBxVrE4wCdTAh2/6sA/U9LZOch6z2ROGMFyeN sae6muzmn8MsVagxumR62zYxMySrcQoeo0joNdJxIgUU2nERr3Cn2zaaV7poVD2DvWqF 7GTA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783464208; x=1784069008; 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=eFExSdxFK8RfkshviK2HeeDzgoNR/sUY6pTQO70u6q8=; b=UwI2jmTkbkJ10lYkmS2KzeIakjZ9WsO9+mBqUAW5WCmiSeeC03hOUnRLj47VhPo5nf M+ElZIAPKH7IKdxA6VIfRLHYwjmT98t2sHHfmmtoU9CnQc2YlcsfLVfPkaueQMXHQWKv KqeoV61kH3xvg0oX0jBslVlwSYLeZqbTPhfgVp85PnzqlNcnLANh9X4kDSLM74jCY9+k kcfiF25GpU2PyQnEIFKY7yp6N03q709YfpJ+O1J+lVhBUWM1vymWan1LumrkR+gD+ab5 l5HWQxuuynrtZ98eQl4GNS76jv++mZbXZ7AP+TzlWBgG6rCmFPpd6m9/JyF4mTdAQg8J FloQ== X-Gm-Message-State: AOJu0YxqqEVF5BzWvyi24uFSyWpT8M84maykD51x+acdGcqsB4X6oKCZ Kww0XU/i3JBvqfwlaLhJX1tOMal7knHRfQVe/9jhyPmAMhkcxq2nZO1pkOKl5rYkN2I= X-Gm-Gg: AfdE7cmvRY09x94m5fcl1MwWXV2bBZ3+MIPac/F6mcFPeBFQmEJVp5+CTtquSLyj+5t T+n4+bZw1dQk/IgJ6oThdAIUx+BL8uhAzimRCDZM4dvpj900kRtGRkD/Z9b0nQq4fSUMnJembqW n2WEjDIZ1kOyZ8NSIUKbdEQqjHxzP9UKtqNrmCH8Ly4Hd2hm+D4HaXGJhhMTUYjRYvBQAj6EW2e cWv9mAL7jJPSaBXV7b2a4yL5hsJ+xWHqhkGMoCE8sfr4vuQLsaUrL06qL0UP7s6wSwayr3g78/u QqEMP0CD8KWxz45Wu2PyH1rxtPAT8BFsfW94GH49h9w2depsfhcSin8hNHv5Nvbn8y162bys9a1 KsB4XdXIc0Dgz17h4ySCPop9FtnA7AD4FeWbUS+y5fwlK8bDQTWzPPG5aa5QReFYpvsj+7S5upe l1GcPHzDyx+LITIPTwAq1i8gW2frTeRHM6DI5EGMA= X-Received: by 2002:a17:902:f791:b0:2ca:5023:f983 with SMTP id d9443c01a7336-2cccaf31b0amr41495705ad.29.1783464207883; Tue, 07 Jul 2026 15:43:27 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, jpb@kernel.org, lorenzo.pieralisi@linaro.org Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v1 09/25] target/arm/kvm-rme: Initialise Realm Initial Address space Date: Tue, 7 Jul 2026 16:42:50 -0600 Message-ID: <20260707224306.1202330-10-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260707224306.1202330-1-mathieu.poirier@linaro.org> References: <20260707224306.1202330-1-mathieu.poirier@linaro.org> 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::632; envelope-from=mathieu.poirier@linaro.org; helo=mail-pl1-x632.google.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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=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 @linaro.org) X-ZM-MESSAGEID: 1783464303119158500 Content-Type: text/plain; charset="utf-8" From: Jean-Philippe Brucker Initialise the Realm's initial physical address space based on the VM's configuration. Signed-off-by: Jean-Philippe Brucker Signed-off-by: Mathieu Poirier --- hw/arm/boot.c | 4 ++++ target/arm/kvm-rme.c | 18 ++++++++++++++++++ target/arm/kvm-stub.c | 4 ++++ target/arm/kvm_arm.h | 10 ++++++++++ 4 files changed, 36 insertions(+) diff --git a/hw/arm/boot.c b/hw/arm/boot.c index 9b7553dde5e1..bcab21d349b4 100644 --- a/hw/arm/boot.c +++ b/hw/arm/boot.c @@ -32,6 +32,7 @@ #include "qemu/option.h" #include "qemu/units.h" #include "qemu/bswap.h" +#include "kvm_arm.h" =20 /* Kernel boot protocol is specified in the kernel docs * Documentation/arm/Booting and Documentation/arm64/booting.txt @@ -1210,6 +1211,9 @@ void arm_load_kernel(ARMCPU *cpu, MachineState *ms, s= truct arm_boot_info *info) /* We assume the CPU passed as argument is the primary CPU. */ info->primary_cpu =3D cpu; =20 + /* Mark all Realm memory as RAM */ + kvm_arm_rme_init_guest_ram(info->loader_start, info->ram_size); + /* Load the kernel. */ if (!info->kernel_filename || info->firmware_loaded) { arm_setup_firmware_boot(cpu, info); diff --git a/target/arm/kvm-rme.c b/target/arm/kvm-rme.c index f763d5ed6199..697e7d507f0d 100644 --- a/target/arm/kvm-rme.c +++ b/target/arm/kvm-rme.c @@ -22,8 +22,16 @@ #define TYPE_RME_GUEST "rme-guest" OBJECT_DECLARE_SIMPLE_TYPE(RmeGuest, RME_GUEST) =20 +#define RME_PAGE_SIZE qemu_real_host_page_size() + +typedef struct { + hwaddr base; + hwaddr size; +} RmeRamRegion; + struct RmeGuest { ConfidentialGuestSupport parent_obj; + RmeRamRegion init_ram; }; =20 OBJECT_DEFINE_SIMPLE_TYPE_WITH_INTERFACES(RmeGuest, rme_guest, RME_GUEST, @@ -91,6 +99,16 @@ int kvm_arm_rme_init(MachineState *ms, KVMState *s) return 0; } =20 +void kvm_arm_rme_init_guest_ram(hwaddr base, size_t size) +{ + if (!rme_guest) { + return; + } + + rme_guest->init_ram.base =3D base; + rme_guest->init_ram.size =3D size; +} + void kvm_arm_rme_vcpu_init(ARMCPU *cpu) { if (!rme_guest) { diff --git a/target/arm/kvm-stub.c b/target/arm/kvm-stub.c index 6d52f172c5df..790e1940fd8a 100644 --- a/target/arm/kvm-stub.c +++ b/target/arm/kvm-stub.c @@ -42,6 +42,10 @@ bool kvm_arm_el2_supported(void) return false; } =20 +void kvm_arm_rme_init_guest_ram(hwaddr base, size_t size) +{ +} + /* * These functions should never actually be called without KVM support. */ diff --git a/target/arm/kvm_arm.h b/target/arm/kvm_arm.h index 65ec1b970606..c7dc45595159 100644 --- a/target/arm/kvm_arm.h +++ b/target/arm/kvm_arm.h @@ -267,4 +267,14 @@ void kvm_arm_rme_vcpu_init(ARMCPU *cpu); */ int kvm_arm_rme_vm_type(void); =20 +/* + * kvm_arm_rme_init_guest_ram + * @base: base address of RAM + * @size: size of RAM + * + * If the user requested a Realm, set the base and size of guest RAM, in o= rder + * to initialize the Realm IPA space. + */ +void kvm_arm_rme_init_guest_ram(hwaddr base, size_t size); + #endif --=20 2.43.0 From nobody Sun Jul 26 10:08:59 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=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1783464319; cv=none; d=zohomail.com; s=zohoarc; b=alYyIrEUBbDMPfOKPB2rNA8HttA0rKRqLgNKdQD7Hecqv2Y60+gjlrSfy42SnqNvTIiTpZl1vtiEpWikCZ748OgYpT+z/iM+uLAy+6zVPwRWvNZGS9MJKBZxGFTDa8skPSqc4Djl0OsjhHHjKU8H5M4dNjnJNZSQx+YpLr/M5H8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783464319; 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=0POncQiCikAc5guGwIPh9olnmP/V6mz621ilQVpgEaE=; b=Pn15vJXtvK0YM8SPGXjJvZsShXwKZXdlyQketdPsE5t7dlLGeQCVTSHj2e2pgcpihImcM50EOoT/DKkMNzRh60ofpgl4RyAny1uJlI8YxfUlKOzhNss/VVVdpILcNWAE54caVXDa2W/FlQVR5EyuTDp7VjzgESV5HCHHDULv92I= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1783464319188417.5886232530909; Tue, 7 Jul 2026 15:45:19 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1whEVw-0001NN-7w; Tue, 07 Jul 2026 18:43:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1whEVv-0001MS-51 for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:39 -0400 Received: from mail-pl1-x62d.google.com ([2607:f8b0:4864:20::62d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1whEVr-0004AI-VB for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:38 -0400 Received: by mail-pl1-x62d.google.com with SMTP id d9443c01a7336-2c9b1edf2bdso1109755ad.1 for ; Tue, 07 Jul 2026 15:43:31 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:46c8:dda7:40fa:8958]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ccc9d3bbaesm18183805ad.57.2026.07.07.15.43.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jul 2026 15:43:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1783464211; x=1784069011; 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:content-type; bh=0POncQiCikAc5guGwIPh9olnmP/V6mz621ilQVpgEaE=; b=KkafDLt94dpSnW8tD166PdCvnfSjibYEa8T3/B0ir2C5mOlV/s+Dv9jcqjp6lgRoI8 YOwWXUo9kmN9PO7koC7nXvMi9XnRxKpnsdp9thjpjo74xdMVOI5+kBGtVf0D85Qa37xD v5qxxTJrooOHi5qEkUTejtX5hcQpdOx4JBLr+3TLbUMCxCS7h1cIK8iDuFwfE3KmugQ5 hwrqPLQYz1DGSWfDvGmmik/MIw5qb+KP7qBykIPESfpaPtYZ/UHjKQ1dlywvSar+YCYW 0ZpNA2IziKu94IQuQvI/3lsJhJqTMZVV6wAnpMqipmfZ3s42uDsB1jhbf4GSjn/d0rvM TUMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783464211; x=1784069011; 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:content-type; bh=0POncQiCikAc5guGwIPh9olnmP/V6mz621ilQVpgEaE=; b=WdvLIWfSbHm9DN2oFe6wTF53IOnEbt59vVlhMrp1oDJtrYiobgoei0Sl4a73H9wi6y nKUtB1fh4WP/hG53rlan70FxXf9U76RW+6f5s1TK7WI0jGrweZUPlfAZbvO5g4Kidmdv ZlzfOXwEt2Vse9s3eEy5EIl4kkwlZ7znHZ7KCmjxx2RgtUyd648i8DswF/MdiMCrgXfb a4bIIMwVHuID/aUfodLoWfVlLmTlxvGo0fUuwy0ov8k1fTHRF/YDTBh8FldXauQ3TSkL W+TpqIQz5r3b4QP2U8cNKN5XxYdYhPINPEBxjtC4XhIx8uBfP4UGHcG9TYJ/HcuBDKxz Q88A== X-Gm-Message-State: AOJu0YyzeHkfCdY54oBJO+Lj2oyHTEMKtHspuIGNPYaFMsDQqL66lNq8 o3iM5/Jmvtrqq7wlkDR1Hw7f+jw2AvTE4Y5g/vMeUB9lRFwZRaavvH01AAH+dD0jXVw= X-Gm-Gg: AfdE7cngue85JcG1QFiPdIaoDfZoHWO4OwUenvufVYm/VQKSdb4/MNhNZXrgXZQwP5F ENfaVAPw3GcbHz0HcgaSPKLQoBSkNlzyVh2E/5LrLHDQWI/YyQo/9u3Wec9hMXacNYVWclutQjj oRVmVT7aXwmjQxRFak93PlDR1UFJb8uCwVWFehxiMSdkH4/tWeW9sUeTZEhzMFIPfwBhBMBZGAu IJX18PQQY6DkfTPVOKZWfLYiG6SDjSvTCJ/JYzgX0L7Ae7COrgnMEgdkNIg1+yKP3u3zLFNIcUA ARLhGqbp1KTYpAi8uvyF6lNJjwvn/e5L6lg50VlcOtPFieKk0FZXjcAeZe/IE/U68tGCjYpyVhU 5wB/WEcZxXcTXgD/KCAz7WQFokkejC0+K5rBvQeE6bW1ip8RajO6o43li/ikGxh5BXrOLIlJ1TV aetENv6HrJgvFq5QOuS99Z6t2vzenrIhvfM+YcM7w= X-Received: by 2002:a17:903:1b25:b0:2cc:9e99:55c9 with SMTP id d9443c01a7336-2ccbf07a111mr68428465ad.26.1783464210619; Tue, 07 Jul 2026 15:43:30 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, jpb@kernel.org, lorenzo.pieralisi@linaro.org Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v1 10/25] hw/core/loader: Add a ROM loader notifier Date: Tue, 7 Jul 2026 16:42:51 -0600 Message-ID: <20260707224306.1202330-11-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260707224306.1202330-1-mathieu.poirier@linaro.org> References: <20260707224306.1202330-1-mathieu.poirier@linaro.org> 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62d; envelope-from=mathieu.poirier@linaro.org; helo=mail-pl1-x62d.google.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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1783464321121158501 Content-Type: text/plain; charset="utf-8" From: Jean-Philippe Brucker Add a function to register a notifier that is invoked when ROMs get loaded into guest memory. It will be used by Arm confidential guest support, in order to register all blobs loaded into memory with KVM, so that their content is moved into Realm state and measured into the initial VM state. Signed-off-by: Jean-Philippe Brucker Signed-off-by: Mathieu Poirier --- hw/core/loader.c | 15 +++++++++++++++ include/hw/core/loader.h | 17 +++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/hw/core/loader.c b/hw/core/loader.c index 5cbfba0a86d2..b3d769bec5cb 100644 --- a/hw/core/loader.c +++ b/hw/core/loader.c @@ -74,6 +74,8 @@ #endif =20 static int roms_loaded; +static NotifierList rom_loader_notifier =3D + NOTIFIER_LIST_INITIALIZER(rom_loader_notifier); =20 /* return the size or -1 if error */ int64_t get_image_size(const char *filename, Error **errp) @@ -1201,6 +1203,11 @@ MemoryRegion *rom_add_blob(const char *name, const v= oid *blob, size_t len, return mr; } =20 +void rom_add_load_notifier(Notifier *notifier) +{ + notifier_list_add(&rom_loader_notifier, notifier); +} + /* This function is specific for elf program because we don't need to allo= cate * all the rom. We just allocate the first part and the rest is just zeros= . This * is why romsize and datasize are different. Also, this function takes it= s own @@ -1242,6 +1249,7 @@ ssize_t rom_add_option(const char *file, int32_t boot= index) static void rom_reset(void *unused) { Rom *rom; + RomLoaderNotifyData notify; =20 QTAILQ_FOREACH(rom, &roms, next) { if (rom->fw_file) { @@ -1290,6 +1298,13 @@ static void rom_reset(void *unused) address_space_flush_icache_range(rom->as, rom->addr, rom->datasize= ); =20 trace_loader_write_rom(rom->name, rom->addr, rom->datasize, rom->i= srom); + + notify =3D (RomLoaderNotifyData) { + .addr =3D rom->addr, + .len =3D rom->datasize, + .as =3D rom->as, + }; + notifier_list_notify(&rom_loader_notifier, ¬ify); } } =20 diff --git a/include/hw/core/loader.h b/include/hw/core/loader.h index d9431e8a8d12..94cf6ad2e26b 100644 --- a/include/hw/core/loader.h +++ b/include/hw/core/loader.h @@ -342,6 +342,23 @@ void *rom_ptr_for_as(AddressSpace *as, hwaddr addr, si= ze_t size); ssize_t rom_add_vga(const char *file); ssize_t rom_add_option(const char *file, int32_t bootindex); =20 +typedef struct RomLoaderNotifyData { + /* Address of the blob in guest memory */ + hwaddr addr; + /* Length of the blob */ + size_t len; + /* Address space of the blob */ + AddressSpace *as; +} RomLoaderNotifyData; + +/** + * rom_add_load_notifier - Add a notifier for loaded images + * + * Add a notifier that will be invoked with a RomLoaderNotifyData structur= e for + * each blob loaded into guest memory, after the blob is loaded. + */ +void rom_add_load_notifier(Notifier *notifier); + /* This is the usual maximum in uboot, so if a uImage overflows this, it w= ould * overflow on real hardware too. */ #define UBOOT_MAX_DECOMPRESSED_BYTES (64 << 20) --=20 2.43.0 From nobody Sun Jul 26 10:08:59 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=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1783464309; cv=none; d=zohomail.com; s=zohoarc; b=PDs6jtOBMCdzuRr71YXcCUB3xCJUlnP98/lpXuHuWCee1n+U+SIq21RYzOht5/3Hlui5cLZ9ZubMRDrsHjWtQEskwJwm+gkQAq2Hkdsd1l6717hbBfdM+Vvk06HPDX8Bbhw7MDrnfA0J6fBHsP6WcGCJS7BVk2i4aHJluDGj4HM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783464309; 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=tjTKQ+pNbBLpWy4623zrp+MUjeVCpuJZYWOZQR0J4OM=; b=UcIukwTxRTI6efFS9vl/BvLZ5sAVuFK/i2hR7cM4E2FayrbTS2Svp/MlskZnoGKlqQx7iPoXHBQDvmFrjZSuZlCbw+YEhHiwMb5pAnorPCWwlmZX5AYQZZ3LSQyoaB1m25k9uhv9pOxOHIIkxaSC4DANE7SqLqDg/5Hrjdvuk9E= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1783464309268179.5277507422744; Tue, 7 Jul 2026 15:45:09 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1whEVw-0001NU-Tb; Tue, 07 Jul 2026 18:43:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1whEVv-0001MT-51 for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:39 -0400 Received: from mail-pl1-x636.google.com ([2607:f8b0:4864:20::636]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1whEVr-0004AU-Vm for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:38 -0400 Received: by mail-pl1-x636.google.com with SMTP id d9443c01a7336-2cace91f112so824945ad.0 for ; Tue, 07 Jul 2026 15:43:33 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:46c8:dda7:40fa:8958]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ccc9d3bbaesm18183805ad.57.2026.07.07.15.43.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jul 2026 15:43:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1783464212; x=1784069012; 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:content-type; bh=tjTKQ+pNbBLpWy4623zrp+MUjeVCpuJZYWOZQR0J4OM=; b=m0WBBNAKr1JWrB1zQVh+30OdloAHGzePSIn8gQF+PIv0/Jn1P95lbechU4eOK+iMEz gTrIgBFEiyaqVy4etmnwIyj7kPnO/E3Mkm+NZi63PARRm4MXlyWksa9iqFq3l97TIloj nWfb9JgAYtuaNzSKqp10Ol3D82lX31xXIAN+YXB5tq/yYhKRJ5c5zRVZqhCK5ObbSbGA KiUCWhxOmHXoJP6RLgDXvWw0/jFJF3zZywI8QCLHPo+u86E9dZurRQc7D82QrEQP/PvO SBaXPfcCDxwAaa38pfx4r+z7PEJ3qvQ2fa8K9J0V35j5FIzWNpnZNBHdjhvUA+jnxl6c /7VQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783464212; x=1784069012; 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:content-type; bh=tjTKQ+pNbBLpWy4623zrp+MUjeVCpuJZYWOZQR0J4OM=; b=mbtNcJn7lVdiN6/lydVSx0m1C5CEbvVGHdy8yYBCuO49JAEZnDwNAp1JT+SO+CB9EJ sEsoYZgpZbdx0cVaDLnBSTJLRb8MVQes9kCLdlnx4C6zb9vezl0E5FbHfYBi2Dh1nauf 5S3J3vMXnpm98M0vp+5iMGMVPJ9n+/oJBJSbw8lf8r68/1vuHAkJBOA2AXG1B/2myEXG W5KqcgcEthmUDZXo0B7tn48Y4HYdPy7+e5yLYN+aeMy3jYZrZiIU7dQlIlZOpNxa0Aod 6t1XQxmuS+AHvpcg+E4fPdKT2OhlJBRLpxN0zQMkvIOaoH4o1MTaf+0LvdNAzvufYMSe hsZA== X-Gm-Message-State: AOJu0YxY87FJmRoIKoOc9sM/SujJfpCxH/y7vPidFymWXw4JgzqrNnMu drgqrcH1Edwklhnkvup9Ff7JC09NHxMXFcBEmse5FTb5S37xWI42c+tHI0izAfFSm60kvOyS/Gl BVdGPAvU= X-Gm-Gg: AfdE7cm7Yr8a6PpDEjmfRt35LL9cWVj+MKWb0aoSbjFajhv1YrUOCZFolQhkkr06AhI Ms9f0xnLGcdI8nIiPHXWYHnj6qzDrxrbmB2sdALPZuS4ka9bb0KLamiqXVJPsGD3LOc0y83i/s1 ofnHRAtc3wVAyClj1kIXWOlj980pLuZXNBatGY3Z3X0RS23FChxQQTrww6yj1eoGwW7SZe4DbDo sFSqQFuKFJ2DSmVdxzCc6CH7B4FjweyBNhY5ewv6Ltf7w1E7r+XbwBG3Ti0ThAhVMh2Qdo6GaG7 +6SzQdjqJnI577ICXbQh1uY7npcvuXGRHgVwNLweOX6Xj6sbYcOPhs7fFxeegkCLPuXXmx+Arzn +LcUPyyjLpT0OkDtu/KtCnLPASEq6IWwBoe3OaXspv1I76ILWOEki67PnxtPXvBP0KtVLtYOsG0 2YLzXM4FHVoYBW2fEkTUCOx15w8jy8e4xXHuTkkS0= X-Received: by 2002:a17:903:3550:b0:2c9:d539:61e7 with SMTP id d9443c01a7336-2ccbe6267f4mr64613375ad.19.1783464212055; Tue, 07 Jul 2026 15:43:32 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, jpb@kernel.org, lorenzo.pieralisi@linaro.org Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v1 11/25] target/arm/kvm-rme: Keep track of images loaded in Realm memory Date: Tue, 7 Jul 2026 16:42:52 -0600 Message-ID: <20260707224306.1202330-12-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260707224306.1202330-1-mathieu.poirier@linaro.org> References: <20260707224306.1202330-1-mathieu.poirier@linaro.org> 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::636; envelope-from=mathieu.poirier@linaro.org; helo=mail-pl1-x636.google.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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1783464311177158500 Content-Type: text/plain; charset="utf-8" From: Jean-Philippe Brucker Add a Rom notifier to keep track of binary blobs loaded in Realm memory. That way we can deterministically calculate the Realm Initial Measurement (= RIM). Signed-off-by: Jean-Philippe Brucker Signed-off-by: Mathieu Poirier --- target/arm/kvm-rme.c | 46 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/target/arm/kvm-rme.c b/target/arm/kvm-rme.c index 697e7d507f0d..97ec7c8934c9 100644 --- a/target/arm/kvm-rme.c +++ b/target/arm/kvm-rme.c @@ -10,6 +10,7 @@ =20 #include "hw/core/boards.h" #include "hw/core/cpu.h" +#include "hw/core/loader.h" #include "kvm_arm.h" #include "migration/blocker.h" #include "qapi/error.h" @@ -27,11 +28,14 @@ OBJECT_DECLARE_SIMPLE_TYPE(RmeGuest, RME_GUEST) typedef struct { hwaddr base; hwaddr size; + AddressSpace *as; } RmeRamRegion; =20 struct RmeGuest { ConfidentialGuestSupport parent_obj; + Notifier rom_load_notifier; RmeRamRegion init_ram; + GSList *ram_regions; }; =20 OBJECT_DEFINE_SIMPLE_TYPE_WITH_INTERFACES(RmeGuest, rme_guest, RME_GUEST, @@ -66,6 +70,44 @@ static void rme_guest_finalize(Object *obj) { } =20 +static gint rme_compare_ram_regions(gconstpointer a, gconstpointer b) +{ + const RmeRamRegion *ra =3D a; + const RmeRamRegion *rb =3D b; + + g_assert(ra->base !=3D rb->base); + return ra->base < rb->base ? -1 : 1; +} + +static void rme_rom_load_notify(Notifier *notifier, void *data) +{ + RmeRamRegion *region; + RomLoaderNotifyData *rom =3D data; + + if (rom->addr =3D=3D -1) { + /* + * These blobs (ACPI tables) are not loaded into guest RAM at rese= t. + * Instead the firmware will load them via fw_cfg and measure them + * itself. + */ + return; + } + + region =3D g_new0(RmeRamRegion, 1); + region->base =3D rom->addr; + region->size =3D rom->len; + region->as =3D rom->as; + + /* + * The Realm Initial Measurement (RIM) depends on the order in which we + * initialize and populate the RAM regions. To help a verifier + * independently calculate the RIM, sort regions by GPA. + */ + rme_guest->ram_regions =3D g_slist_insert_sorted(rme_guest->ram_region= s, + region, + rme_compare_ram_regions= ); +} + int kvm_arm_rme_init(MachineState *ms, KVMState *s) { static Error *rme_mig_blocker; @@ -88,6 +130,9 @@ int kvm_arm_rme_init(MachineState *ms, KVMState *s) error_setg(&rme_mig_blocker, "RME: migration is not implemented"); migrate_add_blocker(&rme_mig_blocker, &error_fatal); =20 + rme_guest->rom_load_notifier.notify =3D rme_rom_load_notify; + rom_add_load_notifier(&rme_guest->rom_load_notifier); + /* * The realm activation is done last, when the VM starts, after all im= ages * have been loaded and all vcpus finalized. @@ -107,6 +152,7 @@ void kvm_arm_rme_init_guest_ram(hwaddr base, size_t siz= e) =20 rme_guest->init_ram.base =3D base; rme_guest->init_ram.size =3D size; + rme_guest->init_ram.as =3D NULL; } =20 void kvm_arm_rme_vcpu_init(ARMCPU *cpu) --=20 2.43.0 From nobody Sun Jul 26 10:08:59 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=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1783464305; cv=none; d=zohomail.com; s=zohoarc; b=PZjMh79q72u4JLiq5MQAOZOkNRe52ODuwFY0dndvRPK/CC4QktWJRD3H28P1rNGYL1lcR6RD2k8sktMfwHl9kxCKoDCbidinyUOchIWH8EBqp0HYLgn03EX8QOB8bkNZACQkeVNrLGfNJFn9zgIDam1OY0PkS6t+118Bkx65JI0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783464305; 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=sdhTsW4I+bhY4ihV01HmgTW3Yi5b9306awX7r7PmOk0=; b=cmDAqXbwEknq8yAD4EFWVEScGn4bibAti7FizUKsnm/ES86+r/ezRa80hQCEP3OoiSYgOY0FLeTkM844J0RPnJTPpxMa4eHTBZD2t6V5TOdCEvr5lqPowiESbi7iMP7Kafq4d6kN8KqRWjY/WM3ukb0UqjPwifAnnqLazvYmoxg= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1783464305614722.7354784712163; Tue, 7 Jul 2026 15:45:05 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1whEVw-0001NQ-Gs; Tue, 07 Jul 2026 18:43:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1whEVv-0001MU-5O for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:39 -0400 Received: from mail-pl1-x62b.google.com ([2607:f8b0:4864:20::62b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1whEVs-0004Ad-G1 for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:38 -0400 Received: by mail-pl1-x62b.google.com with SMTP id d9443c01a7336-2cc84e77e78so766125ad.2 for ; Tue, 07 Jul 2026 15:43:36 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:46c8:dda7:40fa:8958]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ccc9d3bbaesm18183805ad.57.2026.07.07.15.43.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jul 2026 15:43:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1783464215; x=1784069015; 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:content-type; bh=sdhTsW4I+bhY4ihV01HmgTW3Yi5b9306awX7r7PmOk0=; b=ogVc/WI3hgXRsWc5fpP9BT77MSh/ya0CE55/2JVNIrud8VGTEHSksFui6CEjsFqlcr aiTVbsJyA1Wg7VzNkCbsKzpPJ6ns5HaYW9hED6cMSeqOwOFfgeu2leTPf7HX2jkACHA9 8JAmv/hMOMKSYFY0YK0WCFtxn9gjoQbuAAx6kXLPAkdcmfFRqbcL33X7v5lLYOM/zXj0 0qizbzWgrL2Da80K5HwY0PmdWpHaUyIonYd4S5fDQGtZTjouR+ti52E1pX7doUcnieU2 lqXFXZbQj/jwN7umsJUk9ndeNIyTiztfhcE4iP5sI1B3A0/Z4Dy1QcIC7UkzXkA1dfIy eP1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783464215; x=1784069015; 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:content-type; bh=sdhTsW4I+bhY4ihV01HmgTW3Yi5b9306awX7r7PmOk0=; b=NPAaR4sW35HrIAT41GvVZACk43GAk9EhIjzmImgxVS//pWfB7OT1NQoRIuEV8/Skw5 oE9bWo0zuOVZLoCAHmpL5tjxBgvfIlTAEY0yX75V0I3mKU1Vsyg9nzcHXLPR5U3GHRPq 4VoajFvWEOkb35QBHJ6I1vk/LQ4Kxoc1/+jacEYw/5Qf9Sl4HnI8F1E7rkVA1L6iiQkL POxJ82UiafGQa/as02p9dk6Y4MvAtHm3cRxuU+8F+Q1jFdosamv5OR4DQ9chooPaHdbN EtlOu7UuWnHE+v6tbLSQFbLqmTNHDGPx9q6fpzNWHt2gf/S8nV8ED7DpQ+jKdGDGiwHH yonw== X-Gm-Message-State: AOJu0YwCMHbXQWiPt+sS1KEADYPJfPyk3LUji4ZEUhKv0k8p4drPzC7l gHit5AWw8rglyMsDgig3PWgj1zgU23SfuzQd/J0pNPwTJ92hrlNoEOxFJATAcDXhYAQ= X-Gm-Gg: AfdE7cnmm+jzkyL0bCtqyrw+o/1AM2CsfV+t0j48yiM62ZQMCUfB9PMQLiD5k9G23BO 7wp3MAwpRsjNsAGeXyhpPZ4fqYaJsegkOH43v3W8CpKA4G8YkiG6WgFOlrcb0iuVWR4Rv3gXWUJ 2zLaN82kgjlSFbgpGHj5RmY7Xjluur/MOauZb7Uke7xfTShFXzO+M36Zin5u1qkS3bbpvjCcNxD wKFkIXTf/HJ+WOd0e7tOFMP8F7NzkAoMPzmX9OLMdnjp1K3M3XDo9oEjyLsLrwFAtlWyAJ6gUuP bUO5PqNNZ0pivXLj7+PWGvZZb02k0h9JXXPvUaoa0uqWBfprBNWmtXVZs3B7qL9p/sAmCiUpjEd 8QiT+Rx2rIG2QBmKGFoJzoa100v0SwfOrBm9V5TRffKAmSKO18KH9yO21SLw2DzRIz8IZqPTBqb u3f0rRSrhLGxWey6KcQjd9PFclGa01rX7HRbNtHuwkgUROYOJrqA== X-Received: by 2002:a17:902:ff8e:b0:2c0:db23:4c4 with SMTP id d9443c01a7336-2ccbe628ac2mr67463975ad.16.1783464215210; Tue, 07 Jul 2026 15:43:35 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, jpb@kernel.org, lorenzo.pieralisi@linaro.org Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v1 12/25] target/arm/kvm-rme: Populate Realm with runtime images Date: Tue, 7 Jul 2026 16:42:53 -0600 Message-ID: <20260707224306.1202330-13-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260707224306.1202330-1-mathieu.poirier@linaro.org> References: <20260707224306.1202330-1-mathieu.poirier@linaro.org> 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62b; envelope-from=mathieu.poirier@linaro.org; helo=mail-pl1-x62b.google.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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=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 @linaro.org) X-ZM-MESSAGEID: 1783464307085158500 Content-Type: text/plain; charset="utf-8" From: Jean-Philippe Brucker Once the Realm descriptor has been created, tell KVM to transfer runtime images (kernel, DT, and rootfs) from guest memory to Realm memory. Signed-off-by: Jean-Philippe Brucker Signed-off-by: Mathieu Poirier --- target/arm/kvm-rme.c | 56 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/target/arm/kvm-rme.c b/target/arm/kvm-rme.c index 97ec7c8934c9..58669f4a50f1 100644 --- a/target/arm/kvm-rme.c +++ b/target/arm/kvm-rme.c @@ -44,12 +44,68 @@ OBJECT_DEFINE_SIMPLE_TYPE_WITH_INTERFACES(RmeGuest, rme= _guest, RME_GUEST, =20 static RmeGuest *rme_guest; =20 +static int rme_populate_range(const RmeRamRegion *region, bool measure, + Error **errp) +{ + int ret; + void *host_ua; + hwaddr size =3D region->size; + hwaddr base =3D region->base; + hwaddr start =3D QEMU_ALIGN_DOWN(base, RME_PAGE_SIZE); + hwaddr end =3D QEMU_ALIGN_UP(base + size, RME_PAGE_SIZE); + struct kvm_arm_rmi_populate populate_args; + + host_ua =3D address_space_map(region->as, base, &size, false, + MEMTXATTRS_UNSPECIFIED); + + populate_args =3D (struct kvm_arm_rmi_populate) { + .base =3D start, + .size =3D end - start, + .source_uaddr =3D (uintptr_t)host_ua, + .flags =3D measure ? KVM_ARM_RMI_POPULATE_FLAGS_MEASURE : 0, + }; + + while (populate_args.size > 0) { + ret =3D kvm_vm_ioctl(kvm_state, KVM_ARM_RMI_POPULATE, &populate_ar= gs, 0); + if (ret) { + error_setg_errno(errp, -ret, + "failed to populate realm [0x%"HWADDR_PRIx", 0x%"HWADDR_PR= Ix")", + start, end); + break; + } + } + + address_space_unmap(region->as, host_ua, size, false, 0); + + return ret; +} + +static void rme_populate_ram_region(gpointer data, gpointer err) +{ + Error **errp =3D err; + const RmeRamRegion *region =3D data; + + if (*errp) { + return; + } + + rme_populate_range(region, /* measure */ true, errp); +} + static void rme_vm_state_change(void *opaque, bool running, RunState state) { + Error *errp =3D NULL; + if (!running) { return; } =20 + g_slist_foreach(rme_guest->ram_regions, rme_populate_ram_region, &errp= ); + g_slist_free_full(g_steal_pointer(&rme_guest->ram_regions), g_free); + if (errp) { + return; + } + kvm_mark_guest_state_protected(); } =20 --=20 2.43.0 From nobody Sun Jul 26 10:08:59 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=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1783464423; cv=none; d=zohomail.com; s=zohoarc; b=f8rjTTyC6HAbnj1sJoviXQed90RGCV2mKWszTose8LZ+10wa12D8DTYWocTZd7CThacCIBXYLIR8wglRIWfTlkH/Rlv+Ii9dws7Qsf8JXMAMM4Sw05PL/mpJdM/JlLfO17OSdoojcUqIqM9DFksbbdDzn3DRlsZ0W+WaAPMQD5w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783464423; 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=Hpv+v9qVvBs+eVXA8WG5n3FRwshlRky5Pwtj146tV58=; b=PXFXDvk1moWr8X8wA4CjZk2tCtgtEeyjNItZYRpcOdX681eHhPkqVr5lmZZjHwywUmZNrDjqi97+oTRMhg9kfLHAEbvTUde4qPuV0/5wgm+7W12K7sK8jI1i8hlchd4hZx1dhTnZqHoejcyjRlbxeu+pHHcPs86rsEOi8WyTQWE= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1783464423167901.6490774575453; Tue, 7 Jul 2026 15:47:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1whEVx-0001O7-Ph; Tue, 07 Jul 2026 18:43:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1whEVw-0001NT-Qr for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:40 -0400 Received: from mail-pl1-x62e.google.com ([2607:f8b0:4864:20::62e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1whEVu-0004B0-WA for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:40 -0400 Received: by mail-pl1-x62e.google.com with SMTP id d9443c01a7336-2cad225673bso729055ad.3 for ; Tue, 07 Jul 2026 15:43:38 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:46c8:dda7:40fa:8958]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ccc9d3bbaesm18183805ad.57.2026.07.07.15.43.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jul 2026 15:43:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1783464217; x=1784069017; 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:content-type; bh=Hpv+v9qVvBs+eVXA8WG5n3FRwshlRky5Pwtj146tV58=; b=YPOAXKTrHF8nQsom1FRpnmaheZnm1fQHJJJLU0IPjTMuX/PTjw1C7JEdiCP87x7PMu cYPnmbaJMNAlylzjfcpbWuQIuZ81sp6Z3Hc15EflqHAKj2vM2nqfM/vrJ72LWvyKItLG m/ozxrAP7o/RfYSE0KSWhfdtOzajva7lcEvnuruuB7a2PYslLehWgpSDKenBkwtXyyIq E6/Q7gPBAJAzFXDx+9qS6p4ex6bAVJfjc4spq4quKwU41qm8jjI39F1XhFClrGfOHyip v2H6dKdZT2vlMP523Z4ctnxuLdeAdwYVR3EA6kpBK+m5YEjp+nGTLEoQ57YQumXEFObW TbcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783464217; x=1784069017; 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:content-type; bh=Hpv+v9qVvBs+eVXA8WG5n3FRwshlRky5Pwtj146tV58=; b=lsf1Y6lHlUQ5mMZ6Zd7AlgIdKmrVH0r4IpW+/bUQj/ymwLCCfihYaBX8v2qk4DLJvk 2L667pTVCGbOx9QwMy40i9NQMVqwZzyYNsElBMH7AWIs5HuvKOQSGCdI0Y0d2kGymfLG JmHs3RLC9pC/yO5s8SEct5HstT0S7xOzVXiZFb34wXoA+vAZV6TypHm1nTwXeHflDDRT tH36pl3EJxqBxN168dlyTpvZvZjQon8iRDKmgwD9Uw8KYYWrkpD2lnD9iqWoWFW7m5V5 vwpaCVXpKndIo+3vbNXccQip5+hP/KksoOiViXusmHlUHSuSPgw0nUYa4RWPzHr7DvQJ D28g== X-Gm-Message-State: AOJu0YzWA/OyIAw7xHFByDwz1NwawtBTzXawEPvgAbQlnwbQp4t9tXLK 1GgaXYjAvARur+Wynz0RkEtPqU2xD13ZArIcxohYuuIWRiMiUewb32rIYubfEKa0yCI= X-Gm-Gg: AfdE7ck2dNT57JWWupM03XVJl903wdNucrCWQqXyVaH9hYaKZx8Ynptww2U8Fk2l3Kl FuEwmDZQ4ztH9/6im+tJp9qPmFe0LKaaJxbXI+EFL1ahwZhKB7jWaBcOGrH2o1sbZYSJGNiPXLu xCuMTHu27ivr7ADTp4dL62Q9zqOlh++EzF0yF4ZXBSVh+HQIAqWBui1engUqGn7Q1td3hG0xAr8 ccF+QhHgoq0kTFoeMtFrR8mafn8NW4jmoyiYphrCjr1kMyfl5+7BtIBoZjRzYlxIK+BPX1ly0gn jSR1OFDzGHm2QXdhUWjJDM2pUruja1urk+KrVLBVl81vWcIO58psZj9IZAx0JL/yOIqOmSfWpiY Ud8b3XAAbceeaZAJuL3UyouuoZq8rTrdhIjhZnd7eU7yUo32jKP/CWhikjr5SKPewYMrQXawtRw /wj92ugM8GA1m3L/hU4S8u9fhWFkzKpjXDt9DepXo= X-Received: by 2002:a17:903:110f:b0:2ca:6d87:cda0 with SMTP id d9443c01a7336-2ccea2a5ddemr100945ad.6.1783464217123; Tue, 07 Jul 2026 15:43:37 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, jpb@kernel.org, lorenzo.pieralisi@linaro.org Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v1 13/25] target/arm/cpu: Set number of breakpoints and watchpoints in KVM Date: Tue, 7 Jul 2026 16:42:54 -0600 Message-ID: <20260707224306.1202330-14-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260707224306.1202330-1-mathieu.poirier@linaro.org> References: <20260707224306.1202330-1-mathieu.poirier@linaro.org> 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62e; envelope-from=mathieu.poirier@linaro.org; helo=mail-pl1-x62e.google.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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=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 @linaro.org) X-ZM-MESSAGEID: 1783464423602158500 Content-Type: text/plain; charset="utf-8" From: Jean-Philippe Brucker Add "num-breakpoints" and "num-watchpoints" CPU parameters to configure the debug features that KVM presents to the guest. The KVM vCPU configuration is modified by calling SET_ONE_REG on the ID register. This is needed for Realm VMs, whose parameters include breakpoints and watchpoints, and influence the Realm Initial Measurement. Signed-off-by: Jean-Philippe Brucker Signed-off-by: Mathieu Poirier --- target/arm/arm-qmp-cmds.c | 1 + target/arm/cpu.h | 4 ++ target/arm/cpu64.c | 81 +++++++++++++++++++++++++++++++++++++++ target/arm/kvm.c | 56 +++++++++++++++++++++++++++ 4 files changed, 142 insertions(+) diff --git a/target/arm/arm-qmp-cmds.c b/target/arm/arm-qmp-cmds.c index 83ec95c290f6..9ed65eb090d7 100644 --- a/target/arm/arm-qmp-cmds.c +++ b/target/arm/arm-qmp-cmds.c @@ -76,6 +76,7 @@ static const char *cpu_model_advertised_features[] =3D { "sve1408", "sve1536", "sve1664", "sve1792", "sve1920", "sve2048", "kvm-no-adjvtime", "kvm-steal-time", "pauth", "pauth-impdef", "pauth-qarma3", "pauth-qarma5", + "num-breakpoints", "num-watchpoints", NULL }; =20 diff --git a/target/arm/cpu.h b/target/arm/cpu.h index c7927036360c..d6f64daec2a3 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -1174,6 +1174,10 @@ struct ArchCPU { =20 /* Generic timer counter frequency, in Hz */ uint64_t gt_cntfrq_hz; + + /* Allows to override the default configuration */ + uint8_t num_bps; + uint8_t num_wps; }; =20 typedef struct ARMCPUInfo { diff --git a/target/arm/cpu64.c b/target/arm/cpu64.c index 28167355773b..3f12009befa8 100644 --- a/target/arm/cpu64.c +++ b/target/arm/cpu64.c @@ -666,6 +666,86 @@ void aarch64_add_pauth_properties(Object *obj) } } =20 +#if defined(CONFIG_KVM) +static void arm_cpu_get_num_wps(Object *obj, Visitor *v, const char *name, + void *opaque, Error **errp) +{ + uint8_t val; + ARMCPU *cpu =3D ARM_CPU(obj); + + val =3D cpu->num_wps; + if (val =3D=3D 0) { + val =3D FIELD_EX64(cpu->isar.idregs[ID_AA64DFR0_EL1_IDX], + ID_AA64DFR0, WRPS) + 1; + } + + visit_type_uint8(v, name, &val, errp); +} + +static void arm_cpu_set_num_wps(Object *obj, Visitor *v, const char *name, + void *opaque, Error **errp) +{ + uint8_t val; + ARMCPU *cpu =3D ARM_CPU(obj); + uint8_t max_wps =3D FIELD_EX64(cpu->isar.idregs[ID_AA64DFR0_EL1_IDX], + ID_AA64DFR0, WRPS) + 1; + + if (!visit_type_uint8(v, name, &val, errp)) { + return; + } + + if (val < 2 || val > max_wps) { + error_setg(errp, "invalid number of watchpoints"); + return; + } + + cpu->num_wps =3D val; +} + +static void arm_cpu_get_num_bps(Object *obj, Visitor *v, const char *name, + void *opaque, Error **errp) +{ + uint8_t val; + ARMCPU *cpu =3D ARM_CPU(obj); + + val =3D cpu->num_bps; + if (val =3D=3D 0) { + val =3D FIELD_EX64(cpu->isar.idregs[ID_AA64DFR0_EL1_IDX], + ID_AA64DFR0, BRPS) + 1; + } + + visit_type_uint8(v, name, &val, errp); +} + +static void arm_cpu_set_num_bps(Object *obj, Visitor *v, const char *name, + void *opaque, Error **errp) +{ + uint8_t val; + ARMCPU *cpu =3D ARM_CPU(obj); + uint8_t max_bps =3D FIELD_EX64(cpu->isar.idregs[ID_AA64DFR0_EL1_IDX], + ID_AA64DFR0, BRPS) + 1; + + if (!visit_type_uint8(v, name, &val, errp)) { + return; + } + + if (val < 2 || val > max_bps) { + error_setg(errp, "invalid number of breakpoints"); + return; + } + + cpu->num_bps =3D val; +} + +static void aarch64_add_kvm_writable_properties(Object *obj) +{ + object_property_add(obj, "num-breakpoints", "uint8", arm_cpu_get_num_b= ps, + arm_cpu_set_num_bps, NULL, NULL); + object_property_add(obj, "num-watchpoints", "uint8", arm_cpu_get_num_w= ps, + arm_cpu_set_num_wps, NULL, NULL); +} +#endif /* CONFIG_KVM */ + void aarch64_cpu_lpa2_finalize(ARMCPU *cpu, Error **errp) { uint64_t t; @@ -806,6 +886,7 @@ void aarch64_host_initfn(Object *obj) kvm_arm_set_cpreg_mig_tolerances(cpu); kvm_arm_set_cpu_features_from_host(cpu); aarch64_add_sve_properties(obj); + aarch64_add_kvm_writable_properties(obj); #elif defined(CONFIG_HVF) hvf_arm_set_cpu_features_from_host(cpu); #elif defined(CONFIG_WHPX) diff --git a/target/arm/kvm.c b/target/arm/kvm.c index c69b5310c184..e4b4d5450c70 100644 --- a/target/arm/kvm.c +++ b/target/arm/kvm.c @@ -904,6 +904,56 @@ out: return ret; } =20 +#define KVM_REG_ARM_ID_AA64DFR0_EL1 ARM64_SYS_REG(3, 0, 0, 5, 0) + +static void kvm_arm_configure_aa64dfr0(ARMCPU *cpu) +{ + int ret; + uint64_t val, newval; + CPUState *cs =3D CPU(cpu); + + if (!cpu->num_bps && !cpu->num_wps) { + return; + } + + newval =3D cpu->isar.idregs[ID_AA64DFR0_EL1_IDX]; + if (cpu->num_bps) { + uint64_t ctx_cmps =3D FIELD_EX64(newval, ID_AA64DFR0, CTX_CMPS); + + /* CTX_CMPs is never greater than BRPs */ + ctx_cmps =3D MIN(ctx_cmps, cpu->num_bps - 1); + newval =3D FIELD_DP64(newval, ID_AA64DFR0, BRPS, cpu->num_bps - 1); + newval =3D FIELD_DP64(newval, ID_AA64DFR0, CTX_CMPS, ctx_cmps); + } + if (cpu->num_wps) { + newval =3D FIELD_DP64(newval, ID_AA64DFR0, WRPS, cpu->num_wps - 1); + } + ret =3D kvm_set_one_reg(cs, KVM_REG_ARM_ID_AA64DFR0_EL1, &newval); + if (ret) { + error_report("Failed to set KVM_REG_ARM_ID_AA64DFR0_EL1"); + return; + } + + /* + * Check if the write succeeded. KVM does offer the writable mask for = this + * register, but this way we also check if the value we wrote was sane. + */ + ret =3D kvm_get_one_reg(cs, KVM_REG_ARM_ID_AA64DFR0_EL1, &val); + if (ret) { + error_report("Failed to get KVM_REG_ARM_ID_AA64DFR0_EL1"); + return; + } + + if (val !=3D newval) { + error_report("Failed to update KVM_REG_ARM_ID_AA64DFR0_EL1"); + } +} + +static void kvm_arm_configure_vcpu_regs(ARMCPU *cpu) +{ + kvm_arm_configure_aa64dfr0(cpu); +} + /** * kvm_arm_cpreg_level: * @regidx: KVM register index @@ -1120,6 +1170,12 @@ void kvm_arm_reset_vcpu(ARMCPU *cpu) fprintf(stderr, "kvm_arm_vcpu_init failed: %s\n", strerror(-ret)); abort(); } + + /* + * Before loading the KVM values into CPUState, update the KVM configu= ration + */ + kvm_arm_configure_vcpu_regs(cpu); + if (!write_kvmstate_to_list(cpu)) { fprintf(stderr, "write_kvmstate_to_list failed\n"); abort(); --=20 2.43.0 From nobody Sun Jul 26 10:08:59 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=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1783464407; cv=none; d=zohomail.com; s=zohoarc; b=E6Dia3gJVtXvm4Os0hX7Ru07BEOoTFqsLHR7BA91B4NrUqsDoLmjRt/FXfEA0z4PE1xRM9MhghOgHXY/n/Pn9LhEgQ/B0W1uAjHoJ5GxfqH0uPd2YwFxMHuuR1wLv+4FiyO6cI+gOVBD8ij2Eg3OZ8vOvwMRAKMMRQaWWhXBk/o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783464407; 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=oIviMsn5Rq1UtJcdpFZj4ZD1p4JzYpgAt1W5TU8JGlc=; b=DclLxOXfFk5FGi3zuoJ7sUkT/g1eG+xJ4H/3YSRWFtsngXWIFhWj2o75/ZAH0wzGRKlGokZ3aRrCNx+ORZcibwAmVuAUKfl6dgZurgozKYTzNPHRRDepFwjooX1Jn4eltMtO/kQYtWT05v838QYJzj8M/gb4h9SDpaZlV738UuM= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 178346440690926.336361513508677; Tue, 7 Jul 2026 15:46:46 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1whEW1-0001Qh-6r; Tue, 07 Jul 2026 18:43:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1whEVy-0001OE-6M for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:42 -0400 Received: from mail-pl1-x62d.google.com ([2607:f8b0:4864:20::62d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1whEVw-0004By-CO for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:41 -0400 Received: by mail-pl1-x62d.google.com with SMTP id d9443c01a7336-2cac59f8b64so1080825ad.0 for ; Tue, 07 Jul 2026 15:43:40 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:46c8:dda7:40fa:8958]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ccc9d3bbaesm18183805ad.57.2026.07.07.15.43.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jul 2026 15:43:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1783464219; x=1784069019; 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=oIviMsn5Rq1UtJcdpFZj4ZD1p4JzYpgAt1W5TU8JGlc=; b=h8XWKvN47fchmZVvZgLbJR/Cu3KWA8d9WpUTt1P15kZrxtnjFW67KTMj/tZpoWhV9P wUt+qAHSD5giKlSPO/y4Y4/WEJ8RjEsyUBbug3yzrQ5qvM2Y+3hJ30iIHwWkLZ0Y1rBa bEwMpWqEdpj5ZxlvWh9UGmmxIynLV3UlzQqrsgGUXMOP8PzzsWEiCZSPNS+MHlHjR2Tz /hk+oSKpsXRhZSFVon/eMOwXL5Ye3cMh/CCgDmj9pr5TEds3xUE2HRSecPnLeyR3HuDu qg4FvlYHmXgKZGh3J9cCh2c9gbJ02Xi879Sz0M7meBTIwbsVdu38ZRJzuIUu8g6tazd7 yqyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783464219; x=1784069019; 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=oIviMsn5Rq1UtJcdpFZj4ZD1p4JzYpgAt1W5TU8JGlc=; b=rEQo3eH89HxJW3dFdrjvE97fbn0FzzXPHmbB/F+hQp2eKNnehs8LN6WfNfM9W2tYj1 kIlYJlKGVIZ3AzyoAcQ1pJtBV+jV75jFbIfmIc13KIyCXtvCcxYOmX9oP+ra9GkHetee 7lxXxgpDyaqxD8mRFjBGntKEx072ZPWE7TsCmP61a5DdWuO4UENbXQIjj8qTZsB12aGC TRSH+u5LWEN9/R11An705r/jVFZSPzuIZue6MpCJJ0+7l1ZZ5QxL8fqB2tT4RC3weywW Em06AujWifGrfuFqWG6P8PdjYp6hpagnIVLhhQloM8Zy1r0ZeVQjcGU+bNjFGlA+CDe6 5iXQ== X-Gm-Message-State: AOJu0YyO+fcu8hISySw23hUFeay5EhMtn4uUSX2SPZHsS/IZqq6dzro1 6Qq13DevHDiPrdArucBNoy6JusWkMjleDGM0q/fJeWGYzf+5gNO9Qbvpk3xjSCRMo+I= X-Gm-Gg: AfdE7clFxSv8P+IqSSt/4pXYF8Dw0qAEqYZfNsMDysjfsOXqcS8jw1FDa6CrixFihpZ ydNiiBMxiEsYr/LFreNupwmRxZ7Z2RfnfsltvKDd20JW/fyQM6UQBu4Lm3BRt1oC/wEZatdNWOy GAIB0dw/9x7DSaJ1hChK+fuRRn3dNCje0BMSxZ5E4XWvZyn3+wOsiA8ZzDxHT9F0K5rA6egwtrk l6RQ3tDicXETEjrXdLtURn1nprZfWqRYcobF2dux6T6QtMg62Pv2M/h0oIiFwyO07yx+r5Jpy23 KBPTcNXR26k+DMqBY7Yn9smQLh0XpdpfhCiEmElLUs5MGztQX+AfjLSEcWJDiqgcgVO4SRfpPhB 4IparmubQJCFW/mIFw4rc0AzETQM2DKXVLFrmRaz4TLhYezb2tZEBy6iw7WbLNUoxSElVQ57VE7 43ON3tcjY5cdY0fADumRO3/NBWeOhtGURgbw/HgFA= X-Received: by 2002:a17:903:285:b0:2ca:f16c:87b3 with SMTP id d9443c01a7336-2ccbe62863cmr63699725ad.19.1783464219016; Tue, 07 Jul 2026 15:43:39 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, jpb@kernel.org, lorenzo.pieralisi@linaro.org Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v1 14/25] target/arm/cpu: Set number of PMU counters in KVM Date: Tue, 7 Jul 2026 16:42:55 -0600 Message-ID: <20260707224306.1202330-15-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260707224306.1202330-1-mathieu.poirier@linaro.org> References: <20260707224306.1202330-1-mathieu.poirier@linaro.org> 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62d; envelope-from=mathieu.poirier@linaro.org; helo=mail-pl1-x62d.google.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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=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 @linaro.org) X-ZM-MESSAGEID: 1783464407455158500 Content-Type: text/plain; charset="utf-8" From: Jean-Philippe Brucker Add a "num-pmu-counters" CPU parameter to configure the number of counters that KVM presents to the guest. This is needed for Realm VMs, whose parameters include the number of PMU counters and influence the Realm Initial Measurement. Signed-off-by: Jean-Philippe Brucker Signed-off-by: Mathieu Poirier --- target/arm/arm-qmp-cmds.c | 2 +- target/arm/cpu.h | 3 +++ target/arm/cpu64.c | 41 +++++++++++++++++++++++++++++++++++++++ target/arm/kvm.c | 34 ++++++++++++++++++++++++++++++++ 4 files changed, 79 insertions(+), 1 deletion(-) diff --git a/target/arm/arm-qmp-cmds.c b/target/arm/arm-qmp-cmds.c index 9ed65eb090d7..9350dc30d12f 100644 --- a/target/arm/arm-qmp-cmds.c +++ b/target/arm/arm-qmp-cmds.c @@ -76,7 +76,7 @@ static const char *cpu_model_advertised_features[] =3D { "sve1408", "sve1536", "sve1664", "sve1792", "sve1920", "sve2048", "kvm-no-adjvtime", "kvm-steal-time", "pauth", "pauth-impdef", "pauth-qarma3", "pauth-qarma5", - "num-breakpoints", "num-watchpoints", + "num-breakpoints", "num-watchpoints", "num-pmu-counters", NULL }; =20 diff --git a/target/arm/cpu.h b/target/arm/cpu.h index d6f64daec2a3..50d482b09b0d 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -1178,6 +1178,7 @@ struct ArchCPU { /* Allows to override the default configuration */ uint8_t num_bps; uint8_t num_wps; + int8_t num_pmu_ctrs; }; =20 typedef struct ARMCPUInfo { @@ -2134,6 +2135,8 @@ FIELD(MFAR, FPA, 12, 40) FIELD(MFAR, NSE, 62, 1) FIELD(MFAR, NS, 63, 1) =20 +FIELD(PMCR, N, 11, 5) + QEMU_BUILD_BUG_ON(ARRAY_SIZE(((ARMCPU *)0)->ccsidr) <=3D R_V7M_CSSELR_INDE= X_MASK); =20 /* If adding a feature bit which corresponds to a Linux ELF diff --git a/target/arm/cpu64.c b/target/arm/cpu64.c index 3f12009befa8..00b3511dcbc3 100644 --- a/target/arm/cpu64.c +++ b/target/arm/cpu64.c @@ -737,12 +737,53 @@ static void arm_cpu_set_num_bps(Object *obj, Visitor = *v, const char *name, cpu->num_bps =3D val; } =20 +static void arm_cpu_get_num_pmu_ctrs(Object *obj, Visitor *v, const char *= name, + void *opaque, Error **errp) +{ + uint8_t val; + ARMCPU *cpu =3D ARM_CPU(obj); + + if (cpu->num_pmu_ctrs =3D=3D -1) { + val =3D FIELD_EX64(cpu->isar.reset_pmcr_el0, PMCR, N); + } else { + val =3D cpu->num_pmu_ctrs; + } + + visit_type_uint8(v, name, &val, errp); +} + +static void arm_cpu_set_num_pmu_ctrs(Object *obj, Visitor *v, const char *= name, + void *opaque, Error **errp) +{ + uint8_t val; + ARMCPU *cpu =3D ARM_CPU(obj); + uint8_t max_ctrs =3D FIELD_EX64(cpu->isar.reset_pmcr_el0, PMCR, N); + + if (!visit_type_uint8(v, name, &val, errp)) { + return; + } + + if (val > max_ctrs) { + error_setg(errp, "invalid number of PMU counters"); + return; + } + + cpu->num_pmu_ctrs =3D val; +} + static void aarch64_add_kvm_writable_properties(Object *obj) { + ARMCPU *cpu =3D ARM_CPU(obj); + object_property_add(obj, "num-breakpoints", "uint8", arm_cpu_get_num_b= ps, arm_cpu_set_num_bps, NULL, NULL); object_property_add(obj, "num-watchpoints", "uint8", arm_cpu_get_num_w= ps, arm_cpu_set_num_wps, NULL, NULL); + + cpu->num_pmu_ctrs =3D -1; + object_property_add(obj, "num-pmu-counters", "uint8", + arm_cpu_get_num_pmu_ctrs, arm_cpu_set_num_pmu_ctrs, + NULL, NULL); } #endif /* CONFIG_KVM */ =20 diff --git a/target/arm/kvm.c b/target/arm/kvm.c index e4b4d5450c70..3d5e16a21cf5 100644 --- a/target/arm/kvm.c +++ b/target/arm/kvm.c @@ -949,9 +949,43 @@ static void kvm_arm_configure_aa64dfr0(ARMCPU *cpu) } } =20 +#define KVM_REG_ARM_PMCR_EL0 ARM64_SYS_REG(3, 3, 9, 12, 0) + +static void kvm_arm_configure_pmcr(ARMCPU *cpu) +{ + int ret; + uint64_t val, newval; + CPUState *cs =3D CPU(cpu); + + if (cpu->num_pmu_ctrs =3D=3D -1) { + return; + } + + newval =3D FIELD_DP64(cpu->isar.reset_pmcr_el0, PMCR, N, cpu->num_pmu_= ctrs); + ret =3D kvm_set_one_reg(cs, KVM_REG_ARM_PMCR_EL0, &newval); + if (ret) { + error_report("Failed to set KVM_REG_ARM_PMCR_EL0"); + return; + } + + /* + * Check if the write succeeded, since older versions of KVM ignore it. + */ + ret =3D kvm_get_one_reg(cs, KVM_REG_ARM_PMCR_EL0, &val); + if (ret) { + error_report("Failed to get KVM_REG_ARM_PMCR_EL0"); + return; + } + + if (val !=3D newval) { + error_report("Failed to update KVM_REG_ARM_PMCR_EL0"); + } +} + static void kvm_arm_configure_vcpu_regs(ARMCPU *cpu) { kvm_arm_configure_aa64dfr0(cpu); + kvm_arm_configure_pmcr(cpu); } =20 /** --=20 2.43.0 From nobody Sun Jul 26 10:08:59 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=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1783464279; cv=none; d=zohomail.com; s=zohoarc; b=efpkKe3+BpamWaw4PmYifgMVHp2G9llLDRgL6Qh+4sDG/8J5DhU8Mq8rMCOq0Tqhd1yWi6HXYTySF7P6JYHZ/j3ZmFKwUDbYxsK7KBAS28oOz4m7hIjhi0fUHN1vVBFnzxfXpUgcrvEsL9h1Smo92Z9S5GADkwDngYLG41rf6PI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783464279; 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=2LOuBVMlOe80id4VIdSsW07pBBJsvlGWj514CqDOCv8=; b=llzg2PaXrH4+33WquK3uFwOJDoMhM10z9NWWv3tR02s9lMw1EPsl7rNJPDdPqpdX3Dj55MKi5TVGpvSOyEj8Sm2d+kcfEqKCZG8SVgEJcqQYE8v3KWBkWvMBqUisV4MtxsLte4LJP9Nz8k2xfKeih15wKDbjhtNNdoQS0yPtLWw= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 178346427932890.39780762604221; Tue, 7 Jul 2026 15:44:39 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1whEW0-0001Qc-Tr; Tue, 07 Jul 2026 18:43:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1whEW0-0001Q0-2t for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:44 -0400 Received: from mail-pl1-x62d.google.com ([2607:f8b0:4864:20::62d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1whEVy-0004CO-JH for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:43 -0400 Received: by mail-pl1-x62d.google.com with SMTP id d9443c01a7336-2cc8e87f29bso663195ad.2 for ; Tue, 07 Jul 2026 15:43:42 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:46c8:dda7:40fa:8958]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ccc9d3bbaesm18183805ad.57.2026.07.07.15.43.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jul 2026 15:43:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1783464221; x=1784069021; 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:content-type; bh=2LOuBVMlOe80id4VIdSsW07pBBJsvlGWj514CqDOCv8=; b=fmbzBKKGITT425ms5pGGV0WXpFdXZFk/viZNFc2Pc8ms53apYidwrwMrMBpfa+S89n v1m2NLzxCM0o4GigvC7q8sGnaU3Z0VTshWNHxgDvH05QE82qKIHnv5aqLQIqQI9u2p9W V0dhM6CjzotRE2HrfjrXybbnaM5qDcQbTBrg+TpPxiQhCbl/5h0MTQZZNGIbeVWOERlq NY8heDnr/GZdL/t1T37vkJFdsHDWDJb2pNuWT9FeSN0UcHIaN/TH7g4u+rbFP4Ui5hfl M3c4M1/1+zfdIIXUxX/WGJ3Tb63IPtp0Cd2N04i41xXT7oMBzl5igfg7815lRCx1mRT0 9gLw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783464221; x=1784069021; 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:content-type; bh=2LOuBVMlOe80id4VIdSsW07pBBJsvlGWj514CqDOCv8=; b=R1c0C+Q1ALgV1MOyRjhwRR/iDBDqC1XU6gGhEOC0BCD9hfvZey3JE8GG9nBNNIOfb9 sIA95At11ytVyoBAc6zMDW8sOkpY2Z8+psKHWZR0ccL0qImNumQ9uUHNYYA0CkT3lKW6 3RdFrchlbx0nBRw2VcWbYh+Gv5kcsnXeMVjyD9aq2jw3PLwJQ4TnnnFOabqTiYLvh1oC 3+OzZrWzJmVAqEJwh2cWxhlhJpaV5lRP7im5N2j/l/izi8hPguA/ME+po4jn4fboboMN aXP16gP2DQlUld0iunuWT6vHqJ6DUfMf4/9wk5MPQ/uEysoC6KvqPSGKylAWMJmohJCw n5IQ== X-Gm-Message-State: AOJu0YwLJeEUiBrcjBIs8R9otUYaRBP3Vh8UAR/UmFoc5kcFSr5rUn6b 52Wf2sOb4besy7MAxFmknnSe76Oi6QINEDDk4XjRNxfNkfz/E/Sh66JFLebztmfKcKY= X-Gm-Gg: AfdE7clGq/CmFoI2VqvqPv244dhXGan+dxZUppl//fpvpiTnc6MrR5BIQwzmMAiLNyP 9LeGhohVVydxpcfj7WdTkSfU6S0w4wH4QGRRtaZ28C4mVZRwL4OFCq0kACZGbfoi9oRmRbJED0V cCAT2u0uRG3XMP4N+B2AqMACwTVeOaH4s9DS/yvZfbeYzGshSXjrYQTc3eQ4d/DLJL17Hu5+uUE TsCLckwus2Y1LriPh5PrOrrNMaZbxY0ky0EYakFRRnYNYarVpJ2H0QHv7dYsw/AHafiHr+7kFAX w7UBl+OOBML8F+NWfA+BzXwluZtP9qRsaKprSTg3zx4LTUwNm84QGJODjMegsY7t4i2xTASw+I+ OG5+Vryd03WjhIN1YnNumLdjNqZtjNl7W+aCh7pmikz43eEhahgB6Mf/y5Q8TfpezFgTHpv/9WU jRdnsF32WejDRQ+o5/2duO4xebu8OkbaqitD4AyCOAx4qd6GyWZQ== X-Received: by 2002:a17:902:d486:b0:2cc:7759:ffac with SMTP id d9443c01a7336-2ccbee248d5mr67274915ad.30.1783464221115; Tue, 07 Jul 2026 15:43:41 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, jpb@kernel.org, lorenzo.pieralisi@linaro.org Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v1 15/25] target/arm/cpu: Don't read Realm registers Date: Tue, 7 Jul 2026 16:42:56 -0600 Message-ID: <20260707224306.1202330-16-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260707224306.1202330-1-mathieu.poirier@linaro.org> References: <20260707224306.1202330-1-mathieu.poirier@linaro.org> 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62d; envelope-from=mathieu.poirier@linaro.org; helo=mail-pl1-x62d.google.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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=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 @linaro.org) X-ZM-MESSAGEID: 1783464281120158500 Content-Type: text/plain; charset="utf-8" From: Jean-Philippe Brucker The host cannot access registers of a Realm. Instead of showing all registers as zero in "info registers", display a message about this restriction. Signed-off-by: Jean-Philippe Brucker Signed-off-by: Mathieu Poirier --- target/arm/cpu.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/target/arm/cpu.c b/target/arm/cpu.c index 787e4dc7ab23..7679b8758262 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -965,6 +965,11 @@ static void aarch64_cpu_dump_state(CPUState *cs, FILE = *f, int flags) const char *ns_status; bool sve; =20 + if (cpu->kvm_rme) { + qemu_fprintf(f, "the CPU registers are confidential to the realm\n= "); + return; + } + qemu_fprintf(f, " PC=3D%016" PRIx64 " ", env->pc); for (i =3D 0; i < 32; i++) { if (i =3D=3D 31) { --=20 2.43.0 From nobody Sun Jul 26 10:08:59 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=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1783464419; cv=none; d=zohomail.com; s=zohoarc; b=kpRElxaccYfuhBz8Hxo+2w5W41rGF3NgURag+OfLRCbrHIH19tTN7Z1YKBJ5J64Z/eN4c7S7mdrJKLWUnPIP0F3eOWK4CHkz6V5DbgmkkEGkuEjinziJkRnIRI8DVAn8rbbiUw7YxKVOiHAEuq1lpTNQPju+m/kP7YR6TPwC8vM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783464419; 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=PYpy9moJ1+tY6k9a9oX2AsYalmyatmE1LDfnjIQQLE0=; b=c/8Kcm+4GV/xeoE7A1uELp4gyIimKloNmpHW66LcHLfMc6pnmPzpOM7c06OkT2Ny+hsAnr9W/msNw64h/q8Xa73mC6aXzUr+Zfhf4gwby5sY8CVIcXowq/Ok5WdJVYiJUeGXcbn2Wz6e3JpXKRUtWR3rYImMhmvNWKSjefHirQk= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1783464419534658.4574056713695; Tue, 7 Jul 2026 15:46:59 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1whEW2-0001Rq-Qh; Tue, 07 Jul 2026 18:43:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1whEW1-0001R9-KN for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:45 -0400 Received: from mail-pl1-x62d.google.com ([2607:f8b0:4864:20::62d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1whEW0-0004Cp-2v for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:45 -0400 Received: by mail-pl1-x62d.google.com with SMTP id d9443c01a7336-2cace91f112so825825ad.0 for ; Tue, 07 Jul 2026 15:43:43 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:46c8:dda7:40fa:8958]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ccc9d3bbaesm18183805ad.57.2026.07.07.15.43.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jul 2026 15:43:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1783464223; x=1784069023; 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=PYpy9moJ1+tY6k9a9oX2AsYalmyatmE1LDfnjIQQLE0=; b=exhzCoDoRc4Tv78dS4bCuXDdcpn3rhS5Jvpv/97hEQjr3hknVJvRv3JVnWJv60JSLE QJsf7gPIhoMnKBGYog2ZQXWVDXMVIMuITkYgnEqU3LIsX4Fee88L4LvI+QeKhbEHpRGP DSA7GyNgTF2cgWznCslhFDxlMco4DxoyfJ39gxaaz2rm3e8gFsK8HxZkUkWPbe9bJBhw YBHkFBQvK4YIh99phzoNYE7ByPTm2t6RjQC2fFeU1zfskJUsSNi9udSH0HZ/mqeqBXqo 3uhftlSbj3PU77Nw8Vs2cvXJobGkGjSTLKJPM9QWP5CwF4P2/B9mxj9zFyNumN6sefDe NAeg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783464223; x=1784069023; 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=PYpy9moJ1+tY6k9a9oX2AsYalmyatmE1LDfnjIQQLE0=; b=c9hlf21BdME/txRCQsB+23h7JYEq2CccWxNzIILqUqdOo5lztX88iPqwzXRvguOS8Q b/Ls59fF9Qh4li8K5gza9Z1wj3fdZxlgXySIYOAbWfauEAioEwDk7p4jRjK8W9F4G1Le 7ltdAE/mJaui7OiRqWZfAyowhblWWv4b/3ydInwnUuJAkcc/iPniwvwN2KnVO4UKPff3 zw21i2Ryowz1hx2yCRshYqx370sRGM5VHZ7VqssGrf1yqEI9zTNOv1/KRz1Nz4JKU9uC VjyfzKDkSmcxsiJvH5JZbLfLf62wz6fGib0OBBQEE3Fwea7x1PYX09ClbBEfg1gKTdZr Qiew== X-Gm-Message-State: AOJu0YxeyE7hmuDCy+Jrh87Ei1ekGwNhT0YiDCsKwDw43dKQdTDipAgQ KU7qYqhKC4Ytr5ZWJPSdpYqb4RR0hU9bfD3dyKUmVR/l8SryuIhEOShrFD1KX1VsIaI= X-Gm-Gg: AfdE7cl1KzjvjPo+TH0o0T0k2a0EucjsXKS8dp3kbMyRnPrQLR2ABzfMOnwTq/ob4z3 gZPYN1TSH+IMT3U7gacUdiapW8czo8q/YEI42WBpkH95b/EQCLaWYd+WoKQVkP+QJg8DWwDDIPA Y1z398gcsVfpUcyoA/w5R9ZHmeSm64N8ue1xKUMoaio0Dym7nVopNWC1O/QIta9dFm97o8oF94H dINe9XhQcKOQL7ghUzLv6P+rkxZY9cHlpV7iRoxl/B+J2eFXLapNkzMukBGEtDDnsLbnUaTSSkE eUYKiYEdLkTauCiMrXLP8ekKNoMrFHJ5eujb2wcSjTQlYkIdKwwj5FuTm+ynqCXyI4a3DziTabi DxVPMJ8l96X+HWvdxGfy2vVxZ0Z4vkqoqsOiSiKtdJkoSwu7OtxA4O1c83GxounCE4RJKJmonwS +qYEqaTJe76Y4syXHXoIMkILwA3i3t/w8twe502Ls= X-Received: by 2002:a17:902:ce82:b0:2cc:89ce:2ef8 with SMTP id d9443c01a7336-2ccbf05bd36mr68310485ad.40.1783464222672; Tue, 07 Jul 2026 15:43:42 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, jpb@kernel.org, lorenzo.pieralisi@linaro.org Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v1 16/25] hw/arm/virt: Set proper conduit method for Realms Date: Tue, 7 Jul 2026 16:42:57 -0600 Message-ID: <20260707224306.1202330-17-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260707224306.1202330-1-mathieu.poirier@linaro.org> References: <20260707224306.1202330-1-mathieu.poirier@linaro.org> 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62d; envelope-from=mathieu.poirier@linaro.org; helo=mail-pl1-x62d.google.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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=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 @linaro.org) X-ZM-MESSAGEID: 1783464421522158500 Content-Type: text/plain; charset="utf-8" From: Jean-Philippe Brucker The HVC conduit for PSCI is not supported for Realms, so default to SMC. Signed-off-by: Jean-Philippe Brucker Signed-off-by: Mathieu Poirier Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/arm/virt.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 6a3c69ba8f90..317816f942de 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -274,6 +274,11 @@ static const int a15irqmap[] =3D { [VIRT_PLATFORM_BUS] =3D 112, /* ...to 112 + PLATFORM_BUS_NUM_IRQS -1 */ }; =20 +static bool virt_machine_is_confidential(VirtMachineState *vms) +{ + return MACHINE(vms)->cgs; +} + static void create_randomness(MachineState *ms, const char *node) { struct { @@ -2952,10 +2957,11 @@ static void machvirt_init(MachineState *machine) * if the guest has EL2 then we will use SMC as the conduit, * and otherwise we will use HVC (for backwards compatibility and * because if we're using KVM then we must use HVC). + * Realm guests must also use SMC. */ if (vms->secure && firmware_loaded) { vms->psci_conduit =3D QEMU_PSCI_CONDUIT_DISABLED; - } else if (vms->virt) { + } else if (vms->virt || virt_machine_is_confidential(vms)) { vms->psci_conduit =3D QEMU_PSCI_CONDUIT_SMC; } else { vms->psci_conduit =3D QEMU_PSCI_CONDUIT_HVC; --=20 2.43.0 From nobody Sun Jul 26 10:08:59 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=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1783464334; cv=none; d=zohomail.com; s=zohoarc; b=U+N76M9sovbALmfNAjFY56Bc8RyUoh5IJPucEPTEvAQe4YaxYyJIzGyaGp5/ypI/BmowB/u261gchhinf+fKM2rtW4AkaO4dyMyOJeFQQazqG0cJCKeN3EOeY1Lcr9slYkETgZWUOJUsD7zn9bOzo9VxAyl5X6bXeId85FQtYgQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783464334; 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=2hHH9KSwA+9uIb01eHUjZNIVZ+Ljwq30s0vXxHn37II=; b=PiGSRebZYKV8x1kxp2+srLcWtoQO2vvMGy8dfABVG9KNLRaTGM/N4LqT9vGrrJ9koRRAbo7oVRJyNsrwqTp1bO4B9mQYnMGyrh+trU1bzp4Rza027bNRZx7/QcOUEb2EPEj/HFSVQKds6xQcMUUrsj2HF57iORpVqpJwWTQXf6A= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1783464334612361.0350596189762; Tue, 7 Jul 2026 15:45:34 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1whEW5-0001TD-JU; Tue, 07 Jul 2026 18:43:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1whEW3-0001SL-EG for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:47 -0400 Received: from mail-pl1-x632.google.com ([2607:f8b0:4864:20::632]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1whEW1-0004DL-VJ for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:47 -0400 Received: by mail-pl1-x632.google.com with SMTP id d9443c01a7336-2caf4496889so365395ad.1 for ; Tue, 07 Jul 2026 15:43:45 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:46c8:dda7:40fa:8958]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ccc9d3bbaesm18183805ad.57.2026.07.07.15.43.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jul 2026 15:43:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1783464225; x=1784069025; 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:content-type; bh=2hHH9KSwA+9uIb01eHUjZNIVZ+Ljwq30s0vXxHn37II=; b=vyQ8y5UQJR3URaEUViLga2F6sWbidIqQm/yltzkEW5k8Hid9RXrAq3MwdkgHUY3G2n AjgGKG2VjmLGTTcKPj7/I8D/TKUkpOTYiVHzf2ZHvb1iNoUFxkwTYMwRGX5xkrs9x1zx 7Ddu4lXJ9QfTwOx0N+SrKHcAKhTuAnTz/ZxzLQFOY9zNPlsRI8Tzkyih1sLrxIvhskyb D2JrMh1WEO9ZGrIxgDwUTYcHNrJ1ynP+s+eWUshMl4+JdG6yuECgZuO9ussgD+limYdV 1cs/6BQ/mE7BI+8dIQmDZvUfwkq/qCXUALErU8Dr+NqfzQIONTkXdk1y0yOBma3ZpzZL tsaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783464225; x=1784069025; 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:content-type; bh=2hHH9KSwA+9uIb01eHUjZNIVZ+Ljwq30s0vXxHn37II=; b=Q1NuMMqPmZhgFZ6mx4uxpli51/4h844K+30kz8keXD6Du9rVsUfWoX+1/9nq8hXgkt 7TaxyyZeFVu1zyXdxLmJQddAbhzbEJGo/3HkbLU7edHx1rMP0TOT333P5l/UCpWgUjGo 1mnoon9NVtbK7WXYMyHxf/9kFkJ2oQpMjR4FdbuffbLZR1/zOu40mTba1IiaO3KAvdoz 3g5cC0ytX1WVkK4gBpSeEGwQeJnLeod7bzM9uEeiicK02jOHBaV9I79whlLbr9rxNf+G oNfVCmxx7Wxpmo6Ff5vdUTmqVoKVjMQ/VSNKdtbtTbmZHJ04qz1DSNc/osXfsGvzxcfw XSYQ== X-Gm-Message-State: AOJu0YxcATb1PeQaadceG3IRi6tRP+KxxOduGBQJ7Prd/XzP98VE03Hh VNmo9H+ea7a/Pu4uKqcgfTadJylz+XNPTdgA3qJwngyAYhhGNGIVT7GeVjS1wWHK3AAF0dLORG/ luXQnrOI= X-Gm-Gg: AfdE7cmR/SkijeAUsfFqLFmU1O2DDVFYEdkg+mc2j6jsqgw08k3ojF2Dijxtf01NS6w sH9e9LfLPYFXUuOAsBkwOSYBq+36OkOmukl2nTTfbKW69toEN4h2Bv3N7BuGI1U+O/I/fPuzysH ompHv0wU/IpWIo1dEpQi1HiqBZ7vMImuZXIhzrEEhrUPIno2c8+YlItA1NEt/60h4FOhVfd/Fy+ o1TLD47QbRb+me6dImlgm9Y0ZzgJiOdL+fMrnzWO9LmSyH3El7OUsfQeTEZNPHmrc0tg5SMaJtJ xkSV3E2BNtzFv9t3mufDnKkah7r7qpye+2SBshhygJIkb1wDHhrhzESsmUk3XTgdl2uLcCqbcCL f5dh8iuoRXg7yd8lYJg9QlMQPOtFh8AkBkkVhoaZwqJialP+ufB+pxuTC0zqS9mFyq0lgQ1hMAH hequqJE/aRyGkBT5nLoUTyXS6Dgzx4SkJevqKmXYM= X-Received: by 2002:a17:902:f788:b0:2ca:f417:396b with SMTP id d9443c01a7336-2ccca8c80b8mr42177635ad.3.1783464224666; Tue, 07 Jul 2026 15:43:44 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, jpb@kernel.org, lorenzo.pieralisi@linaro.org Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v1 17/25] hw/arm/virt: Embed Realm VM type with IPA address space Date: Tue, 7 Jul 2026 16:42:58 -0600 Message-ID: <20260707224306.1202330-18-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260707224306.1202330-1-mathieu.poirier@linaro.org> References: <20260707224306.1202330-1-mathieu.poirier@linaro.org> 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::632; envelope-from=mathieu.poirier@linaro.org; helo=mail-pl1-x632.google.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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=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 @linaro.org) X-ZM-MESSAGEID: 1783464335155158500 Content-Type: text/plain; charset="utf-8" From: Jean-Philippe Brucker Set the Ream VM bit in the IPA address space size when needed. Signed-off-by: Jean-Philippe Brucker Signed-off-by: Mathieu Poirier --- hw/arm/virt.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 317816f942de..ac16290b442d 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -4051,6 +4051,7 @@ static HotplugHandler *virt_machine_get_hotplug_handl= er(MachineState *machine, static int virt_kvm_type(MachineState *ms, const char *type_str) { VirtMachineState *vms =3D VIRT_MACHINE(ms); + int rme_vm_type =3D kvm_arm_rme_vm_type(); int max_vm_pa_size, requested_pa_size; bool fixed_ipa; =20 @@ -4080,7 +4081,11 @@ static int virt_kvm_type(MachineState *ms, const cha= r *type_str) * the implicit legacy 40b IPA setting, in which case the kvm_type * must be 0. */ - return fixed_ipa ? 0 : requested_pa_size; + if (fixed_ipa) { + return 0; + } + + return requested_pa_size | rme_vm_type; } =20 static int virt_get_physical_address_range(MachineState *ms, --=20 2.43.0 From nobody Sun Jul 26 10:08:59 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=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1783464321; cv=none; d=zohomail.com; s=zohoarc; b=me8/4Al8F+C4XkWe06F1C9AG1/hupOVNJUYmpp6qltKkZtydO8XjaYZjEIcuWSx604mG9KZHqrYRS9KfiXlLN0WWAVirNjhpLxuN6CoUZBuoP6cKwtT//VLEK3kntvPCKCsXYxX1cY6AzXRWgucCLfsBxsETpbmQm7ruxQL4UmA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783464321; 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=Xy1WYXDMPJXXkl+s8HBgu7HsPDMpRrDpEl9BRUa+Lhg=; b=TMwlogoNLbnmlnt+mpZ6tHJxPG7Luw8RArboNvUH7UBpwduSirQRcZqoKdB12r2Q1+lVY9HfGmFka2XdkAxpQKCT9C4lnqvlghuB2MKeEI8NHuZpJiy8AY3YqMkHfalCfUJ6aZAanFbL2iLGj5Gm9O7rnAMpPN/us9FeizYLxGA= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1783464321125280.13052640426827; Tue, 7 Jul 2026 15:45:21 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1whEW6-0001Tj-1v; Tue, 07 Jul 2026 18:43:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1whEW5-0001Su-4s for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:49 -0400 Received: from mail-pl1-x62f.google.com ([2607:f8b0:4864:20::62f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1whEW3-0004Di-LA for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:48 -0400 Received: by mail-pl1-x62f.google.com with SMTP id d9443c01a7336-2cabc0a1ab6so1139225ad.0 for ; Tue, 07 Jul 2026 15:43:47 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:46c8:dda7:40fa:8958]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ccc9d3bbaesm18183805ad.57.2026.07.07.15.43.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jul 2026 15:43:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1783464226; x=1784069026; 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=Xy1WYXDMPJXXkl+s8HBgu7HsPDMpRrDpEl9BRUa+Lhg=; b=Cj27luMcmy9Y2Lr6MywbadVYwdWET386wKEyQOJpOTgZ2o4J9dGF0Saw30lShp2rmg +ukg02rRMb9IwIfi6Bz2EGbGSn5pZcmTj88POLcH2IDk4aP2r1XYx9YylDKhvGpQ814t 0MNswViW5L/zaYRQZCDIcp84F3av+0zCgmAvUKnSWMOae/ifhbksqTz8Rl746Bvyl2T4 55FHxCaV3/l2vYP9DZQoJayBYzGTbFC7URjUXgdIpP2wNcpcvp/xAtC3j6hY/mpVBxC8 B/YLk7Jqmqmup11J7BHcSRYaY/Zrs5TNZI5gD1W1MJCrzd60N8Dlx9GhiNS8F5qMJ5+U zR5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783464226; x=1784069026; 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=Xy1WYXDMPJXXkl+s8HBgu7HsPDMpRrDpEl9BRUa+Lhg=; b=jfz4otUCw3oMgvurjkyY0Z/5mJm4aY5b6yADO4gQde1WT4xAph5hbM77JQ/z6NlzCE yHCxC7pynjR4V9Wjdg1Xyb/8AIy8jDAwa8i5o+JXwTczcTMwEHFKH6Xc6d3gxbz2XgoA 9BUlHzECKruxANX7xZnOK1bfbhVhe4XakVju/PCG9UuqMr6wiFbcGuNLJ407GPph9z0Y qhFghYCTnjz6DoHTD4FtINGVPPmfDg8CalUzQDT+ndH5teMu93NwHnBUkaJe6dllTpFk HDWozB/Njs1/nIisnXk7gzyqbRQ25hIW2eIa1hE0WkbFHWBrXkMQNtB4zxin9yI1/nM2 X6xg== X-Gm-Message-State: AOJu0Yzk/JmHxw7Udmt+xXc5ZyMnEVzS4dMBgvV8xqKC+p4c7zlSu/fP fANdJEPDva9r0pnhK+UFv9NCA8loRCO/wToiItulFhWuTlKcSmYdBsAKGdwz6GYNnkY= X-Gm-Gg: AfdE7ckRdAIt0OmE9D596MjbvamdQ1O21tBEx4cgIhJOJe/JjGa3pwlDR3lpJCmAZwz GJiAauEX5IAKJFLOLjcUT/SoSvk6cYLPQ7VqoLkwuGXCTy/erRZ6ynakRX+h+1BQaMazOczIhBH lKTjvaun9JEL7HQ5ed1DeRwby+sJdK8NjbQPmrcEpI1gw4INO+QM04MnpwMFtZsIzaiwyWbQ+y1 1QUuIoEauQwwUTsrgHdXT0dovCrIQf6sgVpnRUpS3BD7Sm2yfNOQzTuwtAIjphH5AZPobEneQqx SKEscpKxWD7SRPCI6xpLtbgfaL3BMFYuCcpt+coQ9S6X73iqNIo7t46/Lwsx++IpyTXlI/EebIR /jOAECs1TN6qRxdIJxhRme9CN3uwiWIVKzyY2J3ooGyKcT9epW368BqpTh5AGGyd6JBTi1jCt0J 5qXZ56gg27vFnMSdDhnefmd8rBB23ITEKb2Envp5E= X-Received: by 2002:a17:903:138b:b0:2ca:dd3c:dd0e with SMTP id d9443c01a7336-2ccbe7288d7mr42932815ad.2.1783464226177; Tue, 07 Jul 2026 15:43:46 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, jpb@kernel.org, lorenzo.pieralisi@linaro.org Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v1 18/25] hw/arm/virt: Reserve one bit of guest physical address for RME Date: Tue, 7 Jul 2026 16:42:59 -0600 Message-ID: <20260707224306.1202330-19-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260707224306.1202330-1-mathieu.poirier@linaro.org> References: <20260707224306.1202330-1-mathieu.poirier@linaro.org> 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62f; envelope-from=mathieu.poirier@linaro.org; helo=mail-pl1-x62f.google.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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1783464323174158500 Content-Type: text/plain; charset="utf-8" From: Jean-Philippe Brucker When RME is enabled, the upper GPA bit is used to distinguish protected from unprotected addresses. Reserve it when setting up the guest memory map. Signed-off-by: Jean-Philippe Brucker Signed-off-by: Mathieu Poirier --- hw/arm/virt.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/hw/arm/virt.c b/hw/arm/virt.c index ac16290b442d..d98d8108c8d2 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -4053,14 +4053,24 @@ static int virt_kvm_type(MachineState *ms, const ch= ar *type_str) VirtMachineState *vms =3D VIRT_MACHINE(ms); int rme_vm_type =3D kvm_arm_rme_vm_type(); int max_vm_pa_size, requested_pa_size; + int rme_reserve_bit =3D 0; bool fixed_ipa; =20 - max_vm_pa_size =3D kvm_arm_get_max_vm_ipa_size(ms, &fixed_ipa); + if (rme_vm_type) { + /* + * With RME, the upper GPA bit differentiates Realm from NS memory. + * Reserve the upper bit to ensure that highmem devices will fit. + */ + rme_reserve_bit =3D 1; + } + + max_vm_pa_size =3D kvm_arm_get_max_vm_ipa_size(ms, &fixed_ipa) - + rme_reserve_bit; =20 /* we freeze the memory map to compute the highest gpa */ virt_set_memmap(vms, max_vm_pa_size); =20 - requested_pa_size =3D 64 - clz64(vms->highest_gpa); + requested_pa_size =3D 64 - clz64(vms->highest_gpa) + rme_reserve_bit; =20 /* * KVM requires the IPA size to be at least 32 bits. @@ -4069,11 +4079,11 @@ static int virt_kvm_type(MachineState *ms, const ch= ar *type_str) requested_pa_size =3D 32; } =20 - if (requested_pa_size > max_vm_pa_size) { + if (requested_pa_size > max_vm_pa_size + rme_reserve_bit) { error_report("-m and ,maxmem option values " "require an IPA range (%d bits) larger than " "the one supported by the host (%d bits)", - requested_pa_size, max_vm_pa_size); + requested_pa_size, max_vm_pa_size + rme_reserve_bit); return -1; } /* --=20 2.43.0 From nobody Sun Jul 26 10:08:59 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=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1783464281; cv=none; d=zohomail.com; s=zohoarc; b=Rc15ecYMCmbgrs7Mtf5xHiSKp7wYRpElsTcbqm6hQFCVCA2KVX6Ea/qC8siddx3n0kjNbIE4E0vO92z/5/pblMxWipUEl4PmV9wRdsbFqhZBdsFRV6dLX4oO5Z9PQk06K/TDoEMpnYgfYKekV0TGwj8yAqzABUEHcQHm34+50rc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783464281; 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=LBlWGabD4GkOvznv4dVAU2c7SOIX7YRSJZ4YheOCNfg=; b=FY7iF+CPy/RSfiH4Gycl2wGxUVDvqMGK3EMyItG8INaDGdmZ/mbChIlIcJdNK7Y/BFGVW+UxibaNvHwZlk0lBpZepv1Tygcsv2c37kh7uylzkc1nUYeMB9lnOpUvbJI7tsfRTo8SZyyILcDrPZvuKkUUYDo6vn1L59guEDu41Gc= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1783464281523380.5614084848788; Tue, 7 Jul 2026 15:44:41 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1whEW8-0001V1-FT; Tue, 07 Jul 2026 18:43:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1whEW7-0001U8-13 for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:51 -0400 Received: from mail-pj1-x1030.google.com ([2607:f8b0:4864:20::1030]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1whEW5-0004E6-3q for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:50 -0400 Received: by mail-pj1-x1030.google.com with SMTP id 98e67ed59e1d1-3825c406ffeso70829a91.0 for ; Tue, 07 Jul 2026 15:43:48 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:46c8:dda7:40fa:8958]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ccc9d3bbaesm18183805ad.57.2026.07.07.15.43.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jul 2026 15:43:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1783464228; x=1784069028; 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=LBlWGabD4GkOvznv4dVAU2c7SOIX7YRSJZ4YheOCNfg=; b=r98/Dumrve8FE5GL/9SZjOjaY9+rtVWBt77nNLBrwPzZQMYBcGy++JrMlY7gDCcJD+ ED4EEycRs5OPHqPgcHLclWqBQPzXZKDY8F2+J38HoSUBogATZPyChNDGAnjBXcqE2L8W zwy2hSveCa1UKcXIz7J+Y3eYyaQZ/VKKQSU8XUtJTwbRsAMJmrKS0739+K89GFEAIPGq 5wwA01oH04okY+GQwNK00TZtkfoMdgcbbkzU+/dwDps0Wc4+oxrI7D4Ox92xMaxFlYmj 7MFn2QdMDhmGm3KDoRHe362cGRCP+MDk5pYdaB8zQUSgC/C6flx6xRHiwTt9u/tpBqeG dIWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783464228; x=1784069028; 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=LBlWGabD4GkOvznv4dVAU2c7SOIX7YRSJZ4YheOCNfg=; b=ZoIapne8fnqqQARfjXEDqhOy3M7W5tUDhD29LAUCW67zqdBJMxcGSYh3iRv2WJVPhM 4KtTRWyiKODdnzy2PoJZ61jEG7KZUHF/yjpmGQhGQEiXx56phvhSRXw0HWRaBjoOge6R I7N4iQM3ZeSe12YPB2Ngju274PBJBecim1kqVjSTnw4lzwR0sKmqUrWBzw7vNS2eNo+0 n1NW/hMzQWVEbX8aM3+2lykvP9gJWDC9nNaDkjIZXblUUNe7/uWpVYp4rlWwmZY89HIk oersDGs3gyh8a/QvmsLvnLzj7M4imtYWOXFaT16G6XrvP8RI7Sl/IG+e0HAr84tmWKKm Mcdg== X-Gm-Message-State: AOJu0YzEJ3LGdn73Xeu6sSAAgKY4U5BABAu6gfidhcke587WEciOyO83 amE9DkGJDbL3V6MIGPrnIszPUbp4qnqGgWsPsVcK3FjMoWbQwS6yiqMNxaGGy4GQtes= X-Gm-Gg: AfdE7cmfZtfJpOwlSHj0IEqbCY7Eo1nS7pvYHZZorzKp8OvmYqWxgsPZtzJPil9OsKw koW6hl/ArmJO15PUcLS4paok7IR2oCK4Sw7fsKcQflCkrOP92ndLzZKaHM94Xzg17PFkGhqsUZt IQ1v8Z55yt8FzrDC771cIs6D0t6TTE2tWlA03siCcyRbgtY0OgJ7SPKE0Qnv0SBf54m7pU/pJC+ P48EUr7OSMWUPGZGC+WxBdK1OmY2aCHTKqCyqeS6BjnMXqQr82pdoYNOXp2BbD5w1Cdz9cHQUwP BDvqrzGdplfaBcKYS7DoDgG9hwjecefonLpZWuufjm1iQtv01D3oAqLxzvso9xIjBH20y+Io0Yq GmnEHBJGqA8GpIfUQLZsdfOtKkwxBGZkW8DWX9ir2lpsj3C/wpDaUDwp0L+eZdMoeA7hlCZXrUj hyTQ99ebuhr0nzmU7agDyja8WrkxhqyH3oew+6yGo= X-Received: by 2002:a17:90b:17c5:b0:369:7f25:cec0 with SMTP id 98e67ed59e1d1-38752d63ac9mr6904172a91.0.1783464227551; Tue, 07 Jul 2026 15:43:47 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, jpb@kernel.org, lorenzo.pieralisi@linaro.org Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v1 19/25] hw/arm/virt: Disable DTB randomness for confidential VMs Date: Tue, 7 Jul 2026 16:43:00 -0600 Message-ID: <20260707224306.1202330-20-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260707224306.1202330-1-mathieu.poirier@linaro.org> References: <20260707224306.1202330-1-mathieu.poirier@linaro.org> 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1030; envelope-from=mathieu.poirier@linaro.org; helo=mail-pj1-x1030.google.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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=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 @linaro.org) X-ZM-MESSAGEID: 1783464282998158500 Content-Type: text/plain; charset="utf-8" From: Jean-Philippe Brucker The dtb-randomness feature, which adds random seeds to the DTB, isn't really compatible with confidential VMs since it randomizes the Realm Initial Measurement. Enabling it is not an error, but it prevents attestation. It also isn't useful to a Realm, which doesn't trust host input. Currently the feature is automatically enabled, unless the user disables it on the command-line. Change it to OnOffAuto, and automatically disable it for confidential VMs, unless the user explicitly enables it. Signed-off-by: Jean-Philippe Brucker Signed-off-by: Mathieu Poirier --- docs/system/arm/virt.rst | 9 +++++---- hw/arm/virt.c | 41 +++++++++++++++++++++++++--------------- include/hw/arm/virt.h | 2 +- 3 files changed, 32 insertions(+), 20 deletions(-) diff --git a/docs/system/arm/virt.rst b/docs/system/arm/virt.rst index 5f6dd1797862..9882b842ddd5 100644 --- a/docs/system/arm/virt.rst +++ b/docs/system/arm/virt.rst @@ -238,10 +238,11 @@ dtb-randomness rng-seed and kaslr-seed nodes (in both "/chosen" and "/secure-chosen") to use for features like the random number generator and address space randomisation. The default is - ``on``. You will want to disable it if your trusted boot chain - will verify the DTB it is passed, since this option causes the - DTB to be non-deterministic. It would be the responsibility of - the firmware to come up with a seed and pass it on if it wants to. + ``off`` for confidential VMs, and ``on`` otherwise. You will want + to disable it if your trusted boot chain will verify the DTB it is + passed, since this option causes the DTB to be non-deterministic. + It would be the responsibility of the firmware to come up with a + seed and pass it on if it wants to. =20 dtb-kaslr-seed A deprecated synonym for dtb-randomness. diff --git a/hw/arm/virt.c b/hw/arm/virt.c index d98d8108c8d2..0f104447e008 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -399,6 +399,7 @@ static int gic_fdt_irq_type_spi(const VirtMachineState = *vms) =20 static void create_fdt(VirtMachineState *vms) { + bool dtb_randomness =3D true; MachineState *ms =3D MACHINE(vms); int nb_numa_nodes =3D ms->numa_state->num_nodes; void *fdt =3D create_device_tree(&vms->fdt_size); @@ -408,6 +409,16 @@ static void create_fdt(VirtMachineState *vms) exit(1); } =20 + /* + * Including random data in the DTB causes random intial measurement o= n CCA, + * so disable it for confidential VMs. + */ + if (vms->dtb_randomness =3D=3D ON_OFF_AUTO_OFF || + (vms->dtb_randomness =3D=3D ON_OFF_AUTO_AUTO && + virt_machine_is_confidential(vms))) { + dtb_randomness =3D false; + } + ms->fdt =3D fdt; =20 /* Header */ @@ -429,13 +440,13 @@ static void create_fdt(VirtMachineState *vms) =20 /* /chosen must exist for load_dtb to fill in necessary properties lat= er */ qemu_fdt_add_subnode(fdt, "/chosen"); - if (vms->dtb_randomness) { + if (dtb_randomness) { create_randomness(ms, "/chosen"); } =20 if (vms->secure) { qemu_fdt_add_subnode(fdt, "/secure-chosen"); - if (vms->dtb_randomness) { + if (dtb_randomness) { create_randomness(ms, "/secure-chosen"); } } @@ -3510,18 +3521,21 @@ static void virt_set_virtio_transports(Object *obj,= Visitor *v, vms->virtio_transports =3D transports; } =20 -static bool virt_get_dtb_randomness(Object *obj, Error **errp) +static void virt_get_dtb_randomness(Object *obj, Visitor *v, const char *n= ame, + void *opaque, Error **errp) { VirtMachineState *vms =3D VIRT_MACHINE(obj); + OnOffAuto dtb_randomness =3D vms->dtb_randomness; =20 - return vms->dtb_randomness; + visit_type_OnOffAuto(v, name, &dtb_randomness, errp); } =20 -static void virt_set_dtb_randomness(Object *obj, bool value, Error **errp) +static void virt_set_dtb_randomness(Object *obj, Visitor *v, const char *n= ame, + void *opaque, Error **errp) { VirtMachineState *vms =3D VIRT_MACHINE(obj); =20 - vms->dtb_randomness =3D value; + visit_type_OnOffAuto(v, name, &vms->dtb_randomness, errp); } =20 static char *virt_get_oem_id(Object *obj, Error **errp) @@ -4339,16 +4353,16 @@ static void virt_machine_class_init(ObjectClass *oc= , const void *data) "Set MSI settings. " "Valid values are auto, gicv2m, = its and off"); =20 - object_class_property_add_bool(oc, "dtb-randomness", - virt_get_dtb_randomness, - virt_set_dtb_randomness); + object_class_property_add(oc, "dtb-randomness", "OnOffAuto", + virt_get_dtb_randomness, virt_set_dtb_random= ness, + NULL, NULL); object_class_property_set_description(oc, "dtb-randomness", "Set off to disable passing rand= om or " "non-deterministic dtb nodes to = guest"); =20 - object_class_property_add_bool(oc, "dtb-kaslr-seed", - virt_get_dtb_randomness, - virt_set_dtb_randomness); + object_class_property_add(oc, "dtb-kaslr-seed", "OnOffAuto", + virt_get_dtb_randomness, virt_set_dtb_random= ness, + NULL, NULL); object_class_property_set_description(oc, "dtb-kaslr-seed", "Deprecated synonym of dtb-rando= mness"); =20 @@ -4411,9 +4425,6 @@ static void virt_instance_init(Object *obj) /* MTE is disabled by default. */ vms->mte =3D false; =20 - /* Supply kaslr-seed and rng-seed by default */ - vms->dtb_randomness =3D true; - vms->irqmap =3D a15irqmap; =20 vms->virtio_transports =3D NUM_VIRTIO_TRANSPORTS; diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h index 22e66d1a113c..d4c1aa04f664 100644 --- a/include/hw/arm/virt.h +++ b/include/hw/arm/virt.h @@ -176,7 +176,7 @@ struct VirtMachineState { bool virt; bool ras; bool mte; - bool dtb_randomness; + OnOffAuto dtb_randomness; bool second_ns_uart_present; OnOffAuto acpi; VirtGICType gic_version; --=20 2.43.0 From nobody Sun Jul 26 10:08:59 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=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1783464303; cv=none; d=zohomail.com; s=zohoarc; b=SCQGz97V//M49xXbcsFjhNZzuvS1sglxVvfDRwWuDXmfmZeVK5Tfok2DsbgOl24a8DyAWuKNYJgboMzQ4QVbcl0ngpW/fepSjzXtoXwgam8TeOZzZ6fnhPkrQATOMqhj82aX6u+zWQHiBcs1HHWMaEGQdmAzY+dTxUqiYTptS0M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783464303; 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=O86QJm1XxClMyzD31RebPc3Pom31UHvgzzbgIM9gz34=; b=elNZ5HJEfNX+m44iP1H3TJQ+uh+NA9tXROCPN5EJikFrl4UjD/xAiw2YUj4OcHkCAZX1B4StoNQRKaSNlO/psWkLt6uMP7hTp9MJbpyEmhaAaeLH9F1WIetDnVXIgOOtVrVaDf3yFbhf2oG9TFOslS1tspJEyR3sKvqb37YjL5g= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1783464303078145.51420726003255; Tue, 7 Jul 2026 15:45:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1whEW9-0001Vn-KE; Tue, 07 Jul 2026 18:43:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1whEW8-0001Up-CL for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:52 -0400 Received: from mail-pl1-x62c.google.com ([2607:f8b0:4864:20::62c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1whEW6-0004ET-RL for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:52 -0400 Received: by mail-pl1-x62c.google.com with SMTP id d9443c01a7336-2cc7e86e7aeso942375ad.2 for ; Tue, 07 Jul 2026 15:43:50 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:46c8:dda7:40fa:8958]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ccc9d3bbaesm18183805ad.57.2026.07.07.15.43.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jul 2026 15:43:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1783464229; x=1784069029; 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:content-type; bh=O86QJm1XxClMyzD31RebPc3Pom31UHvgzzbgIM9gz34=; b=NtsQxGbU8QBnvDHome9b5+6rO+5HcNMRxjVbin6dcSl+DLevyJntxQ1xM5xj+drZ6A nJ2Et3C3pJ1Cdb+YWW2icSPp8iGypnk3tvqCoQmhglQioGCUKd8oo5fYCQh9Yu4CQUCo UNGE/mJTIywAwx8qNxRr9KUPaA+dNQzuJCJl0j0sRW3xy9xhwfZ0VUAP8dn0xcN3sAbh i6iQwB+yEYWbPEaV3W99stug7X1qtxFFjoEbTT+JDM71XJnUrYVwIcSc7dWSQebJjylF MvPtV3woL6Z9YegJl94pV10+dJTKTf9vrMz4wvMHmZ9ZZXFu25zD/2WsNckytd753uBM p9VQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783464229; x=1784069029; 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:content-type; bh=O86QJm1XxClMyzD31RebPc3Pom31UHvgzzbgIM9gz34=; b=iNs8WFLQ9W0CBTeCMA2UsGildKgZ8O2QYRvqyNAAHuhK/nmgcSDwwJCMDuaaWK3e3Q HuiutwzYld7HgLaANX7PzXSXFCw22VDxd9gXVIrVVEWXy2M8gil7xHfFoX+HAgAGE4so VOwomfQ6gpv+2XlHRj2Hf+DWc4zIupKRl1Cn1TrRxVfRZzj5Gz1j7Ky8Q4WXQx/WKXAd VG5pRN90nOvN/qG80A57iJeLnaxg+ePDYu4vLjeACYsCZwyafhCwNQYXXgT6AyzVRELv lE0kwsK8kVFZQfzRCg92gC0gX+ifzBYyxuz3CnIF8eXZ3arX6uDJ5wc2o6LkIAz0iLhw WllA== X-Gm-Message-State: AOJu0YwAhZ6oOWMnd9Fo8GccB5O+m6a7g8sKGjltEPy+/83gMyJ0p2cS rxkQgdYbx5vHUX7HDwmF30QEu0T8CvclkjoGyZa9okwgJxfryEMvyE3B/LYZGRMxtoc= X-Gm-Gg: AfdE7clat6oPvzTvvqGBuIXuKnhYYjEUpRo1gsDv9dJBAKegYZ4qEnNQIQ3+yoxFL+U v+atBCKZa2r1NS6BSGqjXEm0UG24UJ2IwNVMuAyPLcrPfkiRDGgJEWbRQxWjZgYBhBZcoi6RT0j cNmECzX+uzQx7IMwM9I7LWJuXcndzGq4JyHn4lylYGRP1WAyfZAwAEP9KeD9hCectT8Oa/IAFNq lKlY6jMgOiX1NRzWmyPWnLP0tYImah0q5fBpqeqjnQoR0DMQ5pnW9DAMDu1/N9hk8jdEyMVT55F KDA2bbkv3nGZJ4jcolCifEZuGMhVFLTg6WUDlBcvS7u2F6h1kTtkFjwiSbbQiG6waGTuj6uIQiv ZsrhCRpBDctMRWaX+XvKlDcK5+U0ltOOnDLv85bkIahvs0GZesymfnNRx8zbCh9SxM9o+vo52Dw Mtpj0sF1DrIFylzm9uhZSkrKzHT2d/02M1Op9bshU= X-Received: by 2002:a17:902:f789:b0:2ca:281:27f9 with SMTP id d9443c01a7336-2ccbed22936mr61406255ad.27.1783464229346; Tue, 07 Jul 2026 15:43:49 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, jpb@kernel.org, lorenzo.pieralisi@linaro.org Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v1 20/25] hw/arm/virt: Move virt_flash_create() to machvirt_init() Date: Tue, 7 Jul 2026 16:43:01 -0600 Message-ID: <20260707224306.1202330-21-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260707224306.1202330-1-mathieu.poirier@linaro.org> References: <20260707224306.1202330-1-mathieu.poirier@linaro.org> 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62c; envelope-from=mathieu.poirier@linaro.org; helo=mail-pl1-x62c.google.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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=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 @linaro.org) X-ZM-MESSAGEID: 1783464305159158500 Content-Type: text/plain; charset="utf-8" From: Jean-Philippe Brucker For confidential VMs we'll want to skip flash device creation. Unfortunately, in virt_instance_init() the machine->cgs member has not yet been initialized, so we cannot check whether confidential guest is enabled. Move virt_flash_create() to machvirt_init(), where we can access the machine->cgs member. Signed-off-by: Jean-Philippe Brucker Signed-off-by: Mathieu Poirier Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/arm/virt.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 0f104447e008..2e8e29244284 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -2909,6 +2909,8 @@ static void machvirt_init(MachineState *machine) unsigned int smp_cpus =3D machine->smp.cpus; unsigned int max_cpus =3D machine->smp.max_cpus; =20 + virt_flash_create(vms); + possible_cpus =3D mc->possible_cpu_arch_ids(machine); =20 /* @@ -4429,8 +4431,6 @@ static void virt_instance_init(Object *obj) =20 vms->virtio_transports =3D NUM_VIRTIO_TRANSPORTS; =20 - virt_flash_create(vms); - vms->oem_id =3D g_strndup(ACPI_BUILD_APPNAME6, 6); vms->oem_table_id =3D g_strndup(ACPI_BUILD_APPNAME8, 8); cxl_machine_init(obj, &vms->cxl_devices_state); --=20 2.43.0 From nobody Sun Jul 26 10:08:59 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=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1783464356; cv=none; d=zohomail.com; s=zohoarc; b=b7cqG6bR15Xwo+9uH1wSRmYvbTZQkOeORoTMlg7YVvHWS0c1DW/Xe1JQgtR49Bm+fP3u6BoeWj18+s51rs5p9FEOA6uOG33JFVyHSg6R3fRPEYmxXcQow9ui+HjD8Dxkh4C0vBBRuUCTWtJieQZ1I2yx45RLfFa9CoFrFVTiXMo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783464356; 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=szLdFhlpH4Hli47T63h+38xa0y28rVtNKLzkycxlo6A=; b=CqwaKbGHyPptJu7/HcCoeiJORp6HCANHuG+eeN0ukvZgJsIJu6eRoHD7rkmHx0/7gqpkLl8CPG2r5vg7BVje6EfyvaqblfSX5zq5RD1g/4WdANyV1XAc+cHoEcxmm9HnXRPhhpoqFn1KLqmtw90a/FykHlGiPD8BCL6D3Oeb5Go= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1783464356108164.45790309674294; Tue, 7 Jul 2026 15:45:56 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1whEWC-0001WP-1J; Tue, 07 Jul 2026 18:43:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1whEWA-0001W8-F5 for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:54 -0400 Received: from mail-pl1-x636.google.com ([2607:f8b0:4864:20::636]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1whEW8-0004Eo-Go for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:54 -0400 Received: by mail-pl1-x636.google.com with SMTP id d9443c01a7336-2cc7ef7ec27so1336245ad.1 for ; Tue, 07 Jul 2026 15:43:52 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:46c8:dda7:40fa:8958]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ccc9d3bbaesm18183805ad.57.2026.07.07.15.43.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jul 2026 15:43:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1783464231; x=1784069031; 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:content-type; bh=szLdFhlpH4Hli47T63h+38xa0y28rVtNKLzkycxlo6A=; b=h3ldTpGfMWwqZhjkdPIvRx5F1Ol98TvWDCqRGKKi97KYwq+7327K031L0vL+3K+1xN ne5MqPX9+xJ11LWhw3EphJffLXbOUR2A8MOXmu/5z+CNUDIcwphs1lH+jxnfvGVolIyK LNGz8Hb8iJuo2fvKR1bLB1YUnPAggYLNlGoo5MGPwt8dt1O7Dd0/gKU9ud0BROQ1XNty IWf9W7S5KJwLQkiSAEDqLuS5lMqKFUWxHipm4GPOzkTd3thiDd8J3mCqYH4ZvbU5dRkW /5MkhcmVcfzW/mG808x7tIKSl9JbrjZp+EAZCOS/sDDfKp9ItROlR1OQaSBpyPnxV24C sBlg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783464231; x=1784069031; 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:content-type; bh=szLdFhlpH4Hli47T63h+38xa0y28rVtNKLzkycxlo6A=; b=f4W9Cw9ueq7rgKXqddapGbNvMdnPRJgIih71ID0E9bI90IA+QFMNoJpai9caXfXH9h yLwMV/hqnk4J9yO2kfygye2lwEd2B4KZqhIqF1kaVnD/ljWDU+Q3z6CnVDCvncqu5qV7 K4Cck2OHAQx7Occp/CqoisGKn3wdpM3I4ADfUnJqlO1J/RE6NME1iA8qm/s6RmVN8+T6 AHx+DwD7xkOfq7la2Gb5DFOxI6N82kfIinAsE5m7gz5cl1Lr/nCcRmQQILRDvuy8QTFx 3uUmEi9M8o6vosFqNXzCMTQNK92XWFQHKr/+ylucVGZTh1fyCz87y3VWzUjUnI7e610c 9Blw== X-Gm-Message-State: AOJu0YwSYQyxxscYfem6Q5wiRbR96m1VQ/y9IwaGUtR7DZglgOTkNwv4 mJDHxTZQp7WDOf97PQKSz+aVi+l604FR2UYtVcQgQa5AZET2XotNqQhP6I+7JqoA0ko= X-Gm-Gg: AfdE7cncvQMoCQ5ifGMpEhkBCSn6MsEhp+QfOC8FXuU5MucwHCeHNyxuc5BbaRvKjl0 AeA6PJ9BCxuYLYJpeZphsFetM7ZLiegSGeT5M0+JzYXy9qla1loTZlkDQs04wdKb6xIGJ/Ueolw twWcY+AojwbdoUBa0N4kS3JqNb7ZLOa8lLfd/v1Nq/KRlzfd8ogpLjHva+TR0pZ/a2LUElIYKUM T3//TQM/ha/6sO0H0IhpvzWkhRUHdPJBTjS4dLRC7DF/2onsHkCKf2tmspd9FxtjEsaHRRWbCSj sJZlZ879kVnV+6sJwegRBFfAeTYf3qoYT5C5fSdrScx4Ha9eDZnDpanLnbZf2vttpYlg4BmjcZO KK9nalstHOQc/LMejW3vq/Sxws8KliC3dD7dQmWEMuv0gGiaFYGH8pIb6i/o1YcmtR1d27GyQZ5 Rzraqq16nI45WAHT0UfD/buvFb7AT0fGjVtK6aL78= X-Received: by 2002:a17:902:eccd:b0:2ca:a284:a136 with SMTP id d9443c01a7336-2ccbf188823mr59188875ad.42.1783464231074; Tue, 07 Jul 2026 15:43:51 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, jpb@kernel.org, lorenzo.pieralisi@linaro.org Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v1 21/25] hw/arm/virt: Use RAM instead of flash for confidential guest firmware Date: Tue, 7 Jul 2026 16:43:02 -0600 Message-ID: <20260707224306.1202330-22-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260707224306.1202330-1-mathieu.poirier@linaro.org> References: <20260707224306.1202330-1-mathieu.poirier@linaro.org> 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::636; envelope-from=mathieu.poirier@linaro.org; helo=mail-pl1-x636.google.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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=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 @linaro.org) X-ZM-MESSAGEID: 1783464357388158500 Content-Type: text/plain; charset="utf-8" From: Jean-Philippe Brucker Use RAM instead of flash to store firmware image and boot information, including UEFI variables. That way the firmware can be measured and included in the Realm's initial measurements. It also prevents variable stored in flash and modified as part of the boot process to be leaked outside the Realm. Signed-off-by: Jean-Philippe Brucker Signed-off-by: Mathieu Poirier --- hw/arm/boot.c | 37 +++++++++++++++++++++++++-- hw/arm/virt.c | 58 +++++++++++++++++++++++++++++++++++++++++++ include/hw/arm/boot.h | 9 +++++++ 3 files changed, 102 insertions(+), 2 deletions(-) diff --git a/hw/arm/boot.c b/hw/arm/boot.c index bcab21d349b4..aea044fbed9a 100644 --- a/hw/arm/boot.c +++ b/hw/arm/boot.c @@ -1113,7 +1113,36 @@ static void arm_setup_direct_kernel_boot(ARMCPU *cpu, } } =20 -static void arm_setup_firmware_boot(ARMCPU *cpu, struct arm_boot_info *inf= o) +static void arm_setup_confidential_firmware_boot(ARMCPU *cpu, + struct arm_boot_info *inf= o, + const char *firmware_file= name) +{ + ssize_t fw_size; + const char *fname; + AddressSpace *as =3D arm_boot_address_space(cpu, info); + + fname =3D qemu_find_file(QEMU_FILE_TYPE_BIOS, firmware_filename); + if (!fname) { + error_report("Could not find firmware image '%s'", firmware_filena= me); + exit(1); + } + + /* + * Load the firmware image in the Realm's address space. Mapping of t= he + * firmware area in the Realm's address space is done in function + * virt_confidential_firmware_init(). + */ + fw_size =3D load_image_targphys_as(firmware_filename, + info->firmware_base, + info->firmware_max_size, as, NULL); + if (fw_size <=3D 0) { + error_report("could not load firmware '%s'", firmware_filename); + exit(1); + } +} + +static void arm_setup_firmware_boot(ARMCPU *cpu, struct arm_boot_info *inf= o, + const char *firmware_filename) { /* Set up for booting firmware (which might load a kernel via fw_cfg) = */ =20 @@ -1169,6 +1198,10 @@ static void arm_setup_firmware_boot(ARMCPU *cpu, str= uct arm_boot_info *info) } } =20 + if (info->confidential) { + arm_setup_confidential_firmware_boot(cpu, info, firmware_filename); + } + /* * We will start from address 0 (typically a boot ROM image) in the * same way as hardware. Leave env->boot_info NULL, so that @@ -1216,7 +1249,7 @@ void arm_load_kernel(ARMCPU *cpu, MachineState *ms, s= truct arm_boot_info *info) =20 /* Load the kernel. */ if (!info->kernel_filename || info->firmware_loaded) { - arm_setup_firmware_boot(cpu, info); + arm_setup_firmware_boot(cpu, info, ms->firmware); } else { arm_setup_direct_kernel_boot(cpu, info); } diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 2e8e29244284..8b79c3ea28e5 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -1821,6 +1821,16 @@ static PFlashCFI01 *virt_flash_create1(VirtMachineSt= ate *vms, =20 static void virt_flash_create(VirtMachineState *vms) { + /* + * For Realms, the firmware image is placed directly in the guest's + * RAM area. The association between the final location in the + * guest's RAM and the system memory is done in function + * virt_confidential_firmware_init(). + */ + if (virt_machine_is_confidential(vms)) { + return; + } + vms->flash[0] =3D virt_flash_create1(vms, "virt.flash0", "pflash0"); vms->flash[1] =3D virt_flash_create1(vms, "virt.flash1", "pflash1"); } @@ -1871,6 +1881,16 @@ static void virt_flash_fdt(VirtMachineState *vms, MachineState *ms =3D MACHINE(vms); char *nodename; =20 + /* + * For Realms the firmware images are stored in the guest's address + * space. As such there is no need for flash configuration in the FDT. + * See function virt_confidential_firmware_init() and + * arm_setup_confidential_firmware_boot() for details. + */ + if (virt_machine_is_confidential(vms)) { + return; + } + if (sysmem =3D=3D secure_sysmem) { /* Report both flash devices as a single node in the DT */ nodename =3D g_strdup_printf("/flash@%" PRIx64, flashbase); @@ -1906,6 +1926,32 @@ static void virt_flash_fdt(VirtMachineState *vms, } } =20 +static bool virt_confidential_firmware_init(VirtMachineState *vms, + MemoryRegion *sysmem) +{ + MemoryRegion *fw_ram; + hwaddr fw_base =3D vms->memmap[VIRT_FLASH].base; + hwaddr fw_size =3D vms->memmap[VIRT_FLASH].size; + + if (!MACHINE(vms)->firmware) { + return false; + } + + assert(machine_require_guest_memfd(MACHINE(vms))); + + fw_ram =3D g_new(MemoryRegion, 1); + memory_region_init_ram_guest_memfd(fw_ram, NULL, "fw_ram", fw_size, + &error_fatal); + /* + * Map the guest's firmware image directly in its address space. + * Copying of the firmware image itself is done in function + * arm_setup_confidential_firmware_boot(). + */ + memory_region_add_subregion(sysmem, fw_base, fw_ram); + + return true; +} + static bool virt_firmware_init(VirtMachineState *vms, MemoryRegion *sysmem, MemoryRegion *secure_sysmem) @@ -1914,6 +1960,15 @@ static bool virt_firmware_init(VirtMachineState *vms, const char *bios_name; BlockBackend *pflash_blk0; =20 + /* + * For a confidential VM, the firmware image and any boot information, + * including EFI variables, are stored in RAM in order to be measurabl= e and + * private. Create a RAM region and load the firmware image there. + */ + if (virt_machine_is_confidential(vms)) { + return virt_confidential_firmware_init(vms, sysmem); + } + /* Map legacy -drive if=3Dpflash to machine properties */ for (i =3D 0; i < ARRAY_SIZE(vms->flash); i++) { pflash_cfi01_legacy_drive(vms->flash[i], @@ -3276,7 +3331,10 @@ static void machvirt_init(MachineState *machine) vms->bootinfo.get_dtb =3D machvirt_dtb; vms->bootinfo.skip_dtb_autoload =3D true; vms->bootinfo.firmware_loaded =3D firmware_loaded; + vms->bootinfo.firmware_base =3D vms->memmap[VIRT_FLASH].base; + vms->bootinfo.firmware_max_size =3D vms->memmap[VIRT_FLASH].size; vms->bootinfo.psci_conduit =3D vms->psci_conduit; + vms->bootinfo.confidential =3D virt_machine_is_confidential(vms); arm_load_kernel(ARM_CPU(first_cpu), machine, &vms->bootinfo); =20 vms->machine_done.notify =3D virt_machine_done; diff --git a/include/hw/arm/boot.h b/include/hw/arm/boot.h index 94386fdbea6c..fe7e14e94651 100644 --- a/include/hw/arm/boot.h +++ b/include/hw/arm/boot.h @@ -113,6 +113,10 @@ struct arm_boot_info { */ bool firmware_loaded; =20 + /* Used when loading firmware into RAM */ + hwaddr firmware_base; + hwaddr firmware_max_size; + /* Address at which board specific loader/setup code exists. If enable= d, * this code-blob will run before anything else. It must return to the * caller via the link register. There is no stack set up. Enabled by @@ -136,6 +140,11 @@ struct arm_boot_info { =20 /* CPU having load the kernel and that should be the first to boot. */ ARMCPU *primary_cpu; + + /* + * Confidential guest boot loads everything into RAM so it can be meas= ured. + */ + bool confidential; }; =20 /** --=20 2.43.0 From nobody Sun Jul 26 10:08:59 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=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1783464370; cv=none; d=zohomail.com; s=zohoarc; b=fGG+m/kiJh/nLMGsA8EgemP+s3uqmgpguV6zYi17We3dnAe/9NXae7Sb9IBDaJPj00RRNJLFAbfFEEeILJ2ZUKUZgN0NgXQVYT1FJWgnGRuQECPMqEiVUi6PvHvLUydDgCE11hZM9bVgBZCa/jM4lCIMpsqTbx0s0T/E8hm4vQM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783464370; 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=zEk98N3PX15q772/PbHQHTfPY1+SUtqFx9RzdGfiXt4=; b=bS4FtaP83K89ofxvpDbSwsl4q4Wp5C1kP1lPy5VsR32cPZckQdgvu8QzWnxICjJHtMBO/W6kilJzGnDtYnUcDUIrTra7Sd0L7Hv0oTO+fIZblv/rjcO2czsFBwoNeNbE0gKyLYUFdC6njr7By+zyMH69Qd8YqmStN+1uaMaytSM= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1783464370732319.2063715598223; Tue, 7 Jul 2026 15:46:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1whEWD-0001XZ-Bc; Tue, 07 Jul 2026 18:43:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1whEWC-0001WW-63 for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:56 -0400 Received: from mail-pl1-x62a.google.com ([2607:f8b0:4864:20::62a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1whEWA-0004FE-3B for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:55 -0400 Received: by mail-pl1-x62a.google.com with SMTP id d9443c01a7336-2cad8076b01so953665ad.2 for ; Tue, 07 Jul 2026 15:43:53 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:46c8:dda7:40fa:8958]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ccc9d3bbaesm18183805ad.57.2026.07.07.15.43.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jul 2026 15:43:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1783464233; x=1784069033; 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=zEk98N3PX15q772/PbHQHTfPY1+SUtqFx9RzdGfiXt4=; b=Jjy7XRmJdr6z5iRmavRvbzZw7fHn12sBLRGjbguWQw3+hgU8Z4e5+ryEoDfq0GR6cM Dn4VAq+vVfduApGV4YqlDhCsRQ11s3wcwCKhogyHSqc8zd/DImVKqtLNW7TcSnGyA/p7 ra2NWOIIYgO4U1T79gnP1b18KO9LFqIinx8sTF1+p8rib5d52n3pyCGfeLCwKz9Eo1n+ XnmkubjgUZJibSZKQAUgyirvEJ//B/DZowm7B/pRlstKOwT1MnDydGjhJW3OA1S9+Z0Q 3jh9i96xO6LqvVgGNaX2JC9SIDRGN/2bSuXsF3VWrx6y8JZPjlsUK9arpHhdfORV5BGn VPOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783464233; x=1784069033; 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=zEk98N3PX15q772/PbHQHTfPY1+SUtqFx9RzdGfiXt4=; b=BVfoYw7GQ/+ppWaMdbMTj08/Pm+6JjjmeOUTwcSl32eCVYUucQ/GUC15I8Or3O8gbV HdnpyLONGgfk905lnoBeN9YrU2a1axv9j9B/OK7thirJSEHgC1SyFhpNb6g/uVcg//EP J50iOasSjYwaoU+Yg02yxjDx4mPgohM3MIvMvUtWWi8vOI666vntnfRyod28acgzrecy f1qTKzb63bUrNsTAOvQd8kjjJhcZEQPQrh+ot+kn+cUHCfqmcrepSuaJ3FXWJUJ5GR/E XKeiJGDgvcj1IunAdsRjNwdSJICGiYXkY2PJpywM7mhveb4fOcKFlm4PKc5rwm6zBCuY tv3g== X-Gm-Message-State: AOJu0YzWvhx2kpQ94ovymFkdcgjq1VHmFh5q6uUIALdxowjTFCxO2TOc FP1Im86fBDYCMd4Dsnwi7YdMV6El6Lbe4jiTndY3g4R7Qg33dElObRPOU8acxzB4S2k= X-Gm-Gg: AfdE7ckAOVWl/gebhGXIo3Wla3PsRbEe3/h7GiB3XFSBvlzYl+nAT/MflFB+MJ46wqD mmSeCFJOlZ5+coODx5+3RcBqtnVgp4b1RAGYmU2ASl+qROi1TPWdP3qodzhhCxYln9L0/Pvo56t hvJIegutgkhXti2BQR1Crrg6YBK/WWFXHKuKCqjTfZm3Oz5xn+9mTDIAIiIAsq1VmaP6aJJodwn B1FzmCrJTPEmKML9X4HxtXOzTdYsqOUpWWeApD1Z/Dby7hjsebwhE6hu59vn/UfbBPZd+qY5Bnq S+t/dKFBwMy4m+z7hvbaugBarKhN9XG9rZKC82OWyPXj3y4pMjicg3ei0GAknluFlIz2hZDh8Y7 Mm4F6GDAZU2IsJAdUIa27ddXSsg8CUyNO3xsN1iGuhXg/EZlXKozOqvzdXu3A2sSUS1+tszqfQs 2rSfPtZN3gx0XQPdSfQP8S03BPS0mT+aXHhBARrbI= X-Received: by 2002:a17:902:dac4:b0:2c8:1c3e:9636 with SMTP id d9443c01a7336-2ccbf07a9b2mr64568705ad.25.1783464232563; Tue, 07 Jul 2026 15:43:52 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, jpb@kernel.org, lorenzo.pieralisi@linaro.org Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v1 22/25] target/arm/kvm-rme: Add DMA remapping for the shared memory region Date: Tue, 7 Jul 2026 16:43:03 -0600 Message-ID: <20260707224306.1202330-23-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260707224306.1202330-1-mathieu.poirier@linaro.org> References: <20260707224306.1202330-1-mathieu.poirier@linaro.org> 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62a; envelope-from=mathieu.poirier@linaro.org; helo=mail-pl1-x62a.google.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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=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 @linaro.org) X-ZM-MESSAGEID: 1783464371484158500 Content-Type: text/plain; charset="utf-8" From: Jean-Philippe Brucker In Arm CCA, the guest-physical address space is split in half. The top half represents memory shared between guest and host, and the bottom half is private to the guest. From QEMU's point of view, the two halves are merged into a single region, and pages within this region are either shared or private. Virtual devices implemented by the host are only allowed to access the top half. For emulated MMIO, KVM strips the GPA before returning to QEMU, so the GPA already belongs to QEMU's merged view of guest memory. However DMA addresses cannot be stripped this way and need special handling by the VMM. When emulating DMA the VMM needs to translate the addresses into its merged view. Add an IOMMU memory region on the top half, that retargets DMA accesses to the merged sysmem. Signed-off-by: Jean-Philippe Brucker Signed-off-by: Mathieu Poirier --- hw/arm/virt.c | 2 + target/arm/kvm-rme.c | 106 ++++++++++++++++++++++++++++++++++++++++++ target/arm/kvm-stub.c | 4 ++ target/arm/kvm_arm.h | 10 ++++ 4 files changed, 122 insertions(+) diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 8b79c3ea28e5..a8d777d63cd7 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -3325,6 +3325,8 @@ static void machvirt_init(MachineState *machine) vms->fw_cfg, OBJECT(vms)); } =20 + kvm_arm_rme_init_gpa_space(vms->highest_gpa, vms->bus); + vms->bootinfo.ram_size =3D machine->ram_size; vms->bootinfo.board_id =3D -1; vms->bootinfo.loader_start =3D vms->memmap[VIRT_MEM].base; diff --git a/target/arm/kvm-rme.c b/target/arm/kvm-rme.c index 58669f4a50f1..7d5f37ab9230 100644 --- a/target/arm/kvm-rme.c +++ b/target/arm/kvm-rme.c @@ -11,10 +11,12 @@ #include "hw/core/boards.h" #include "hw/core/cpu.h" #include "hw/core/loader.h" +#include "hw/pci/pci.h" #include "kvm_arm.h" #include "migration/blocker.h" #include "qapi/error.h" #include "qemu/error-report.h" +#include "qemu/units.h" #include "qom/object_interfaces.h" #include "system/confidential-guest-support.h" #include "system/kvm.h" @@ -25,6 +27,23 @@ OBJECT_DECLARE_SIMPLE_TYPE(RmeGuest, RME_GUEST) =20 #define RME_PAGE_SIZE qemu_real_host_page_size() =20 +/* + * Realms have a split guest-physical address space: the bottom half is pr= ivate + * to the realm, and the top half is shared with the host. Within QEMU, we= use a + * merged view of both halves. Most of RAM is private to the guest and not + * accessible to us, but the guest shares some pages with us. + * + * RealmDmaRegion performs remapping of top-half accesses to system memory. + */ +struct RealmDmaRegion { + IOMMUMemoryRegion parent_obj; +}; + +#define TYPE_REALM_DMA_REGION "realm-dma-region" +OBJECT_DECLARE_SIMPLE_TYPE(RealmDmaRegion, REALM_DMA_REGION) +OBJECT_DEFINE_SIMPLE_TYPE(RealmDmaRegion, realm_dma_region, + REALM_DMA_REGION, IOMMU_MEMORY_REGION); + typedef struct { hwaddr base; hwaddr size; @@ -36,6 +55,10 @@ struct RmeGuest { Notifier rom_load_notifier; RmeRamRegion init_ram; GSList *ram_regions; + uint8_t ipa_bits; + + RealmDmaRegion *dma_region; + AddressSpace dma_as; }; =20 OBJECT_DEFINE_SIMPLE_TYPE_WITH_INTERFACES(RmeGuest, rme_guest, RME_GUEST, @@ -227,3 +250,86 @@ int kvm_arm_rme_vm_type(void) } return 0; } + +static AddressSpace *rme_dma_get_address_space(PCIBus *bus, void *opaque, + int devfn) +{ + return &rme_guest->dma_as; +} + +static const PCIIOMMUOps rme_dma_ops =3D { + .get_address_space =3D rme_dma_get_address_space, +}; + +void kvm_arm_rme_init_gpa_space(hwaddr highest_gpa, PCIBus *pci_bus) +{ + RealmDmaRegion *dma_region; + const unsigned int ipa_bits =3D 64 - clz64(highest_gpa) + 1; + + if (!rme_guest) { + return; + } + + assert(ipa_bits < 64); + + /* + * Setup a DMA translation from the shared top half of the guest-physi= cal + * address space to our merged view of RAM. + */ + dma_region =3D g_new0(RealmDmaRegion, 1); + + memory_region_init_iommu(dma_region, sizeof(*dma_region), + TYPE_REALM_DMA_REGION, OBJECT(rme_guest), + "realm-dma-region", 1ULL << ipa_bits); + address_space_init(&rme_guest->dma_as, MEMORY_REGION(dma_region), + TYPE_REALM_DMA_REGION); + rme_guest->dma_region =3D dma_region; + rme_guest->ipa_bits =3D ipa_bits; + + pci_setup_iommu(pci_bus, &rme_dma_ops, NULL); +} + +static void realm_dma_region_init(Object *obj) +{ +} + +static IOMMUTLBEntry realm_dma_region_translate(IOMMUMemoryRegion *mr, + hwaddr addr, + IOMMUAccessFlags flag, + int iommu_idx) +{ + const hwaddr address_mask =3D MAKE_64BIT_MASK(0, rme_guest->ipa_bits -= 1); + IOMMUTLBEntry entry =3D { + .target_as =3D &address_space_memory, + .iova =3D addr, + .translated_addr =3D addr & address_mask, + /* + * Somewhat arbitrary granule for users that need one, such as + * address_space_get_iotlb_entry(). Should be relatively large to + * avoid frequent TLB misses. It can't be larger than memory region + * alignment (eg. address_mask) because that would mask the whole + * address, preventing vhost from finding the correct memory regio= n. + */ + .addr_mask =3D 4 * KiB - 1, + .perm =3D IOMMU_RW, + }; + + return entry; +} + +static void realm_dma_region_replay(IOMMUMemoryRegion *mr, IOMMUNotifier *= n) +{ + /* Nothing is shared at boot */ +} + +static void realm_dma_region_finalize(Object *obj) +{ +} + +static void realm_dma_region_class_init(ObjectClass *oc, const void *data) +{ + IOMMUMemoryRegionClass *imrc =3D IOMMU_MEMORY_REGION_CLASS(oc); + + imrc->translate =3D realm_dma_region_translate; + imrc->replay =3D realm_dma_region_replay; +} diff --git a/target/arm/kvm-stub.c b/target/arm/kvm-stub.c index 790e1940fd8a..38a2b819fa5c 100644 --- a/target/arm/kvm-stub.c +++ b/target/arm/kvm-stub.c @@ -46,6 +46,10 @@ void kvm_arm_rme_init_guest_ram(hwaddr base, size_t size) { } =20 +void kvm_arm_rme_init_gpa_space(hwaddr highest_gpa, PCIBus *pci_bus) +{ +} + /* * These functions should never actually be called without KVM support. */ diff --git a/target/arm/kvm_arm.h b/target/arm/kvm_arm.h index c7dc45595159..4716785e0fc0 100644 --- a/target/arm/kvm_arm.h +++ b/target/arm/kvm_arm.h @@ -277,4 +277,14 @@ int kvm_arm_rme_vm_type(void); */ void kvm_arm_rme_init_guest_ram(hwaddr base, size_t size); =20 +/** + * kvm_arm_rme_setup_gpa + * @highest_gpa: highest address of the lower half of the guest address sp= ace + * @pci_bus: The main PCI bus, for which PCI queries DMA address spaces + * + * Setup the guest-physical address space for a Realm. Install a memory re= gion + * and notifier to manage the shared upper half of the address space. + */ +void kvm_arm_rme_init_gpa_space(hwaddr highest_gpa, PCIBus *pci_bus); + #endif --=20 2.43.0 From nobody Sun Jul 26 10:08:59 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=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1783464377; cv=none; d=zohomail.com; s=zohoarc; b=iJ23jXxffulBhYKMga4NZfjuTcDAPyOg3EMotgwLACWcr62NL59rYbZgF2mi0D5nyHvnvcLJ0wG6EGaghiwGTf9faAlx7U9/B9afngPnjPvIN8rD3QRw1/a8ucnRUwn8zvSmWLxoKSn6LwmK/V1OgxJ2vYqDXkhMQunuwgekO4I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783464377; 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=EnMMO6XRJvcdXze8ZNpj726nr1qkqlMgc3hRmwu5zpY=; b=JjwlfpQJOQfI+2dcqjbVUBhXQD3j3q+geIzJdh4R3VWMLULvl8RUsZYrJ0+izb7sUWH+riHwLjMCuOteAEXslU7C1keTPB6MN/X+4xde4Wp0uBGGLIGqG+QhdnyNh0+Hw2TaTgrOzsU83oZT4VLTuqHWxdlsb/5ndW0Y7OS6vQA= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1783464377329952.3192731999064; Tue, 7 Jul 2026 15:46:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1whEWE-0001aI-Pl; Tue, 07 Jul 2026 18:43:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1whEWD-0001Xf-D3 for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:57 -0400 Received: from mail-pl1-x62a.google.com ([2607:f8b0:4864:20::62a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1whEWB-0004Fi-T6 for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:57 -0400 Received: by mail-pl1-x62a.google.com with SMTP id d9443c01a7336-2cc80b585bfso775165ad.0 for ; Tue, 07 Jul 2026 15:43:55 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:46c8:dda7:40fa:8958]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ccc9d3bbaesm18183805ad.57.2026.07.07.15.43.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jul 2026 15:43:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1783464234; x=1784069034; 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=EnMMO6XRJvcdXze8ZNpj726nr1qkqlMgc3hRmwu5zpY=; b=Go0yhxWBWqFiJe4snu8lkvfxWh8FkYjMJoCzgDHU3gkzHlp8A9Cr6OlctPc0OhITD6 71jWGcW4coz5EZVzCg7mSKedOKamcQAPpGqimZ48qQdChHei1D7E4NoSEcl1LlxJedTG Vm+0wo+QWEcbu0zlnK0n4qBQjUQE0zsMjqQvzY2wIfTlvLItMMjzUUUMeHMhOt5uGoFx /LvaLpjhoNJr1JCXtC6YNCL4014i4REcHOrHrejiBJOAUYAgRTZRZHUiCmbrnh1gDAou IOTTkUUtDbSaAkUKXlADFTOQqSSDpRRg7sNoNQyu5Mw/v9kslyDCzkDsjKSOvnkeuMZN Tr+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783464234; x=1784069034; 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=EnMMO6XRJvcdXze8ZNpj726nr1qkqlMgc3hRmwu5zpY=; b=XvhoR6fuHRPW1q+e1v/7++lm9TWVs6znw+wpko1lkGRiQ51jXUa/mP/PmzQ1Fdcdld ++Jk5Tg0zPUQ2LkLIpZpSrhouahsfYU1v5LZCpvZQ569xoggcltDokNX+vHEqRbxOrWr MY49WebRbKMD2923NOl2cTIg27GXxXR1Yx5WNkBt95jxRHQ+368Do5YCDVMXqj34yOJM Yl5XOGohOSX2tFGvq2K5eKOvPJEyrjYnlRC+4MGJocwVUtjTftixr15PPFpq5wSdvhSS RVqKNmYgjODIrP1dRwKmGwKnSG7SPqmS1LZtDSvq7SK9sqRajsEUW3yUMrc4NSYwiZT2 AvYA== X-Gm-Message-State: AOJu0Yx+PKxDa3m0TyXTLcyb82+e1yxmTL1wNa27O+o5YSXc/FyI5s2W npWRETWurwILejjkCf4eLtgLfrcxO82KubjnNeC3DSWT1XorWR70hCAKHJg3thcpfA0= X-Gm-Gg: AfdE7ck/SuZEuLiYbSKGQ7ZydJEsMkBz6riPE2a3nxsrDacF8vxM3kbVq5Cl9awwsvT 8/vqhIIeXPl3S6yYk7uRQd/ras0oj7HTm1PRGDhV4LyKUrST1+33+FuPjBRAUa5HDSZlED+OdWz NxDjnkrrnlvmOZDKOv1cfg7JHC+/2XbN1/HG1ML5w/qlpcfYTaUWGUeYx+gEds03QNJysNenaOs 4EAbZgEIlXoIO8vmndMs78vsyoYDk1aY6Cyd4cJy1LJrsg9p5rPRk0viiiwuX+uaysLjAcu2CVr ddEvJuNJNzDORgLDCmGQ9C+HrSXbQ6l3mlEfBjS4hlU2yLgnYzZ+PB2MBfVfTzkoC4KPkVBSduy 3seXkEL9TKxyVZY5Ydq0yxk9jxipzxlNNUAALLcZLz499G0/dtou33RiDBgMox4u/ncrruiw4Oj 05ACdJwtIxB7r0bqmwWxR3e5RNOC0k2rGYAVOGCE8= X-Received: by 2002:a17:903:2344:b0:2c9:de53:f84f with SMTP id d9443c01a7336-2ccbe728bb0mr63110775ad.19.1783464234442; Tue, 07 Jul 2026 15:43:54 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, jpb@kernel.org, lorenzo.pieralisi@linaro.org Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v1 23/25] docs/interop/firmware.json: Add arm-rme firmware feature Date: Tue, 7 Jul 2026 16:43:04 -0600 Message-ID: <20260707224306.1202330-24-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260707224306.1202330-1-mathieu.poirier@linaro.org> References: <20260707224306.1202330-1-mathieu.poirier@linaro.org> 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62a; envelope-from=mathieu.poirier@linaro.org; helo=mail-pl1-x62a.google.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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=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 @linaro.org) X-ZM-MESSAGEID: 1783464379371158500 Content-Type: text/plain; charset="utf-8" From: Jean-Philippe Brucker Some distributions provide packages continaing firmware to be run under QEMU, such as "qemu-efi-aarch64" or "edk2-aarch64". Those packages also contain descriptors in /usr/share/qemu/firmware/*.json listing the firmware features, so that environments like libvirt can figure out which firmware they can load. Define an optional feature for arm64 firmware to indicate that a firmware supports running in a Realm. Firmware implementations need extra support for running in a Realm, in particular to distinguish shared from private guest memory. Signed-off-by: Jean-Philippe Brucker Signed-off-by: Mathieu Poirier Acked-by: Markus Armbruster Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- docs/interop/firmware.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/interop/firmware.json b/docs/interop/firmware.json index 421bee0e5ed4..c68d7f5013f8 100644 --- a/docs/interop/firmware.json +++ b/docs/interop/firmware.json @@ -161,6 +161,9 @@ # options related to this feature are documented in # "docs/system/i386/amd-memory-encryption.rst". # +# @arm-rme: The firmware supports running in a Realm, under the Arm Realm +# Management Extension (RME). +# # @intel-tdx: The firmware supports running under Intel Trust Domain # Extensions (TDX). # @@ -229,7 +232,7 @@ { 'enum' : 'FirmwareFeature', 'data' : [ 'acpi-s3', 'acpi-s4', 'amd-sev', 'amd-sev-es', 'amd-sev-snp', - 'intel-tdx', + 'arm-rme', 'intel-tdx', 'enrolled-keys', 'requires-smm', 'secure-boot', 'host-uefi-vars', 'verbose-dynamic', 'verbose-static' ] } --=20 2.43.0 From nobody Sun Jul 26 10:08:59 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=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1783464317; cv=none; d=zohomail.com; s=zohoarc; b=j2YtoP/etGcZrYtpPgsZ6C5LPyhQX2iqM/kgg6uFm/GB2XHGQjU7OKDU1pmM7a6DEUL6C1B4iQVYS8MwM9jl4652gKUXhGKq/auS0w8dS7u4tT+WDkQ4Tjrk+0Y/v5NXQTP/KhFgamJdXzL4c8VCq4+GGZkJ1zXSCap6knnsJFw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783464317; 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=CEMAHfk6jaAbYfFhNuqQUXCY3WLt4ZsLh5ZzvB9z/oI=; b=Ij8ZoJJSLeuLq4JmCLIn0NiQAF2EOAnFUYzYyFRp4id3tOR6OYzeYP0bWxCQY0oXFmmnDZOfxPcEl7FH5wo6+z5YQ5ffVpE1ZIlKX9MEnB6YmisgWhvewXIeFz4V0+FFqOaJrhAyOOT0Ke9G1+lkJKfwU5L4yvL5Di1l9Z/BnZE= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1783464317394634.2045469641969; Tue, 7 Jul 2026 15:45:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1whEWG-0001cp-Ku; Tue, 07 Jul 2026 18:44:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1whEWF-0001bD-6x for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:59 -0400 Received: from mail-pl1-x631.google.com ([2607:f8b0:4864:20::631]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1whEWD-0004Gz-MK for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:43:58 -0400 Received: by mail-pl1-x631.google.com with SMTP id d9443c01a7336-2cab973140bso1145065ad.3 for ; Tue, 07 Jul 2026 15:43:57 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:46c8:dda7:40fa:8958]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ccc9d3bbaesm18183805ad.57.2026.07.07.15.43.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jul 2026 15:43:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1783464236; x=1784069036; 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:content-type; bh=CEMAHfk6jaAbYfFhNuqQUXCY3WLt4ZsLh5ZzvB9z/oI=; b=WcgMQrFBo4q+nUzA6ZCjRcsWbPGLcUilCEV3oMk14Vv6pNAhL7p8A95vTUTMsizMs0 WQXNQ3DBEgHoAzUoEAJ1EV22Ae92qkd7XRLJJbwSXMZJpp7yAyawLuWxHKrkN8ub+mX7 /C/AnBmMfiDa9TzlJZAi2bZvJIegaZCIRbzt+6t0kmGaCcyGiNbw/IHrA9+TEk8bfmNQ SWgWDcol8NRZ9i3OB/6+JcUrTPXXkPkQTbMaePllkP0hDxFO/A8I2UNIeqUbdrHElU40 9VsQVL7j+TRb7Q1E/Rn0iNHgqq5bQ16WmYrydEY1Nwv0qXYrun0eHCctClZ+oEMpIkOr yakA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783464236; x=1784069036; 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:content-type; bh=CEMAHfk6jaAbYfFhNuqQUXCY3WLt4ZsLh5ZzvB9z/oI=; b=jHAfpPL03ZFLL5DJLKZ9F+/Xq70bcCoAkaQ0col7GHEr/raaizL+KcvdyWXvTS45Xq 2x77KvfhjRFm28Nn48CQprAHSPqiqHowRlkkRh6JVeOf/Igd/D9C+aGJsGZOCo95K08W K21J21QL58FCr175hMtckDu9wciOtyfR12RaadPgEb2CVTCS/C3WtDJxWhI7qMwXtmdS fcm86ijcmB+UD6HdDVdp8ERzdj7sOOS0fOFrtbkHLeRzuqXt/3G7B4Xj0qD36ow3J/Up RXEh1PNv3OcT9ptczfBE6XPfFHE1HCTqWM5et0D34pbNMvMtDCtPNtMjvz4rEF+XyRXo 6QrQ== X-Gm-Message-State: AOJu0YwYo/TPN8wY6Lr8RRDc45aQ4Cpl4Wau8T3YUhfWKFFLsyjRQJXk 0vo8gUu0mJK04IjWbXnUxYCuqmkemx0iFqtUAc0hrMFO4NpJmh0KI9cV+hiU4MIFsvM= X-Gm-Gg: AfdE7cnzs9u+yE0z+CGDuz2bFyXflSzTjMqC51NkcHl6I1HQAPIDJtAwBcrSTzNy+Kw o9UEquT+kUywq3tA7lb8vJStBB0NUpl04MV0+PukYgyr5pgSi0TC/OV0wN56lomPWFHqVe0yjqy NgordrJe5RzeNCL5jTtIwXFGRiIq7mLJPguPWGkdVQmT9Q3dSWYhXjsS6MK2UKZuXo0FmdlZxcd i54VUUr/GvEJ3/o0CxZZLZpGheFWnPPwTFhXuFNlNwiw00jJ2aEt54erzFhV+j8UE1F6A8cPdqp vLtVCwjUeX9V2+wytwArPWUg/kjCqurs640na3kDXCSs2yx2Sf2kWcVF9V4SCwNla5Lh3kx4mGZ 8RMkB9kQDFZUXDxTdOCuKezskf50MsOlw5eoBXvtAcEnGn+FDS6l+mrIONAB/IP7XayhJUu0tl3 TeVqiZdAehRZ1c9eOD4P1r+hMcfvFstRHCy3bsRb8= X-Received: by 2002:a17:902:ea03:b0:2cc:76fd:6537 with SMTP id d9443c01a7336-2ccbe50cf7dmr65254525ad.2.1783464236344; Tue, 07 Jul 2026 15:43:56 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, jpb@kernel.org, lorenzo.pieralisi@linaro.org Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v1 24/25] hw/arm/boot: Load DTB as is for confidential VMs Date: Tue, 7 Jul 2026 16:43:05 -0600 Message-ID: <20260707224306.1202330-25-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260707224306.1202330-1-mathieu.poirier@linaro.org> References: <20260707224306.1202330-1-mathieu.poirier@linaro.org> 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::631; envelope-from=mathieu.poirier@linaro.org; helo=mail-pl1-x631.google.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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=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 @linaro.org) X-ZM-MESSAGEID: 1783464319124158500 Content-Type: text/plain; charset="utf-8" From: Jean-Philippe Brucker Load DTB without modifications when provided. That way it is possible for a verification entity to reconstruct the Realm's initial measurement. Signed-off-by: Jean-Philippe Brucker Signed-off-by: Mathieu Poirier --- hw/arm/boot.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/hw/arm/boot.c b/hw/arm/boot.c index aea044fbed9a..aae77870a5c4 100644 --- a/hw/arm/boot.c +++ b/hw/arm/boot.c @@ -478,7 +478,14 @@ int arm_load_dtb(hwaddr addr, const struct arm_boot_in= fo *binfo, g_autoptr(MemoryDeviceInfoList) md_list =3D NULL; Error *err =3D NULL; =20 - if (binfo->dtb_filename) { + if (binfo->dtb_filename && binfo->confidential) { + /* + * If the user is providing a DTB for a confidential VM, it is alr= eady + * tailored to this configuration and measured. Load it as is, wit= hout + * any modification. + */ + return rom_add_file_fixed_as(binfo->dtb_filename, addr, -1, as); + } else if (binfo->dtb_filename) { char *filename; filename =3D qemu_find_file(QEMU_FILE_TYPE_DTB, binfo->dtb_filenam= e); if (!filename) { --=20 2.43.0 From nobody Sun Jul 26 10:08:59 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=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1783464346; cv=none; d=zohomail.com; s=zohoarc; b=Aru9/YDizrYQjMBRgiO/oJIhAMwnsG93EyQ4pET9RcXjt+evHrgql/xx4i5VsWIJ0ANxL93sd9lZ+SvO1T3VAylfrcrluNF699+H2GFjt9KLexvEzB/jdmhiyspX/2vuWv1IjP06UNifxmMyoZY8xWPsX6d5BnkxumoEJcibWyM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783464346; 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=mYNePrLJkuPtkx4mqIYMVJAY1RutCNE27kKxk1O9tJ0=; b=VAF+Wr3TReoQfWN0Ie75ehI/OLbP8qseoQmIaW395PMyE/yt4wOleYtW2tApQz5b1/fxRaC64HX0FQDnMPyEp7XYHbg62bacLn8v3o3pPPqe2oB16ZFvmBCSFRVGsnyoVp4gKeSPSVoY8PypXmwHTNSQlOTkYqUoSA9tSDLGy3k= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1783464346329664.9839308860976; Tue, 7 Jul 2026 15:45:46 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1whEWJ-0001f2-1t; Tue, 07 Jul 2026 18:44:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1whEWH-0001cu-3Q for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:44:01 -0400 Received: from mail-pl1-x62a.google.com ([2607:f8b0:4864:20::62a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1whEWF-0004HZ-De for qemu-devel@nongnu.org; Tue, 07 Jul 2026 18:44:00 -0400 Received: by mail-pl1-x62a.google.com with SMTP id d9443c01a7336-2c9b1edf2bdso1112985ad.1 for ; Tue, 07 Jul 2026 15:43:59 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:46c8:dda7:40fa:8958]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ccc9d3bbaesm18183805ad.57.2026.07.07.15.43.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jul 2026 15:43:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1783464238; x=1784069038; 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:content-type; bh=mYNePrLJkuPtkx4mqIYMVJAY1RutCNE27kKxk1O9tJ0=; b=yTlXfRJ/aFsA57Y/bb+BBnFMBJwcYx2LrrKgx3zJZiYIzQEBdC3Ax/UsFshTDupphF T7gLZOfS+r+OanSbskRTfrJmsJxjQS/qCd0GxToGLgnZ7m54ji3jzTwMNRuFlbhvDFRV Yr4FPrTyqBx8qE87YNSMYeIsJ1jGmdm+D1tCAaTFzpr955X7o0g0Xmfs4ooH3kpChH4N DMYKdj34llY9Gnem5LnDDiZyckCzSZ4VJYCyc3923VoRLEtfh4CcqiheA6fJu9kU1uBm NLZtanI/kEwBIQHZay6q3SlJWjFi+oFIxDH770iCJE/LkC9JqTW26DexSiJIbq/vm819 FBhQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783464238; x=1784069038; 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:content-type; bh=mYNePrLJkuPtkx4mqIYMVJAY1RutCNE27kKxk1O9tJ0=; b=X3iB2/IEYUuow0bthwzygduplZxeDMXAR6jyr9KlDXkzhTRFc4O29dxHibB79h6HX9 9wFRZiPw8yNJNGrYiqZLC4fXyJkcchtgKxxYx40MaObsNPG5U4W5SvXGTLSt7DeBgeK5 jCldZXLbW/c2Utvs5BcUwXK/UOQDhZLTco+xjbLlDwt+yCp0FhcjXnGbsnAE9XddK8q8 +sNdIwSbfCnMsfdCOGXnRXuLEtqZqFpTgb5wx/MEYSVTJhHUSXBD0OCJjrwU+swFPgTY jy3G4aNDiZrmzdgGfE51dFPnTSnL8SgJYzxF3jc5KCvdclkz2hm92gUQuw3osXXx7/+x 2wQQ== X-Gm-Message-State: AOJu0YyVF2AAmxwXv0yrrSVHY+kAQf3yNY7VNOpcEZsfoRw1OYS+TyBh ykx+f1DME7RrBfU9TSbtoMuZ4f+juZtYDrN5YU57WiUKROim91aEWep+k7g0dxI03wM= X-Gm-Gg: AfdE7cmw4AXb98912/kE41LDubkfmMRZhIkP1E5QGTizb6fuN9Luc+ekQokqSOI7b4x JrnTN5jzgEC8XFFMKMCNFus5lBILAOolDacxbn5vXO6T+xoJC4vbL/ISTvipG7b+KA/zhquAAgR BEoDN25Bgd2D4yDVKzKDVuiZiNVX9FwoB6tB7R7KVzL59yzaDheueR84SYXCupFGGrdQzWW+E9o 3D1Z3B2pI9Y9uwnuhxiLyiCYbVhM5FoKnsKDEh3SArE22zaONFrRaAc0KBoObrw0p1enaMrHe1A 5mT83myWtitpNxoU0ihnvlgOy0CPQ8yztY9t+VIsLjKZMrcJhAsqliI2fDj4vpKUnyCoyaFFq6y BonwLD/AD9j7bxZ3GwOBCYx4Fw9CveLdw3wDCDaM1NFAcym475EnYYdX9SVyYrGxdNeEzJQyFKz p2i11PLkjS+q9PxCn2tMwZGuRaAbTmz43bmG1M9RY= X-Received: by 2002:a17:903:144e:b0:2c7:f4bd:91b5 with SMTP id d9443c01a7336-2ccea26fb06mr183585ad.0.1783464237928; Tue, 07 Jul 2026 15:43:57 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, jpb@kernel.org, lorenzo.pieralisi@linaro.org Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v1 25/25] hw/arm/boot: Skip bootloader for confidential guests Date: Tue, 7 Jul 2026 16:43:06 -0600 Message-ID: <20260707224306.1202330-26-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260707224306.1202330-1-mathieu.poirier@linaro.org> References: <20260707224306.1202330-1-mathieu.poirier@linaro.org> 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62a; envelope-from=mathieu.poirier@linaro.org; helo=mail-pl1-x62a.google.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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=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 @linaro.org) X-ZM-MESSAGEID: 1783464347257158500 Content-Type: text/plain; charset="utf-8" From: Jean-Philippe Brucker An independent verifier needs to reconstruct the content of guest memory in order to attest that it is running trusted code. To avoid having to reconstruct the bootloader generated by QEMU, skip this step and jump directly to the kernel, with the DTB address in x0 as specified by the Linux boot protocol [1]. [1] https://docs.kernel.org/arch/arm64/booting.html Signed-off-by: Jean-Philippe Brucker Signed-off-by: Mathieu Poirier --- hw/arm/boot.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/hw/arm/boot.c b/hw/arm/boot.c index aae77870a5c4..a5918b50d278 100644 --- a/hw/arm/boot.c +++ b/hw/arm/boot.c @@ -732,7 +732,13 @@ static void do_cpu_reset(void *opaque) if (cpu =3D=3D info->primary_cpu) { AddressSpace *as =3D arm_boot_address_space(cpu, info); =20 - cpu_set_pc(cs, info->loader_start); + if (info->confidential) { + assert(is_a64(env)); + env->xregs[0] =3D info->dtb_start; + cpu_set_pc(cs, info->entry); + } else { + cpu_set_pc(cs, info->loader_start); + } =20 if (!have_dtb(info)) { set_kernel_args(info, as); @@ -822,7 +828,8 @@ static ssize_t arm_load_elf(struct arm_boot_info *info,= uint64_t *pentry, } =20 static uint64_t load_aarch64_image(const char *filename, hwaddr mem_base, - hwaddr *entry, AddressSpace *as) + hwaddr *entry, AddressSpace *as, + bool confidential) { const size_t max_bytes =3D LOAD_IMAGE_MAX_DECOMPRESSED_BYTES; hwaddr kernel_load_offset =3D KERNEL64_LOAD_ADDR; @@ -874,7 +881,8 @@ static uint64_t load_aarch64_image(const char *filename= , hwaddr mem_base, * bootloader, we can just load it starting at 2MB+offset rath= er * than 0MB + offset. */ - if (kernel_load_offset < BOOTLOADER_MAX_SIZE) { + if (kernel_load_offset < BOOTLOADER_MAX_SIZE && + !confidential) { kernel_load_offset +=3D 2 * MiB; } } @@ -958,7 +966,8 @@ static void arm_setup_direct_kernel_boot(ARMCPU *cpu, } if (arm_feature(&cpu->env, ARM_FEATURE_AARCH64) && kernel_size < 0) { kernel_size =3D load_aarch64_image(info->kernel_filename, - info->loader_start, &entry, as); + info->loader_start, &entry, as, + info->confidential); is_linux =3D 1; if (kernel_size >=3D 0) { image_low_addr =3D entry; @@ -1099,8 +1108,11 @@ static void arm_setup_direct_kernel_boot(ARMCPU *cpu, fixupcontext[FIXUP_ENTRYPOINT_LO] =3D entry; fixupcontext[FIXUP_ENTRYPOINT_HI] =3D entry >> 32; =20 - arm_write_bootloader("bootloader", as, info->loader_start, - primary_loader, fixupcontext); + /* Immediately jump to the kernel when guest is a Realm */ + if (!info->confidential) { + arm_write_bootloader("bootloader", as, info->loader_start, + primary_loader, fixupcontext); + } =20 if (info->write_board_setup) { info->write_board_setup(cpu, info); --=20 2.43.0