From nobody Sat Sep 26 21:37:19 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=1787695293; cv=none; d=zohomail.com; s=zohoarc; b=nRPxPyG3FLb9wiDA0rfR43d1OkKSYPB5ZOBjugUzRAHyioUHJRQxjoWdGHfhxgl8NFrwuFie8D8rUukhhpBaqivVy0ZVVZje6gz0kuqAzs7giGzJibJwrnd8dLX6TQfW/uj7/ScvbyexzFH9sB3/e/S7d1ezkAg+jz+uwjJow0U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787695293; 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=ndrOCsdwllHKG3R8sNfPufN5ST5eyC5FSUsoL8k0SoY=; b=NdXBfAJEleY+uNvjKem3dDx0qzOK9blfAfsZ1bYDM7mhWUHotkk5ipV5GjHWu/a6Nz3oIzM06StX5H82QmUxlRA1jtGz1pRDPDppYvpZj/E8GlY/rCXxIhXk/8W7T2iAsz/5eI1liJs8y3auQHGIAGK1LfigZYncl+bcVBHxpRU= 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 1787695293301985.8074264599661; Tue, 25 Aug 2026 15:01:33 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyzCm-00036M-8R; Tue, 25 Aug 2026 18:01:17 -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 1wyzCg-0002r6-VQ for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:11 -0400 Received: from mail-pg1-x529.google.com ([2607:f8b0:4864:20::529]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyzCe-00018m-Fo for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:10 -0400 Received: by mail-pg1-x529.google.com with SMTP id 41be03b00d2f7-cc11a905ba5so171363a12.2 for ; Tue, 25 Aug 2026 15:01:08 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:a37a:292f:1363:c0af]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3965d119724sm3090120a91.2.2026.08.25.15.01.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Aug 2026 15:01:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1787695267; x=1788300067; 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=ndrOCsdwllHKG3R8sNfPufN5ST5eyC5FSUsoL8k0SoY=; b=jBOXoj8QEHYMTYq7aPhNTURfflySBF6RNsehMtGG/xItQv5XI/z/g2WQXTjZnc8jK2 X6aDISAbzWjL8CXSh2mQqHEoeA6pjf88d3A2mIdsH+RvD9IMdRiyGFNah3KUvd59YU3x ABxOluajnASrbGkxXJrK/XRioaViNXsglPP12OA7ly+4zpL+3NbJsotfEdyrL0Am8Qc/ 7MksxtgIiTw482sd9yjGnO4oJXQfSwrL8nMMV9h5+hubqsB6Nh+ivzmNEnGzr64PWmgS a8eQ+xPxTuJGgWh58nvlgpY6f97QrIyOyE+hApY7V6cEznBR6iAenfNYNKOauJqlIuk/ CBAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787695267; x=1788300067; 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=ndrOCsdwllHKG3R8sNfPufN5ST5eyC5FSUsoL8k0SoY=; b=g06rKbBG6wEr/K9dtjpIMaDomg4bDaJZxaYgLkPUtlDROrj2WFaub6YlrjGTL1q/bc 1fTM6cWBLtBYnMaB/S+TWA4Uc1kUHa2uwnnOTPAtgYBx8GK7JdPn3dpoTBetbIpIdnqu GNoIKPPlAwdaio15P/xgtjSR30spTNzEoh9PX06AffUE3ya/HCiUMwfvKk/WQqaffNjr RuNoIj+CwNxLEDCWuvMDUVuemTZ+gydjtxMkwJt8GatrSpIOvLwWeJfJ5hjiLH+jX0l8 0sJb2mpz+MMB7O81FrX4FZ9lm56hk8ckTcJWHst3QVn2U7LXUa/IQnov0mI7nvMj6uD6 FXZA== X-Gm-Message-State: AFuF++kg8cwHdVdo0ZCZJREEGErCWSqKp330+5twyDGuxh5qMvwUh0sC XJP28LlT+2vp699FVFGDPyXAbDnKjs5SykfJI2BhjP43lpj4Dz+HNjBlsd80P8wq5MU= X-Gm-Gg: AR+sD12l4J5V1ksOePuerg9wm8KHGYY1D0Z2RndDRwkZ+gubvVeyJEQnptB5BcFp9Z7 JStSOXZmn/Zm7lQxSuoTm4SGK2oCAKmx+synz0b2BsxTGdykc1GmZeCiyEkmO9qpsAgoLSBxoAe ANODplGvkt8fTcQC4xM6b4JvTOdflPDH51JrHv3qUSLd2SEq4NPNjXQGUoxTSmsBOimn46UmhcF ulISnPPsK/hArU+/09eH7bI7zH5p1iYVCyliUYE4crkRukpOqWyarGDvHKPywgSpx82lAT8KV5P I79WQYpcG2jD0+QAL5gQ/Yok0c43+yiXnwRu+sY+L88Ru7spnpDPp90MYffB0QcYi61pCU881M5 YGyk51XL6LabT09ZRaBnRMmcOSUghSwmgG1a4J9FXRUEmIz5QOoN3n7VXU2zpjOXa2N2j12nr0p 2woaga3tuGtA43giEy6zqDG/3TQ4gYg8Yy6qhqVQc99yRVQhc3ktgKn6WH8/60Th1D2VmzduV0c ccpw9fLeTRgXNA= X-Received: by 2002:a17:90b:4a87:b0:38f:efed:5445 with SMTP id 98e67ed59e1d1-3966d18f5a4mr4066265a91.4.1787695266606; Tue, 25 Aug 2026 15:01:06 -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, lorenzo.pieralisi@linaro.org, gshan@redhat.com, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v3 01/24] linux-headers: Add RME related definitions Date: Tue, 25 Aug 2026 16:00:38 -0600 Message-ID: <20260825220101.3443954-2-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260825220101.3443954-1-mathieu.poirier@linaro.org> References: <20260825220101.3443954-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::529; envelope-from=mathieu.poirier@linaro.org; helo=mail-pg1-x529.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: 1787695294006158500 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 | 12 ++++++++++-- 2 files changed, 19 insertions(+), 2 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 c1baca430277..cd09c7a4a60f 100644 --- a/linux-headers/linux/kvm.h +++ b/linux-headers/linux/kvm.h @@ -689,14 +689,19 @@ struct kvm_enable_cap { * 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. + * + * Bits[30-31] are reserved for the VM type */ #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) =20 +#define KVM_VM_TYPE_ARM_NORMAL 0 +#define KVM_VM_TYPE_ARM_REALM (1UL << 30) #define KVM_VM_TYPE_ARM_PROTECTED (1UL << 31) #define KVM_VM_TYPE_ARM_MASK (KVM_VM_TYPE_ARM_IPA_SIZE_MASK | \ - KVM_VM_TYPE_ARM_PROTECTED) + KVM_VM_TYPE_ARM_PROTECTED | \ + KVM_VM_TYPE_ARM_REALM) =20 /* * ioctls for /dev/kvm fds: @@ -719,6 +724,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,7 +992,8 @@ 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_GUEST_MEMFD_MEMORY_ATTRIBUTES 249 +#define KVM_CAP_GUEST_MEMFD_MEMORY_ATTRIBUTES 250 +#define KVM_CAP_ARM_RMI 251 =20 struct kvm_irq_routing_irqchip { __u32 irqchip; --=20 2.43.0 From nobody Sat Sep 26 21:37:19 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=1787695307; cv=none; d=zohomail.com; s=zohoarc; b=YTgVpa9V0e1R5SXlPoZL2V5W5NfrrsXbcqq1nRK8NCnVKj9duiIfjVTy3+id2uWNWBqZiNpo2+vFTLccnaLVdqUNBY+zORVHJQAlMb8cEnK7/VdSyVVP9EetQNPSf/UIzrXLurc511MuXO7AWa48sd7jC4a9TP6WU574JbVDKkw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787695307; h=Content-Type: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=gzyHU9mpmLRwtQLq0gW2o+D00lhdgYVo2at04MRhk8M=; b=d8NJXpGRQZCKrMgimNuCkUqsFkYMupApqzmxQ+F4mAghU5GRldYZjqRkQtIy5nBr8wyA0EJIIuT0msNKQuY7pV7X098mrmblGEgV8p59hjJ61NBfy594BCiK/4hDYq+NiovHJyyusYt1AXosFVnua28PIVTv0nZnJ7mj9g8yQ6Q= 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 178769530776619.700595513687745; Tue, 25 Aug 2026 15:01:47 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyzD1-0003XJ-6A; Tue, 25 Aug 2026 18:01:31 -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 1wyzCi-000326-5g for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:12 -0400 Received: from mail-pj1-x1032.google.com ([2607:f8b0:4864:20::1032]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyzCg-0001Bu-C7 for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:11 -0400 Received: by mail-pj1-x1032.google.com with SMTP id 98e67ed59e1d1-3964dfb5a69so506266a91.1 for ; Tue, 25 Aug 2026 15:01:09 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:a37a:292f:1363:c0af]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3965d119724sm3090120a91.2.2026.08.25.15.01.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Aug 2026 15:01:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1787695269; x=1788300069; darn=nongnu.org; h=content-transfer-encoding:content-type: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=gzyHU9mpmLRwtQLq0gW2o+D00lhdgYVo2at04MRhk8M=; b=XmdwzWU3u7lx+qe2YQG1ucAesrZakFB1ua2ssTnaCBtn93KF8kZeFlLMy34Zq3s6lj noNjvrm5mM3sxw8ppLgPXtxMGV3dlylYtIQf1cbUZKOuG7dUgp6m9rs5AXgxFFTTadMc 4LH9eW3bDNbMRB7HJedehfzpUWnUeyzm+f8E7TQL713nNuubMDh8TW3KoZLq0HcroigA ne6xvaZRFKtDvc8fr3qYyMytGrxxrr0RGOlSaf7u6gneg6gSsS8WatMmN2kmsghCAOH6 KqH+BNDFixzEgencv8kpWj8dIFWh2T8jXrVMJkK7hG7ApCXJ2u8rlzMjvsmG6fubddhx Qx0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787695269; x=1788300069; h=content-transfer-encoding:content-type: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=gzyHU9mpmLRwtQLq0gW2o+D00lhdgYVo2at04MRhk8M=; b=Eh2FasNP1/TsyYgV+QTtSfZG93X0uvUoVcxhxKucGNP7xauXny00EFNvdB+R5THshJ m+6Rl6f8Sd5n2P6Wkh+cU9DjJQq8llSMt6N/lAx+fI7aJhPMhEtsS2cERV1P/YsicnEg P+6vV9pVJINuxf8+dYOsgmWbsUy4IBiKtm2if7KN6lH5uAi4FNyCEkkeSw0JiH5K7q57 NZvfP4qKnRXpyK+72gbzLgCIQFGEoN1TVg9lHcv4dk5oTN5y3mCFXRscBuFTT4AfCkFY rxKlaYIF5NaJT5TXf4IEH9ue9hGgWkFCYoS2um0LIcPyg5meSpuuZF0NTv73A+Uu8WgI zUaQ== X-Gm-Message-State: AFuF++kZ9uWaWW1b/k28FM5fCl4MSTyY9iX7hOiJm6EDVOn+5mi2SHKv li0gRRLriQ/BZcJJHVyublQ6noo8DZCbS8GyX1uOeKkKjeFjJYWZkH5eSzOGv3895TE= X-Gm-Gg: AR+sD11QWJ3ulSvYpJs7pFm5C5RxfQJYVf3T5itsr4g7XpAInFqb3HN8qDjqAomS+ty xWmZOhhAzk9iL0cAkAbkeXSG5vgxDCpAwfhXpjPi3LBiV8rZsXXT1r2aD4TTogNDALw6J720mJK y3WeW6IcdHEPsafaSsAIwV/GPpluXu2g3EC2a4q0TbcTlmbbal3WfxsAIX6FPdWdRR/R8XazHyh Ui07dX9GQBK26alzbJjIyJ3+1YVJMe00oJoNS3wrrzjp76hf32MPmkgQqGlOlVGdfC92i3mKy9m BVWGY71PYzsAdVVAaJUobxMZK0b5l9GD+xv0kxOrEAj8ROffaj0p7NSKImAojDwcqBHemLsKc4g enBAzlRGWEGGy8j8U/HxUmoR1Nsz7opXugopIAwXwuhQo+xm7Ch8VGq43OBmat26GNHTPY1GQMN dixzymyR96nNQpTTybYsqVMndz4GHURrsPpY2dSF9x+GIHlPtNsK9rPhjSmYBgUR3OaVQfQzZe X-Received: by 2002:a17:90b:3d81:b0:38e:c7b0:84ad with SMTP id 98e67ed59e1d1-3966ce035e2mr5067715a91.0.1787695268545; Tue, 25 Aug 2026 15:01:08 -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, lorenzo.pieralisi@linaro.org, gshan@redhat.com, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v3 02/24] target/arm/kvm: Return immediately on error in kvm_arch_init() Date: Tue, 25 Aug 2026 16:00:39 -0600 Message-ID: <20260825220101.3443954-3-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260825220101.3443954-1-mathieu.poirier@linaro.org> References: <20260825220101.3443954-1-mathieu.poirier@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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::1032; envelope-from=mathieu.poirier@linaro.org; helo=mail-pj1-x1032.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: 1787695310478158500 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 Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Mathieu Poirier --- 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 7d194ea112b1..20b39d10b766 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 Sat Sep 26 21:37:19 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=1787695379; cv=none; d=zohomail.com; s=zohoarc; b=lh8M5tf4U3GFAlQns7kAGmxnTe5/5vSYDlZuSHMLOfVIHiF6LnGeeaJRloxlFuKZ52gYbSFljBSqvO67xecdvNTuNedpHjfQqTr2F3ZDXqULBBHSrq24U/F5mA8y24/2E/EzHjLikatMJL/EezaaAQra+3s/zWIUJTG8P/Nd64U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787695379; 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=uun+UuCnOruy+78T99P3n2q7fn+cAO6lGcRn4VnJwcI=; b=GWawgqX75HnhZIsTKwaohrZPA9r1Rt3edDULxHcXNzkEMwo6aBOqgUbtHjKGSaPkfVlypiUNnH9rU0tOzahxU8MA11aQORTyOKb4I1Wpdumm/bbwFkR1A4B2DKDggW321yaoY+O0CyJFCWLRE/ilVuzsYaeunSkKfntksqu823s= 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 1787695379519985.8645520924825; Tue, 25 Aug 2026 15:02:59 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyzD6-0003fz-R1; Tue, 25 Aug 2026 18:01:37 -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 1wyzCk-00035p-3d for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:14 -0400 Received: from mail-pj1-x1034.google.com ([2607:f8b0:4864:20::1034]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyzCi-0001DA-CK for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:13 -0400 Received: by mail-pj1-x1034.google.com with SMTP id 98e67ed59e1d1-38e07ebd263so320533a91.1 for ; Tue, 25 Aug 2026 15:01:11 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:a37a:292f:1363:c0af]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3965d119724sm3090120a91.2.2026.08.25.15.01.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Aug 2026 15:01:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1787695271; x=1788300071; 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=uun+UuCnOruy+78T99P3n2q7fn+cAO6lGcRn4VnJwcI=; b=xVKOi2ycy+TlvFWrqKotSiGNIfrV921hLUnbhs6bJaOoliLbyj/jmV+lvR/eRvWSwz qwX28FiXRa/imT2YQoT5qJh3fAD1eYEbcDm1bVIr16ARnPonAuoCuAPetYcHY0omNmZB ICTlysmPYsLza8TfMwKMARuC+5TJugdKmgs4dmthnDmrRgI3k81ExfBtfzzP4baAN7rb P8zJhDgj6yJoOBq+HGHSBpdK1EweOnamHZBoKYDy9QvNv9nrRa+0k/0vHx/pTPVCEu55 sql+QWAx8sqoTDXhd2KnJwVYYJUL23yBlb/bx/U0fE47CRVMb1fshOj1mEvjNc58+ZXX cApA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787695271; x=1788300071; 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=uun+UuCnOruy+78T99P3n2q7fn+cAO6lGcRn4VnJwcI=; b=eCiB+Fzl63s6hZJ2BAKsRmNQy9vQembs9t9WIMwDZo99rAWqu3Ucd3L1WUrhjUeGRm cF+rPGM8UijpM8fS3IRPd4ptaIDX/9ljprDitQ2EDphPvK1HJjxZyz0WUSE/YtvS2GDz FA8tVQ+HcoPHe0xrU8jUQd76FCzpz3l1uC2u/kJSY10TqUzZBtx4sX+HR3F9c44mKR/0 UkbbCuYYtbJLa6T8gPV67UZTDaUR1lEufH6YmaKkkqLp1g+3QcjrxHPfC+Cyj+eLcuOs rOAWheYB4dhzGMPFtroxSInxYfPgqqFocQCMr404dRdOsMlxpooE5jjpNvf4cgnCBdwv UG/g== X-Gm-Message-State: AFuF++mSym/odpQ7SX/xHqVMPCX/Bhq9mb9k6OgcR8sVxJ9y8QXA9bsq XStUlWw/OBM3EA0kiQCGl9s82TThg6N809o83UlRGhgK6GUVeG5D2rieyoimOJq8EWM= X-Gm-Gg: AR+sD11T9Q7t3TBLG5UzMo+SCOWObGfArrqur9ueLmARl/GNfniGqVAGV2Xk0919PMd 1o56y3R4X5WEY4pGTYWicd4nrgAtBszVvOw7fcK4Qbr5/LrqH2alQKxtXGFzEK8KsTfv0ypZZ7f BrVGf56OYSmrBsmmh44Y76327BzWBORAsyujJs8zhKnyCaXu4pdCI4svakTMXs+SNy/dlDxVp4j FDJqRJeRaRU5SLln5K+lSA0VldbEmirfzSnG6lgKQDZuxoi6vw8sjDjxGMZ7xK2ZglZlI4f909/ lThNHx1a0Ih+s5ZjP4veOkLFBVqW4cmQnnzZmVZyTNHm3RIi7WSjGBaLvGgyITRHpKoPm2A3v62 sGacRrSjd/TEETlVvPxba9xP6MkymCSNrmcYVS7VsOyW61WOuqIKAr5/Uq8I3NmsTzpqnl3kPU0 B8DQTr9kZlFi7LkYl69UNoAt51JmRnpK7XJq7vw74HI7XfhWsz4pR0c69YbCiU1RghBWDEkccAs KHCyNQqJmHjsHn8 X-Received: by 2002:a17:90b:380b:b0:38d:ddc2:7ccb with SMTP id 98e67ed59e1d1-3966d13a242mr4229936a91.1.1787695270354; Tue, 25 Aug 2026 15:01:10 -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, lorenzo.pieralisi@linaro.org, gshan@redhat.com, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v3 03/24] target/arm: Add confidential guest support Date: Tue, 25 Aug 2026 16:00:40 -0600 Message-ID: <20260825220101.3443954-4-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260825220101.3443954-1-mathieu.poirier@linaro.org> References: <20260825220101.3443954-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::1034; envelope-from=mathieu.poirier@linaro.org; helo=mail-pj1-x1034.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: 1787695380612158500 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 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 | 13 +++++++ target/arm/kvm-rme.c | 42 ++++++++++++++++++++++ target/arm/meson.build | 5 ++- 4 files changed, 60 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 037c07879986..edc902c88c36 100644 --- a/qapi/qom.json +++ b/qapi/qom.json @@ -1216,6 +1216,17 @@ 'data': { '*cpu-affinity': ['uint16'], '*node-affinity': ['uint16'] } } =20 +## +# @RmeGuestProperties: +# +# Properties for rme-guest objects. +# +# Since: 11.0 +## +{ 'struct': 'RmeGuestProperties', + 'base': 'ConfidentialGuestSupportProperties', + 'data': {} } + ## # @ObjectType: # @@ -1272,6 +1283,7 @@ { 'name': 'pr-manager-helper', 'if': 'CONFIG_LINUX' }, 'qtest', + 'rme-guest', 'rng-builtin', 'rng-egd', { 'name': 'rng-random', @@ -1351,6 +1363,7 @@ 'pr-manager-helper': { 'type': 'PrManagerHelperProperties', 'if': 'CONFIG_LINUX' }, 'qtest': 'QtestProperties', + 'rme-guest': 'RmeGuestProperties', 'rng-builtin': 'RngProperties', 'rng-egd': 'RngEgdProperties', 'rng-random': { 'type': 'RngRandomProperties', 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 4723f9f170ad..544df5c84d79 100644 --- a/target/arm/meson.build +++ b/target/arm/meson.build @@ -20,7 +20,10 @@ arm_common_ss.add(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 Sat Sep 26 21:37:19 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=1787695300; cv=none; d=zohomail.com; s=zohoarc; b=arx7/oLo8H/F1LEdmiEALXCHfnxZfgR3Qldcz83+I+0fMGnTBnVTfXxAFAMiT2uueQvMWT3VUrSy/43Ex28X28TYLW/479cmWd60U7q07PcGQcW2Gnu0sLt72Sd8wY4wSpYVpTX+lJ6+m2iiqBLmr/IDTT5mf46fLZeg8qAZW5U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787695300; 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=zhh1+5fS76RIWmolCJw0xzFIMsNDMIy/frSA7jNg4AM=; b=WEPym5ypXGc6CzUPJs4vMBwWdTCSAOZW7hjYL+dDszG5BZy4X1OQvhbrPsgqWX2jwr3VQNbi6nSzYA7PJ55m0zbTltO/mtn/Y1vYghVuO2dOr7hdYQVKGxWfB+snpLIkJZAu6l3zbWamkOr9mWhO/qE2lBhfzIMBXXQQ5P2xzaI= 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 1787695300141838.2388138592873; Tue, 25 Aug 2026 15:01:40 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyzCz-0003TZ-6p; Tue, 25 Aug 2026 18:01: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 1wyzCm-00037Y-3L for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:17 -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 1wyzCk-0001FU-D9 for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:15 -0400 Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-2d6f55a7089so4499865ad.3 for ; Tue, 25 Aug 2026 15:01:14 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:a37a:292f:1363:c0af]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3965d119724sm3090120a91.2.2026.08.25.15.01.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Aug 2026 15:01:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1787695273; x=1788300073; 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=zhh1+5fS76RIWmolCJw0xzFIMsNDMIy/frSA7jNg4AM=; b=CwlCpnTtL5Wvu88KrEDTyPDGQR5sI53OpKUxrKG4g0DDxxcgJwVZmARltf0y6kcGD7 dZ7JlvbUpExs+spAeQDzUfYXlMqiop1V4ikyV2niSwN8DpzTiMD/DnZxuDihoxE4xeEY LduV9KTfRFi/bNDgFvgbHLNgaCARC09eubM6b0UbPo8/skbK6FhT0974qklgTQ/2HxEV /MI01VyflOzxfDegiJJoRXTs7kUAOGkL5rfzca4IGh6ws1nu/PFnnn7mYlElozlpPe3x XGveRVU4gVwY/oi95eOWdtNDBK3fi9BevARKVhmPUWCQ5fTIydR/aW1tUmx5n9LsaFvu p8JQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787695273; x=1788300073; 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=zhh1+5fS76RIWmolCJw0xzFIMsNDMIy/frSA7jNg4AM=; b=YBilJiNmL2eG1/X/EpQkGn1WtAASgOYF2ThVwIsWRvlsL0gNW48UDfqcka9VDWt23m to/fXBYp9i/GiPteh6IQss5wYOwcAUpHrrDy5B4X5LIqCIYEty3vaZHoMw7iMqFhRaAb VQ5J3/A0umhSYgQwqtthYs47OP0/XwFvm7xj7VllqFTWLYzavIFJmqxBGFQOoeNfAwkw IGM5NgINJc93e85pk0mztLtslVQdiWw5I+TMPXFabCM23nGJ4xlGeWns9tAPaz4XsJw/ Qsxv3kiSTsLiw77f0kZ/3xwmKm5VO2vi5CdJxQ1CLKGVMH1YC5TShIScczjUJJqXh+bx iczw== X-Gm-Message-State: AFuF++kcMdxgySlCoRHXmO61WzeQhGCJob8GNayTgAIG+NefOIsH56yK ah4Q9oJr1uBxVDIxWCIKr5OqshQgpQItiPJ8d1qoJeMAXkkbxe/Sv6AIIh+u1eHKZO/p1bBmdeV zEt3A X-Gm-Gg: AR+sD13JOObwwRosU1WEJLPVl90obm/2WJjvQokYh5TAz5pcIG406JZ2BxuEwi7RD0f 5EZM0B97t3qJsdzouvsqX6XI8iTCCbsliX4vpPYuMb0rWLyerny2hV+2j+0uijGpFmcj3Bx0F0z FXjtZ+PlYZlJJDgZsowMMaRTnlrywAkgtPhh5mNrZjsEwG/iX4VX1o3rJX2m4ru/gwq4zSsFuru vItUdfcjeQ9Jfm2TU8/os8cK+CDMj1rv1UFyFerEGvWbgD+eR0HFGEkP/m65Pr4FE30Sz9thwLW zcy0lTmXOY+ZRJNsC4EKUMaEb6SLZf3kjJtec6cWQ9KtrX6aJ2AgtJLTgz4ipPpcFF04Olv5Sar L/aDYgeUTBj1XbIyKgvr4CjffBf7AstDvRI/PkidlbLbMJtpwp6SBf1K3YULv3zbk1ncxLwq/VQ PK+Iny0fYlFavJbRQ2wV0ZQUKNhTQ/v2k/7swFuMy/AgH1CWfSySdepzlLu5Ll6UKo7oH93UasC 6iDFPda3jhtxSM= X-Received: by 2002:a17:90a:e7ca:b0:38f:de97:b06 with SMTP id 98e67ed59e1d1-3966d3ba166mr4266274a91.5.1787695272551; Tue, 25 Aug 2026 15:01:12 -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, lorenzo.pieralisi@linaro.org, gshan@redhat.com, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v3 04/24] target/arm/kvm-rme: Add mechanic to initialize realms Date: Tue, 25 Aug 2026 16:00:41 -0600 Message-ID: <20260825220101.3443954-5-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260825220101.3443954-1-mathieu.poirier@linaro.org> References: <20260825220101.3443954-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=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: 1787695302082158500 Content-Type: text/plain; charset="utf-8" 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: Lorenzo Pieralisi Signed-off-by: Mathieu Poirier --- target/arm/kvm-rme.c | 51 ++++++++++++++++++++++++++++++++++++++++++++ target/arm/kvm.c | 15 +++++++++++-- 2 files changed, 64 insertions(+), 2 deletions(-) diff --git a/target/arm/kvm-rme.c b/target/arm/kvm-rme.c index 42e1d1e7b859..a4a5e195c196 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,12 +30,62 @@ 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 int kvm_arm_rme_init(ConfidentialGuestSupport *cgs, Error **errp) +{ + KVMState *s =3D KVM_STATE(current_accel()); + static Error *rme_mig_blocker; + + if (!rme_guest) { + return 0; + } + + if (!kvm_vm_check_extension(s, KVM_CAP_ARM_RMI)) { + error_setg(errp, "VM 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; +} + static void rme_guest_class_init(ObjectClass *oc, const void *data) { + ConfidentialGuestSupportClass *klass =3D CONFIDENTIAL_GUEST_SUPPORT_CL= ASS(oc); + + klass->kvm_init =3D kvm_arm_rme_init; } =20 static void rme_guest_init(Object *obj) { + ConfidentialGuestSupport *cgs =3D CONFIDENTIAL_GUEST_SUPPORT(obj); + + if (rme_guest) { + error_report("a single instance of RmeGuest is supported"); + exit(1); + } + rme_guest =3D RME_GUEST(obj); + cgs->allow_convert_in_place =3D true; } =20 static void rme_guest_finalize(Object *obj) diff --git a/target/arm/kvm.c b/target/arm/kvm.c index 20b39d10b766..0c853d17413e 100644 --- a/target/arm/kvm.c +++ b/target/arm/kvm.c @@ -33,6 +33,7 @@ #include "hw/pci/pci.h" #include "exec/memattrs.h" #include "system/address-spaces.h" +#include "system/confidential-guest-support.h" #include "gdbstub/enums.h" #include "hw/core/boards.h" #include "hw/core/irq.h" @@ -596,7 +597,8 @@ int kvm_arch_get_default_type(MachineState *ms) =20 int kvm_arch_init(MachineState *ms, KVMState *s) { - int ret; + Error *local_err =3D NULL; + int ret =3D 0; /* For ARM interrupt delivery is always asynchronous, * whether we are using an in-kernel VGIC or not. */ @@ -610,6 +612,15 @@ int kvm_arch_init(MachineState *ms, KVMState *s) =20 cap_has_mp_state =3D kvm_check_extension(s, KVM_CAP_MP_STATE); =20 + /* Initialize confidential guest (Realm) if needed */ + if (ms->cgs) { + ret =3D confidential_guest_kvm_init(ms->cgs, &local_err); + if (ret < 0) { + error_report_err(local_err); + return ret; + } + } + /* Check whether user space can specify guest syndrome value */ cap_has_inject_serror_esr =3D kvm_check_extension(s, KVM_CAP_ARM_INJECT_SERROR_ESR); @@ -660,7 +671,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 0; + return ret; } =20 unsigned long kvm_arch_vcpu_id(CPUState *cpu) --=20 2.43.0 From nobody Sat Sep 26 21:37:19 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=1787695320; cv=none; d=zohomail.com; s=zohoarc; b=NEsFQ1Eh+RZFtO1QtJzEer3oAYAPYWsdLzdHFTTpQ3cCu2oPmoHwUjsPDLBnqxifv+GtwvhHrpOh5Q64GPFHoaVhec9BByTmDEck0//AdPfhkgQApFSb32I6OLOzGaBKfWFU3x331K9euGu78nTcV2+Img7qlfHc2EPKI0tzMg8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787695320; 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=flXrUG20aPexgqGmyi5LqrRx9IuZht6hYiik7BZP4Bg=; b=iGuLwrj5GLTaNRyDCfXz9inXiJyc/cSZaRSjAqMA8LynBG3nK37vz/5osDvIqOn9ZomCNOeadENQw4ZJvbE7D953FRTWyXXiETT/xKxzTBlrQ6Ld1sjLWf3uDAEPiJcq+89MYx4+dGBxsZKeVMtHoINj1BOJ1sS4atNOAIbouL8= 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 1787695320419472.5308960151632; Tue, 25 Aug 2026 15:02:00 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyzDD-0003nF-9B; Tue, 25 Aug 2026 18:01: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 1wyzCo-0003Bf-31 for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:18 -0400 Received: from mail-pl1-x634.google.com ([2607:f8b0:4864:20::634]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyzCm-0001IJ-3N for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:17 -0400 Received: by mail-pl1-x634.google.com with SMTP id d9443c01a7336-2caed617615so3846745ad.3 for ; Tue, 25 Aug 2026 15:01:15 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:a37a:292f:1363:c0af]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3965d119724sm3090120a91.2.2026.08.25.15.01.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Aug 2026 15:01:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1787695274; x=1788300074; 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=flXrUG20aPexgqGmyi5LqrRx9IuZht6hYiik7BZP4Bg=; b=pDlfux8HJJbSo6EuiEQlpxOj2Lt3pqWfyfVWicwUhvp9dZ81VdnME9MHeaQdVC6Rqm SPmlFcJoB99Aa4/sEuvRfC5ZhnCVIYph68HekIZfmyBbE/GtwHfYVfD0SBj9O1F1tDk3 4QW7vw6HyCKAsbxkG67nveGVjkjV9oxRb2ZewoVtqzw8M91k/MEC07oTc/9YI7DO5v0S PBcFsHBQgQNu/4W3wazxeaT1oZozOiZCQskAkQM+zj9PyAKN60TlfUksy24nKCe7Nhr/ gAGpCALysYH0WgF41EBRdBlMylOinFWRBnwqd4tHdTF5OQ9yU55KZDwvCB0+s7Inf4nM tR7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787695274; x=1788300074; 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=flXrUG20aPexgqGmyi5LqrRx9IuZht6hYiik7BZP4Bg=; b=IpLNA49ydKuAJzFpYwqR6Yh7PkR4CHqhkhGwl8y9YtCc5IPWI8WeaVq5C1FF4WPB0J H/wqmKCqq4zJlnayc7Ai9T3008M6ZOjnYn/AHlsJJSQc9BKvPaN0PG6Gf2NNk0jEblGa VBkdoZWxqvLpAsgXDrUXJdM6z1BFkDfIsU/kQYFpCQIMPA5p4y+7dl9n3Eocmk/UV8qH FZpkJciolmKKxfyxs4npcA9btISizpb8zIOFTEoA10BhG0P+ng60OsofSCYl0daMbOPm m0vEfPw3gSGEHExeUDBoip+/IytgK9ZpmaVdfJggQDlM/zJs6bKaLLVOtSorgDF3xxRX gzrg== X-Gm-Message-State: AFuF++l0n67DhP0fj2Ox3MnCj3Zm20jJGeHhRCB+UIzBzYyH1uqFNWv5 2W68avUOZqy1CuByMt+mZNGohhVJntyV3lY1A6KikBiBidOTBT7ouFrZnj3ldVzJP5E= X-Gm-Gg: AR+sD13dHCfcmFqF+BjXg1Hd4I/lr490bAWGtaE+b8WEwik9fMvZSF/WInvlnFQR4zS i/kqtL8AkKXvCsPOINLwJFXTFu+dwEf7kVKAhl1uuGFC2lB12H4q9QCYc/nCgv031uTtLJrH93+ HYDd1iNQpWGjf0EDzHPyPXooFCyr1BDCmeQ5F20X+UBr5kzEqGo8dWEHGY/xMew/MaFzopxDsDb vDW2rubLAlic47x0zsWJdN29GY8TE62+vyrCrP1J1WRkolKSPyLAVr8szJFxu1rWtJcD4xavSlF StsTEvk338BS0ZYJNF/b7lW3deh+9YqwbOmuTh0+3JqXKVEt8WzIZVPqY3vJNU+yu5vFMZuSKTQ ir4KyPbe9pBrQJVRaGVRHWXe5MXkjw5w55UpzCZiLol1bO86aWsZbEQcSYcHW5dMubUzrHzHhey 3ykJVvO7V8jnLKVlmK0Hd+105yQ2TEycHCsY1ntFpMhOXQFm1lR/wtR0X7ghUOXnprBA7p50/qz yil1xyt90qUHLdROrA7n+KA9A== X-Received: by 2002:a17:90b:2f8d:b0:396:4dfb:5890 with SMTP id 98e67ed59e1d1-3966d144197mr4659218a91.2.1787695274276; Tue, 25 Aug 2026 15:01: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, lorenzo.pieralisi@linaro.org, gshan@redhat.com, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v3 05/24] target/arm/kvm: Split kvm_arch_get/put_registers Date: Tue, 25 Aug 2026 16:00:42 -0600 Message-ID: <20260825220101.3443954-6-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260825220101.3443954-1-mathieu.poirier@linaro.org> References: <20260825220101.3443954-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::634; envelope-from=mathieu.poirier@linaro.org; helo=mail-pl1-x634.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: 1787695322256158500 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 0c853d17413e..33ac9528c45f 100644 --- a/target/arm/kvm.c +++ b/target/arm/kvm.c @@ -2166,7 +2166,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; @@ -2269,6 +2269,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)) { @@ -2351,7 +2364,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; @@ -2454,6 +2467,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 Sat Sep 26 21:37:19 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=1787695392; cv=none; d=zohomail.com; s=zohoarc; b=SrZDfzPY5GKghkeYdt+KYoM4Nv/QUeuFQGH6HhW2bLjnygnwgBzqTSeGyVTY41LbxIidFTmNUxCSOgmwQnoQT7iFqUB91m/nCakY67CtJs9zofhS3GFHvPKqO+JRCIJfH9Wv5UKU20dN9RCGOBA0GQTytgxkdNGEZinvDcf/s+Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787695392; 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=dUaq16H7ZXtgfYq4uM1fj/RNffDp9uuh97XM96tiJL0=; b=HIfTc+BPGW9DadfTsbcMJsPoqJ849UurvbthnF92Mv+kn3v6oP009motNOwTgbZrWTDvpe96UrCHzY8V1oHdthrf0RPycNtBn4YxOy1z9IQWqkXFQ4by75fLd/HxB5gTgwAo+33y+C4qtUw61fEFn7RRDQCPoZEtWqFeHlGAFnU= 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 1787695392869751.5472905501455; Tue, 25 Aug 2026 15:03:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyzDY-0004RF-Cp; Tue, 25 Aug 2026 18:02:06 -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 1wyzCq-0003Hv-JX for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:20 -0400 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyzCo-0001NA-Oa for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:20 -0400 Received: by mail-pj1-x102a.google.com with SMTP id 98e67ed59e1d1-38ec1402b05so418971a91.2 for ; Tue, 25 Aug 2026 15:01:18 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:a37a:292f:1363:c0af]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3965d119724sm3090120a91.2.2026.08.25.15.01.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Aug 2026 15:01:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1787695277; x=1788300077; 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=dUaq16H7ZXtgfYq4uM1fj/RNffDp9uuh97XM96tiJL0=; b=H5lSU9F3kWXXWPcbd/x+XXgKSHMqcYqW2tYIp7c69ap2GtkXwDhAU79JXia8VpXF8a ERvUOlVvNBx59zgE0Ej3fkMOn1GCw+tjn8S8PxHep0mc21Ce+XljRrHc5WkoAxhr8DQv gw/V725luev1OeNH1fosMqnZQmktPGbyRglYntju84lPaZFxd2ivDKJIloZpXCkPUaoa Ix7CZ2PZ2BBVdGYX/Qj0DTLD7cNWdNH/Vn090Iga9Px6utIslY5UghPFMsWTvymMpvnb 7E71K1H7WM52ejANwwmYabAMRPHEuf/NfryLaET1FjBKpbDG/L6TJKuByC3h4mPzHlqG 3eSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787695277; x=1788300077; 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=dUaq16H7ZXtgfYq4uM1fj/RNffDp9uuh97XM96tiJL0=; b=cYzNlVuIzkeECO0oqE2a3aRUiR/woO6VvfMZL47/Xag7xYYe8seqFodFw8ToZhMMeh MGFcFuPyByjoLP2ZVtycKhpqxuiMjOnAvImoWZ4nCbQ8qmHjojuslNhTLqs5Znun5+JR x2y4GjcXUR5xqJ10OzvyWHJVixwVnFTL0WJ63V9Azrrq7sTbI0g4zkOUIWs2kArWtcpT mpEz4Cll5LR/jPjkXGXA78NR1z5u8IFhoN9V2az59POdTH+/8ae6yHpOAsB6G9g5sMDC A/AgOSo5IzbscB2dBLvdw3+jy+SFDb5wA1OaQv5anYieGyDnlnmPZ57XCg0wrmkyxoNZ +hVg== X-Gm-Message-State: AFuF++nQCfNs7mdDRkAnxpL8r3oKBRaASWUmr1G7V9pyuavf7fo56F/i ALSRDfQivY1eyb0KdNScqHQSgFrUV1eQ7SLP5y8NlUv28bU5i+jZzRPQBRz8VrZUrq4= X-Gm-Gg: AR+sD11C21Zv8mcMNjv+7mwnhUtbdm9pqGwCHPJoUZHBw/fieloDJ7SNHAsiiTTHmEs gaIE3I5kusWVv4kCmHTJUh+Iu90xt096rhVeIXT8BKKmN6wy8cBfU4NWxQTalhCw2IzSNd5Bpgr WjbYhZnNGiByjtixIdNrefgI+kNALmGayfgGA0u2kOkbVr3OnlpOPQFDvJgQHr/Bcr39pGM7yNc +U/HciEcRVKfzbSJTv8bSLuoKvyvw6LEfuPS5SJR92+K7gK4XFv5EoUBIQnI6QqolcGrcSv5mvy z5IwikhWch5I1UlAn3AbvgDXF/5wUPYE7dxOPCc/TNmX4Jg0zga+8WzobFw/wYyzuL+1x1PZUay vELwc+oTVLyt1p8G7QpCW70HmuuMPOAZIq/fCnX1RijLa+cNivYX46atCoeAbdnNEWZ8vUXZfzV SXTXeMz6HNq9JSyNJBGa7tjERxyAIX/kdvXqyA/Vea9erCAbRNx33jY0EMMYLX3myGDBsnV7r+r 5M59T4lU0tSfyk= X-Received: by 2002:a17:90b:4a8d:b0:381:28e0:6259 with SMTP id 98e67ed59e1d1-3966d412ab2mr4040417a91.9.1787695277070; Tue, 25 Aug 2026 15:01:17 -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, lorenzo.pieralisi@linaro.org, gshan@redhat.com, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v3 06/24] target/arm/kvm-rme: Initialize vCPU Date: Tue, 25 Aug 2026 16:00:43 -0600 Message-ID: <20260825220101.3443954-7-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260825220101.3443954-1-mathieu.poirier@linaro.org> References: <20260825220101.3443954-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::102a; envelope-from=mathieu.poirier@linaro.org; helo=mail-pj1-x102a.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: 1787695394719158500 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 85552b573c47..ee26a74c8e80 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -1038,6 +1038,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 a4a5e195c196..f7c2cc786e2c 100644 --- a/target/arm/kvm-rme.c +++ b/target/arm/kvm-rme.c @@ -69,6 +69,15 @@ static int kvm_arm_rme_init(ConfidentialGuestSupport *cg= s, Error **errp) return 0; } =20 +void kvm_arm_rme_vcpu_init(ARMCPU *cpu) +{ + if (!rme_guest) { + return; + } + + cpu->kvm_rme =3D true; +} + static void rme_guest_class_init(ObjectClass *oc, const void *data) { ConfidentialGuestSupportClass *klass =3D CONFIDENTIAL_GUEST_SUPPORT_CL= ASS(oc); diff --git a/target/arm/kvm-stub.c b/target/arm/kvm-stub.c index 88cbe8d85c41..5fde96f9b281 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(); } + +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 33ac9528c45f..ff179a66b821 100644 --- a/target/arm/kvm.c +++ b/target/arm/kvm.c @@ -2012,6 +2012,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) { @@ -2166,6 +2168,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; @@ -2277,7 +2302,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; } @@ -2364,6 +2393,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; @@ -2475,7 +2521,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 e7c40fb003e4..d95381c13afa 100644 --- a/target/arm/kvm_arm.h +++ b/target/arm/kvm_arm.h @@ -240,4 +240,14 @@ void arm_gic_cap_kvm_probe(GICCapability *v2, GICCapab= ility *v3); */ char *kvm_print_register_name(uint64_t regidx); =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 Sat Sep 26 21:37:19 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=1787695373; cv=none; d=zohomail.com; s=zohoarc; b=TCy0easU7BzqxvI22TnXD7gHXI5jJZln3lhuuWwazbAilS/NH1blK6YDAVAyYugXTQ5nbz/r0FJTPXCunUpWyrP0fHBeRuc/WNjr3CpoCrrZsDa3wTCHV5xTOA/K69dOZem1bdjv/rhnI6TgecYtVh8mFa26x9b/Un85FL+ybUc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787695373; 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=eyJsbM3B9U91rhA9XcMnnj9HbTzV3f8teoGWTnmCdi0=; b=Exyuh/T0FsghThfPBsy+z5Ub5m5CJ5JrXPbA5zA40IyspnBaa34SakfRZp/NBdLJ6xwKO07YAs4/hVqauXjERG7oWB7bLKtTaWC7ZSAGkRvEeoDW4GfDG3oJ1Nb//mDbeH6LhHGfj3hgfIBFqQn/BdfesqLE2ejWEOlSqa2XsDQ= 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 178769537329723.377243652173092; Tue, 25 Aug 2026 15:02:53 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyzDL-000473-RR; Tue, 25 Aug 2026 18:01: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 1wyzCs-0003Jq-RB for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:23 -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 1wyzCr-0001RY-Cj for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:22 -0400 Received: by mail-pj1-x1031.google.com with SMTP id 98e67ed59e1d1-3964dfb5b9aso483327a91.1 for ; Tue, 25 Aug 2026 15:01:21 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:a37a:292f:1363:c0af]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3965d119724sm3090120a91.2.2026.08.25.15.01.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Aug 2026 15:01:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1787695280; x=1788300080; 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=eyJsbM3B9U91rhA9XcMnnj9HbTzV3f8teoGWTnmCdi0=; b=ZbKQomfQyjWWZwX0zenDsYgW/khA2tAfJOYEcTZX0SmSXBkVy/gxtXIJU1/klYBa3h Jo0xKoWJ8pNjDgPePf+u9Uk6bC3gqKBQYh3Pwrnv4n/oDzH5SUIz/qafeYD1UBH8YQ+d kRWWVAnUo0BsJ19MsMQh7Ei0LKA8QDIMYiOJ5OviyHrU18AzshqG8rokzC8lYvaTAM9S 3ED5ui3kK3i49iaisVw7TnTBSdrOouP3paL2kavnAHieLagO746+VkFoLIqyQuxc7Sk7 htcPmnWIRfo2QuIxPJXfq65txrszXiBB34kroN91sXZA85S2zirv+8qbSzt8XTOPZ5G2 SEmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787695280; x=1788300080; 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=eyJsbM3B9U91rhA9XcMnnj9HbTzV3f8teoGWTnmCdi0=; b=lh/hpipRSi3bwKetjzXluUc01M2Vl/yJgqsIUHubKyCYxGj/+KUMvlZ/WR1JWriJTT 2Dn3UKXxSICV+y079BBdQ09v9Db9llDrj+Bfxu4NarOLaieuS1Y8/MmenWYxHpbKfTZB wSmbqZ2wADlp6sEQWQd+rcAk4aIQgAvAnxqWfKBlLYIPIqrB2PEn5KCROJOIg1/3nGAz pGC0xu5jrk55ca1EkJAOMzmjGRiZSJxqwBKm8wDw5njxbG6CIe8nqA2kyEm8qc94kalF H00XSbZhYtzkEAGzgknxzUiFXYB/guTvpwo+vZYC4MP0KnLZSJ/aixoiaixVaPj8RQk9 HVAw== X-Gm-Message-State: AFuF++kOFFjeUOq5iyMOg9fEliwe35llm3LevBVX0g2rOFRnMfCMYHRw eoMPhILtpztNjoiZQpA8TAKI1h59C0bVlOUaOCS+2BKp9zHrCFryxOnsAcPeWc0tEqk= X-Gm-Gg: AR+sD13BwXIxgi+5s6jyMOG8yaLctmyB057gAMeCSVvM+cWDr7FJ7i/qMfnbiSngJ0i gjRgjtZj9YLawuYQ55sj3ktqCdEaeeV5lOhDmFm9Np650HtVnMBcwQoc8pQ6n0J6IQn4u65z/vm bU7a3lIkVmgSjNh/n1Xy6rd0bpREO6ewTN5ZF+BVcM42iSzTQEStUbOuIhy45Xk3wk/+okk+Xrh WI8Bn1cItyCfq7pYA0ZkunTUj5HH4i33qPt9MqJ1CSGTRSVOQBWuTEvh2fiISVw+S3O/IjTUPrQ R2GQuhtluJRlWVJMUfJKqxFlgctAsmdxEdPTAvGCth1FI2NH1gsyG0mdFFiJiKbEhDNi1PNZT+P VbQDAtRek/WWjUX6tJukRXQdcnMYMQLi9/URWyg5VUHHdhAoGS5Scc4m3CAbJCkG5ZVl559L8ZP C0OUTyFx7aIyobFXfm8vu82estq3dblAOTDfjz3SwSUGuN X-Received: by 2002:a17:90b:390a:b0:396:5785:843 with SMTP id 98e67ed59e1d1-3966d203a94mr3597179a91.8.1787695279952; Tue, 25 Aug 2026 15:01:19 -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, lorenzo.pieralisi@linaro.org, gshan@redhat.com, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v3 07/24] target/arm/kvm: Create scratch Realm VM when requested Date: Tue, 25 Aug 2026 16:00:44 -0600 Message-ID: <20260825220101.3443954-8-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260825220101.3443954-1-mathieu.poirier@linaro.org> References: <20260825220101.3443954-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: 1787695374473158500 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.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/target/arm/kvm.c b/target/arm/kvm.c index ff179a66b821..1acbd885bf4e 100644 --- a/target/arm/kvm.c +++ b/target/arm/kvm.c @@ -108,7 +108,9 @@ bool kvm_arm_create_scratch_host_vcpu(int *fdarray, struct kvm_vcpu_init *init) { int ret =3D 0, kvmfd =3D -1, vmfd =3D -1, cpufd =3D -1; + MachineState *ms =3D MACHINE(qdev_get_machine()); int max_vm_pa_size; + int vm_type; =20 kvmfd =3D qemu_open_old("/dev/kvm", O_RDWR); if (kvmfd < 0) { @@ -118,8 +120,10 @@ bool kvm_arm_create_scratch_host_vcpu(int *fdarray, if (max_vm_pa_size < 0) { max_vm_pa_size =3D 0; } + + vm_type =3D (ms->cgs ? KVM_VM_TYPE_ARM_REALM : KVM_VM_TYPE_ARM_NORMAL); 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; --=20 2.43.0 From nobody Sat Sep 26 21:37:19 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=1787695425; cv=none; d=zohomail.com; s=zohoarc; b=dFXuhsbatUdnGDeiYiquUUQjPYY7gwhXcaq3Pq3ss2usEPj3wFkkaUuMQLF35mXj7iFpHfJtuSVHx4H4HVnImLWSStlmQoQ0SKJulhXHNyGorrBMv7iybv7Lyb3alAqP//FYLgqQiyT2gWGdAqrNOcv2Y9JW0168X/r8epyVdxg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787695425; 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=2Yc9MuHh9PbC3Ytohig4KatF9izBef0JRQCyKKLS8VY=; b=mrWXSrJ4aVI4mUbCJKRpvpjFpNuTkHskewEeScKLA0/sMl+5wHRKt6To4Hu4AZzIwcTD6x23gniQ9MhP9wtSfQhGWZHGBDI00By5RTpYL1/P00oaL0WG79UpFyJ5WfiPIgpYyYu6nr3o1izRE0cOvXIe4FjVPoUtkU6iaCw1bIc= 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 1787695425375957.0427069734502; Tue, 25 Aug 2026 15:03:45 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyzDH-0003wH-6k; Tue, 25 Aug 2026 18:01:47 -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 1wyzCv-0003N6-Jm for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:26 -0400 Received: from mail-pj1-x102d.google.com ([2607:f8b0:4864:20::102d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyzCt-0001T6-UW for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:25 -0400 Received: by mail-pj1-x102d.google.com with SMTP id 98e67ed59e1d1-384930ca5e2so478315a91.3 for ; Tue, 25 Aug 2026 15:01:23 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:a37a:292f:1363:c0af]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3965d119724sm3090120a91.2.2026.08.25.15.01.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Aug 2026 15:01:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1787695282; x=1788300082; 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=2Yc9MuHh9PbC3Ytohig4KatF9izBef0JRQCyKKLS8VY=; b=cPxLDaV2XREnd3/SXkTsKzB1On/pewTnfIvotv1CeZ2B/kLkS5/VIKZxKXlhN1Z0aw oDc3/YHwFiuehB0JR4BMMtk+cAsausrPs7FhAskppg3WIZjX2oOFe834pOUPDctufVVI YHnztWz08F0X8gzQEmbCQ6p9IDvC7L1VoItnmV8F3vUhvA3mnzNwvnWYL9LaTO4IJRAY 6E/KXxTt8p41XUrrrLDA7TExnfEp01owgTSmZ0AR2nqLu5ZWKwFiO+1rBdXMfX5lpMuy dEEZqOmI1B6Iwc/pQhF/tRacsBwxL/DzhpqlOkVGr/ppGZ7dVwqFkrpn5vaTAa7KNDbw lElQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787695282; x=1788300082; 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=2Yc9MuHh9PbC3Ytohig4KatF9izBef0JRQCyKKLS8VY=; b=XSmtMt7AG1yl2Lh5INjVITkrVqCbb+wdZi2Zv9lXg1S66SmLatkcmQwgpSTNbDfFmp RFcreZmbI20YN36eAgEy7H7+x92kGDhvr9WHaBS6zCxhsGDT1g/VC3DY1CcgZeLq41qF fu43wWSvDr+GRe18OtqKt4eFnvxfFhCEdk3aDcSdah3T8R0XsYYV61PAeDl3WNm/3ikL mXnH6rlaXYkfxRDkBTdWDzfPpdupj60WSS4Nn8hFlxijVXT7FbHEFngatQ42Hbgc/RTf w1qseU9V3ygLl2zCA70GdKDXW6o7w7TypYih5nq84panRJGrRICDKvIlRmXcIgVQdiTm WraA== X-Gm-Message-State: AFuF++n7y0S5E9X3oyAlKsJfac0v9MOJnwa2Td4BhblWACR/v/QsmNaf D0eMVJogVTvxuB4neDZPdRls6CvyxedZrZQH2YKIjtA0PD6WNzuKDWUhqnGvzmO2KeQ= X-Gm-Gg: AR+sD11VVFwJQPoj6BI+RGp+ynYr/NLBT5krRtC8WpSv3P2Q8gnbsBcifF4/MzCEmBy xpdXklLoLnlT1PsiW1NjKBXctRfhO/GvlqZA6o+UbMIhTp/ISMzL72pN9Sl0uSWEJsTx6EE3K8q lehiXBQ7OpgDbs4NsAF9uTmHskRLJ1vR5NgOnzVmU+ru9sJyg4CwmqEegiCxajb3r8OmOn2yaGJ fu6GpkhX+zC8uhu+3+61NQhhyNTGuVd7buqRsAh8qZdaqMo2oAkhdY4C+GTquor5l3tZvJ1Kc9A 5sZNqdP9c3L2X6plk8UaCd8grsEAt0PmmjHeu7JHU/jA2jxR/O2GmpBZTinAM00gZ+Sr1WJOOo3 QL5m0WadwmNTFlkPKxcS7dBx7BLIT+B7Rr5EKYABrpiEd7s8jSnIpIzGSiyYRbHC5HH0TbczrcY 5QFiyV0KStejoCUYQsTua59xZ+ilrPFulOj4dvrqpF0FnV9cZvi7BuYSb5zvj4nW6AqZM+j4R/L TUgbdB+kOsZs90= X-Received: by 2002:a17:90b:4d88:b0:395:4de0:b78f with SMTP id 98e67ed59e1d1-3966d36e327mr4349485a91.1.1787695281998; Tue, 25 Aug 2026 15:01:21 -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, lorenzo.pieralisi@linaro.org, gshan@redhat.com, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v3 08/24] target/arm/kvm: Use kvm_vm_check_extension() where necessary Date: Tue, 25 Aug 2026 16:00:45 -0600 Message-ID: <20260825220101.3443954-9-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260825220101.3443954-1-mathieu.poirier@linaro.org> References: <20260825220101.3443954-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::102d; envelope-from=mathieu.poirier@linaro.org; helo=mail-pj1-x102d.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: 1787695426754158500 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: Lorenzo Pieralisi Signed-off-by: Mathieu Poirier --- target/arm/kvm.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/target/arm/kvm.c b/target/arm/kvm.c index 1acbd885bf4e..c02845486aa9 100644 --- a/target/arm/kvm.c +++ b/target/arm/kvm.c @@ -331,7 +331,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; @@ -636,7 +636,7 @@ int kvm_arch_init(MachineState *ms, KVMState *s) return -EINVAL; } =20 - if (kvm_check_extension(s, KVM_CAP_ARM_NISV_TO_USER)) { + if (kvm_vm_check_extension(s, KVM_CAP_ARM_NISV_TO_USER)) { if (kvm_vm_enable_cap(s, KVM_CAP_ARM_NISV_TO_USER, 0)) { error_report("Failed to enable KVM_CAP_ARM_NISV_TO_USER cap"); } else { @@ -667,11 +667,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 @@ -1910,7 +1910,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 Sat Sep 26 21:37:19 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=1787695401; cv=none; d=zohomail.com; s=zohoarc; b=ieWdkiru5Ogb2NQHEksyPv7z/yhnaWMSGWBiFbb31mlTuLFZ2/wpk/9flhtc99LN3JcfY4bAfj43kFB7qm/VqnYzS2RF8FVcI6AmAc4ZGnXM9likMnJFiH701QNwpaExkirWt36pmkCVNioCW2a3XvNQP8NjnuNRq21lptK1/tc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787695401; 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=ycFh0f47IuceK21rmhYjAzxurWXaF92SY8dhiJMI5DE=; b=k8agUH9K6AGFd/2upndN9vSuz3pQAqnEDDRyRjsYXBkaxI4qsR1WwW+itanPkrYLmMDmLNViPJnOnuYjsNmss1p6k9xjBzD5VmFpiI74EJTRkOC5/4NlOhfUIu9S8nho5LrocTROGTVdXYR2ngwsiT6fBkzOa7fX4crJU0/h6gM= 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 1787695401134645.1947007598824; Tue, 25 Aug 2026 15:03:21 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyzDP-0004F6-FP; Tue, 25 Aug 2026 18:01: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 1wyzCx-0003Sj-Fg for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:27 -0400 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyzCv-0001Vz-ND for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:27 -0400 Received: by mail-pj1-x102a.google.com with SMTP id 98e67ed59e1d1-3966791a6eeso561263a91.3 for ; Tue, 25 Aug 2026 15:01:25 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:a37a:292f:1363:c0af]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3965d119724sm3090120a91.2.2026.08.25.15.01.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Aug 2026 15:01:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1787695284; x=1788300084; 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=ycFh0f47IuceK21rmhYjAzxurWXaF92SY8dhiJMI5DE=; b=WA/vwaPLD2FumlDtapRGoCySttWoQW1TFegYK8mCPWzDLOlDS+6prrD8jxBUaiq10l ZHIM+fpgioUeHJx2hNFxdguq64LbIQwA5UbLlT5dFgJYKYGg33n+n6MkSoZv6BLDz/jM NWtFwgqlf1wnO12DoInbAC80ha/gWOe6Ppw31ZME/KshVBAacFpJRrJ0rH15ln3fmu+J fbJ4pujWs/df1mF8ykFpuYzSnBt4kr6DouCR5UhQ9Y/Xf/iG+r0LmF1IXbUSCSN9S1qS Dd8a6fDmE4l//twP1X9ykdT7vMvRGgmIQD8QdKXRwGO+NQTHqZZ7DaIVMij7JQFpaiq0 juEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787695284; x=1788300084; 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=ycFh0f47IuceK21rmhYjAzxurWXaF92SY8dhiJMI5DE=; b=PfdfWH+6OlW5EJ25T7Jc2IZ9lgbqKzKTlVbiB/2Pc7n4OaJL5Z0eyMmDcrgK4Rfmro x6kOOyKjjLMvQMSPg+SU0T19EVYIDIi6jk8QadqNlP+rwfq35UgbKIzUvXZTiEQyRHxS sUH+kyBI7kjsiZhl6A7+M3bBDn89NfUwivaefQ91Ucq1KcQ5miWI1ev/Ulifse6z7KzL rxGWICtGCdiW4JETXMZrqGQBdDhBhyJLNVAEUGpzui098dRZmWR7bERWbepu2MrjO/An mto3Y0ygEkIZxYvAdjqWpb3oRIFF1uZM5kb6JftKP7NEpNWPgej0SThTA1U2i1+aXR/m VI+Q== X-Gm-Message-State: AFuF++lywO3L5xLe9MOQ+GQ+nMQcL7kRGaDr4bMpvjeoDTOi/DTSit0P fXDbpt5h7VfLMbeJrVfYiFjDIYC+qTGM6neO/yoNV+99OhYarEoJLRWMvy8BDc/9spc= X-Gm-Gg: AR+sD10IiYyyVadIkWdZpf+NFFT5ftMSySW50naJN6QyauKqeVKMYW9rOMLn/J9zH5s LHpmvu9DTMc9+dsRKvIioriprMtRF1oY821C9IxAlmzyrDZwY1FmpALsY5ujI5fsCjjp4t6h3Q4 1IqtY9TQ4Q769PhXSqVf8FF0Ko6z9j3WwMtuNTWGiczJeWdUnJm13CNMH6TtnY/NGaKggZN9TQM HFkvsU5g5YJwu/+81u8DrR7CORV5ShTWLQ5lH/hZOOuRdE353URaNXyIrxfu+xP24BbLctxBl+o ITZZkN8W8bZUjHbJgz8/eRgQagpZPNVaeixgfuwB0/Aqi/JNar55NgRxnM1JXHz2a9XDbH94foK VN5AlBnIwQXoqvpvelPjzFInIUdL62hhRilRsT9hZKj+gzcmSCS640CqsYNBpiuugvZVzLjB7MN yQtUT+HIXiquC8+4FMBpc4/lBVtnjxbPBqbNCEc2lKD7g3mJQrbxttHE0UbxwzxncQHOmdLQ7BK rAaXFFrHjIn0Tm3AOOSvUko/Q== X-Received: by 2002:a17:90b:17d1:b0:38e:8300:af51 with SMTP id 98e67ed59e1d1-3966d20b09fmr3611610a91.8.1787695284101; Tue, 25 Aug 2026 15:01: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, lorenzo.pieralisi@linaro.org, gshan@redhat.com, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v3 09/24] hw/core/loader: Add a ROM loader notifier Date: Tue, 25 Aug 2026 16:00:46 -0600 Message-ID: <20260825220101.3443954-10-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260825220101.3443954-1-mathieu.poirier@linaro.org> References: <20260825220101.3443954-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::102a; envelope-from=mathieu.poirier@linaro.org; helo=mail-pj1-x102a.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: 1787695402642158501 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: Lorenzo Pieralisi 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..388f10e828db 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, + .data =3D rom->data, + }; + notifier_list_notify(&rom_loader_notifier, ¬ify); } } =20 diff --git a/include/hw/core/loader.h b/include/hw/core/loader.h index d9431e8a8d12..fdfddfa7443e 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; + /* Blog data */ + uint8_t *data; +} 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 Sat Sep 26 21:37:19 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=1787695340; cv=none; d=zohomail.com; s=zohoarc; b=KTiIEJLn+FbtsScAjYnrgRmZnBV7btQuqnS1l4pM2DzVkVeYrsIrd0N0TgiBnovtMg5dhFIkC8iXYgzGTnIjHZvjiVT1ZwqXdOn3tUaNBWeIRYFxrUwT9s38wYFvr94zLDD2EETwM7nfCgGOY4F1mEkz9S8+7/XgneWaaJ5nT/U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787695340; 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=6yAZYi7h64i0sOWTrsMVth4dHq383ltCyuAo47L2qv8=; b=RE/h5IF/uSMwjS9k5/rVCm4lZab0ixYrUYRGwSznz6LAQCGGrV8c1P7lAowBiBWlMDWE/jrOVC0rfj1roqfwj+cWXXeNLSETNLRPnwciQxLz4WjJzyp91uF3NM+xs0rEJ4j3mPexTFxcmCZTWgJeWlL8tyXQHxZ3kOvoStdtcQc= 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 1787695340212457.75482766427274; Tue, 25 Aug 2026 15:02:20 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyzDU-0004MY-HO; Tue, 25 Aug 2026 18:02:02 -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 1wyzD0-0003XP-9q for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:31 -0400 Received: from mail-pl1-x635.google.com ([2607:f8b0:4864:20::635]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyzCy-0001bm-1F for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:30 -0400 Received: by mail-pl1-x635.google.com with SMTP id d9443c01a7336-2cf452def93so10085565ad.1 for ; Tue, 25 Aug 2026 15:01:27 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:a37a:292f:1363:c0af]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3965d119724sm3090120a91.2.2026.08.25.15.01.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Aug 2026 15:01:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1787695286; x=1788300086; 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=6yAZYi7h64i0sOWTrsMVth4dHq383ltCyuAo47L2qv8=; b=EXH4oFUsKceaP9ddeM7E/AQpe5dia3FhjNTOxvzBrT3BFKxnT3iZYHKukjgwYI16/X WvXgYZ4bL9wzRaw2rQXpCF81hm12KKfnKKbEmJTzkGR1K7UNRdM6XjzME5vfqo/l8T5Z 3E1Y/zn7MozL7GTanN8tWn6GqeIbFM7F4TohQtWvg/abMTp0jMgPi7/0JsEtLcAo6nMz rbOj3+3K4bLd21WN+69ADjqFlb9EOck6X82svyROm5Byaf+cqJzZCCD+L1DzbUY+41e5 p67u1q/9SL+NVliHjnST0VXwO2zuVHxWkWXnOElh7cF0ugxxY88DyaBdrJeCepE052Ru 2S9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787695286; x=1788300086; 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=6yAZYi7h64i0sOWTrsMVth4dHq383ltCyuAo47L2qv8=; b=LZOXVUzJi4qswGG24syH1FdsLpGRowarH5rkVgONCHlBwKSJVyhjZGgcEb7hWD6xvE q5k8caOqU18IMOv8D+Och26Kd5WgtuIzllflfSXe00efvWbfi+ALaryk1A1y0jSIfAg1 nAnQvpOVxijZhE6beOdw037Y4Z+xBG534ZOxPxcSpywjQFC2/RvZ6ffM259gTyzoTXnB 6oPPPrSqvbVoj4t0LHzWc/xbvkbOOn/axx3Jzs+ZYaZO074gN02RrqprwFaoquknS5mZ Qt4s6qP2yfXS0+hXz0DwNT8wEkioy2qb7g1w0KRzm9sV78ebd9MbKp3m8nwq8Wwyliiw +MDQ== X-Gm-Message-State: AFuF++ltBmsir31ZntmB/UVaLFYGwv2T9VePfXb4MBqWQ/IB+7b4C/wt 8OjsgHXiYexOva9NRhtOaWt5mY7JAmQ1+le0NrFn746S+PNoksYqyb9MtISlpDPaxqRrkCPGyg/ /E9l7 X-Gm-Gg: AR+sD11BAMnnFcmqHeHYYwlx+T64+48ik3RG09OMSBFbLB9JzzrnYIMGUL8fae4urQk YvYZ32CLb6UgHloyhGFoXmkaRp01wu2epZ5vXiAFUINlYOn+U+LPjs4dEiYE4obpOFnw0i1aUlO SXzGwtXuEQD/tyx7Gzs8HPqXDicHvKTPVbA3xeLSbeFEfnrDtvMo3ywcswuydTsNJr915cd1CqO 1DTUvqDuRZj4Ra+QZYL/MHHAVrVI5pgMTm7+LuQRBQgDZpb0YGe6aLJ1vqRuK0BzBszzsdAcbRn 1txFORwZa3MwcqHSvzXeAc1/nWvz94HcFOiIplHoFb7aasfy35NQ4jWsXgvhC7usboIXkBXKHOo EfHxvj+FTIYSz6SMgGfAgXgf5I/c1ODoF4n86ZRlQ27XGb7X750yzcUhXWTwWskWZViQz3dR7Ln ztPN6A4xwmqFVHtd7zrSEq7D3KmwgZW6Mucc0OWPW5zZjE0wJiGUlRoW3ZxUGc22UppSgeqcyex CEDKO8i+J/0jxs= X-Received: by 2002:a17:90b:2ccf:b0:38e:9ca8:e99 with SMTP id 98e67ed59e1d1-3966d70a74fmr2259623a91.5.1787695286153; Tue, 25 Aug 2026 15:01: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, lorenzo.pieralisi@linaro.org, gshan@redhat.com, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v3 10/24] target/arm/kvm-rme: Keep track of images loaded in Realm memory Date: Tue, 25 Aug 2026 16:00:47 -0600 Message-ID: <20260825220101.3443954-11-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260825220101.3443954-1-mathieu.poirier@linaro.org> References: <20260825220101.3443954-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::635; envelope-from=mathieu.poirier@linaro.org; helo=mail-pl1-x635.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: 1787695342323158500 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: Lorenzo Pieralisi Signed-off-by: Mathieu Poirier --- target/arm/kvm-rme.c | 52 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/target/arm/kvm-rme.c b/target/arm/kvm-rme.c index f7c2cc786e2c..9985f5daba89 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" @@ -22,8 +23,18 @@ #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; + uint8_t *data; +} RmeRamRegion; + struct RmeGuest { ConfidentialGuestSupport parent_obj; + Notifier rom_load_notifier; + GSList *ram_regions; }; =20 OBJECT_DEFINE_SIMPLE_TYPE_WITH_INTERFACES(RmeGuest, rme_guest, RME_GUEST, @@ -41,6 +52,44 @@ static void rme_vm_state_change(void *opaque, bool runni= ng, RunState state) kvm_mark_guest_state_protected(); } =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->data =3D rom->data; + + /* + * 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= ); +} + static int kvm_arm_rme_init(ConfidentialGuestSupport *cgs, Error **errp) { KVMState *s =3D KVM_STATE(current_accel()); @@ -58,6 +107,9 @@ static int kvm_arm_rme_init(ConfidentialGuestSupport *cg= s, Error **errp) 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. --=20 2.43.0 From nobody Sat Sep 26 21:37:19 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=1787695431; cv=none; d=zohomail.com; s=zohoarc; b=ZAwyicJeIjfncCop46WhzPohYEyq++WFtVH7Wi80TWO2Ys3L3om6pB24mhYbkUNcKWZ78mspDIo6pss+J8c7xKXzl2wbn1wPOKybrgjGuYwywZAwPcj+T4QmffmczAdQPHFzY/q3YARD9l0HuL9bj4ueffPUcNspFsOIXX9J5Ow= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787695431; 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=v/EbG9/3Hb8DCKZa1jZljaYOgVIsiNG77AyoF+zPvP4=; b=gnrpgf2Gd4nlogYebgeAj5jytOtgj/bhLvLwDNlETj4mzbQbn/MJ9uZQ09gHvmPLTIevhjkPPUcD/F89qb4jr5cZcF7TAN30me4aUfx87eZGWnmVFZuUurSw4Xj84IYFIiRO8kOa+KT6WEQl91KXrQj5dhJJpkzC0zmOXVk2IjE= 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 1787695431818153.19846019924614; Tue, 25 Aug 2026 15:03:51 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyzDH-0003wJ-6o; Tue, 25 Aug 2026 18:01:47 -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 1wyzD2-0003cW-RF for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:34 -0400 Received: from mail-pj1-x102f.google.com ([2607:f8b0:4864:20::102f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyzD1-0001gn-1e for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:32 -0400 Received: by mail-pj1-x102f.google.com with SMTP id 98e67ed59e1d1-38fdeaed181so666151a91.1 for ; Tue, 25 Aug 2026 15:01:30 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:a37a:292f:1363:c0af]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3965d119724sm3090120a91.2.2026.08.25.15.01.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Aug 2026 15:01:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1787695289; x=1788300089; 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=v/EbG9/3Hb8DCKZa1jZljaYOgVIsiNG77AyoF+zPvP4=; b=WBSbHCnxyitDp/XHTmueOXOWX8wGlr3uh4jXTEXcP3mlb0XJFWT5cjGFulQEj53AhS 9F4T29D+AzNk4TUbR/aoqViV3YQu1swQTgri9L+Sj6vOkV5j+uf56Ed5uaxOjh3Lnf50 cHYjJ+HNACVQaItR5xjwzJvJ6miAgr5z9fSfLjLdsiJA/b7/HWoDkAddumK4M/aQfzcx wDLVNyKr4cPG+r/RJ3ECuocuWvfAsRW+ye29r3nVBVMqUGlse8yzOnJt4MVoRG3nwC8E lug5yBfnJmCf3kzd8tErD1rp9+4SlsNOXdm3yxRrn88ZsPUSf56Jgc9xGCN0/SWfEXcm lkug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787695289; x=1788300089; 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=v/EbG9/3Hb8DCKZa1jZljaYOgVIsiNG77AyoF+zPvP4=; b=ad5YbWKjETzLFf4xHAH4Et2Vszue/96X24RVOcuDKDdTc59W7m6QPdMSLIMND3tZYw k0D1M10S0cFJrjVTpQfZXSqXKJcInR6qd/pF7MujCgIC8k/nmnUoMjfEc2cqCMopg61N 9qNboolbt3BC0iPtgi9vU+EvI8sXh3eEEqwpduNBJqJ0O8iif96OSNZSEaCsUq58BKtm hB7eBuU2kxvBr4SoroUu3n8HUxxcicSrxFWAvu9eWsITkcUZY0YcG2HacpDIx/O/OViA 82oTzuVrmQOQNsoWaMWgjhTcRjwKwesAGIFoJVnGQdRvqeA6C9rMv5+0h7LG7GX8N6Y1 Fslw== X-Gm-Message-State: AFuF++kQ6y/rzP2CF4iRV3poCRsww6VAn7aFgiAfNv802dsR7gqGLeVV RxFhh9ABYzTVwdY6F0W5Ia1Y0JYSnF3DxhYryl6SDustYBZpQeiu35lndPiY59p0HOU= X-Gm-Gg: AR+sD13n2AjmCQStl3ci67eGMoDwFGoiYml8NDdHEhJ/0Mm6c94a9w942wP7g6Rw+s0 TpUdZnBw1GyatbLYjx9sYto4WcERmUQ00eW74BZOrOpIiFunDRDmNqQXyfJc8+k/grNYHpMVybm ZGodFE57RV/42xgGEUQod1DhddYU5J9ejgWvnQg2DsUDXTDm1WX+2bzhpW2eaC05sCaFJSgot8q lfp7U26Y205SdAm31CHQlM4zWpVqA2Or9ljt3PgCMwio+Dvkgd5wj6RNxA5LU+8FfZLFiCa72Qz /bOTCR723ulNh64Bn/X19CgkMUwA/rttVLYDP1P5zrG0FW3+BmfSM02VyLCp/Dhr6aMV1OZ5STl ESMh3tLm1w3gS3gVihMIK93KjmeWUIE0gmsaEu2L1n3tZSvY5WzYf0uhrPozri275yyEaRnyOZL 8zEQKnA76BjdEOIyshYMYiyY1r71D6mxFjsnTtYZ+0XjtFO2WQi5v2hUPQVXuCUP1B/Xh8kQyRi MS6nMSTgM0vxBSZE3WvoViErg== X-Received: by 2002:a17:90b:1641:b0:38e:2524:724f with SMTP id 98e67ed59e1d1-3966d421936mr3799826a91.12.1787695288928; Tue, 25 Aug 2026 15:01:28 -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, lorenzo.pieralisi@linaro.org, gshan@redhat.com, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v3 11/24] target/arm/kvm-rme: Populate Realm with runtime images Date: Tue, 25 Aug 2026 16:00:48 -0600 Message-ID: <20260825220101.3443954-12-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260825220101.3443954-1-mathieu.poirier@linaro.org> References: <20260825220101.3443954-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::102f; envelope-from=mathieu.poirier@linaro.org; helo=mail-pj1-x102f.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: 1787695432807158500 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: Lorenzo Pieralisi Signed-off-by: Mathieu Poirier --- target/arm/kvm-rme.c | 76 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/target/arm/kvm-rme.c b/target/arm/kvm-rme.c index 9985f5daba89..c082a5d8f3d1 100644 --- a/target/arm/kvm-rme.c +++ b/target/arm/kvm-rme.c @@ -15,6 +15,7 @@ #include "migration/blocker.h" #include "qapi/error.h" #include "qemu/error-report.h" +#include "qemu/memalign.h" #include "qom/object_interfaces.h" #include "system/confidential-guest-support.h" #include "system/kvm.h" @@ -43,12 +44,87 @@ 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 *buffer; + 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; + size_t aligned_size =3D ROUND_UP(region->size, qemu_real_host_page_siz= e()); + + if (!region->data) { + return -ENODEV; + } + + ret =3D kvm_set_memory_attributes_private(start, end - start); + if (ret) { + error_report("RME: failed to configure initial" + "private guest memory"); + return ret; + } + + /* Allocate page-aligned memory */ + buffer =3D qemu_memalign(qemu_real_host_page_size(), aligned_size); + + if (!buffer) { + return -ENOMEM; + } + + memset(buffer, 0, aligned_size); + memcpy(buffer, region->data, region->size); + + populate_args =3D (struct kvm_arm_rmi_populate) { + .base =3D start, + .size =3D end - start, + .source_uaddr =3D (uintptr_t)buffer, + .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; + } + } + + qemu_vfree(buffer); + + 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 Sat Sep 26 21:37:19 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=1787695427; cv=none; d=zohomail.com; s=zohoarc; b=VsfTDgKuulB7s2UXT9GeNDExvzDxd1HqYPPIEPVkRXfV+CcuC4qEqc9z24FPDNcGHp+/RZhOf22Wp4DLhChDMGhcFGgxBrY+Gk+I9DCGOdXg83PqErLflDPHNbv8b8CGjD2ibIWY/F7810ZUZav3yCF95UdXBXwIftC6+mI5oM4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787695427; 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=ObfQI3bNIqj2MRAC8NKs4uPdrExrM8ymvQUurU0xN6s=; b=GqIJDFQGfNfJfgi2y9Rze8etXbQ89j0vIV74ygb0RVm8JGKVK8dhTDsQWhnIbZXaQpJV/igRol5Qm8gN3qT6+/R7uXXmcqo2FUj9AMrTEDgecNgcbE4jvWBp8NzkoEG1rcG/CBF8DTAQSYx5Zjq/3/Gcp5k/3wR5mMtouIvd4lY= 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 178769542737812.71935967342074; Tue, 25 Aug 2026 15:03:47 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyzDm-0004mS-8k; Tue, 25 Aug 2026 18:02:18 -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 1wyzD4-0003d8-Rg for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:35 -0400 Received: from mail-pj1-x102f.google.com ([2607:f8b0:4864:20::102f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyzD3-0001jM-0K for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:34 -0400 Received: by mail-pj1-x102f.google.com with SMTP id 98e67ed59e1d1-3964e480f76so507178a91.1 for ; Tue, 25 Aug 2026 15:01:32 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:a37a:292f:1363:c0af]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3965d119724sm3090120a91.2.2026.08.25.15.01.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Aug 2026 15:01:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1787695291; x=1788300091; 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=ObfQI3bNIqj2MRAC8NKs4uPdrExrM8ymvQUurU0xN6s=; b=glrn3C6qrxPSNU4+Bu74RyPog4XkmEUTFIwJ/7CBt5f7yWksIRzaW3Pb2lzAuWr+Ok AJX6veZ7CRU1KG3IcNd8nQ2uU/nN1Z4rzxP2GO9ewjg5cjtk06c5w5bx69aRtrFdhHLG KBv+CkQbrd58lN9XiNkYQ2D7CdpoNd6r73HMHOn4zBHhO746H1kMXO596ZSb6QJkQ7l2 q9rVAmOCXeyZBSwVnug/jc9cPpf68BRBYbb/WhJdCIim1sbsFCFU1kNSSFgkyKEp3MGj XyT5CuSsagBDKa0g/M3JARwWR9dnBttO2CYjFg0WuvEoqiX8R/IIq+5VZvv5beO1Xwbd z0jQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787695291; x=1788300091; 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=ObfQI3bNIqj2MRAC8NKs4uPdrExrM8ymvQUurU0xN6s=; b=EeTFFOMd3Yf6z8ko00ogSlDQQUWM5bJ138PKeQdov7kXcFbuiC1wVLUFFz+88urlaU RFxpc9CfkttAWS3E4p17wgHW/s5eeZD9zpLLYAWaZ9HOFVBoe7QcynTiobiqp9yoiVbi EjPYlgRgQr7Pb2dTWEOIvmCyTH0TTId22pfpu0uNo34dGRTQUZUDcwFeyRzuv0wTB9zS 1yLdsXoADzaZSSYc/FCj+OdUDxdrGYN69evLjP0y1QNDMQCQSGkf06ITCBioHD+Qa7y7 Edikrh/C3QYJyKp8dmZ7bg+0HcR3/BcSRLWsxf8UeTbL2Prx4e3b3Gy2aHrkkeNCiTEf a0zg== X-Gm-Message-State: AFuF++m8sMJDWwLkXEKj/5lQN1vcd8bwsHvcA4e59E8Ui112bgN7wdyy qGy5tO8Rjsj+xVZymD6POzROeJKyYhhT075eu8DvTXgSHo0lp/tjxT1WH9yeVSDcgU8= X-Gm-Gg: AR+sD116mkdBHFCIlyAAc62cmpsUAnIazZRCZpmQL0kdz5okQQkiGxTHtUnIlk4o87c 0hq2MenhkggVwyPRekt2ma2NHapClANlh/KKOg6tsd8BkjvomnMuY0WmxdL7896g2T+HV4hHivn FVbzvrc7HjmldfSTC9xADCWaNCRQG4sHZcC+rU+h8dsz+AG+kMvjgk9mOZ5Koi/LVPgBi3G4cFp qQIIJkRDikDiJQyuzhvvxRsw5QwA1mqp/NMdOrttCRyJQfQ/J1sq0Ylxb6Q41o9ANUb6PXr8+Dp J0gLfr9d4JjxAsB7BbhkPJItLGBmK85DfzXym/bLm3KBMOrvsVv2xFbOzyzbG9cDWAPSxcnHzaj thZrDZ1MSASZdLdyHmMDrTVg7PN8HzSyOosZ6jHD62/JWua5AHey/5nPENA/uABxOMTD7sJoa0n 8OSJKcjg3/IRNIzSaDCF+nKc1DXNZ2JoASpE3Wui6iHjSFsbSDT5dyOCRHl1WYQzRUvyxGpmULv F58zE/KRxuhZr8Pb5e8esajDg== X-Received: by 2002:a17:90b:388e:b0:396:6344:3b63 with SMTP id 98e67ed59e1d1-3966d364af9mr4339106a91.2.1787695291228; Tue, 25 Aug 2026 15:01:31 -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, lorenzo.pieralisi@linaro.org, gshan@redhat.com, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v3 12/24] target/arm/cpu: Set number of breakpoints and watchpoints in KVM Date: Tue, 25 Aug 2026 16:00:49 -0600 Message-ID: <20260825220101.3443954-13-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260825220101.3443954-1-mathieu.poirier@linaro.org> References: <20260825220101.3443954-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::102f; envelope-from=mathieu.poirier@linaro.org; helo=mail-pj1-x102f.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: 1787695428919158500 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 ee26a74c8e80..bc21291eb3e5 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -1157,6 +1157,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 b38a78aac3f0..72c0176420fa 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; @@ -863,6 +943,7 @@ static 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 c02845486aa9..ff5034397746 100644 --- a/target/arm/kvm.c +++ b/target/arm/kvm.c @@ -912,6 +912,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 @@ -1128,6 +1178,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 Sat Sep 26 21:37:19 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=1787695385; cv=none; d=zohomail.com; s=zohoarc; b=hn98tCwC+WKcPv+5K/Vr1vtdlw/IOz72DQwoFPK9nwjvjocTeBTS7vn2pq/lkZaR3UmHVgL5L9f6O+ep0t3t3OadUG+EKI7KO57j9Atz24A9OmJ9xAPaTAsInwQPg0A3M1dcDxTyzz5KrGmoUBrpbGS71donA40RpdGsxLtVG7Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787695385; 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=6PlYTxLys8FyXXQC36kcwbteM/tzVHbDeJa1sLv5MJI=; b=Fojc+0SGf/vqJG4ckXNQ0yX9SiUt6c6N01Tam2/tttO6LTab05B25s27CQW3CM81bzXO8hiyZcFqpjvmz/1m/gjOxbOk9V7o1Llcq1nRSu/VC85WsywLib1ZwpmPZEZDmG75Xr33srEYgojYiYXQftYO0q6pY1xeIRXIRtc1sXc= 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 1787695385122465.88113959030704; Tue, 25 Aug 2026 15:03:05 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyzDz-0005LG-Vo; Tue, 25 Aug 2026 18:02:32 -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 1wyzD6-0003gm-RN for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:37 -0400 Received: from mail-pj1-x102d.google.com ([2607:f8b0:4864:20::102d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyzD4-0001l7-UA for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:36 -0400 Received: by mail-pj1-x102d.google.com with SMTP id 98e67ed59e1d1-38ec1402b05so419261a91.2 for ; Tue, 25 Aug 2026 15:01:34 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:a37a:292f:1363:c0af]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3965d119724sm3090120a91.2.2026.08.25.15.01.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Aug 2026 15:01:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1787695294; x=1788300094; 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=6PlYTxLys8FyXXQC36kcwbteM/tzVHbDeJa1sLv5MJI=; b=Sf/0mPBsFaUCyB6TnYtGB8M6/r6tC/HRn4/PHBOhuhDNKsIXUVXoQjPQN6S6ev9ORf Tz/dZ4ksAVdef//U40XHpFEbtu6k7um6clLh1IvxJLiwXssNAeiqSwqToYqhNsO+7NR2 bipYpaX7KqZRJydJXh7iTHvmtl7qlf1wURUBP8OMZwbazZ2Vi4CGiePQmA6kB3t1uSJC jLck1pOn+TBT4EGTCO3zZN1VMtqTQzBCB7l2pQbkSa2eViVdc+rqm3myU223u4j1i7ok A5aaqeX5g3Vm4bsxgVtUcChJpqHmsavzRqtg9hngpCFaJEwFLo1MpphrifvfIJ21Nmli GgOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787695294; x=1788300094; 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=6PlYTxLys8FyXXQC36kcwbteM/tzVHbDeJa1sLv5MJI=; b=A2XkOipOmUpFrOK3RIzdfAaoPjTcT0JFnqN/Dvdxb8w7KxJymDJXJ6lL6cOlFG/Kl2 PK5lteT2uR2OPiyU3YgMfynKlz9fDdVrSEqy09Pi681ZXrH5ZQmFJwngABHhdvumefjp EoMS1i/4sJxA7K+QD36fIfW5d9MnSCj4lA3c5eHCDwf8Md73HWgTjEnvYbYMUq1EpsFg Nv+B9R7JyZpfmSAhlOT8NaZinDCBEv/Ri317jOjecATIbtSJJkctsplU5uX1HzuIm309 FFlAVAf2DcSMncm4kKjIs9In3KwF6Hs0WuUz+vhAiMW8SJ2oOx0uqiMs4XeQq2FLfjZh u4LA== X-Gm-Message-State: AFuF++mzqBAlNVWIlV3+ko9K1ztwtOHEU6gvfAwMDALgGyajx/4Z+EOm 56mk9wFJx8c7F3giK5cxxVZtc8B3iOKO2naRWIdtMKz2NHCKBBLHxRtD+A5KvXlJoQk= X-Gm-Gg: AR+sD10SqIT8aqasCICe4vDyHl2TSYS4BCC/GE+iCCIFUH5rlAFNoFPJFNw5Vp9q6e5 L9lZ9ECHFXashbtdpJEfkb2pibxGOnxzqFss10ajJacd5SINwh7dAq8K3kBLqDTjqeToe3L/nr1 /lpkE4ApvVh+o0EvBD5OepPovi+0ACcedpuM9Sd/MyMVblzcv7AUoBxn8UX0CUkhZr/wUXRk8Qp 9xeElLGmRJwzYS1HY9nhjpwQpdbZ47DwqigN+aUPvYUdNKU9kRxTSIOJibiVbkgClOI6z+QX8f7 sCJqWToS68YPn1X3LYC69rU1pTIz2C5rEL67bHYqKs2ALwSSOW0uKWfDUaufgRt56B4vtdlZDeF +3iB4bfGGaTv53YYDEamcvN9yjPpnoyt+7Dr4mo/R+AW6a6nV62Rn10DIp70bkqLZ9IzVuqMJKW QpW6Y9L9Nto0zMMbocfs3FTzlOhshwMQv0x6Gic0uECkjWoFm8x8R1AxF18q2Wfnc+I+rdkMkq/ L023Ns8RMAxRGnJnis5EAhg+g== X-Received: by 2002:a17:90b:164b:b0:38e:6a44:671b with SMTP id 98e67ed59e1d1-3966cdf6813mr4226592a91.0.1787695293024; Tue, 25 Aug 2026 15:01:33 -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, lorenzo.pieralisi@linaro.org, gshan@redhat.com, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v3 13/24] target/arm/cpu: Set number of PMU counters in KVM Date: Tue, 25 Aug 2026 16:00:50 -0600 Message-ID: <20260825220101.3443954-14-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260825220101.3443954-1-mathieu.poirier@linaro.org> References: <20260825220101.3443954-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::102d; envelope-from=mathieu.poirier@linaro.org; helo=mail-pj1-x102d.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: 1787695386566158500 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 bc21291eb3e5..da46254ae0c4 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -1161,6 +1161,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 { @@ -2109,6 +2110,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 72c0176420fa..d46d6789d886 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 ff5034397746..85c9cbd57114 100644 --- a/target/arm/kvm.c +++ b/target/arm/kvm.c @@ -957,9 +957,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 Sat Sep 26 21:37:19 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=1787695424; cv=none; d=zohomail.com; s=zohoarc; b=hBoTzsNzBH+hkfbNC652IoD9L6Jcrm3V+n/bPO1H87ikwssR375GzhyRjwfLitQwXSkXpGYOKTEy5CzYzIP0nAHal/hFZM/QJCZk2FqwsgcYWultTgzi6cCk7mI81EVWh8SSOq1WMS9NpAOpjsdbm9zQMmss1ep3FXuFNJVdZOk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787695424; 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=s460w70rQILNZkGK5JrrHAiBRDkOoOpVurtRqc/D0Ik=; b=eMm51sBTDz/HBdWTrWZNUXqUR2bHux7xgXd/+rNwi9WV0t//qEBaTA6xiYNHYsDnOTCb/WviqVo02ceq49CyOOdunTLf6dbfDPKybIO3o0/uPyNRCPYEdEF3N/oh/lonyBqDwS/8fyVXj0qRfr2rN6yy9EYTwK/61f8/ILCNczA= 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 1787695424815106.09124096781397; Tue, 25 Aug 2026 15:03:44 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyzE4-0005cv-QO; Tue, 25 Aug 2026 18:02:36 -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 1wyzD8-0003jO-9Z for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:38 -0400 Received: from mail-pg1-x532.google.com ([2607:f8b0:4864:20::532]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyzD6-0001lt-Jb for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:37 -0400 Received: by mail-pg1-x532.google.com with SMTP id 41be03b00d2f7-cbedbaba5fdso204829a12.0 for ; Tue, 25 Aug 2026 15:01:36 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:a37a:292f:1363:c0af]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3965d119724sm3090120a91.2.2026.08.25.15.01.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Aug 2026 15:01:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1787695295; x=1788300095; 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=s460w70rQILNZkGK5JrrHAiBRDkOoOpVurtRqc/D0Ik=; b=K7kbs5mKYi1rxxfsY4FBkRrdbyCtbWIzcOm2+oHdvTogpwnZrn5DXf8xhKuZwn+7Zz SCmxyNE8J+v3JN+s7oAgFFVHdC1SIPf3xJcsBPITKVHy514Uwpe815X7IZdZ0/JP473E t+z/wWj1Ummy46THZ6Y9RlsgpNKtfjjDUmfGBL65/uokNIg72sCSLDEojEjq2wk/K5TH ppV7+HworjRKDTJd4AOnOWVE8KTiQlX49W1f8LYtdTOnn1XR1swaR7rQ1PHjAl4O+kAc xv76LkwnELaG45cTnwJYK/yroE0OlHcvdX1aFERDVVIKDnKfEWfZPyyNLVdOoE4pzK71 Pksg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787695295; x=1788300095; 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=s460w70rQILNZkGK5JrrHAiBRDkOoOpVurtRqc/D0Ik=; b=KrSfOi2DUAdTaJDTYMaHfFLVBLbHXV1pMQ+Kr9oP972jjDUUqri9b4Jo39djrPwiC0 DGrh+0zMFuq/PNo/aVcCdfMhgXjlESRW/5DHW5VWMqoEKH3I/DrN/K9Icd7dARVtWGjI oBLwvDnv4Fizo4vbvHBbTCLqGY01VTGBL/5gfa++kv4F0yljCARHnVSvzFLEVbekdC+I ViQHPPLSI63vJu7U8tv3NRRoCEAu52ILycmwmcednEfgjcLL+LpkjKSUtZSODoKDITTa eYTlV04uzyhPyvL20eNPWsyglBeho5DbXhmcGPQKgWi1oLbFfkK23AAVXGtr4qJycp3R DeQw== X-Gm-Message-State: AFuF++l3xwdgwDNhzgLvo02YaQI3N5HdNsSejqcakF2skt32Q8H50OcZ 8o4BYeZgOLC0Bpmziua6J426QqZfCrFFZeiF16Ms+cgLO2ce2VxFspqTeKjyiV+kTRA= X-Gm-Gg: AR+sD10QPbLhfab0iTxddNswM+0G03AZTsIr4iLVl8SgpGh380OVuW0sp67+GWU+Evd IcDf48+P9ghORyu1bm6VP9pXK7jYhUCIDuqzmvcqoJlSd0F15prolk0RYhMMOk5c0zOF6ZOl94A Nr9eURx2k7/aU/ru/SFjpqduY0vlM/tSBYciU02gyOV4KisoQnvvF2M6OUaA6+nCG2nEI35RTlB dY2zbpv4M3lzrdR8Mmt9rAfY0Q2KhBeeS4q8IIBfKK0Qwpv3hp+V7g2pNLnMNTXMWaASOGpB1Yv aSx57Aa6DWSuSHpwblCfpZ8bTfHO0ZiTalN9MFE1RTmhZ9gQGzPr1mjMOptrARmE4r0iiWoTqUW 8jhJqj65iXT4y8gqndLOE4EZPy9ZLGzr8YhsGqJSe+3WkCbwyMV1JlzHckfofcd0pFdGgJwejN/ PRjFHQ7L28KVXoR3V6aOoR9SNtNhF6CbK6C4HIFLN9Pw3UXxMTttwlE0IR4OK59cNWFaoz4ZOxe ijBfeOXZxRJPqw= X-Received: by 2002:a17:90a:d2c6:b0:392:c80b:8eff with SMTP id 98e67ed59e1d1-3966d866cc8mr4364517a91.11.1787695294977; Tue, 25 Aug 2026 15:01:34 -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, lorenzo.pieralisi@linaro.org, gshan@redhat.com, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v3 14/24] target/arm/cpu: Don't read Realm registers Date: Tue, 25 Aug 2026 16:00:51 -0600 Message-ID: <20260825220101.3443954-15-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260825220101.3443954-1-mathieu.poirier@linaro.org> References: <20260825220101.3443954-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::532; envelope-from=mathieu.poirier@linaro.org; helo=mail-pg1-x532.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: 1787695426770158500 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 a13e6dae2a2b..866ed02cf2d2 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -926,6 +926,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 Sat Sep 26 21:37:19 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=1787695421; cv=none; d=zohomail.com; s=zohoarc; b=WptM3JMXrTlXX7/J5GYd052Yuo9K5Okh8bShxvrcX5+Ko3t5KaaKupmdhtINfyym8MaTScncr0punwudRjVapSwpIOoZ4Mc+GXByEfboIeT25YJgf1rVtxWEWx/DWU0lSvCzQnc/RUmnifgyF14qDnwZsg+8P2vRXuuJGuppkqQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787695421; h=Content-Type: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=OQr0iH6TQlLlru7OkuZsYY/GXznu3bXNhzmozCgXXt4=; b=Co6nou6VWD1z+j6qLUemvtOlr6PIuFWmoAoOf+ouww3ispAXGtQXaBc52subkXw0P16XkK1Hn7T0DYTxYMvNU3bIvCzZqICVVXnUgEq1acbIpILA3qJbrupEgcqhPQ68G+0RnEGlKPufMDZdafuUzzjVknysRuPjSnwkFlQgPvg= 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 1787695421623480.7330721636789; Tue, 25 Aug 2026 15:03:41 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyzE8-0005yR-RZ; Tue, 25 Aug 2026 18:02: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 1wyzDA-0003nz-4z for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:43 -0400 Received: from mail-pg1-x52a.google.com ([2607:f8b0:4864:20::52a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyzD8-0001o0-Ds for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:39 -0400 Received: by mail-pg1-x52a.google.com with SMTP id 41be03b00d2f7-cbedd5aece4so1112385a12.0 for ; Tue, 25 Aug 2026 15:01:38 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:a37a:292f:1363:c0af]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3965d119724sm3090120a91.2.2026.08.25.15.01.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Aug 2026 15:01:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1787695297; x=1788300097; darn=nongnu.org; h=content-transfer-encoding:content-type: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=OQr0iH6TQlLlru7OkuZsYY/GXznu3bXNhzmozCgXXt4=; b=TCgYHEFuheHiqFkQaTtLJOXf3kFhQcKXEp/sfDkb/dYjWpUZfuVsOKSL6aosHajXza R2Msk0KByzbbgtUx1DAWAMZE2p6jgIYhIvF4cc7v/yhaI084NDCffBxVlqMHc1WHWioc 0mGIMHNYiobMnkjqHWOdQ2qpWFJumqpMR1aHSGalVPz3++EWZjwKdEzt7txfuqHsbOiM 6CuoOtODyFYZgoi0RNUSHJLN1l529DOUJse3oCINzNX3Mpmjh6EtOsLYDXTkbazZJXxk fQiC8iLU4X3nlcXwlSu+HmziW3xrCgsfPSm5T/BvTiLx7n0/W5mO9qFE/OTJnU6DucjM jCag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787695297; x=1788300097; h=content-transfer-encoding:content-type: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=OQr0iH6TQlLlru7OkuZsYY/GXznu3bXNhzmozCgXXt4=; b=B6E4wPH/D9xQNJKCIIkgSfKMQzhtgLnThfBDaafPvYVcpt8qaAyn7Cp5vnsCthJuxv IW3aFUFwFgpzGs/A5zpus1qmBB6Omw0VGPT8NmXipX1iC9BTqC75UTMLAr3QyAoV83nG lmpJU/yWUB/9onoB7IVG5tdTLnRmdLm1F9+wspQ5hNRZNzsjGlOM1kEFRhztIqa83c03 n3n3abMm+zx5cRAtwQSEJIJw7X+xJnTqdK8UCR2vCx+HPvierXr23Rvjwjz6vL7/XZDY hDJ13/SNaFpBwykDC4nVh/uDKgGS+GMlUgBTuSRI5IdL7KU+PljWC7szh583MGG+06dH 9TJw== X-Gm-Message-State: AFuF++nRtYCnGJ2OMKKoQaIO/TwSlYSiTNcGUIAALMhJxTukQLCqqBA9 +1ncblEIpcxAR2aFwxeAPPTqXsB3oGhhqaWiuOEWycpfHdPOvkGlmvwo0CVFWUl4XwE= X-Gm-Gg: AR+sD13RKtfaldcCxxE8jiy1/yjERylx2JEdHpuazuPPmYAgfLDhI8gDIYrVojcyb2A 6OUwjaQ3DpiXU839Q+4dQw3mneqGvEczQxip2hgr6cSmEqpjjtYptf/zgmbjW1SJZXaYMb4iMp/ BCxe5juG3sRE6ZteURDqCpZd7EBcVCDZCoqCUiUmMKs6vuWsP+99l5TCGflt4791/o1xz/A3gFF QFgntq1X8JCKq3oVdRfKXUI2HELN90z+koVwvDm83wXt64/W28QLohdcJFOa9i8l0BktSA8x9kQ 0KCpv+L8E945TvLLxYRqo3STU4Kba0dvUNUrvqvw+OkE3SabUUw47nW9S3ad3tRh0YD7cXCajv0 3dj/OzfgeR1hDYRsnn1U73+92b2WEHNIPiD+oTN4wHZe57Q111ku+0TqE79G+Bb/LaL/s8fE5Ly f3+4xdsbqgSrdg5HX0NKhL92KYpBRr8qr/98cEA/eBsxyL+1w50NGzHICZZXmw7dfspvFuUGJOR TjVx7mcOuwaeE4= X-Received: by 2002:a17:90b:4d81:b0:38e:7297:a92e with SMTP id 98e67ed59e1d1-3966d8e8063mr2162748a91.9.1787695296731; Tue, 25 Aug 2026 15:01:36 -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, lorenzo.pieralisi@linaro.org, gshan@redhat.com, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v3 15/24] hw/arm/virt: Set proper conduit method for Realms Date: Tue, 25 Aug 2026 16:00:52 -0600 Message-ID: <20260825220101.3443954-16-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260825220101.3443954-1-mathieu.poirier@linaro.org> References: <20260825220101.3443954-1-mathieu.poirier@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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::52a; envelope-from=mathieu.poirier@linaro.org; helo=mail-pg1-x52a.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: 1787695422849158500 From: Jean-Philippe Brucker The HVC conduit for PSCI is not supported for Realms, so default to SMC. Signed-off-by: Jean-Philippe Brucker Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Mathieu Poirier --- 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 b090233893c5..3418d75eccc4 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -267,6 +267,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 { @@ -2902,10 +2907,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 Sat Sep 26 21:37:19 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=1787695354; cv=none; d=zohomail.com; s=zohoarc; b=HU4mcuCvUzAjh4pFaAy8SEipv3m/zQ2TFWSVEVcDYbS3dvnyjXfxAik5fi9gV+94Lvklf+vasAOdylp0XtziN+XaIREB5GaidsvUqV/VyYVCuxoGWd54nCruOSJ3/g3uHJsXNukBh0GqHA1RDrZkCyOGQ1HjTczb9a+1PskH5W0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787695354; 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=yoa1yXasHmwThxA/d6QCly7EHag7eD5zfWJ/qbBT6qc=; b=evGBITew2MN4W0anLNxrkBsPm19gClZpnOLCV75b61qGphYjMe1GNss2DM/p57+Dicg+0+U+kPn9D66noQQbf8Q/Zp/R3AHMukLWQfMBUD1rryErfp1rIxaXNZ9LMI79O9r5Gr9myBIw6K/RjQ0hVA3jf9DyiJjRjHdbaouM9ow= 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 1787695354061419.636202038223; Tue, 25 Aug 2026 15:02:34 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyzDQ-0004Gz-B0; Tue, 25 Aug 2026 18:01: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 1wyzDC-0003rL-Bg for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:43 -0400 Received: from mail-pl1-x630.google.com ([2607:f8b0:4864:20::630]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyzDA-0001r3-K7 for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:41 -0400 Received: by mail-pl1-x630.google.com with SMTP id d9443c01a7336-2cfbbdfa60bso3395435ad.3 for ; Tue, 25 Aug 2026 15:01:40 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:a37a:292f:1363:c0af]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3965d119724sm3090120a91.2.2026.08.25.15.01.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Aug 2026 15:01:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1787695299; x=1788300099; 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=yoa1yXasHmwThxA/d6QCly7EHag7eD5zfWJ/qbBT6qc=; b=HyyT/CqkjCIDudEfTfQvnM5GZsLTu4i8BrBVOoeBlNQutE1Jpo7Wk4m/Mby3nkGMfa PtaBgiE2K60+a3emuy4tUS4uEVNggDwauh9VtEVZRl2hmLaqBBnNSiYofAetqt/BheZt neUQVqTyDa4B8Ta76Bp9cy5RHyoO5qGcYsiYbX51U6yZ4xbijDc8ye1S4en8kbhKT4Oq OZn2ZpcOcruEuHMizPAkCD3o3j5fl82AJHRcTi8d0Y8jbepYY9Yqq/+whr39mVAoLso8 zM5fPAA3gwSiwW1l9JpFPD4PPKZkxob8zYVmJn9PWdor1nQo22ZktUPWXhkaQ0SQjPew lkIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787695299; x=1788300099; 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=yoa1yXasHmwThxA/d6QCly7EHag7eD5zfWJ/qbBT6qc=; b=sFO8FVp/TQ2ARZ04N8Nx9yClAE082VCO590UUweWcvF080RKXUq0Qb36mriv5ObFtZ V2AbvAha2I2j8gHPBAGbwykgluKiqVGL3XUsPpju0oLCrvNyV/d1SguM9hvHRZUP4fBB l9wF0F7x/vkxzIvrsTOBEmaCgMuc9a96fmIg+zNn1P5LqQlAjRP2awHIww8nBOcOG6M0 7LGO/s1u00iLhHlUD0mxsJsFXmeuGHci8xy2+BiJLKHG8wqBVge5HS8cXmVNJYXzUg8B fcTzk4NzRk1hctywChWO9isxhGpihzVxBfDDBCVixd/dQLM703vldbilN/Km5clBzcEX YFZA== X-Gm-Message-State: AFuF++mkDhpc1zah9/JiEKipSZzxsDmhdeMs10lDN3hbWcIB1yfhr/PZ aBPtTbWVfP4/O5BlXsz9fOXhUB+mtr9kPqL1e8OIUUAYwTwP0c2OiE7TrOnmUk9Myn4= X-Gm-Gg: AR+sD12pzVp1s6P3XfJ8W7KPLfRs9HrTvNoXNufw1ppQXYhwFn3gSNjDUeHA9S6xxim OjXp0SUD5Da2r3JCyyNfGkH7vjjNoGP7VUovtkYYJiiQolM6I8ZP36niGGNQ1u/HnlA3q1ZwC0c vECC7YEzJmHtxJb8A6L1HnDRNmFuoWpxk6rpdnr6fL/MToQE6QnMuFEJs6LOLu+58wxQIFC3Uac /HjK9QByYwB2ri2Q9Vq86BG8fZF0yALgFxSAv5gAoKPFlko7EM7A4fgWDbXcesukvJcn+ETAuI3 /e66+hmBh9hpJBpxuL1mNEDzVPRGCSBsga+AIQMgIzGvKk3V29jtfuEIzBqy9W0OoBJBz2fdEhP HnF9dRjggpHlocf09fMbqpt2aR5Nb1OIK/vzu8zFKFJEiWY3YGQJM4bNZMpmbwOQiy3e1hHF9k4 tx5oWoO9wcDHEx1nkU0lS2D4PrGvsxUGHJ4sPx02V/ZiT3Ay4rQaH9l3Lnc6xf7B9zfRxM4sQxt w0FQ9NbFNgdPEhGc290MVLWrQ== X-Received: by 2002:a17:90b:3a05:b0:37f:fd1f:d30f with SMTP id 98e67ed59e1d1-3966d44312fmr4568138a91.12.1787695298971; Tue, 25 Aug 2026 15:01:38 -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, lorenzo.pieralisi@linaro.org, gshan@redhat.com, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v3 16/24] hw/arm/virt: Embed Realm VM type with IPA address space Date: Tue, 25 Aug 2026 16:00:53 -0600 Message-ID: <20260825220101.3443954-17-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260825220101.3443954-1-mathieu.poirier@linaro.org> References: <20260825220101.3443954-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::630; envelope-from=mathieu.poirier@linaro.org; helo=mail-pl1-x630.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: 1787695354358158500 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 | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 3418d75eccc4..fe195d145676 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -96,6 +96,8 @@ #include "hw/cxl/cxl_host.h" #include "qemu/guest-random.h" =20 +#include + static GlobalProperty arm_virt_compat_defaults[] =3D { { TYPE_VIRTIO_IOMMU_PCI, "aw-bits", "48" }, }; @@ -3971,9 +3973,12 @@ static int virt_kvm_type(MachineState *ms, const cha= r *type_str) VirtMachineState *vms =3D VIRT_MACHINE(ms); int max_vm_pa_size, requested_pa_size; bool fixed_ipa; + int vm_type; =20 max_vm_pa_size =3D kvm_arm_get_max_vm_ipa_size(ms, &fixed_ipa); =20 + vm_type =3D (ms->cgs ? KVM_VM_TYPE_ARM_REALM : KVM_VM_TYPE_ARM_NORMAL); + /* we freeze the memory map to compute the highest gpa */ virt_set_memmap(vms, max_vm_pa_size); =20 @@ -3998,7 +4003,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 | vm_type; } =20 static int virt_get_physical_address_range(MachineState *ms, --=20 2.43.0 From nobody Sat Sep 26 21:37:19 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=1787695398; cv=none; d=zohomail.com; s=zohoarc; b=IWWhRDIDPoSPywS3ohwC4nn/nNmC7iMA39fZq5ZgohZMy5k8G+vA6Dhn5OGDNlDUKHQm1z5TC9WbJhR1wwxpOI1nTOcMlMm/iyDXMl47irIJyk4HZuy8UeM3/T0sAvrX68gkt4hOuylkeSBDXzYMiMYTPUpWp6MLdCObPz6ZFiE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787695398; 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=gAVb9PuAUV6dKtPBz+8ymqKUXnXtU+Fo4PlEUvBAFS4=; b=DtrG15OXek/47xwMzgzah8Ry2Ck5YwovbbBiGawTjvrHDgZpADEOz+Q+Q9CHXBSLd9x3fVo/0R9HF+AMZYi+mCetv7TViLEp5SUzQECzTr6gQVj46vDkYvapJoTLiXYGMDkGi6/zY4vmuU3VZ21X9A3+XxPoecUCVBDAf78LK3U= 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 1787695398599754.7963111443671; Tue, 25 Aug 2026 15:03:18 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyzEF-0006Ba-9R; Tue, 25 Aug 2026 18:02:48 -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 1wyzDF-0003wC-Oj for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:46 -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 1wyzDC-0001tq-N7 for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:45 -0400 Received: by mail-pl1-x636.google.com with SMTP id d9443c01a7336-2d6d28aa26cso2944635ad.2 for ; Tue, 25 Aug 2026 15:01:42 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:a37a:292f:1363:c0af]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3965d119724sm3090120a91.2.2026.08.25.15.01.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Aug 2026 15:01:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1787695301; x=1788300101; 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=gAVb9PuAUV6dKtPBz+8ymqKUXnXtU+Fo4PlEUvBAFS4=; b=NufytiY8pigvbrvMH8K9FBt1cNdG/oQIXnIEuOrQe/gTZ/AM5y5euifKk1D/mWN+ID F3hZX0frKsaBuBp6CHoAfoxyYpeOW5NiqAobht/Lgm8RLK9F0xZe66urqj7xXnWY2CRD Qbu4aYBnGBKCcvVAFStUGiGEvLpAvYVXphpq4CAGdEnFwnbJO/6Ru8YDaYhrAMEg4nTj JCzgj7biTM7BvqGh75LhkBD4XTjDx4hq81KZRwxY4Us5CGCvsx5HwUplykEzLqgeIqWa SnkB3dazT9zYnmcq/DoWdcgusUMsMACkWuM/z2nPb9i9ZWl9ZMLNgMu1MmPXCxDelLlf aiHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787695301; x=1788300101; 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=gAVb9PuAUV6dKtPBz+8ymqKUXnXtU+Fo4PlEUvBAFS4=; b=CqvVCeu63tpopq0FE4U2ldC0gkmF7fsAzOuUFHOz85hTL0a7r1FGbGL3cL/uU2nv4S tTyN5uc8ydRXyjtOXZXWzeVsEeTLOpvFCENCMVCiX3O8UfQfiu41Kz8Hg1IhkXoXJLuo KlQ/uncfIRswIVCgELqk2sp3h9qNAA+AdK8U4feG2Wm1MUdv2k5XOv/7eIdK3YFA02eL v1CMqOr4DPV+cwYSC208DxqM0MsRJuK+7kepOkoy2qzMnkGqNR4IRIJ7lnc+JhvE23CF KJ7WavE9guyRhbDPnnkEOupyatUMIlSR+z3h3kOTaXxZ2/WNgpdB9PKXuFKfyeB4hPv+ dPwQ== X-Gm-Message-State: AFuF++mVZWAbo9KwrgUTxZXVAjK6thiuxhHm8926f1dUH+RZYvOE+4ZG 8ETOkHKhSAGogmlz+sbvx3F/Zyy1tInPO9l8nSS61k3FBCSG76kwaH0LXZbcqlw60NQ= X-Gm-Gg: AR+sD125zdDo+keBK+ZG1YKss+IcHmINB8V7q/zjuksTpVbe+0IJvr/yvUbgwAc5QMC M44tNwWIivwNiYe/2oG1HOdpu8cNpv+i6Zwrcqk35AipoOqU3Vnh3NIYOivipt1vb1a4hmw+rAa d1AKeQE1AoqmyHPZv2rvAesqtsZSu40M/AM9SDMaFf+/OzOT/X2xKA77K0Sem7ydJyg5Aas7A/l PDxFaIxu9dLEk1jxdpQ/hgFcNdZweYLuKjZlJVzsraRAW80ctSfBnHce+jh374XtUcidw4G8VCZ l7OW/8b8Vd2fuquxm2PILKFyDoIC/OocqkzFgG6sDPPRp7OZsKGGtVvZeCo5LVI12qKlo1Zp0Kd bVub4SVAd5xd4NkH7BjQzngUnS88ATC8KkJjD1WSZzCGeXblhT6HUT3SG2stQbZomL2NEbp2Z7I A++/lOFCuSBozWirUXgHSquWErGoq4Q5xjccbN+S2Z8ZdqHZ4uqSe8cil28dl0+av5aQbcuXCia 4MrYbylY0/2dh4= X-Received: by 2002:a17:90b:4a8d:b0:381:28e0:6259 with SMTP id 98e67ed59e1d1-3966d412ab2mr4045321a91.9.1787695300878; Tue, 25 Aug 2026 15:01:40 -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, lorenzo.pieralisi@linaro.org, gshan@redhat.com, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v3 17/24] hw/arm/virt: Reserve one bit of guest physical address for RME Date: Tue, 25 Aug 2026 16:00:54 -0600 Message-ID: <20260825220101.3443954-18-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260825220101.3443954-1-mathieu.poirier@linaro.org> References: <20260825220101.3443954-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: 1787695400670158500 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 | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/hw/arm/virt.c b/hw/arm/virt.c index fe195d145676..2132e6595baf 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -3972,17 +3972,27 @@ static int virt_kvm_type(MachineState *ms, const ch= ar *type_str) { VirtMachineState *vms =3D VIRT_MACHINE(ms); int max_vm_pa_size, requested_pa_size; + int rme_reserve_bit =3D 0; bool fixed_ipa; int vm_type; =20 - max_vm_pa_size =3D kvm_arm_get_max_vm_ipa_size(ms, &fixed_ipa); - vm_type =3D (ms->cgs ? KVM_VM_TYPE_ARM_REALM : KVM_VM_TYPE_ARM_NORMAL); =20 + if (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; + /* 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. @@ -3991,11 +4001,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 Sat Sep 26 21:37:19 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=1787695438; cv=none; d=zohomail.com; s=zohoarc; b=W6AmKBjSieMjYHQ/KYSSKRWgsxNWvo+Vo38WQJtBGH7piLiH14nebZdygjLWTNuI4PySXR4xYYh1mQ+TJrcFXxQVDTneEfWWj9CY1AKyCt2da3Q9UOuT1aUzQHSkDBGcxPMVbcHTKMiEpCU9EYHMz6KdAZkJtFNd13DNsKEnHZ4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787695438; 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=xAzEL9ZlLXCfuWjde/xvRNITLPTF4bTeTvJhthxiQHA=; b=h+GFghYPNORieLN8CvXOYBN9a3sip9a4ojwkU2GwU7Rw5qX8M8QeK+951FH8zOZwjzQrAVqjMxut+XXOuPI38QVQzcO5EN+6depNwGdSDN5AT8gM2F6+Hyg6FJYnjTyxZVmYZegeClHLaHlBDR8OtBXThVELyfeaIjR6cejlL58= 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 1787695438381806.4729545013998; Tue, 25 Aug 2026 15:03:58 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyzE5-0005nr-PL; Tue, 25 Aug 2026 18:02:37 -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 1wyzDG-0003zy-CY for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:46 -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 1wyzDE-0001vi-EV for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:46 -0400 Received: by mail-pj1-x1030.google.com with SMTP id 98e67ed59e1d1-39266382df6so380979a91.3 for ; Tue, 25 Aug 2026 15:01:43 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:a37a:292f:1363:c0af]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3965d119724sm3090120a91.2.2026.08.25.15.01.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Aug 2026 15:01:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1787695303; x=1788300103; 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=xAzEL9ZlLXCfuWjde/xvRNITLPTF4bTeTvJhthxiQHA=; b=UjrOIewF0bMZCSNqogMWybLkzDZIz6V5Kb40LOJ3Tdj3kY77D4fXfTWFlvUbGwQG8Q BByL4/7zi92mAIqEjGB00Tf/NA/6LHXRovVWvX8LWyDWQ9AUqOYQB2Gcr8FQAyuRpsr1 Td1Yqlq4W8XA2OAFQ2bUtkbsrfacoKRa/cULCifw1dW5fiVJxOGr4Dc9V/ErE/GJttvv UrhyXmOTDAskP/s+QU31D1I6KYXIJo38f690QsYQI6u3CAS46rWwF+3m7QcrliopHVXC K5IPqUKjZ4VJC9J2gvLy4tgBH1838RDwhXNtdZ6OpaJ82g88v0vXwFby7SPB5gEQGnKQ a5bg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787695303; x=1788300103; 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=xAzEL9ZlLXCfuWjde/xvRNITLPTF4bTeTvJhthxiQHA=; b=pI3JZgnvCTpKXZBpXaUnsuOVbhJCg3MnxJrH99iJnaadiQ76pbep+/jgWu98jpFL+m 1mbReMe0z82/wAoCxcKMxmNGI04mGwTL+ty77ZS1om+HA26lPdV9WJz7CflgBbqcj6rx 3yOmCOmijbeYsupp5ZKkKlt/d4eKr5nKopo6SP2bBf8s/7FKIAZUMjDb6yRqq2Di4Sx5 mgOy159TQMa8OVKZ2HjYYezeHI/9lARjpHM14cNBhjCQ274n09QZHvx98MFqZ8fELiIF 75bCSADfqEmxJv7gMy1Q2IJgs/xEBGTJQOzv734pzj+k915LuHFNx7vsMOS7A2R9Oo2P +fig== X-Gm-Message-State: AFuF++mpdvpyoZQ6vDLTVTdBQ373gGWeRy2yw2oMJ+3HNamkS0asvvHT 4f25O0x4L05lgG2uFEyVGt/oEywmiacfCmCZ9scLGEax9vJC7yA+ClVe4UjPu92CIPs= X-Gm-Gg: AR+sD11Xgh50l2VKPzP2kh6PvSDCsSOTNJuF5pFXZtYkzWt/e7gqgFvBkS8UOWaovd9 EFY6Pq9DgNaSEm3n5mDjn7NC5movN2mmDwMbATunFhJ5/v4Mv9xWoHe3sMhDLrvow7LEYMCGMpP PelJT5Cp43kP0z4PQ/kiTpNxoFto7Cef2MFYlsHHAvkAHKWntFDozgQJ3FOHhM7cE5aGRA1xs5d NHtzCMZA6TufPNDhpwZu/G5U+mDFVEiCqB67whdvtDdRHqZ26BfQhIifgC4nz+BpULoQMeL/hzQ ngYaAEsYQTXoRbO1/D65c6bQa/fZmgb3J+NXVSCnWBZEX+l2MqplVCxQPqTJSNbhw28TUdOdPqu U50ZjzNraeYGAyCuEkA07pNFURsvmi+9FuEJz0Rs1Rslac/NpJQSyTGY4jlWXRg4kLgnDkwj2Zf xWTCh5Dtx/8zHFtRYnG6yweVDVHEzItYyi1Uk3CVbBLMryeUycV4gE6HT90nw5gBw42IICO37To TZfD1PxBwK0bZIf X-Received: by 2002:a17:90b:54cb:b0:37d:f206:a2ac with SMTP id 98e67ed59e1d1-3966d5b7c62mr4486212a91.7.1787695302766; Tue, 25 Aug 2026 15:01: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, lorenzo.pieralisi@linaro.org, gshan@redhat.com, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v3 18/24] hw/arm/virt: Disable DTB randomness for confidential VMs Date: Tue, 25 Aug 2026 16:00:55 -0600 Message-ID: <20260825220101.3443954-19-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260825220101.3443954-1-mathieu.poirier@linaro.org> References: <20260825220101.3443954-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: 1787695438984158500 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 f811e662d68d..faae97848d2e 100644 --- a/docs/system/arm/virt.rst +++ b/docs/system/arm/virt.rst @@ -237,10 +237,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 2132e6595baf..c300224f19e7 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -394,6 +394,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); @@ -403,6 +404,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 */ @@ -424,13 +435,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"); } } @@ -3462,18 +3473,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) @@ -4260,16 +4274,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 @@ -4332,9 +4346,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 3ba33b4bd274..ef9fe3238022 100644 --- a/include/hw/arm/virt.h +++ b/include/hw/arm/virt.h @@ -173,7 +173,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 Sat Sep 26 21:37:19 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=1787695414; cv=none; d=zohomail.com; s=zohoarc; b=kKK7BoLFIdCOvrQ/0d4v57tb0i+rbW3DQWs7vGkXH32R/yvYfKkAK//T2iSE650Fh/vkX9UrkIXSPzfGhZfHEf8ncy1VJsqLyeWCY3L6Z7CCojmmM80opihlk31rMZ655qseUNgUJC4JQ40kIsBFtdS/H8K8L2mwByOqAtjJfTo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787695414; h=Content-Type: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=dhCTcoxWo5P8En8U5WBnLltAvsdfRdW+zmKjCvPnEtU=; b=kdUFdqQVjGs+oi4x5r1Uwi5fpSusxa/vywM8vS024zGoZfTIIkzVbebvDOHPJgEbXdBu2OLfdt9arQ0qDXc7iJJeeMfYJUic4HhyiElbBzMGV+KgKSzXKGDq0Rqm/770j2Ni1OExDCwV/IopsOC4F1sOIUQnH2woGkn1M86xx4U= 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 1787695414175952.3835355150294; Tue, 25 Aug 2026 15:03:34 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyzDs-0004zI-Uz; Tue, 25 Aug 2026 18:02: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 1wyzDH-00042c-HN for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:48 -0400 Received: from mail-pj1-x1033.google.com ([2607:f8b0:4864:20::1033]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyzDF-0001xD-Tu for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:47 -0400 Received: by mail-pj1-x1033.google.com with SMTP id 98e67ed59e1d1-395ea741d07so382696a91.1 for ; Tue, 25 Aug 2026 15:01:45 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:a37a:292f:1363:c0af]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3965d119724sm3090120a91.2.2026.08.25.15.01.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Aug 2026 15:01:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1787695304; x=1788300104; darn=nongnu.org; h=content-transfer-encoding:content-type: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=dhCTcoxWo5P8En8U5WBnLltAvsdfRdW+zmKjCvPnEtU=; b=xyduix5izdz50qfewikh2ed6NQ/zuoDVe7DU/C5JXddGrKG2pMSYBXGMBmqBynVaSw Efeq7AKU8dm63soYrdwzmfTOkyJVcZE1v8YTkAjNivMMO5xH3Mj/kVEG77CkdbyAKJBC N+XMTZEBvQI5Pf06fG+pj6FjQs69VLae7IczbqkHjeUt1j5lCHFlhKOzlfAdw+FTXHOe SsxAIGbWhhhfArB5uZeVH/sAWRsQXhnl2nKQJBqPyhJWvGG+mto00ExPFRgC7Rc2YRNH svwrGtMwhu/ZBKJX2k6RjodINRfaugeoyNTxl/emwHdFZ67dSCN7V4QeWDGhPUwGPqJl LmNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787695304; x=1788300104; h=content-transfer-encoding:content-type: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=dhCTcoxWo5P8En8U5WBnLltAvsdfRdW+zmKjCvPnEtU=; b=Y+jfYRwk6B84n2Q9JukzWsqXAlmOmHL1rEefb/cvsO0n0XGNbgsyTZXa714J0hyFmU gzMDTM8I0Iq0Q34M0itxl6Asz289+ofNMmutWLJmlNVbdw9ivc+OG7yAjkievuFFKgHK EuHFH/pdIBAhuno2Yyjq19Da65420ASjyVinh5kTlRMVEGQwoW6ZIT7Wmn5I8TG0vG3V 0yfFIdTQ9ATIadPJbQ9Zk2qdtrPFwcryGYOI69obX1yxI8hGsfINaL8Zq2c7PZ+qi0IP SGKxbZhP2X0u5e90yOpNgNc3b9pzhIbGXa3XxMkKi1zlNwGeWiFnGwRUV/94cKeq3WAQ wZdg== X-Gm-Message-State: AFuF++mNSSobyDJCXAaVhvZiEkP2XTXGVtrR3ELtVfXvk0b0Kq3KYzNs +pVlZdXUdCddx4bq8x03lWxRB+Cd40HTSH3//3OM0z6HRxOLnCEthGgXq6+qhlsgkoA= X-Gm-Gg: AR+sD10keN5jSywpz/iUjcicmdjatq9zY9mxHpv/kTZR6q1YPbk1Rg/0ip3XjsTqs/o Iptw8PB4mjOdWHCCwIpldPLlPievLO4H5RejuohopGkcF23w0Y36h+sAzm/BKIVfsiXGp53vDdv CnfSXo+KmScE8k2XDEgY2UER//dFMnZDkXxhB3+0ZXeK0yJIKlEi0dhE+7zSTQgFj/rg5Zh3Aww BwMLbRmcvwSGYShdUGxte0Y7dWOduI5bMm7QJaupVI3XuDeSR6MG2bnwYDjDHmKjOu1QCMAijFV 1jKFo985EkxdNe/NE7rdnwE7aqG4QtQAsQPZIzRJNBaGJ8TBt858EIY0lx5iwlKTB8V8e/0UFAD MvhxhPL1fD5bFkqSoxDkrcC5yjmyok6HZr4PH0zFwSVI+T/MaWQFk5AP1uIzJ07zhzi7LqyMYgm YNQ5TmLYAZORUPJ26tIFCw6Fn+sftyAPWfyF8s5G0zmPLxm6l3bBKN5fuuBTLVROE9p2Jx1SqUe yJLrJrgnoM5sN8= X-Received: by 2002:a17:90b:1d47:b0:38f:aab1:5148 with SMTP id 98e67ed59e1d1-3966d8ab6e3mr4143621a91.13.1787695304520; Tue, 25 Aug 2026 15:01: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, lorenzo.pieralisi@linaro.org, gshan@redhat.com, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v3 19/24] hw/arm/virt: Move virt_flash_create() to machvirt_init() Date: Tue, 25 Aug 2026 16:00:56 -0600 Message-ID: <20260825220101.3443954-20-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260825220101.3443954-1-mathieu.poirier@linaro.org> References: <20260825220101.3443954-1-mathieu.poirier@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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::1033; envelope-from=mathieu.poirier@linaro.org; helo=mail-pj1-x1033.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: 1787695414726158500 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 Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Mathieu Poirier --- 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 c300224f19e7..966577d6a66f 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -2861,6 +2861,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 /* @@ -4350,8 +4352,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 Sat Sep 26 21:37:19 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=1787695400; cv=none; d=zohomail.com; s=zohoarc; b=Ln8lTJewV7GRE3oXEHlZfuFcNupgNCIQBYC5Y7oNfKXVLl0m3+D2Tf7KDQ40ZjCFnfn5fA76f/K7QvUvQKRxedxwD9vhm70aN+Y1JLvXPW5xt7jTDFODMmWl2R8tkkRUwfNMF4fnZxNpru7ct39w50WmuBrCQ/1Cn+Q6jygPJV0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787695400; 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=0GUEb8qrMFDYRu4TEpO3RbtQ1bMhwP3ADMRIC7mpS2I=; b=ETiFznlztOzxDzXFfnKftVOJTcRhIaJQAroHJL52VNg5jB03Q22Ek2PoDcepgC3FKCwF8VA/O6f8aIV+5ilhu1hTeM4XwdjOYNfVbFfXF5WHc5Q6BLVRn9mo2hOogKiZ5NaScMwoUtiOFgSTCDqfjRsS5SqFOjd0wmprqWT/O3M= 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 1787695400151394.96665214263817; Tue, 25 Aug 2026 15:03:20 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyzED-00066w-QY; Tue, 25 Aug 2026 18:02: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 1wyzDL-0004AK-Dl for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:51 -0400 Received: from mail-pg1-x529.google.com ([2607:f8b0:4864:20::529]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyzDJ-00020k-EL for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:51 -0400 Received: by mail-pg1-x529.google.com with SMTP id 41be03b00d2f7-cbedd5aece4so1112538a12.0 for ; Tue, 25 Aug 2026 15:01:49 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:a37a:292f:1363:c0af]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3965d119724sm3090120a91.2.2026.08.25.15.01.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Aug 2026 15:01:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1787695308; x=1788300108; 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=0GUEb8qrMFDYRu4TEpO3RbtQ1bMhwP3ADMRIC7mpS2I=; b=r8djbNISJw99/sktdVG+llz95z7UX7O9e3LmSy0EEtv2Cgm0CrGWb5fqWfXlEGeh+z zYJ3nzeeT/OSM4M5J5y8ystPWUKB259J3UeopzxtFxvDMxfJBtuvJjOM4T7hOpQkoIlR di+bQjc9tVIDTETnIy3A5rKQXULBn3rC2zaW1qzpNNYC0GTI1g8YPDRhJXIBdcY9+MyV nL1YDYKa5hz60kk88BNZ5nt9gTYmzJmrQZk5wtDQB7V7h2mOEYE9j+LPkIYeAkXM61gs kTr07mSX6wC4uf2ICk1tem9qEzqMCj2CakLPGHU+AI7VQRzWaILeQu7yTdvpRXtD6PB5 7fRA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787695308; x=1788300108; 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=0GUEb8qrMFDYRu4TEpO3RbtQ1bMhwP3ADMRIC7mpS2I=; b=VKDky3HQMDmuMPz3aSAnLYw466z1c/CjWL6XNvNcS4S7T5/yPLqJoE88W6QRVzAK7/ bx+F8m3WAh6GCzcbNFOJrusx5z5qgFIjFtuSC7wCJVTeZjhkVr7L4WUBIJZHmdpEP7DC WBmqNy3ZuaMXMqpZnzV6WQHGBxWOwpClV/ivSOYi03TS4rmcVJRfDA126+5A7DJeiEm6 iNAKqFTSVpaYmJy8zqGutjM3mNsGt99SqfvslKPNP9yktp7ySev3QrWyY07OHAQbGnlT s8KFVe32go8EF+dDwxCKIakn/4hbsfqxRbLbilVl8PkTyJrq9T505LhhuPMFjc3hFm5g eNsw== X-Gm-Message-State: AFuF++lVJAuAPzTPPlBlfyp0psAGDbWptvihZuvKrusKKcEpFNa7iOoc NY9WVcicswGV617YALw85mZr48OmD5+QMeJKZU3Nvgq0Ac0YOEIuLTkmtA+EXYkYfXc= X-Gm-Gg: AR+sD12vU80W04iCyVxuCwitVgudgmUP7OH1mWIwjUDn8aMkUOtChQpw0Qcj6UyAG5c VY0RuL7NAHXanHtpfLU+/crQo+FUV6Na2Cd9GKdBeVSsr/dDVPzafJcoT2VrnL1KbohyurTqBMT plK0KGcl0NhAHE+aQDY2ABUUg7gdjS+zE8lh+wCTYH3Oktf7jKwHqE3TfBTr89TmB6XUUtV+Myr IbZEgb7C65OEX6I7bsl6e+HbEjzTlfNhhN5dZrykMOcGMjOb3+csnv9/0+ZGWyfzrl+FVUJyddb iYxCT4hMsxFmnJzi7BOLI2gyyomuxvakOxqNenSjFG4ReX6uh1lWqaGeCOzo8SBIdwm6v2e7SVk a2YYpwtwj3CXaSbM1rFYoNfb+kdgFKU9Dwd2O1kp1Al/PXdnWbzmnEpSJvO7UedabmBfQHkN7Wc Ztoxf1X7cERirC6TLw+nS1423dozeeuR98p/3fhriZdlMhIQ+KSUH8md8B6mkRFOHjLETEcE/eA hxwAahfFNuYwL4= X-Received: by 2002:a17:90b:3dcf:b0:38e:c232:9d2c with SMTP id 98e67ed59e1d1-3966d372bf7mr2542412a91.2.1787695307862; Tue, 25 Aug 2026 15:01: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, lorenzo.pieralisi@linaro.org, gshan@redhat.com, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v3 20/24] hw/arm/virt: Use RAM instead of flash for confidential guest firmware Date: Tue, 25 Aug 2026 16:00:57 -0600 Message-ID: <20260825220101.3443954-21-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260825220101.3443954-1-mathieu.poirier@linaro.org> References: <20260825220101.3443954-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::529; envelope-from=mathieu.poirier@linaro.org; helo=mail-pg1-x529.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: 1787695400694158500 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 780b6be63718..5e85be2bb462 100644 --- a/hw/arm/boot.c +++ b/hw/arm/boot.c @@ -1112,7 +1112,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 @@ -1163,6 +1192,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 @@ -1206,7 +1239,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 966577d6a66f..b799e5f44432 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -1816,6 +1816,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"); } @@ -1866,6 +1876,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); @@ -1901,6 +1921,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) @@ -1909,6 +1955,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], @@ -3228,7 +3283,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 a2e22bda8a57..8a1bb1106930 100644 --- a/include/hw/arm/boot.h +++ b/include/hw/arm/boot.h @@ -112,6 +112,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 @@ -135,6 +139,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 Sat Sep 26 21:37:19 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=1787695432; cv=none; d=zohomail.com; s=zohoarc; b=buKsfzs+qLmpUwNC9r+gmc3XWZItJ1DNNjKunjq/WJw3+gGaSUDB0t90lBiwxusSdIopT1FziKs4Nw1m1rfB4Grk0fUcacttO2m1JVlwWSFU5+tIQb+DogKE13mZa+ZuTb8wUJQ1gwR2b/YETwjcILxUoM2e7yDNl0A2WdgFp1g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787695432; 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=yIKyxHY1FpDhrdAudjGG0Q+3wu/oS+95ntpmkMvDrBg=; b=W76EK7J203XRQQl4F+pxmv2bbbB4C8/OQJ53ietrm/vVQKAXM18AsXDOADjFeaJDnjiIPyYZ7gAwasBMcKSRUNSYrL/SE1rYUqyc/AWVPv9PZXCmfDLzWdm6qh7zRf7j+NPXKSzFuoAj8no0ztbnimePEAz5rdoAKytsDeti0xo= 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 1787695432729526.8888695113637; Tue, 25 Aug 2026 15:03:52 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyzEM-0006XJ-Mv; Tue, 25 Aug 2026 18:02:55 -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 1wyzDO-0004Fn-C9 for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:55 -0400 Received: from mail-pj1-x1029.google.com ([2607:f8b0:4864:20::1029]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyzDL-000218-PI for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:53 -0400 Received: by mail-pj1-x1029.google.com with SMTP id 98e67ed59e1d1-38de840f2f0so401016a91.0 for ; Tue, 25 Aug 2026 15:01:51 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:a37a:292f:1363:c0af]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3965d119724sm3090120a91.2.2026.08.25.15.01.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Aug 2026 15:01:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1787695310; x=1788300110; 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=yIKyxHY1FpDhrdAudjGG0Q+3wu/oS+95ntpmkMvDrBg=; b=iDz2zlhdaJBkpe6ujli6ni2ZDVYyFR42qb3fz8SL3dtFUV67alOjS5LvrW3JHPhtiA abghl2X9tj71UL2NRTcMR1mqZdOsxQQW0K91pXD6H1GlBFO3mcID4ltVrFL+jvHRaiFm KQg2oUYoYBlslUXtiJAqUZ05WaYIGFL19jd6FPTJ5JYQbFisCSsjfMyeEmdB9QaZEp4h LTFp0YJ2aScOr2ja4W1uSBEl0M9UwuSUV+kC69EF3VsbSkBKIN/3OwGncfOb+ZTyEyde bO7QP6pBxQblce30NjLwqep/PsC4g/1m+J9+xIC4Ea0qtxLhMpoSclehl043Sc/y5x6T GWKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787695310; x=1788300110; 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=yIKyxHY1FpDhrdAudjGG0Q+3wu/oS+95ntpmkMvDrBg=; b=qvkI7TOjgcB+t07CmslWJOQtPWWIADfq1I4u1YfsGrQG15rp00nYfUkK/39n9/nkvL qz2TsCNjCZWiqgYKsrjUeva49sLVl0OBIC1PHc2ffs0/WJIZT7h4lYJ/NLLvigxSRNJe C1hp/drx+HqF0sL7J8dK3hBLdnsFE+VpD1kUHKiX5H8lA03D24toU2z3SwtYnFHircD1 wzIyrDcReuQr7VrtyQKn5bhIbMHkxC3MKBL0Emvw8pvK+ZNlkfWmtS+Wsj2eIdaz0TYi FLXIgSPX4YNvl/jFrPHgBIV8LDOvMZwh6adpEyu9c5WFDeuvS6UChSHbYkvqaTzmuCub 3xGA== X-Gm-Message-State: AFuF++m9sqwdBu0uSG5yDpa8gwF9zLm2sSDjUs5BA4eh5gcgKJDY7TV2 jVg/xxu6Md8wi6TI4cgB87VzbEF8V+JSanGj6m42Rv5xMFbNVH8DD0lnFEM/libPb1I= X-Gm-Gg: AR+sD11dJC9gd/QgLnC2eGTCH/ppt9D2MZCHm45FM3Evg+pVBF+hoysDk3ZKMl5Lay5 9nRMfoh1l429PXUz1nEz9aNefLWNFSmzk75Qre16pwrYTjfCQdlN0Cjjd3lAD9FoBwq8y+ERyKf AqG2DjX07QsNxPN4VMLRx7gD5Or73owbywJe3bvFhJZEZqkLGCAek6jLFDxyhEcNwpkZb+XBdQZ fEXVgdWAjuDRjAAjNpFMP1HCptQpnm1bNiALCPJ0Fxcr/CjU2NY3OZRu2r8MNMQVIs6ZO+Wvr31 EOBmIXY+gV04+ofHgNDjDKyssk9ENr96blNgKWDjishJ3nw708q5D5Ht+Pu/Ice+KVbS1AnTKgU bNhJpBQpsputbe56MHPwCKTM/m0P3hJW95/sFT+6RJpo7Nm5PQumanlystnKAF40stn9t7k7L4H KEDHcKQ+bEOpL8jYdsweAE/Ud9feQf+JmXmyHlFt3qF3a10Z1TYn1Kl8qJNTKMbyjQXcxoekGBT uOZfGbPYnc2CiU= X-Received: by 2002:a17:90b:2ecd:b0:380:21b7:e727 with SMTP id 98e67ed59e1d1-3966d484a97mr4362369a91.14.1787695310119; Tue, 25 Aug 2026 15:01:50 -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, lorenzo.pieralisi@linaro.org, gshan@redhat.com, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v3 21/24] target/arm/kvm-rme: Add DMA remapping for the shared memory region Date: Tue, 25 Aug 2026 16:00:58 -0600 Message-ID: <20260825220101.3443954-22-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260825220101.3443954-1-mathieu.poirier@linaro.org> References: <20260825220101.3443954-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::1029; envelope-from=mathieu.poirier@linaro.org; helo=mail-pj1-x1029.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: 1787695435000158500 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 b799e5f44432..74df4b0d60f9 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -3277,6 +3277,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 c082a5d8f3d1..4adfe37a7e8d 100644 --- a/target/arm/kvm-rme.c +++ b/target/arm/kvm-rme.c @@ -11,11 +11,13 @@ #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/memalign.h" +#include "qemu/units.h" #include "qom/object_interfaces.h" #include "system/confidential-guest-support.h" #include "system/kvm.h" @@ -26,6 +28,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 { ConfidentialGuestSupport parent_obj; Notifier rom_load_notifier; 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, @@ -228,3 +251,86 @@ static void rme_guest_init(Object *obj) static void rme_guest_finalize(Object *obj) { } + +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 5fde96f9b281..e5af5d20367f 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_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 d95381c13afa..b4a293911f71 100644 --- a/target/arm/kvm_arm.h +++ b/target/arm/kvm_arm.h @@ -250,4 +250,14 @@ char *kvm_print_register_name(uint64_t regidx); */ void kvm_arm_rme_vcpu_init(ARMCPU *cpu); =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 Sat Sep 26 21:37:19 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=1787695408; cv=none; d=zohomail.com; s=zohoarc; b=UQUOT084OGrl/3Z7l5UTSXfIlzdEW4HRx1PfbqO2hxhwK/voguNWPDNU0tAcCCG5OJMbc6/LuUIDC1rj7GJv0Ne9f9Ow1IahuBnbmyHWB9oeEAOzS8gsnNml1V1Zi/CU4q4kkCkEbZd9XaW0Szb6fUXjBVnnhvDTm2Zq6upKdlo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787695408; h=Content-Type: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=osGTHClTLaBLi3JCE0COpcCCRCh2Va5dTzvXjc97G4M=; b=XihzD3nCvUMma7ygUBmweIEVyzV2JkYK/skUxYmBzEL91FBTVGMuHN+NMZVgC4nu7JvwVs4R8SVwLm8Q1SgZHWzpU3AYsuGlnQLgoteF3Ey+LLJj98VQ/19VPxRBvAb4QifxnWcGRCmciuJ3XaEhLfB9tsyj4Zyz5F/f4fEYHoY= 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 1787695408037287.60020339698485; Tue, 25 Aug 2026 15:03:28 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyzEk-0007WZ-Nz; Tue, 25 Aug 2026 18:03:18 -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 1wyzDP-0004GG-4d for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:55 -0400 Received: from mail-pj1-x1036.google.com ([2607:f8b0:4864:20::1036]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyzDN-00021b-6I for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:54 -0400 Received: by mail-pj1-x1036.google.com with SMTP id 98e67ed59e1d1-382ef647e20so472616a91.1 for ; Tue, 25 Aug 2026 15:01:52 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:a37a:292f:1363:c0af]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3965d119724sm3090120a91.2.2026.08.25.15.01.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Aug 2026 15:01:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1787695312; x=1788300112; darn=nongnu.org; h=content-transfer-encoding:content-type: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=osGTHClTLaBLi3JCE0COpcCCRCh2Va5dTzvXjc97G4M=; b=hIskFb4/F3DGeYNOaBsE0W/9qAkyqmwpzQGujPqrKkJOk4liSd3T8npzbhFtK+3c+W zDvpsuzRGaft824c3UT7sY40QtlIPQiLI7CI8vMiQfMwZxkQy0O40eAVwW8NGJ2VB+l+ RzrrUC10m9M81fde5nZUXsp0ULGVLRat5z/RSONoCdBi7IhogFB5Lf3+QZFMirRLuMAi f5tZ0clRkzsafXGtypyBAEu82KtTnN8Gf9r1sdL3h0aCwcAWT+ZBIvruae44hQtA+BYs pb7OqzNYnS0ckdkmJeoz6JBAp050Otwjt+3i9+nYRIXVTmtNyGpwl0x+OQjEhdvfiBGw it6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787695312; x=1788300112; h=content-transfer-encoding:content-type: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=osGTHClTLaBLi3JCE0COpcCCRCh2Va5dTzvXjc97G4M=; b=BRpPqFkQfbE6ImLwsnRtyBblmaXJMQCWhdTZurPyzor0ZuSqSp1iPQJbDmTJ5TmZRD FYK7YViDQxgCK/8yPE3FCLjvuErICHGhqmaNPH5ZTzIEnUxY0ganiDLKdQVaEzDdrm1H VQRTudavpry0Lipoj6yWPlAzKHfdBRtUZtSOS34NXXLadFHQIEpI0gq6fG3uX8kaUGuI Zg/qnvzD6RfobVbbpFpQo0dkr2kC8VKXgC9i7NZglTWb3Our4/KK8bPY3uHrg6zM52P6 jWq3mgI84+wCO9xGFHZW5lmP2rXaVqRPYUytICX2ITGt9VurKAv/Ke1iG7RhP0Isfqwy Xtpw== X-Gm-Message-State: AFuF++lBWGa1s2QRqPSkdWU9NHvZQzi1UUf2flKlFJ860zXZx49cusbk 86qTdQQeesfwAFcrmGI0KqoNsZeZkTyDI3N7S4vckFTSyyuQtZ3/2Cf8pzLGjW/TBwY= X-Gm-Gg: AR+sD10Pq+4xqQPv/Xs0v2mr6VnOgwqk+MsLwY5TrMrvAyz8VDnhkaZ7r9TsOYFfHAD WX7ASXMlISq7d0VyLkOcB9X9raMPxCv2aWn6u448La4CPj6aK2SajGzT9tYdfJxvXxPWB5RrabD oedjzdNjsZjW29SvNVEvIKjbFqQRFXEXT2zwZA/rlbe21WVssikAxTC9bDjyyHcMBs4BY65PwQ7 1gHK60McvQEOwS9l1+5nc6dFGJFkQveJYjZSODJm098DdkkVEZ8Ym1d2+pU4tWuIZavc1E81wh4 eQGbBFwHy3xsspCpDkczbqmgX8mH608zLfY05y0sVD8Fe6L2MGchIlAPRzvrKCnJhNacUTucLs8 oKDUxukh1UihXMBmJbnrjsk0o0xmU3ymBTMr/YwMcFgZqjEwzrPuDu0ffMc9CaXMorfh9OSel+q vUG0Hxqf42yJJv1+pgQoCseVTfhqOQf1Zalw2ok9CCkhaVOQL9E9602ZBnrR62EERSkOlq1B1JP /qR3S6A2loSUcI= X-Received: by 2002:a17:90b:4acc:b0:396:5c22:b1f1 with SMTP id 98e67ed59e1d1-3966d413283mr4235262a91.8.1787695311886; Tue, 25 Aug 2026 15:01: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, lorenzo.pieralisi@linaro.org, gshan@redhat.com, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v3 22/24] docs/interop/firmware.json: Add arm-rme firmware feature Date: Tue, 25 Aug 2026 16:00:59 -0600 Message-ID: <20260825220101.3443954-23-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260825220101.3443954-1-mathieu.poirier@linaro.org> References: <20260825220101.3443954-1-mathieu.poirier@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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::1036; envelope-from=mathieu.poirier@linaro.org; helo=mail-pj1-x1036.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: 1787695408723158500 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 Acked-by: Markus Armbruster Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Mathieu Poirier --- 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..2850b91078d9 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 Sat Sep 26 21:37:19 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=1787695415; cv=none; d=zohomail.com; s=zohoarc; b=EzQm8YoRrcEnTpyWfqYMlbxr6xtnW1ifVNjlTa6a92ca08EVyY7ND/KwiNX6ky0Dy9ErjfcLLXgmWKO2Ua8IX5pA1XkW+0uyC4pDJ+tUCar0qZAVW69Yg/g3ScwH8L37V1ddazhG/5dtV5xWtrNf+OhGtBsVvM0TxC7drwlkjt4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787695415; 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=pjUwK0GJ0a5oiNGFlwfIXujzN/1nEJAAx2xEhAB3eLA=; b=DOUQyemDMZlHBafzO04RPST2OIjspBnMqKypSbFKCbUKlltvDpkRsJz/GI+sbeMFPeOQutA5iGvDqo+7qtXcRfW4MUPkrdrIwo1tLGt2A8NNCtpMvBszZWnCEU5t+TLwdC9+wBLkjOJ8jo1eMDhMfoL6UOE8JZxZZRKHAiv2uI4= 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 1787695415657540.7031815914348; Tue, 25 Aug 2026 15:03:35 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyzEV-0006rX-74; Tue, 25 Aug 2026 18:03: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 1wyzDQ-0004Jk-HD for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:57 -0400 Received: from mail-pj1-x102c.google.com ([2607:f8b0:4864:20::102c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyzDP-00021y-3T for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:56 -0400 Received: by mail-pj1-x102c.google.com with SMTP id 98e67ed59e1d1-39266382df6so381178a91.3 for ; Tue, 25 Aug 2026 15:01:54 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:a37a:292f:1363:c0af]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3965d119724sm3090120a91.2.2026.08.25.15.01.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Aug 2026 15:01:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1787695314; x=1788300114; 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=pjUwK0GJ0a5oiNGFlwfIXujzN/1nEJAAx2xEhAB3eLA=; b=J00HzOkDI41Qtnolo+TgHpsxwXrsU7wm2ZzM7uhew/MdlsIWKreG2US3YZH4uLG19x Yc67QsWzugvZgf+BweLbcpQxZpH09C4Ktd45yMvBmb4Q9OE0U7co7XXRddMNw5GHx2+q m69P1SsgTE63T8vT8Bo4CpQgVvjgkJbQhUdwAA7g9tRpLy61X34kxVLAKNsaJzgMLJph PLrl2AYqWu5LMX3rC07jpIXQDWcxjivFzlItMXor0yLA6uEvivWtxW7RKxXVnaQqOzj3 bjqT51qI3B8/VCbbre/WbJGdR/S+NOWTYjBc9mbTwzFc3ii7S99d45F4xz0Um7gObbIV BB/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787695314; x=1788300114; 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=pjUwK0GJ0a5oiNGFlwfIXujzN/1nEJAAx2xEhAB3eLA=; b=KVC5mr3yDet23ZS37KzPOvOGfscJDnvkXKa8g8xYLjcoDihKc79rHn0FSgGjKgej+G /rWwi3wknB3Pmc5LlXQ6/74X/82s16cUowTqgSBvogCI7YeUFhV0gcC8627dBgQ682On LQXYW4mNQT2XyPYyq173Obsp95tISsDzGiixDDcvieB6MWrLBve5V3VN4xCq9M92XVqi YQTEL8Iy5z0ZCdsPVyaXqtG2ZZliTKaVrVZu6pjmZgzh67killvmeQRK6sO1C6F3OPvl sZfvVf37GGPIwShw4UYlrdRjqClMOUi6IwYx+MTj0okG88PxunXz0lcLAh7K/WHKcsp0 +bMQ== X-Gm-Message-State: AFuF++m7nMeUEKDkwRpxEhnfTZGpqYQMLybq6+mXd+b5xNcHUeeIXZ9e 1E0agofgP28Y5zLK20GB+y6PQ2a80jRWSL5vSY8mRt6+q9LoxJFyNcaprZJANHmF7dI= X-Gm-Gg: AR+sD12gpo+kgpW2NQcbSUbdM716JAzhB8DqXl0AWGPMUeCF9vMr6VadGCLY1X3Z3pM SX1g7nEhOkNFaL20RqedkaZqYnWO8JBSL5HMKXrV32QHEX6VSMjeFhAcSUTHMOdQ5d3NL0kHFPt uVv10aJwMjM4n+D4GJDv9Cbbm0QNd1pR7Iw+1edI9yGMWu/K0p7rjKABtX/aHebKHrYgHi/cAFE wh20AFcWxat968WTarrDBZ97pxjexRirWiyxkO0C0rjjP8LbQ1lJ7S+od6w8IsfEw6igBcCQB/t aPpOBEtowfujZZfML15jK5PTsJgow8k1v8Z5sSbC60LJSpQmHeCAm3pXVWD1pt/Y4qFTgTwnoU4 IBP5daIRezD1ZziSmDGsL1qzQhep+3kJpMokfy3KrI6H0vInCLCeGlNBsQRc4fJupkAH1aZPcoR 9C7EFH0eLADetQN0WnE8YrQGMepBZKhvGtyAtyHrbBLMTzZWuHMoRn/WTjjmbbil8ndJ7Y8JgYt F6CjsUjM6stmrs= X-Received: by 2002:a17:90b:380b:b0:366:3517:1aa2 with SMTP id 98e67ed59e1d1-3966d002fffmr4328291a91.0.1787695313671; Tue, 25 Aug 2026 15:01:53 -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, lorenzo.pieralisi@linaro.org, gshan@redhat.com, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v3 23/24] hw/arm/boot: Load DTB as is for confidential VMs Date: Tue, 25 Aug 2026 16:01:00 -0600 Message-ID: <20260825220101.3443954-24-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260825220101.3443954-1-mathieu.poirier@linaro.org> References: <20260825220101.3443954-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::102c; envelope-from=mathieu.poirier@linaro.org; helo=mail-pj1-x102c.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: 1787695416806158500 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 5e85be2bb462..ad588121452a 100644 --- a/hw/arm/boot.c +++ b/hw/arm/boot.c @@ -477,7 +477,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 Sat Sep 26 21:37:19 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=1787695434; cv=none; d=zohomail.com; s=zohoarc; b=VapFEVccX7ZvNgHF/hHbe2aZFJLmTUKIg7dyubn2UXN/3Pye++/ypMzaAwB448MctrmGEtAs0FHxHts7gUr6/teKRN7Ayp+WsH9ArVKBcHfxAUtbe6n/7U7LTrVwXu0ECAW+B05g63IqneDXt+PVdKAnkyUUIcZqDmExcOwC50k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787695434; 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=OpjWlRmtEinG28PJ3JYITgibmsTwvl/nI4qxNWAczI8=; b=KnS4GnIOnVmBNk54WQT9SfS0LpaARItvbw67ME1WSVrGgCJd09w8su1OxuqOeQ8SKG+mof0m6oqiGvYFuT84/jvT4BEpDJHq/eQO8l9RDYht8zb1kgUoG6Hr6Q1Jj1a4sUcdch6dQl273gWQ/oKghmYO49URxNMIDeLhuf2hCBg= 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 1787695434855776.2918582353251; Tue, 25 Aug 2026 15:03:54 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyzE2-0005TV-SN; Tue, 25 Aug 2026 18:02:35 -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 1wyzDT-0004PM-He for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:02:00 -0400 Received: from mail-pl1-x630.google.com ([2607:f8b0:4864:20::630]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyzDQ-00022M-R6 for qemu-devel@nongnu.org; Tue, 25 Aug 2026 18:01:59 -0400 Received: by mail-pl1-x630.google.com with SMTP id d9443c01a7336-2ccf2360620so3628685ad.3 for ; Tue, 25 Aug 2026 15:01:56 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:a37a:292f:1363:c0af]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3965d119724sm3090120a91.2.2026.08.25.15.01.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Aug 2026 15:01:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1787695315; x=1788300115; 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=OpjWlRmtEinG28PJ3JYITgibmsTwvl/nI4qxNWAczI8=; b=J3UcPbv5q5n1xVqq0BODH17MIKVQ/SmvPPIV3KPI3jAWG30xscCZk3/Ts2Z3ZzwcSl sv2fmi+KAC7ndDzDqe1VaLnx4peTeLKPsCAAoy811+HrmKisiKNL/BzgvSxiBr4lcOUz gQKGW9gBC4+RcrUMk5D3MuI8LfGymWt5EhL+8F7Lpog4bKJgH5oRt2JWKsN2w1rumWaD Zt3+c8uVcy4u0q5yx8eps1nYeaDvXhrlnYYjyJTVCdPQjdAIbkUoX2PwE/bvsreVDADE zR5PNIMb4PtqRvUI/gLPqoYR5GpPX92mk855KiM3Hw18GtK7xmvi2Ps7V4iCdircECst +klg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787695315; x=1788300115; 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=OpjWlRmtEinG28PJ3JYITgibmsTwvl/nI4qxNWAczI8=; b=d3rCku4OTz+umsYu/E2aYaZO9GmApCzDUky0k0xpa6kbUWALlVBd6kIJmQ71bfxM6N NDSR6H1w2/bdf3dXNUEQNPh58idLcNIYze6QU2TkfSNG2Fg5Wu7qwe+rpXjw39VvD/dP Fhbbfut9F9b4XbeY5p3PhbuK6ybgtBrWbGjXZVwyB/z83ZkHaZKJudBgKzJzSAB2b01i wNXFpQN85YuL203XMoJ3YsdVrxn11zw4EA9kB0J3HaSps3qLyyxj0OWO4qtGIlFgd/OJ c/10jmOFJBz8bHKZ3GHu31HSaVlk3HPAz70AR2Q2RYpq10rmQ5pOtBalFctKHdjYcqxP bfbA== X-Gm-Message-State: AFuF++mf1SiP8e/XD/oSKfMlgiAa/xfMuKArvACemLaaZx1O9NbyPH8n cJOBGiHDlT0DeoHKyExItXLKhTFUpbt8o5348LJXdhqVsOZ+Awq4ldQkhOhxiVbwFIM= X-Gm-Gg: AR+sD13Nd3670NZj6v/HM4v7/NFx4El3iWuRAyttu+YwV2kZGMiiXyj2egTNlLucpV/ Sq+kaaCA0r1UzkiKH6LmjfoSBZi0/E5UGgi/EV4+9lFKEdALAljPFfbvtF/6EEWMYJqIXEZr2hh rugCAdWIwIjyb5Hwb9emY4xq5n1oNAkDvrk8biNQO6hAuyavDt2J40fLxqZwYL0pk99GJ+5S5UB dpWIg/HqcNQ4cO40WGU6fuHveud6+kjEH3LYqlJRZmKSrhtpzT0aXaHm+PwmLBvd7T2L1UDx388 hL0UKXKbreA0bit0RBi6rn/WqiHYI/UFu7Ajoe40tqBj5lpC0bXn6s9mXHh3Cyg8rxoIYOQdV24 rFBFENH5xH0Y0sahWw2wfUlWGRi0ipu5QlW6nAbuk2nhIALPp5SXhc9fAn3EhGH1AxQf8amDQLd NMuggfd585NdC99Y6Jh2/dT5Ws8FPBSDE5xo+j0AVAiWBLxiUuK5bEyB2sDlkUswTvxOawPjH3O FLyYyd3cmGvC7U= X-Received: by 2002:a17:90b:4a01:b0:381:25ce:bcc2 with SMTP id 98e67ed59e1d1-3966d1bae93mr3763741a91.6.1787695315471; Tue, 25 Aug 2026 15:01:55 -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, lorenzo.pieralisi@linaro.org, gshan@redhat.com, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v3 24/24] hw/arm/boot: Skip bootloader for confidential guests Date: Tue, 25 Aug 2026 16:01:01 -0600 Message-ID: <20260825220101.3443954-25-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260825220101.3443954-1-mathieu.poirier@linaro.org> References: <20260825220101.3443954-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::630; envelope-from=mathieu.poirier@linaro.org; helo=mail-pl1-x630.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: 1787695436828158500 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 ad588121452a..c555228a0dcd 100644 --- a/hw/arm/boot.c +++ b/hw/arm/boot.c @@ -731,7 +731,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); @@ -821,7 +827,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; @@ -873,7 +880,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; } } @@ -957,7 +965,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; @@ -1098,8 +1107,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