From nobody Mon Sep 28 02:09:43 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=1785267163; cv=none; d=zohomail.com; s=zohoarc; b=SFd2tYl1OAmfTqhK5ZiUSZW7zxJWdWzFU4PBoVk/0zBgnhTEBX48yQtArykZHSbst+iy0ynaUkyJl+WC0Q+YixUtf4KWMzGVmwc8q6IQmsPq8QlNSTFGREmZON3GMDDfoyZ8FY2jKMdAhKMWeiwOMfNOuX+tqQnWmgaDj1CAMnc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785267163; 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=nymk/KlJTSOeG9pOLHjAQMrrwDf8dwvKcqF44jXbkLg=; b=Kp+BQMPP86/rrMpU4kkogoRdxswzHX0zlkc0Ga/KLNAbL/rGkZVVWPjRsOZDfiK9g3gNf6pm3Hqv/3CabKmxVqK9JpS8kxyS0t60bXCnOEzSmYXJzmi5EAg7zl9yijsAPjQvpTCp7SQNJm+9216S+lBxGg9K2vG6EoJkIYgSbRk= 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 1785267163587547.8816369060971; Tue, 28 Jul 2026 12:32:43 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wonRy-00031R-36; Tue, 28 Jul 2026 15:26:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wonRo-0002ro-3O for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:26:40 -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 1wonRl-0001Kw-2W for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:26:38 -0400 Received: by mail-pj1-x102c.google.com with SMTP id 98e67ed59e1d1-38759bcd877so217294a91.2 for ; Tue, 28 Jul 2026 12:26:36 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:b9d1:87c9:a085:86c9]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38f7f1353fdsm372650a91.8.2026.07.28.12.26.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Jul 2026 12:26:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1785266796; x=1785871596; 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=nymk/KlJTSOeG9pOLHjAQMrrwDf8dwvKcqF44jXbkLg=; b=NYMWMX90lEFAMt/Ev2puxcJ5GtM5qTlQj1LSuq4rGvwZWZ0N5+S2cSgyjcuTLpW/pi 0w+csaqD0vArlB41ZV8HGzd0Y2ivcPwnlFQ1bS/DoUThdfOrcqshqF/1Xb7X57o84V7/ hh8sdkT2JI0vUm062MKZyNXzgmBNOU+knm3hhC/U3mebVvXWT/nDNoaonwb0bmPpc3yI EO0HCbAlV8703HTR0QRru1sbKGWGE4D+r3L2UR/XDZ5jvCVBaUWjv5u6TwjUi10RwSyd kkuq5hQA+zfOkiLolasgI1V6izctISGdk6tFHbvVdTU070WuZpIVpj+uE0LAQ55A34nQ ukuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785266796; x=1785871596; 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=nymk/KlJTSOeG9pOLHjAQMrrwDf8dwvKcqF44jXbkLg=; b=YWVqjBygpubvbu/HyhmHzvrLHHv5kADZE1o5SKZhykv5ZHTAFQSo2obOg7R671N1py z0Bs2Op7AgvbnreWirqZKJwe75GYMpYb/WpJEP1zLBHqdW+BCAsolhJr2XmqYo5TrEwj ijn7FADQtHjwaU8OyZ87atGQVogoazg0axLBnnoz+Gk9z1RHZXj6NAn4ECYts24QEb75 FIC8qYHxcpuWi/PAg08OhaK07x1bHcimJk9kljy307Tay/ClAFY5lw89+6q7h1Yxmoki LkfweTsraLMUJ2KlOLchKJ32/6oY8pouplOMjchBuw/fiU4pS8umgvB1Yt9gigRv3OSz BEgA== X-Gm-Message-State: AOJu0YyasLBe2XYJZtTa9uq790rkGppy8C7z5pqvPIPlG06SjpoXt6vk TJ0xv2+k66oQyLbNxEvzFJqb8MaJAJyLCIxlOvDpd8d0TpWzeDG6irTzHn+V488mtCU= X-Gm-Gg: AR+sD13H3ccTQcut8sCz2+gZlD0q8ZAl+78edwEXnt2fj7XNM81jrbLdqJUQza3eoxL IgoKs+M+gXfDtoO6p6RsjQ4t2R+lVhN8wlebuOqgsV4FiMgMiYRsb+kIphMMIC7OEbn0g2AxfDg v4ezwGWpT+khS1U2eIrBMWnhsuZPC7B+8LvFwtZSefJwRfECJnNLpAdXpiVSNbiLmVzU1tjqwAM H2c9X7yiHqoX3mClaL07fv2lugN23jq4+Ui1DjQbF2JZ8cvki3Dq4B4pYGhCNvaFrC3Wivc82yT FhVnCLiOaaJzty4ORlJfKmlJjSp8SP5cgjwoEku6kO1chIKMRbNhnxMdpDxwu5FwGIO8qdWUz5C 2pQpvCRAmXEUS3vlEu2eykKwFjnBFOTpRiphuBNQHG/rkHqWX9RIy1/byBwan/EHA3CYHuFWOQe 7BWJOF3F4Moccy+ZACDVv1l0lhe4fAcHuANNLIGsAJEnI8odd9sxzDCZpJtD/JrawYDHATu64GL MPcBxY7bSMtn78= X-Received: by 2002:a17:90a:d88d:b0:37d:f983:7b5 with SMTP id 98e67ed59e1d1-38f6a30eb9emr4333942a91.9.1785266795564; Tue, 28 Jul 2026 12:26:35 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, lorenzo.pieralisi@linaro.org, gshan@redhat.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v2 01/24] linux-headers: Add RME related definitions Date: Tue, 28 Jul 2026 13:26:07 -0600 Message-ID: <20260728192630.240375-2-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260728192630.240375-1-mathieu.poirier@linaro.org> References: <20260728192630.240375-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: 1785267165569158500 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 | 10 +++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) 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 dd52e2a65bfd..cdd5ad11f85a 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. */ @@ -986,6 +993,7 @@ struct kvm_enable_cap { #define KVM_CAP_S390_KEYOP 247 #define KVM_CAP_S390_VSIE_ESAMODE 248 #define KVM_CAP_S390_HPAGE_2G 249 +#define KVM_CAP_ARM_RMI 250 =20 struct kvm_irq_routing_irqchip { __u32 irqchip; --=20 2.43.0 From nobody Mon Sep 28 02:09:43 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=1785267122; cv=none; d=zohomail.com; s=zohoarc; b=B3kmoQkNrQAPZuMfrYi7ovoISD99POHUdPAfC+TDTJNFWCSRh+YTlks9W3ByoZHLoxY2hjhCKcLOvc/xIuU4DY6JXPxrxA+cwbBtDfUrMA6mbOLz9x2ycQNXSI/IbtL4HpkHit9kCUyDlih3i8niTIWEuttvVbO3pBIMkPI+KCc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785267122; 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=CTa8ol54WmkLiwpxVbLa9gLi/D951jAni9gUZTC/0Gw=; b=QFgVLqibAWYP/Ll/7Y7QVwr32MKQbAv10ui9hYWOhuWd1xXUJTZlA33CdLmMqlZ02poYjaPfkN534V7Ie24ox0msiLlarmUoXrHXdQqbb7zU+62IGLz6/fi90UtNMLgovT1E1xFllbSE0N2gB06GgPNkR0mkv6dMMVdiZ7Z1fQU= 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 1785267122839154.2280739755695; Tue, 28 Jul 2026 12:32:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wonRx-0002zr-S3; Tue, 28 Jul 2026 15:26:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wonRp-0002tM-E2 for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:26:42 -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 1wonRn-0001Lj-S4 for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:26:41 -0400 Received: by mail-pj1-x102a.google.com with SMTP id 98e67ed59e1d1-38dd55ad76cso190814a91.1 for ; Tue, 28 Jul 2026 12:26:38 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:b9d1:87c9:a085:86c9]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38f7f1353fdsm372650a91.8.2026.07.28.12.26.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Jul 2026 12:26:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1785266797; x=1785871597; 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=CTa8ol54WmkLiwpxVbLa9gLi/D951jAni9gUZTC/0Gw=; b=FZN5u+02W5PUw7NV/1b252l9Nh2zGGrTHZvsaz86b3ISaKXTa3LaqVOeSzgbI59hlp rHWQnTqqV9As5tFpT1n5EqXPUMz1UOXKQwBXQ1nDNT0qJxwtHIy6muqUrSZ3pkxadU1K HqsIPYR+i9o+4Lcttrk+9Cu6Nd1xikhFdtygOCSzJcNd1nVVHJiGIBlpyNbU9kPNhZW5 B3OHYPsotRHS6Yj+iTD/2kzvlsfXXhl5mwKNIGtAXzwwDKdULgsdf9Iv6Qfpzt5R05jQ uEeIXM07gOuTYHI0aFZJ3C9ZWxwnc9jW6fx5GcHdQXNlCryi+DgFgd1KGPxdb3NhSPIY +7Eg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785266797; x=1785871597; 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=CTa8ol54WmkLiwpxVbLa9gLi/D951jAni9gUZTC/0Gw=; b=FYQ2FDgjcj0KspxQ3clJNRdUH6VXnsvxcv3EOE5JOURDODNA2he2KnqoeTBt+G++tk 3GxPGKh+tQ+pHhVSwethI7IT8WgQ0t0yyoaesyo8j0vBAhQ0EujvmlH92Rup/s94zGW9 XgALFo0gZdMyMakY1JBvTxFxMR6iLSEXPEfXn/4af2J0b2ErpJ5/QTYfK46I/i1l1EFO J/l/oZbBjdDUqxSeS0AI9aYyGTaDzdVX58Tb31mL60OzVgwBU0cFeG9L7P0xZwzpHseB GkPJ+Xj7WsEgDaqZEIxugERPg8lb6jwos45NgfXeZqPTEqI35ulx6E3+Rcr9K/2U7BN1 GOaA== X-Gm-Message-State: AOJu0Yw+DgGAMiSchQN96M4nSfHYAzrWF91G1QGeqIl7AzBtflOt42+B U/+vK8HbSS51MvxNrtY+7jEYlp8uZGfvEwmi3qo82bDRYuh7IBsCtQvg9u/cUe6PmrM= X-Gm-Gg: AR+sD10jW3WiSpadmltNaj/F4t2wT1ltF9Sv7Vn4JpCDoliVmiN9V719dHEePlwNdfK GDek9z8tc3W5CKSpYkvZ9DQsnK3xnIfZy6amu7WS2Fy0NmpxhVX8+erIRI7+Br/swqzRnXCIZXf 6O2W10aF8IxJ/2euJIASDvwiUkOjatbFhMJydG0aRqyzsq+RlOCXBa1/JhyKq6zGQMvA2GGDhc4 bE3UVWzAB/KlmpXERfw89+XWwYUHOPQd1mAeDbTdvEA/D4fqPg4QUozpvwRIjBR8CBZRXMFIpLr Hikgt2xX8xryHgrF/ltGAQNI/QDbwtKUGP2BOmbiJDzkQzuuRpE4hF89YoZZ2B7sI0k5WHqeeVI cF2Z/3karrEiVnAaDPcx6Dw/8mqaQi05DTpb6cEyBPwCNHcT/RLrHYHoRtgUb3iMyBfEKmkAvLw hRRRAgAh8KdroQi32n4Jcab/nIK8uGBkMYSTLD++YwtbeZgh3ikspte1+2N0QZdTZOdrFNdixmY te8SlHAQeC9Brg= X-Received: by 2002:a17:90b:2d87:b0:38e:5ce1:ae30 with SMTP id 98e67ed59e1d1-38f6a336e0cmr3477306a91.14.1785266797109; Tue, 28 Jul 2026 12:26:37 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, lorenzo.pieralisi@linaro.org, gshan@redhat.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v2 02/24] target/arm/kvm: Return immediately on error in kvm_arch_init() Date: Tue, 28 Jul 2026 13:26:08 -0600 Message-ID: <20260728192630.240375-3-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260728192630.240375-1-mathieu.poirier@linaro.org> References: <20260728192630.240375-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::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: 1785267123297158500 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 d40a6a985914..ed99be7fd80c 100644 --- a/target/arm/kvm.c +++ b/target/arm/kvm.c @@ -596,7 +596,7 @@ int kvm_arch_get_default_type(MachineState *ms) =20 int kvm_arch_init(MachineState *ms, KVMState *s) { - int ret =3D 0; + int ret; /* For ARM interrupt delivery is always asynchronous, * whether we are using an in-kernel VGIC or not. */ @@ -618,7 +618,7 @@ int kvm_arch_init(MachineState *ms, KVMState *s) !kvm_check_extension(s, KVM_CAP_ARM_IRQ_LINE_LAYOUT_2)) { error_report("Using more than 256 vcpus requires a host kernel " "with KVM_CAP_ARM_IRQ_LINE_LAYOUT_2"); - ret =3D -EINVAL; + return -EINVAL; } =20 if (kvm_check_extension(s, KVM_CAP_ARM_NISV_TO_USER)) { @@ -640,13 +640,14 @@ int kvm_arch_init(MachineState *ms, KVMState *s) warn_report("Eager Page Split support not available"); } else if (!(s->kvm_eager_split_size & sizes)) { error_report("Eager Page Split requested chunk size not valid"= ); - ret =3D -EINVAL; + return -EINVAL; } else { ret =3D kvm_vm_enable_cap(s, KVM_CAP_ARM_EAGER_SPLIT_CHUNK_SIZ= E, 0, s->kvm_eager_split_size); if (ret < 0) { error_report("Enabling of Eager Page Split failed: %s", strerror(-ret)); + return ret; } } } @@ -659,7 +660,7 @@ int kvm_arch_init(MachineState *ms, KVMState *s) hw_breakpoints =3D g_array_sized_new(true, true, sizeof(HWBreakpoint), max_hw_bps); =20 - return ret; + return 0; } =20 unsigned long kvm_arch_vcpu_id(CPUState *cpu) --=20 2.43.0 From nobody Mon Sep 28 02:09:43 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=1785266935; cv=none; d=zohomail.com; s=zohoarc; b=hu39bFNrksBXjGvzUJGVNGNrzEF7D/j/sVD+OJF6byNUUknFNBMK5+DAHHj37uDzY45o0OrpUqt2b5vI+hgfmf7XtqsfLbipMXGGDVQ7gOLpbTFaq6a75V4KsFKwwWQRIMSWOE7xHGooO35GLXefoYdyYK1thm2JhBTjITvD8SE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785266935; 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=+snw93O5L4IikZGAmaWl2HAz0eSkR4e2CEsA4s4dMC8=; b=b/AJ6OOH4CSLDLJYocKRQ6L9ypO4Bug23iVyGNNzcm6oawipjkflI+pG14vXJ/IMsHsRegf8OWnM6fFxkYO1lovygFg/9BKJGzVy0WoY1QBoq6U4JFkOJO3byJNfPdgK2dTjCDjsb/BltvxfjfJmTnYXH80KHc3SxxyatgYlLms= 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 1785266935409112.31187275685943; Tue, 28 Jul 2026 12:28:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wonRz-00033e-7y; Tue, 28 Jul 2026 15:26:51 -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 1wonRr-0002ur-U9 for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:26:46 -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 1wonRq-0001Ml-5b for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:26:43 -0400 Received: by mail-pj1-x1034.google.com with SMTP id 98e67ed59e1d1-38125cebfdaso257166a91.1 for ; Tue, 28 Jul 2026 12:26:40 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:b9d1:87c9:a085:86c9]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38f7f1353fdsm372650a91.8.2026.07.28.12.26.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Jul 2026 12:26:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1785266800; x=1785871600; 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=+snw93O5L4IikZGAmaWl2HAz0eSkR4e2CEsA4s4dMC8=; b=Gsd/AbUJe7VuYVRvlkW8dfbTkwHkb8DlMkKZDmLb9tQnPLfpGogbl3s2H0IsDt9EQF 0YfSBPpTmNt5hnj9h4jmQasb2zuCc47Q8asUp++VwpGZWJd6ujS4VAshsyJS8C+J/sMe fpNL2GMeXX78pVdHuhsY3oCJR4TE9AXVyuA42hc2ft8879vYKGNQk/IeMxdpL96rUr66 CYhTRePO7m1UL5LjjpgGamf1NffENM7jeoFv/p/gxoAS9pAENI5Je6+h2v6PCn+Yul0N yBMro7K/q1xALYTAlJRzsUKNPc/uO/zYPKi6y38fddA5KVV1avaAfFVidW6CUTelSg9b +InQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785266800; x=1785871600; 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=+snw93O5L4IikZGAmaWl2HAz0eSkR4e2CEsA4s4dMC8=; b=jlc1HpVQla4fRgkRn7VeSsNqNqIBWoNBD+IS6nDmeKwuiSwplcazHENxKPwbD3xRel PI9lB4Bx9U6l6onRQIJ2LubKKO5v54umHaNaYmo6l9c0inWHhx9r6v+c8QTxp0+Poae3 yPPt57Bhco1+U0vRAVTkfOj54YgqtleqnFpiBZyChqH9ENETzktJIDahdt90bAtSSZjT dejfeS8SVj7PacHX92hEW0lRFu/c8mau0iFBOmdwnFPmz6LlZvAS7oMeMzds5YDuo3uA INwsThFwACVSOrWc5pkO/Yzu9kyCAg9mfWpoI0g1kgoZxHGqnBLuOHXNiu53DWeiBYBe yP7A== X-Gm-Message-State: AOJu0YwyccjrahuUMqGWxzJMNKXXQUHiX44nsASgXo5to0xQf+A3QD0s mzkxG/eRRt+Rtyfn96dzqbO3Z6GGA1TEDg4YxrOYJc0QtyzT5Hs/SwF3riHc+7Fb+68= X-Gm-Gg: AR+sD12/5uMRGyAixw+ztsAUou/upvB+POyVef8Cxtg5xFo7p0rhT5tRmfnFadP5etu hoatEeJBCmhgp8Rk9kLRWygiNCmeyMr1fKTkRRbtXJZoRTtUBQ8cmEaEIXfvC+Mj0p/ag1fwnS6 Q4ZL6g7b1PscT7jnFws5pWmblzVWxZcnuv38HrH2Uj9ZfSdHG05uEh11bCvh34SpwmGfm6E1E1n hH4qj6rkOWOFwdgCwERaTSyOm4Q/zpOca1SXd5G+/mru7L5Na2VJ+lEmzsFtZOjySss7E3SlhEW PIl7YdTolMMcIuWBX9uK9cbrcFphVUX/P4lAsGvxU3TyKqRoz43N3Uxycigol0rdkaERItc27/z NlZDzN4uQOah+FzNsFmpUuEu1O9vrbAw2lsa4Cl74CXTJJqBNXnVJz9jIrOY50DQIb8LhGwPt1E D3LmcvNE8eXjaTc6P+9vn7RnzIaXCiL73H/ctX878= X-Received: by 2002:a17:90b:582e:b0:36d:b424:4f17 with SMTP id 98e67ed59e1d1-38f6a3d55f4mr3991157a91.1.1785266799926; Tue, 28 Jul 2026 12:26:39 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, lorenzo.pieralisi@linaro.org, gshan@redhat.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v2 03/24] target/arm: Add confidential guest support Date: Tue, 28 Jul 2026 13:26:09 -0600 Message-ID: <20260728192630.240375-4-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260728192630.240375-1-mathieu.poirier@linaro.org> References: <20260728192630.240375-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=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: 1785266938209158500 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 | 1 + target/arm/kvm-rme.c | 42 ++++++++++++++++++++++ target/arm/meson.build | 5 ++- 4 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 target/arm/kvm-rme.c diff --git a/docs/system/confidential-guest-support.rst b/docs/system/confi= dential-guest-support.rst index 562a7c3c2852..abb56923ad13 100644 --- a/docs/system/confidential-guest-support.rst +++ b/docs/system/confidential-guest-support.rst @@ -42,5 +42,6 @@ Currently supported confidential guest mechanisms are: * POWER Protected Execution Facility (PEF) (see :ref:`power-papr-protected= -execution-facility-pef`) * s390x Protected Virtualization (PV) (see :doc:`s390x/protvirt`) * AWS Nitro Enclaves (see :doc:`nitro`) +* Arm Realm Management Extension (RME) =20 Other mechanisms may be supported in future. diff --git a/qapi/qom.json b/qapi/qom.json index c55776af7d35..68de12c37c01 100644 --- a/qapi/qom.json +++ b/qapi/qom.json @@ -1302,6 +1302,7 @@ { 'name': 'pr-manager-helper', 'if': 'CONFIG_LINUX' }, 'qtest', + 'rme-guest', 'rng-builtin', 'rng-egd', { 'name': 'rng-random', diff --git a/target/arm/kvm-rme.c b/target/arm/kvm-rme.c new file mode 100644 index 000000000000..42e1d1e7b859 --- /dev/null +++ b/target/arm/kvm-rme.c @@ -0,0 +1,42 @@ +/* + * QEMU Arm RME support + * + * SPDX-License-Identifier: GPL-2.0-or-later + * + * Copyright Linaro 2026 + */ + +#include "qemu/osdep.h" + +#include "hw/core/boards.h" +#include "hw/core/cpu.h" +#include "kvm_arm.h" +#include "migration/blocker.h" +#include "qapi/error.h" +#include "qom/object_interfaces.h" +#include "system/confidential-guest-support.h" +#include "system/kvm.h" +#include "system/runstate.h" + +#define TYPE_RME_GUEST "rme-guest" +OBJECT_DECLARE_SIMPLE_TYPE(RmeGuest, RME_GUEST) + +struct RmeGuest { + ConfidentialGuestSupport parent_obj; +}; + +OBJECT_DEFINE_SIMPLE_TYPE_WITH_INTERFACES(RmeGuest, rme_guest, RME_GUEST, + CONFIDENTIAL_GUEST_SUPPORT, + { TYPE_USER_CREATABLE }, { }) + +static void rme_guest_class_init(ObjectClass *oc, const void *data) +{ +} + +static void rme_guest_init(Object *obj) +{ +} + +static void rme_guest_finalize(Object *obj) +{ +} diff --git a/target/arm/meson.build b/target/arm/meson.build index 4412fde065f2..aff52a3f6eeb 100644 --- a/target/arm/meson.build +++ b/target/arm/meson.build @@ -31,7 +31,10 @@ arm_common_user_system_ss.add(when: 'TARGET_AARCH64', if= _true: files( arm_common_system_ss.add(files( 'arm-qmp-cmds.c', )) -arm_system_ss.add(when: 'CONFIG_KVM', if_true: files('hyp_gdbstub.c', 'kvm= .c')) +arm_system_ss.add(when: 'CONFIG_KVM', if_true: files( + 'hyp_gdbstub.c', + 'kvm.c', + 'kvm-rme.c')) arm_system_ss.add(when: 'CONFIG_HVF', if_true: files('hyp_gdbstub.c')) =20 arm_user_ss.add(files('cpu.c')) --=20 2.43.0 From nobody Mon Sep 28 02:09:43 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=1785266970; cv=none; d=zohomail.com; s=zohoarc; b=ZVJgjYtSiCZ9LhazS0f2MDs14WWpsgIYbtzBDImCu9u102vCuu36dNbeHK2kiwMqLstC7TFGLe5YPir3e7X1NZyBUaU74BBE1vQVA9pK147QmauZU6dP5CRujDyhpe0T3rNZbPucD6Q471LiK3c4jk4GohogSpr7xWhQFMyq04I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785266970; 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=FPcLPI8Xklacd9X4zG4SydQQX6Mfa0kQr3DHTZ+XxOQ=; b=VjNxOgrp4gBVGyahbZhpq4E/waZ5IHnMfUrj/u9ODy+daH+eQA6+AM6xQ3itZhRMqLRkhSrM0Y8Uva2q4I2M6RerdKH1ybgy8ry0PJyJog/da4HrVMf2EjS8tXcpAU9hA8+Mnvl+fCuUSvfoeeIS2XttqlB4HzpUUbEUrNDlCCs= 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 1785266970239471.49337757859735; Tue, 28 Jul 2026 12:29:30 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wonS2-00037E-0y; Tue, 28 Jul 2026 15:26:54 -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 1wonRs-0002ux-RT for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:26:46 -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 1wonRr-0001NR-48 for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:26:44 -0400 Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-2cf452def93so12059815ad.1 for ; Tue, 28 Jul 2026 12:26:42 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:b9d1:87c9:a085:86c9]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38f7f1353fdsm372650a91.8.2026.07.28.12.26.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Jul 2026 12:26:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1785266802; x=1785871602; 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=FPcLPI8Xklacd9X4zG4SydQQX6Mfa0kQr3DHTZ+XxOQ=; b=ATCR/w6qAgfOP3bOnVXUxoJI1JWqLlmA2KqnA30FpDqWDmjH8NFasvvCbwipTOUuYc PLFAjtx01VSLdLfyz3PHJawc8IYju7pAinfRQvUFKaD6zDEYWcRqepZjKlUpysqZ9Ob1 8jlsawp4CtNjUgO4lEjai7N/Kw558cVP/VhJvkNjhWQRq1fo1vhkQ7YvCIjFECZSJeY/ Gf0vOLOWE3Ui9NGt8huMAY0Utt+HAIazJvLl9Zu0NxY9UKQDVXc15WA3wwiIBE3jog9j 8K7Vd02vfJMDmm3ICPK8BG/D7aRXNYu0NtWCbEIiceUaRrGHexnl6h6isyluwy7c0GgG Rq6Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785266802; x=1785871602; 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=FPcLPI8Xklacd9X4zG4SydQQX6Mfa0kQr3DHTZ+XxOQ=; b=kpODSb7Mv/tl3y76AdDu3JxPm+GSzW0U7dByCpEtbJH9KCprj1yj52hllrF3Bc3+/+ mhGyQ2Tz+1PqI8TjWGtrsQIZbTH6oN20plYYXIMtKFl8Ng5nnvx83Uh+Usq8/En9jSOZ l+s485VKlVtfV4UJselqDkUWHl44d5q4Zomio4cPISt8x2ZxaZ9svMVWLayySdIWj1A+ acYpunOUKOQTWjiifCPHaE6iG5bsQm+epQV7+Fg2PfN1yrtfqChnjcBIYsfLEhAh7+lz b2vBUOpi8TIPy8JtQlLQgo6V+EN+mQ709SdkyAZMa7qJWq+T0GepqOSYPLlFgZkSXfqF O1Mg== X-Gm-Message-State: AOJu0YwHn4u94SKQhKXZCcnwjJU/2VpzcvegVkWG3mogzTY/kWguBgKH KKJ8/x0odxMuatM3olUypyYL7mqvgzwZdvh3rva9TSs/rDZJ8wUlRRy0amkg38hg3cF4JXTCyjB xhdgrEMM= X-Gm-Gg: AR+sD11xHKqfMs+d8jP6jXuJdYQr6HdDtmjUNlHc+f3aTgkRajzh8tpidiRWFoNTnXI xOVT/f8jBUjeQTY6P7rtpcJIFeO/J0Movo/clbgn/s21XCtcgOTRIXEssEVzHihKc2I5doeoDhI AiSjjlH2cFqNj8JBCrhOkkLAb55LJBARBLko4Zv4gqT66qZVPRfs4Fg0NJAmvO/VLCE800Vu7kQ KhdZ7idBXpdnnhrfMrHAqh3PMOz9o6noZIU5tBsS/toW9SUbAjfUGgt+Pmusid8MFCqkA37YeIF 2RH8DAhJRw6rmOGWHsJvmcEDW2tOEdu/nxrCZYMbpQ2Yzx20PxwjpSsD6efQTV8QNCoE8dLFXKZ nkrIvy/C6H1mY97ZbW4p5YHZbq/MexJor5EHSBNBt64lQKemd5UxFyeJOUiE406Ql8Oi496wlLd bDUTyGPGinCDntb4Hb/EfP0K9k8hQn3/p/rLhrny/dMXOn0T3ocobC8D1wbIJJLv/Qi6K+zych0 kBj7Ai5GVmqw5s= X-Received: by 2002:a17:90b:3908:b0:385:3ab:fecb with SMTP id 98e67ed59e1d1-38f6a205db2mr3283785a91.4.1785266801692; Tue, 28 Jul 2026 12:26:41 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, lorenzo.pieralisi@linaro.org, gshan@redhat.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v2 04/24] target/arm/kvm-rme: Add mechanic to initialize realms Date: Tue, 28 Jul 2026 13:26:10 -0600 Message-ID: <20260728192630.240375-5-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260728192630.240375-1-mathieu.poirier@linaro.org> References: <20260728192630.240375-1-mathieu.poirier@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::629; envelope-from=mathieu.poirier@linaro.org; helo=mail-pl1-x629.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1785266972391158500 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: Mathieu Poirier --- target/arm/kvm-rme.c | 48 ++++++++++++++++++++++++++++++++++++++++++++ target/arm/kvm.c | 15 ++++++++++++-- 2 files changed, 61 insertions(+), 2 deletions(-) diff --git a/target/arm/kvm-rme.c b/target/arm/kvm-rme.c index 42e1d1e7b859..eb8e65ba438f 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,59 @@ 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) { + if (rme_guest) { + error_report("a single instance of RmeGuest is supported"); + exit(1); + } + rme_guest =3D RME_GUEST(obj); } =20 static void rme_guest_finalize(Object *obj) diff --git a/target/arm/kvm.c b/target/arm/kvm.c index ed99be7fd80c..401a6f669cbb 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 Mon Sep 28 02:09:43 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=1785266983; cv=none; d=zohomail.com; s=zohoarc; b=IBxFF1v9efE4FRrFBZEgrUEO0eWQ2Lb7+QOjNOP/aiunukaXt3gDyMInk1dblSU8baIE4oQKA3OP9gVKNOsqQCBXYIrM0femzae2V3IXGMB3rhZE1hSt2PlBbwNgtlTF/EexT6e5hQsRjZ439iKdmbyvDHYbTXix96JclTrsV00= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785266983; 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=ZnODmfi9jlHeHZOeJx2IurnBfxwM7mGEa2KAs0ZmXME=; b=fV0EI46Xhol3FFqtUyPXMMiWa8kS387fJVfiU7RcY8ZrzwgpfnfckyAQWP7nX/8sREXB0xLYdR1T3ktJb9HYspZcF5XThT74ZeKCb2rbpiqlZswkE0EK2Hh5Lw825db2fg/ImjBCG4/8z2x9+oXYDq9hTZqhDeU+5eap+tRF2/I= 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 1785266983330559.343767273117; Tue, 28 Jul 2026 12:29:43 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wonS1-00037B-QL; Tue, 28 Jul 2026 15:26:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wonRu-0002vM-JD for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:26:47 -0400 Received: from mail-pj1-x102b.google.com ([2607:f8b0:4864:20::102b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wonRs-0001OG-Im for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:26:45 -0400 Received: by mail-pj1-x102b.google.com with SMTP id 98e67ed59e1d1-38dcbade417so191682a91.1 for ; Tue, 28 Jul 2026 12:26:44 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:b9d1:87c9:a085:86c9]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38f7f1353fdsm372650a91.8.2026.07.28.12.26.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Jul 2026 12:26:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1785266803; x=1785871603; 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=ZnODmfi9jlHeHZOeJx2IurnBfxwM7mGEa2KAs0ZmXME=; b=Q/mMlGakGgs2YOgDLwJ79Gl8Ur9xGRe1JVhQf+Yvn4EaA7xzAiuSFi6qoD+RgEAgQA hTaL9+FR6zUsY5HV904mUJXG7V6yUYTDa9BzSP7lsEJnlBCIesQRUAfbQ/zzRmGUu+kF vO5m76NdKOMA6xCakYjXYKMKQCxpDk7MXSaMsD0Kv0DfI1SulgWSXD0hUwWQCoPDCEqe kYQJ2GfoKC+4m+1ezSXvda3LngUrxuiAQk7zmZl/fOfnI9/pkaU1eY3L0NoQyN6JSaSf LPeUDRMtZ9HxFSV+3/RFmw1ky5z89zVrNjhKyyFdlvdVsCrcJ7WQoull9IGYz7FYqUdp FxUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785266803; x=1785871603; 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=ZnODmfi9jlHeHZOeJx2IurnBfxwM7mGEa2KAs0ZmXME=; b=ipYlTqXYgefWrgdX1+9wyrI5S2Vil9QjQ3npxA/EIeezAAJP4g7ymTlmR+j1wXAbNA w32A7Fz8ELUdJ5uhFLbGAllY8wYjszdMJLZrz/zfWVA4OHGIh5a8Yh2FkEwEXlWg8lBO PYF/FKVSzHRQc7Ix/Xh7e0K5ExPq0NTGz4zr/gWJurW0IreV7HLFRi58nn9L1ZNnQelW w84vln4iIreVXEX/YNOBU8Sc4GgOatSPiMzJ0pRivdksdDXW7RntDq7eb0Y68OVGRko9 BzpplJTaV12ytE18rtShLSjd2UHatcmd7pa2Z1XgbUnDfsE5NPDOIejdhWpn079JjG/X i4cw== X-Gm-Message-State: AOJu0Yy7UTLithhNVQncAHUrkSO3+7fxHKJWMNusQXXUYXUsMpATTh++ 7X5pyfd2HEGnU7D5JDV9kJqgztKx1hJzXgqg9N5HrQtRJpGNR6JYqay6cb1QvwU7NBc= X-Gm-Gg: AR+sD1117/5v7dtH35TFOUYgbVD/1yQLl1N/JVuUBUFTIfSwjix6t8vrUt/8nHkCpvr ztGH08bfL2NY4YFslxRVmQkUGfRLSqroMhPmt61e4XO5GF5ytL3VIYhftRE6eNd444WVdyhv6y8 Y/ySz+Ia/ieM3wP3iCzUB/5wmhE313Rc6AMv8QHN8/H6bXVombJztqaQ1c0tmFFLmvwZ53V82n1 axLrYet5whrGYpc5ZoUyUexn2l0pG3rA1PHvcSZ9bQP9JfUBzWs6az1iNNuPhYgXker/G9Hh0rH YEM7zRQYCVAJn4tVxMzoefixbOCxV7nC3mJTPXuaL+w2z3auAtR/ftYBHz81dPNN3dE2T237dku W61OlVQmN+LvyWP+FHwWDLSX3qHQ52ndd+C8Yt/DDGTKQMJNbqt90NZgFriGGDv7K2G/SO5CwUS ZGvjw4iC6FWbt6UREQJ/oFQHHjFj0T6XVrY5/I4sk= X-Received: by 2002:a17:90b:3802:b0:380:9f17:6df3 with SMTP id 98e67ed59e1d1-38f6a34e1edmr3788843a91.4.1785266803143; Tue, 28 Jul 2026 12:26:43 -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 Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v2 05/24] target/arm/kvm: Split kvm_arch_get/put_registers Date: Tue, 28 Jul 2026 13:26:11 -0600 Message-ID: <20260728192630.240375-6-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260728192630.240375-1-mathieu.poirier@linaro.org> References: <20260728192630.240375-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::102b; envelope-from=mathieu.poirier@linaro.org; helo=mail-pj1-x102b.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: 1785266984545158500 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 401a6f669cbb..33c3763aebfa 100644 --- a/target/arm/kvm.c +++ b/target/arm/kvm.c @@ -2169,7 +2169,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; @@ -2272,6 +2272,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)) { @@ -2354,7 +2367,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; @@ -2457,6 +2470,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 Mon Sep 28 02:09:43 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=1785266956; cv=none; d=zohomail.com; s=zohoarc; b=iX4Nzg16DDnDD/2pa1Haoq3kR5IhiWdnoGjFHCRwnsdRNFmdPeFS5Gke9jEh/SeHhvzEvD/li4wTNzRqaRJeBdRqU4sT/VbTb++Oyp3n5OrAIQq3M3t/1SRR7Qmgm3RJe+32u0V9p2WzgxP4ICh2q3OEDIVj4Aa/5ljETDhBrHo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785266956; 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=P0YSgKbTi94FPXUFvygJmUQ5Zpn1OBxkC+C5ko65QCo=; b=SDpFIJPkhHBlcK1e8FBHAao5UDW2QMbPLBeOzkeDUPP2xOg42TKYys8VAdiccwmdM+tpjQTdPsYlFlzJuMTQ6o3olRKIo687TQ0nhbZ4//gRA681UgnF6khEnDYwuE98TGMvFwfQTNAhOrbeGK2uO1ILiinBusiafmVFKf1RDII= 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 1785266956448853.0432444928311; Tue, 28 Jul 2026 12:29:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wonS2-00038Q-L8; Tue, 28 Jul 2026 15:26:54 -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 1wonRy-00031V-1L for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:26:50 -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 1wonRv-0001PS-G6 for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:26:49 -0400 Received: by mail-pj1-x1030.google.com with SMTP id 98e67ed59e1d1-38d489b6b71so201101a91.0 for ; Tue, 28 Jul 2026 12:26:47 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:b9d1:87c9:a085:86c9]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38f7f1353fdsm372650a91.8.2026.07.28.12.26.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Jul 2026 12:26:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1785266806; x=1785871606; 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=P0YSgKbTi94FPXUFvygJmUQ5Zpn1OBxkC+C5ko65QCo=; b=Hoe8gUDs+9DHxkt75XvhowLJeWnXaCldHYGh713I8fk+OByYrjvgSg1YBAcL6IDV8b l8tazjBayBUB+vHbz/MHq8KNfCt7ngBS7iksRQazaxS5YpI668EAzAPALVBJEPmubRJc Mb0U9kGOphq7UYljtZfct+NtY49KeOa64JRk09qQ7EzzU+kT9+1mzkSqIh6kppLi8VK2 owjghndnXTwsYGIy+8H9C3cYYhi6rdWYgkQ87zkOuVQIdutmFDFz6pa7s2kvzNv9YX4B 3yxIzVo2cMJrLTOQvlp5sUxRlolc2E1Fwox5SFOTUe9/MV126FnSNuZS8e7Z7IMj8c+L 1r6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785266806; x=1785871606; 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=P0YSgKbTi94FPXUFvygJmUQ5Zpn1OBxkC+C5ko65QCo=; b=g0tfxp8xySdfGl/HA4yufzVJZNF4sq4EAjqiryTp374HAoTjzSF5HQFrPL0kW+sLrm B7BMsBZoCuQjlVE7YoPraiVU96SKqPCdh255nW2aux99s4U2y9b/TabBs/ix3abKtlBw k1dv5yh0yOfDhIoVYo8QbpMQBAekPfGRUlcT51NH5c97ENDQgNsFIImwYsvmTrxsqpWN WsbMJU5nrRUu+G45dpL2hu9HrOEXCNeDTxQqEK8Ay1VHjLIGJKhr2dWCsXQM0lwseUjX BdGyjgHjKXyqSvNoFcVK6cR9fNBjrfys8fmDHii+IKPvEs0ZTG61S+7ltLmUb7OPMC5r iJRQ== X-Gm-Message-State: AOJu0YxZpNfGa4TYKUnqobG5Pjs50Oyqyfg00DCqvuGealJdGH+dARoc ku1pmG9EA+bkCMg/pKsqWv/mdaMLq0It81R3WNzdzwj2B5qA4TS7m1uzWP/RJ6PQPSM= X-Gm-Gg: AR+sD110JEqKczxOhYnNwaGCpn8Db4e8PElyU5tV7f1stlE/EZx2dI9QAnPLBKc1dzU B70rXLdEzhef98/NMpKs1CQL5n4egKPX4h6E6+yez3bvuhMAWKg7vryuOjF+u7GGMSNBLGlvdbk h3G4src0T3b7lEMhhjkL296aQbL7tH9oq9HbRYzqCRixNgMN6HqmJrJ4fsCzOVVuRY+Krk1Gjxt 5T3WUBbFPmIEvaMeg8Hej5b4nZpzCvSuVnB65I4qjBSZD9lBzXGlmHlOiGHcaojQ5rbE0GICwrY pBjdqERWVDbRxMW2yF6PVcvTJPs8KKtABY4VHWVCM16ccOV5exrU5Ave2nVx2WJhsXp8Zu3iqU6 OSHCPrir1jfeCLg1qnoUyWVIqg7fwBv6rXrmZ00FQ4it/Qra44ITSGHiDOIUIp7+O6qemPu9rnu kACUNBxPRIZQ2AhH2rlhCERj/oAz0M X-Received: by 2002:a17:90b:50c3:b0:37d:ee77:78ac with SMTP id 98e67ed59e1d1-38f6a3aba5emr4059612a91.19.1785266805956; Tue, 28 Jul 2026 12:26:45 -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 Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v2 06/24] target/arm/kvm-rme: Initialize vCPU Date: Tue, 28 Jul 2026 13:26:12 -0600 Message-ID: <20260728192630.240375-7-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260728192630.240375-1-mathieu.poirier@linaro.org> References: <20260728192630.240375-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: 1785266958404158500 Content-Type: text/plain; charset="utf-8" From: Jean-Philippe Brucker The target code calls kvm_arm_vcpu_init() to mark the vCPU as part of a Realm. For a Realm vCPU, only x0-x7 can be set at runtime. Before boot, the PC can also be set, and is ignored at runtime. KVM also accepts a few system register changes during initial configuration, as returned by KVM_GET_REG_LIST. Signed-off-by: Jean-Philippe Brucker Signed-off-by: Mathieu Poirier --- target/arm/cpu.h | 3 +++ target/arm/kvm-rme.c | 9 ++++++++ target/arm/kvm-stub.c | 5 ++++ target/arm/kvm.c | 54 +++++++++++++++++++++++++++++++++++++++++-- target/arm/kvm_arm.h | 10 ++++++++ 5 files changed, 79 insertions(+), 2 deletions(-) diff --git a/target/arm/cpu.h b/target/arm/cpu.h index 03a30afcbed1..c7927036360c 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -1055,6 +1055,9 @@ struct ArchCPU { /* KVM steal time */ OnOffAuto kvm_steal_time; =20 + /* Realm Management Extension */ + bool kvm_rme; + /* Uniprocessor system with MP extensions */ bool mp_is_up; =20 diff --git a/target/arm/kvm-rme.c b/target/arm/kvm-rme.c index eb8e65ba438f..5d6814fcf9e5 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 33c3763aebfa..b4c6da1fb9f3 100644 --- a/target/arm/kvm.c +++ b/target/arm/kvm.c @@ -2015,6 +2015,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) { @@ -2169,6 +2171,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; @@ -2280,7 +2305,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; } @@ -2367,6 +2396,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; @@ -2478,7 +2524,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 Mon Sep 28 02:09:43 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=1785266971; cv=none; d=zohomail.com; s=zohoarc; b=YfbjtTh7OZso+Em+bgv7yWljI+G4+Qrzcw69IeHtmt2+KKIYPMB39Nrs0lnJlkPeUc1DDLvpg7nbpQbsLSCjVp1GPGNoU61kXLztmfdlqbOZGf9QoHvMGxp6okhG3qE4BFPp0/oX+x7gMhiBM9pPujqCmzYgfloz8g+aPTahUKw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785266971; 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=BW+koEYMGeh3Q0Il0QE3jfPQEhQaRsizJA+FKY6y1jw=; b=hXAg1qvJIPBV5Cc/1nOr/u2+0tbVoEVpir21+A2kSITD7D4x+yCafJZCKcgjzEr74Wt8JoRy/cwqu5kjiJIU6BeCWqRMSNQlvsR1b+SQGdQ/AmAMwCJzp/uAh4hBQAU824j2m2vlwXbof9mLnxBQVl8Z0C3gejQok5kS7qQRsuM= 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 1785266971264202.96949239888716; Tue, 28 Jul 2026 12:29:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wonS1-000376-6w; Tue, 28 Jul 2026 15:26:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wonS0-00035I-1F for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:26:52 -0400 Received: from mail-pg1-x52f.google.com ([2607:f8b0:4864:20::52f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wonRy-0001QT-E6 for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:26:51 -0400 Received: by mail-pg1-x52f.google.com with SMTP id 41be03b00d2f7-c9e0b89e228so65862a12.1 for ; Tue, 28 Jul 2026 12:26:49 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:b9d1:87c9:a085:86c9]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38f7f1353fdsm372650a91.8.2026.07.28.12.26.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Jul 2026 12:26:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1785266808; x=1785871608; 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=BW+koEYMGeh3Q0Il0QE3jfPQEhQaRsizJA+FKY6y1jw=; b=Xwy8w1sCVSmelc2f89Sv6ZKM2f3hllhCL+BjDg/gvkJLYbIeoWBGVPY8Hr/yZYfRMD hJyZguhPwCkP1mA+BdlBgy1GVcl3zn5O9ebBCbLs8/QqywpCr14843XVgCgl2Ed67j7r b+jnnFWGANziRk5RbigoCTECX+lYiex1eHteTBErPhbMop0kSoUSIzDzvAVdiEaWoS8E Ji7SNGVR9dTEO3dXSZWjiytGBAVA7XVE/JSZMatYMtdNAuHjhXVZkHZjFRAaGTV5C/jE 0Teblr5mMXfLXLfihiLnnnmnoFs74TwtH5c1WSu3XaAN3/ObocHYdY6DBXYGZbRVu2SA uS5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785266808; x=1785871608; 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=BW+koEYMGeh3Q0Il0QE3jfPQEhQaRsizJA+FKY6y1jw=; b=Nr4ZXoOPgQhv8FoSilMP7VKIaWOZhkywIWuML2Rfns1BRYe/gVtEbKh6MzbGn/XrOK A3T1HM9AFLvkGv+UbM8Z4LoRSj1DNsXKCUzMQTB31IPnOvowv2bueHV/UtHCGJ8YW0SI gyvPuMFmqx5tt+gPlRfjgcZ4KFNV6NWosadr9HvVMOZtxXYVvyehxpBXTQgp51BNRqZJ qHUj6S1MdH8/2Ixfl0FpXIGjf+RweaoaiRkPml2ZuoNhXZXcyZN4gGzTsj/KsurgQvck Qm+e7Re9zXDx6kvg531HwOnDm48HSVHoU2kKLWnIRpsdduFxPDg+l5OP3UGDcVG+pVj3 n9sA== X-Gm-Message-State: AOJu0Yyo3KGHzaezEWmq1r39sjfzWAvJekjHYtvPVCWjOLQW9FjyYpPa KR9c2Dybb3NOIjbTZ4fx9VYtLPZiImIgXJ57YHNEGa1T84wrujj9y/LUTDAwW+Amfbk= X-Gm-Gg: AR+sD11Jif93M0SL4/J20rXF+6LaC/oPrnUeXIjhccNCqZw3VdLajoe7RLGNrlhWlHU Yp/t7yztB88JzfGvLQorOU06G7URdcQdQ7pWfprhwgond7nNGXsydygg4fvrTokiA4RBKg65ujR xf0HNxDo16OYwIttWBRCm9Y/vmjrLpATs+f0sTcwh0gKScvgVxhfBc9loc9tWh4E1vOiKqtzHdJ HnvNcC/huhQZ5Zpet43fFSg7S2NZJSc5B8j2Agho0l+gIZB3cfx60L2+3GxoSvV9vHueRW53SSu jayFuMfF9fyCuHqf5wLJKb5PvbOb6UKOdqSMtTZIWF0fzaPAepL/LaIZQPNB+WMGOB1k4LrNvxN eIbtlfwNvDN1HxXgerjqv5o+AJUTW6FLGhCkSXDmc9Yn7Ze9nB5xRN925z5MQ2R5iM/xJmT5zgg +Fd9ta2xPCsVwEi3IrOofzBppsc4teIYKnhM3sALYMZ8ynM0yEJ/7/5g6PUfgNjo0sHmfDzMFQb UfjUIuO1DjeNs0= X-Received: by 2002:a17:90b:180c:b0:38e:5741:5173 with SMTP id 98e67ed59e1d1-38f6a4205e1mr3934859a91.29.1785266808420; Tue, 28 Jul 2026 12:26:48 -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 Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v2 07/24] target/arm/kvm: Create scratch Realm VM when requested Date: Tue, 28 Jul 2026 13:26:13 -0600 Message-ID: <20260728192630.240375-8-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260728192630.240375-1-mathieu.poirier@linaro.org> References: <20260728192630.240375-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::52f; envelope-from=mathieu.poirier@linaro.org; helo=mail-pg1-x52f.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: 1785266972356158500 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 b4c6da1fb9f3..d86e66e056b9 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 Mon Sep 28 02:09:43 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=1785266904; cv=none; d=zohomail.com; s=zohoarc; b=DAKP0ljKDFRjv9o6HSov3mo5nl2+NqK1dkwfruFhMnTVK3XqfDTyqv0kVP7ZG3leAQszDRrkKgOOvzkP/pa2T05+q+sVkeSTnGvcN4F4M3rYGkP5G+nYJXKNEafn7lWursRBBv8x9OVHW/zzzGcQ1OgQXKQjLr3ol7XCSvryMtg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785266904; 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=mFQLzsllffyN31O2DXNS30O6LLhjzrmI1+U27crjJrU=; b=P6S2emfTjWCYpjEXuJSuL/erLpPOGjhRLFVchxYVPJvoRa6FRD5ssuBE49F8Y6pSmBk17PeZafIoE0GxYcuR5isGIvso+2kkuCWLcfwjc1x6UD95Lya5WYsjvtFsilfsS8iT/L6QVu+fYRKOImAiLi8C37pQdPZ3NroF57jThGE= 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 1785266904605810.2741252906051; Tue, 28 Jul 2026 12:28:24 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wonS4-0003B2-Sg; Tue, 28 Jul 2026 15:26: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 1wonS2-00038R-Ix for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:26:54 -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 1wonS1-0001S3-01 for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:26:54 -0400 Received: by mail-pj1-x1034.google.com with SMTP id 98e67ed59e1d1-38101f85591so1268786a91.1 for ; Tue, 28 Jul 2026 12:26:52 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:b9d1:87c9:a085:86c9]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38f7f1353fdsm372650a91.8.2026.07.28.12.26.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Jul 2026 12:26:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1785266811; x=1785871611; 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=mFQLzsllffyN31O2DXNS30O6LLhjzrmI1+U27crjJrU=; b=UHvSYU7BGMdkvjItJpb/WE6VMxA9x79L4smxoMWRqWRdS7gGWcY1+isut44Is6hf/2 vex/+1GNGHltvT2SdSR52AC8tUcVjY0HCow7F7pyOnrXYeetZ6Rke5/8H1qcP9n59rW9 TTGlyJWjKyNUSxFiNOO9m/Fr4585ah+LaUTS+A/+SgKAHZp1eElBy0TXJhA3/ebN2FQ4 8CmNWfe+XEh0XSTu12g8j6nhR4Lpr227ZnCsGtfIZ0u3GckvAMCGzGjmlJJzO0CMTm06 qE+q9w10tGbCREpGd9HYgEj08Tz5EBDiRVwwE6yCaGMdSlQNp77/B6fT9oQ3eEnb68sb Jj0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785266811; x=1785871611; 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=mFQLzsllffyN31O2DXNS30O6LLhjzrmI1+U27crjJrU=; b=BUOGV2Z8kOXmwGm6R6OJdVC6iwwKX6Sk91Zk7820DwQBuaX81Gbe+1hGCOAqGzuxer j5HUK6/bNr7tmSsXAQXmnL/ZJjB75lR0CTvrdaYPzSOzsIA/vK/D2HEHpmKauaMzdQYr 7S/arMGMoFYkDoQ1tFQHx1SoTVcooriA5QWntIFM6eG3ov8s44RphNmsTvcDeP9ozBlB v3LRwpYvmnMNj3olUOpfXjSxT2GZ8M9IAgWlGGzVKmDjG2g997WFiypbDRIzihCc5C17 DEILNCpsim3UIWu749Juwam628QruebUX2A7oeLqNYf2itSw7LvXs3EDZSa4rJiLX3O6 2BTA== X-Gm-Message-State: AOJu0Yz6BR+yBcxpcQkq0I7cmaNn3T52Zny/jpTBezQcO2yZbeKY8iqu 41okMy9IwEMGJRJUaAPR7HjW9Mc7whTW1HR2bct7GJV6dbtdbbqWGawWWXtshnisPWs= X-Gm-Gg: AR+sD10VAsg7bv93gZaZAmddztRioPbm5nalz2Cr+paMIkH+1d7sc7vhVBFEWRBxpMj AgbDDknaDGoO5ztIFxcZR5VCGZ3HStCQ1fkQ8+I1C+ioQPEZKiOk/3gpsUPuwLW/FMO1nB/CyAa ZmTvUbOqNsBdUL+xzqD9yJdAMOXJ91JeV1W1a63WVfMvokc1gEJ09a0tRcjIpFXZEVHXqf5GXtE TF/W1fzLqDyL2+16ntsxAatmPZYT33lzNBN7VkwV594gjAn0b7G6rSe7U83O3uL3Duxhk1F1bww dWyuZpDVzbo4oknq4npSEWGQrQW27sUiMc+c4SIJx7cOPMbVgLC81FOKee28rwRxvxXdqh6GIvr pRhfSWk4VNhHh9oo8gFEornUDkaAolNbSh5DHbUCAL/yyu8NWDQdp4k6rU0mK+zCYgiAviVh0PE 2aqkjTVTsKJWfhDmOE69GtgAn3EzCi X-Received: by 2002:a17:90b:582d:b0:37d:a52a:ff12 with SMTP id 98e67ed59e1d1-38f6a30c7ddmr3585247a91.10.1785266811540; Tue, 28 Jul 2026 12:26: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 Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v2 08/24] target/arm/kvm: Use kvm_vm_check_extension() where necessary Date: Tue, 28 Jul 2026 13:26:14 -0600 Message-ID: <20260728192630.240375-9-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260728192630.240375-1-mathieu.poirier@linaro.org> References: <20260728192630.240375-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=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: 1785266906003158500 Content-Type: text/plain; charset="utf-8" From: Jean-Philippe Brucker The Arm KVM code can return different values from KVM_CHECK_EXTENSION depending on the VM type. Use kvm_vm_check_extension() where necessary to ensure we get the right response from KVM. Signed-off-by: Jean-Philippe Brucker Signed-off-by: Mathieu Poirier --- target/arm/kvm.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/target/arm/kvm.c b/target/arm/kvm.c index d86e66e056b9..ca25b707a0a8 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 @@ -1913,7 +1913,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 Mon Sep 28 02:09:43 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=1785267060; cv=none; d=zohomail.com; s=zohoarc; b=fvOZ/ybeRmxGUzIS2+1ojxtNt+guZ3SSvTTkE5hVGiDFqqZ768h82OHh49H4QhpSzGfduDvKXa+No9WqhPMZeg2110C7s39wHIi0EVVM38ds8OsKKEe9GcCc+cs8dQSFq86Tm1MLCby08V6Hi7Ff3a2YNqV1RnATvMKHhYk4Rz8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785267060; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=0POncQiCikAc5guGwIPh9olnmP/V6mz621ilQVpgEaE=; b=SnvnUYdTPir/zYgUeX56fjpbR77T9aTA9XHhZYDPyRsikyD2wHeWupNAqPQaZXONLv0YNcDcdhtxIyvVL+Y2Bluw/XjRmh3i5fHCqirUrjIR4EmWB1yAKLhPQYTtgwyJwo9fQlmc4HJ5Ag0oKLnv0PKsZ8nhloGk2mv7AUb0zZw= 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 1785267060625441.999776578941; Tue, 28 Jul 2026 12:31:00 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wonS7-0003D0-5V; Tue, 28 Jul 2026 15:26:59 -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 1wonS4-0003Ae-FU for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:26:56 -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 1wonS2-0001Si-Of for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:26:56 -0400 Received: by mail-pj1-x102d.google.com with SMTP id 98e67ed59e1d1-38e3efab7e0so210545a91.0 for ; Tue, 28 Jul 2026 12:26:54 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:b9d1:87c9:a085:86c9]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38f7f1353fdsm372650a91.8.2026.07.28.12.26.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Jul 2026 12:26:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1785266813; x=1785871613; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=0POncQiCikAc5guGwIPh9olnmP/V6mz621ilQVpgEaE=; b=Voa+mYUgkciLtw/hje8JRyZ+48z/bbRmGUuqJEGr22YxYXIG3U+ddcERfHPjbFRrYQ j0xTZLMF7eRKHZ1Albwe1lGRekiBDVGgC6bAb1YJOsGXhWudxJm+hi/m+qJGBBOdk+7X Cy+z//so7YtmkrW/VBYj6TJrQj5JFc5r+394oMhgsDQOLN/tD6QhfsuzHo/rBACkb901 NTezi+hKz63fgTGDvdtLFETM8me9KkHBG/4W9outLjxt5HBCULswqILYDhv5jeyCPBmh SoLhCJNNemt1L+zzIU78ZwlbU33Cj712kwant93o05Q9U4BCJw/4Lp0plE0tS3RTRSsY 7C3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785266813; x=1785871613; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=0POncQiCikAc5guGwIPh9olnmP/V6mz621ilQVpgEaE=; b=STgaPIKFYge14AUCazYS/Ek66JUryimzFqG+zOdB1Lg6jIrkM1G+HDORjPQ81K1E02 P2ZXdvBjBdOA6mtu/B+quJkqlTptKmip/SKdRxTwJPR7T8gga7u0kR7XnGEaytGDRUop pyRsaUZLpuRYqjX5HiiNieW2d8B02wjAlaFLl3ZiE8k+/oqbuddVeDv1kHu5xJMzBkAz tmkkdzUZ9fvMEA8PnpahyILRHzu2RCUZ4C1zu0EpVPAQp4fPXAZ/HRqJlvMFr3XpKMe6 DMGsq7OlqRbzMzOLdZ5BA0UAzxGRBaEOGLR7Xjp5rxCmPEb1QhoFFiWTo11qqOD3uyNc Y3aA== X-Gm-Message-State: AOJu0Yy2+z6w++e06B1BYCnxuPB7atVGOSbu3x/7yqbAkTFKnBvH1u9h oGYhWczQI/B2LtXCRs6OrKzMe5gXgQVEoJvR1GKm/i5Rwfhb0A8dEOKDy7QZ2F7z0wU= X-Gm-Gg: AR+sD13a7uTnsCqWqHPVLywlhWZ1rmf97Dw6OZrPm6H0dG7lmeEE5pXtqO0N+2Tehca TYN+Q0ZF8HVzKkTACRlnJiyTm1RvtcCvYZRWuhugDPtP+Gh4iEBPKcjlICCqtSuxW34DvYrpkOq c2yyo3N3PthDHnkbmt/SLIS5EkE+G+JjGInd2IwxsqTUB5SmGA0/rabuTM5m+MGCU1vM8S3Cot5 T4594fuUKGOOHRGQ4ueQZdU6mwBshH/2sD5UGfdjGXlucFfZ9DYMm6dzHs1mKnR2jGDhiZUM3XM bj4qsVQuBVWvDbwiD/ng9IbTb0xz93Nat4dt4Qk76i47z8VcAv3Dc9lY4NrIIY57vahktfdMry1 e7zJlLPUqHa9BPz/mkQwgEH1nI0L+n7GOmbApWrkAWojf5SuvoLindcoTYbjiVLKXUVIbIw/H3v AVxmxlH84O3O8UdZcbCcFc0v/Zbl503ayB9WGZrW4= X-Received: by 2002:a17:90b:1b05:b0:384:927f:3db9 with SMTP id 98e67ed59e1d1-38f6a2069fbmr3543414a91.1.1785266813372; Tue, 28 Jul 2026 12:26: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 Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v2 09/24] hw/core/loader: Add a ROM loader notifier Date: Tue, 28 Jul 2026 13:26:15 -0600 Message-ID: <20260728192630.240375-10-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260728192630.240375-1-mathieu.poirier@linaro.org> References: <20260728192630.240375-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: 1785267060870158500 Content-Type: text/plain; charset="utf-8" From: Jean-Philippe Brucker Add a function to register a notifier that is invoked when ROMs get loaded into guest memory. It will be used by Arm confidential guest support, in order to register all blobs loaded into memory with KVM, so that their content is moved into Realm state and measured into the initial VM state. Signed-off-by: Jean-Philippe Brucker Signed-off-by: Mathieu Poirier --- hw/core/loader.c | 15 +++++++++++++++ include/hw/core/loader.h | 17 +++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/hw/core/loader.c b/hw/core/loader.c index 5cbfba0a86d2..b3d769bec5cb 100644 --- a/hw/core/loader.c +++ b/hw/core/loader.c @@ -74,6 +74,8 @@ #endif =20 static int roms_loaded; +static NotifierList rom_loader_notifier =3D + NOTIFIER_LIST_INITIALIZER(rom_loader_notifier); =20 /* return the size or -1 if error */ int64_t get_image_size(const char *filename, Error **errp) @@ -1201,6 +1203,11 @@ MemoryRegion *rom_add_blob(const char *name, const v= oid *blob, size_t len, return mr; } =20 +void rom_add_load_notifier(Notifier *notifier) +{ + notifier_list_add(&rom_loader_notifier, notifier); +} + /* This function is specific for elf program because we don't need to allo= cate * all the rom. We just allocate the first part and the rest is just zeros= . This * is why romsize and datasize are different. Also, this function takes it= s own @@ -1242,6 +1249,7 @@ ssize_t rom_add_option(const char *file, int32_t boot= index) static void rom_reset(void *unused) { Rom *rom; + RomLoaderNotifyData notify; =20 QTAILQ_FOREACH(rom, &roms, next) { if (rom->fw_file) { @@ -1290,6 +1298,13 @@ static void rom_reset(void *unused) address_space_flush_icache_range(rom->as, rom->addr, rom->datasize= ); =20 trace_loader_write_rom(rom->name, rom->addr, rom->datasize, rom->i= srom); + + notify =3D (RomLoaderNotifyData) { + .addr =3D rom->addr, + .len =3D rom->datasize, + .as =3D rom->as, + }; + notifier_list_notify(&rom_loader_notifier, ¬ify); } } =20 diff --git a/include/hw/core/loader.h b/include/hw/core/loader.h index d9431e8a8d12..94cf6ad2e26b 100644 --- a/include/hw/core/loader.h +++ b/include/hw/core/loader.h @@ -342,6 +342,23 @@ void *rom_ptr_for_as(AddressSpace *as, hwaddr addr, si= ze_t size); ssize_t rom_add_vga(const char *file); ssize_t rom_add_option(const char *file, int32_t bootindex); =20 +typedef struct RomLoaderNotifyData { + /* Address of the blob in guest memory */ + hwaddr addr; + /* Length of the blob */ + size_t len; + /* Address space of the blob */ + AddressSpace *as; +} RomLoaderNotifyData; + +/** + * rom_add_load_notifier - Add a notifier for loaded images + * + * Add a notifier that will be invoked with a RomLoaderNotifyData structur= e for + * each blob loaded into guest memory, after the blob is loaded. + */ +void rom_add_load_notifier(Notifier *notifier); + /* This is the usual maximum in uboot, so if a uImage overflows this, it w= ould * overflow on real hardware too. */ #define UBOOT_MAX_DECOMPRESSED_BYTES (64 << 20) --=20 2.43.0 From nobody Mon Sep 28 02:09:43 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=1785266921; cv=none; d=zohomail.com; s=zohoarc; b=Beeu2V3fRomoU3zZgL5Izro1wzPUUGbIU4qtQNo1dOUT0ZjAKKiphF8bYG49bQNiGPj13dxEqmN1cR8t75fOVarpd0na97E7sscZatSyolA7Ruc8PhJidf3bJm9eY5pUfna/gPdIkQHdcEUBf+iqCss3S5Il1JHrkDqaxKjLu1w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785266921; 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=eK8Ckt90ew461zSdg6LQYBpQfbUxeqNFROzikiI270U=; b=bkdfwDzCQiBZSlFznFuriuceWYINhuT0/3hi/ttKwvAG7BkVVQKDbHjMTiG1F3CPx/a1dOPFiPuBCltsfF8PSE8vwja8J4UgK86E6dS0TkQ+/5y8/Y3608NuQJM2UXYZotuKtOZwDx+3hcZpl5x5Uxy9n1zC+3UU/oz34vHG620= 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 1785266921650380.0507504870244; Tue, 28 Jul 2026 12:28:41 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wonS8-0003Dm-KJ; Tue, 28 Jul 2026 15:27:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wonS6-0003CX-IG for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:26:58 -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 1wonS5-0001U2-0C for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:26:58 -0400 Received: by mail-pj1-x1034.google.com with SMTP id 98e67ed59e1d1-381b831d535so268740a91.0 for ; Tue, 28 Jul 2026 12:26:56 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:b9d1:87c9:a085:86c9]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38f7f1353fdsm372650a91.8.2026.07.28.12.26.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Jul 2026 12:26:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1785266816; x=1785871616; 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=eK8Ckt90ew461zSdg6LQYBpQfbUxeqNFROzikiI270U=; b=vteTltXjsgFHtcQ9hPrxkQrg5ljKCwZ0rVBNlyP6GayRXAp2ngChhP8uLD24axaz0a TJ4o8FbiAx+D1u/PngGdBm+DDbTuGagka4/3T2mSJPsXwY5y6m9PJkss4pFcLxbAQ7BN j1ySxRQl3AqNMsowzd/ggkZSkcadc2fO9gTOnnars8QzXZDt/2KmeaslsSAmd/DVOltd gJZDfynWj6cvi3+eByMNr/zwKHqWH6+rqIx5/VztYqx5T2P++bh2nh12aOaeN44MuBEC WHHy6uJmmUKKfHTGJv7lSipy20mddJOFQ25JrfYqE94K99feR/GkJ7FHs4YZRptzVBSe VCfg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785266816; x=1785871616; 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=eK8Ckt90ew461zSdg6LQYBpQfbUxeqNFROzikiI270U=; b=TWPaw47dEcBkFAFOeYGBE4sXvXlNHwp4SSg2OwJIGWxLDzghIH4LERATdZObViRt1k hn13rnKYATXQFtFaQAHXvnYhnM3TlpzKUdPp1+6GpOjE1+Zs/j/FNIgnWTr+ph0DgLqO T2p8GlM4gF5aX5VASpHPFQ9D9w5vi0mwtjXCAydt4FzGg0HvmBEaQsx0+64DWO4JlhR2 0pFMe09mx9fEmqAKivRIbMjeebFlS36vGtn08pAaH+bsBdGz5FHcOF94tT0TcuYOC6Oo 769dxOC4zbTge8W3tPd+BDDMuE2StD53zKjh8LP5EPm1gv/lm8jADCn5L17wFUxhHMVw z8wA== X-Gm-Message-State: AOJu0Yyk95KQo3pO9vvepEvR1eKblrA7QoLZoxtETXfTCaT1Gd7bmkP4 a97zrSyaIHBG5qovcqgQ+c0S/yUSnMfaVvShXtzmqNm9QtyBCb9JSa1ElnlGL/yvrjs= X-Gm-Gg: AR+sD13ZF+c1xmFNJVH4+gConsOYBALiNgMQNM7N3A47hPjFwgEZbQWQ+37uAjXRJCp IC1pKZtrLNuNZgdAFz0EvUcUmwEenrSMmlISPljWgl8rn1jSTfKsM+TNav0BsK2IRLVTYSx6iJh 0fqLyfGZHB8gZEPIHV5ValuAz3EMA54AuE2vaGTqGKjGTpwcLngca/5mxeKFM9p8p3H4Tv47YEJ 4R0AySnaPXCjt1CEn+bT8XSzskmYUpvACFFF7meKeNSFB7t4S/ArRntXHqlxeKO2gK4/m5Y+ocY 59IGYS5NbSg3fU77TPDrIDtW5qHeGA3JiHbeXy5P4Inx0XhjdifyObLeC40Lw+ygG8cCciU2iEH fXhtzFaXQ4X5Z6UAw6FJuZhNbhX7wVIGV+MHsdlaW7Ajk38ok4ihT++4M3U2LfzsGhZEcIK1Kyg x7X/Pt7RsV1n9HB7m1BYgIbAorKgZkyTyPT2o+QQJJxr2PRHQWHcli+m3bq2bXJ7bYQhR8Gz9z1 sk+ZNkGfIONSTY= X-Received: by 2002:a17:90b:6cb:b0:38f:26c7:165e with SMTP id 98e67ed59e1d1-38f6a3d5b08mr4041584a91.9.1785266815568; Tue, 28 Jul 2026 12:26: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 Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v2 10/24] target/arm/kvm-rme: Keep track of images loaded in Realm memory Date: Tue, 28 Jul 2026 13:26:16 -0600 Message-ID: <20260728192630.240375-11-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260728192630.240375-1-mathieu.poirier@linaro.org> References: <20260728192630.240375-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=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: 1785266922466158500 Content-Type: text/plain; charset="utf-8" From: Jean-Philippe Brucker Add a Rom notifier to keep track of binary blobs loaded in Realm memory. That way we can deterministically calculate the Realm Initial Measurement (= RIM). Signed-off-by: Jean-Philippe Brucker Signed-off-by: Mathieu Poirier --- target/arm/kvm-rme.c | 52 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/target/arm/kvm-rme.c b/target/arm/kvm-rme.c index 5d6814fcf9e5..10bca9a944ba 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; + AddressSpace *as; +} 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->as =3D rom->as; + + /* + * The Realm Initial Measurement (RIM) depends on the order in which we + * initialize and populate the RAM regions. To help a verifier + * independently calculate the RIM, sort regions by GPA. + */ + rme_guest->ram_regions =3D g_slist_insert_sorted(rme_guest->ram_region= s, + region, + rme_compare_ram_regions= ); +} + 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 Mon Sep 28 02:09:43 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=1785266845; cv=none; d=zohomail.com; s=zohoarc; b=I0bg0VABnIHvh87dbxMpNUk5NK/vNf0Cx0VmwMZWQsaVmJyC1LZ6OHtV+UaiSdPeC4FEA9uGR3ORcm2EiV+Ft1L6xLhh1u/Kz/OBOkGKj1d0IOqKoYcTxv50Wh9QKs//1dy560mtBK0rpZZld/NAPaUYgmKbldFFJa/GzN8VBD8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785266845; 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=y9/pLOprN9xy/YNaMUPV2tlXHH+UzLYmz6W1kUG4LRc=; b=MI91oDn/l0R+d0YJR1f/hfokK0DIxYPGt+nBMcRjDkI2K5ijFerQF6+V9zOmWsdJ9t3QMUceidPVAAle4hazXSUz6fxHFsCh2n+z/L3vAu7fKdvi3L/F84Fqp0K5mlfYVic/xwOMgraqoEMRFihE4JEdeO1uGWqcyvN/BkUqlDs= 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 1785266845477897.0851706736456; Tue, 28 Jul 2026 12:27:25 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wonS9-0003Ev-TF; Tue, 28 Jul 2026 15:27:01 -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 1wonS8-0003DX-DM for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:27:00 -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 1wonS6-0001Ul-M9 for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:27:00 -0400 Received: by mail-pj1-x1034.google.com with SMTP id 98e67ed59e1d1-38deea72eebso223431a91.1 for ; Tue, 28 Jul 2026 12:26:58 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:b9d1:87c9:a085:86c9]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38f7f1353fdsm372650a91.8.2026.07.28.12.26.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Jul 2026 12:26:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1785266817; x=1785871617; 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=y9/pLOprN9xy/YNaMUPV2tlXHH+UzLYmz6W1kUG4LRc=; b=f0hxXe4oRhE3GzMMohyhYEf4gUtwqIQX5xXaSy3aTuQfkKnUriwG031jk7fQ4pfVfH lSfWpOKpaN9RHgk/gEJaOJHfHgISu40C9AHE4SbV9cjyJA5CD5U3g5qSlCbpYIKQpt3V ZN6YAu6fDM4SefYjKYjAEmGAs4eT43L1qQ+vM0K8gfzhLkJlcKAZIm0HTAnwBeE/jBtd 1/28409HnpN3EOotDZCpyQ2OsFIsBou+kltEW3vuMx9smqob6jzoXsCVWEySgI7oFFXI jbAiIeEcLS9gUBDxdfO4IceuEWgWaxT9lXj8cgE8gvk6JrYzAinNL/JqERPDehmbJ5za QVww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785266817; x=1785871617; 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=y9/pLOprN9xy/YNaMUPV2tlXHH+UzLYmz6W1kUG4LRc=; b=dyBHxrLCXAT2pHZuV4Fgwda8761meSPcV9NEUWqJEBpX8sLAZmMMTtAQtCrMgHynEy iyrHTuwHosvGlDc32DjlBI+r50pk+XnNwxm2VBxm9b99trOilJSY10f1dEC7M7yYP2zx A97CDDjYmohC/H/reE3IMXLoH+WXpEaqcCXjP/DToqUdstMncv1jgq4BsKBVm2uDXGW2 cFpCQ5KxZgZsk2W5y1dq492y4AijB5/LtcY4dxEv960Z6gQ6oUkwWzQynoSufKGnPiHZ crHzzNF6WbeuPciHx46iIiQhSPyl5pAXYE3KdzSMB/21u6GgArmwfA3Cvx4JBBFGpore dLvQ== X-Gm-Message-State: AOJu0YyPgiLb6ypcqCaSrM012SwtrYZSgyeoZ5EyGEl4HjFH3+O2Q/NC cKXrX0brSh0VU97B9tnhPIHpNBZNW+B8rEXt+ov0V3BgpV7mEsPQGjXPZ13spw5WAJo= X-Gm-Gg: AR+sD1117CYYGPSSmQhCfgGVq6MpSG+ppKgCJ13iBKRx6JYiujq5U/8ONeYlvBWaTGE 03XSIWs8ncHAYJWrJ4gZ+7qG3GQemC5EpXSz6m6JRA6biK8EX0BEVz/eJrtVNRQgyM/0AEGaor1 QtfIy4KcAM00AOXzmmmBiE1p+vmmDf0IgnVA5sgjQTZXKEEaIlM+oDbmzRChThA8oLvGbpaRLvt OUkI7fk9ZmZCKYv5kc8q7QuZJZbLaXde2AoH7UX97SecfD5Kn3L4+z9xHMP1upRPaHyvKIpladH zPe7+ovW6TD9iEGg6buWIZUR8oUEx+hiFA2s9w/30KdkVEY4tVU02CJnArQkWLB+Jgml9sCHqQJ wyXCVtdq102eS8EhEu41cU56JHdG1FFNJsLJF4XRG0H4LLySi0WrfXRz+Bh4rSeiTvvDQWBtaZu mBnNE2hHABw1olzrO6q4lgRghLbZfc4PUCE43JNuuTTowhdWQIQlIxJGYVA+O0F1Q6M/v3H36rj SN4p54kzRuumd0= X-Received: by 2002:a17:90b:4b50:b0:38e:659b:f366 with SMTP id 98e67ed59e1d1-38f6a27d798mr3746529a91.0.1785266817324; Tue, 28 Jul 2026 12:26:57 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, lorenzo.pieralisi@linaro.org, gshan@redhat.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v2 11/24] target/arm/kvm-rme: Populate Realm with runtime images Date: Tue, 28 Jul 2026 13:26:17 -0600 Message-ID: <20260728192630.240375-12-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260728192630.240375-1-mathieu.poirier@linaro.org> References: <20260728192630.240375-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=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: 1785266848376158500 Content-Type: text/plain; charset="utf-8" From: Jean-Philippe Brucker Once the Realm descriptor has been created, tell KVM to transfer runtime images (kernel, DT, and rootfs) from guest memory to Realm memory. Signed-off-by: Jean-Philippe Brucker Signed-off-by: Mathieu Poirier --- target/arm/kvm-rme.c | 56 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/target/arm/kvm-rme.c b/target/arm/kvm-rme.c index 10bca9a944ba..335ad60d0f3b 100644 --- a/target/arm/kvm-rme.c +++ b/target/arm/kvm-rme.c @@ -43,12 +43,68 @@ OBJECT_DEFINE_SIMPLE_TYPE_WITH_INTERFACES(RmeGuest, rme= _guest, RME_GUEST, =20 static RmeGuest *rme_guest; =20 +static int rme_populate_range(const RmeRamRegion *region, bool measure, + Error **errp) +{ + int ret; + void *host_ua; + hwaddr size =3D region->size; + hwaddr base =3D region->base; + hwaddr start =3D QEMU_ALIGN_DOWN(base, RME_PAGE_SIZE); + hwaddr end =3D QEMU_ALIGN_UP(base + size, RME_PAGE_SIZE); + struct kvm_arm_rmi_populate populate_args; + + host_ua =3D address_space_map(region->as, base, &size, false, + MEMTXATTRS_UNSPECIFIED); + + populate_args =3D (struct kvm_arm_rmi_populate) { + .base =3D start, + .size =3D end - start, + .source_uaddr =3D (uintptr_t)host_ua, + .flags =3D measure ? KVM_ARM_RMI_POPULATE_FLAGS_MEASURE : 0, + }; + + while (populate_args.size > 0) { + ret =3D kvm_vm_ioctl(kvm_state, KVM_ARM_RMI_POPULATE, &populate_ar= gs, 0); + if (ret) { + error_setg_errno(errp, -ret, + "failed to populate realm [0x%"HWADDR_PRIx", 0x%"HWADDR_PR= Ix")", + start, end); + break; + } + } + + address_space_unmap(region->as, host_ua, size, false, 0); + + return ret; +} + +static void rme_populate_ram_region(gpointer data, gpointer err) +{ + Error **errp =3D err; + const RmeRamRegion *region =3D data; + + if (*errp) { + return; + } + + rme_populate_range(region, /* measure */ true, errp); +} + static void rme_vm_state_change(void *opaque, bool running, RunState state) { + Error *errp =3D NULL; + if (!running) { return; } =20 + g_slist_foreach(rme_guest->ram_regions, rme_populate_ram_region, &errp= ); + g_slist_free_full(g_steal_pointer(&rme_guest->ram_regions), g_free); + if (errp) { + return; + } + kvm_mark_guest_state_protected(); } =20 --=20 2.43.0 From nobody Mon Sep 28 02:09:43 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=1785266971; cv=none; d=zohomail.com; s=zohoarc; b=YsoZMBn4H0c1vrt18u5TToIhL882HIItjHy2PPx/iuOdTATRMksj8ALgfV6Par5lsYq7p7eKBLfVlGQtNbEs4i2o80fSN2dEZLxhNp8FaIBeZRP47JoDnIZU5dtuYlW/peDxA3AIT0Q0AUdxrHluKGUS0PdKoO1E2f0X3LluRi4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785266971; 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=kWFwaMxmBVOkAqkFPIiE87JSa1PgYlu8WykRPA1VTMk=; b=UmKHqZu95oGNUBWAt0aTxHNrqTJ4LEcsSBHCMS/kzuMxdzR4WADSNGs3VNTt0OvWCfNlqXIFDT8jW4VzyL/sEXu4zvCXZRte1dqwaFMg9RHk7K6l1mfqbH8aTKj+XyJ09IZXryIKA8faxoNajZUmzfImPgHuAEycj2HAteOWeGk= 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 1785266971421148.77366322857347; Tue, 28 Jul 2026 12:29:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wonSE-0003KO-B9; Tue, 28 Jul 2026 15:27: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 1wonSB-0003FU-Pd for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:27:03 -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 1wonS9-0001W1-Td for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:27:03 -0400 Received: by mail-pj1-x102c.google.com with SMTP id 98e67ed59e1d1-384930ca5e2so146488a91.3 for ; Tue, 28 Jul 2026 12:27:01 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:b9d1:87c9:a085:86c9]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38f7f1353fdsm372650a91.8.2026.07.28.12.26.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Jul 2026 12:26:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1785266821; x=1785871621; 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=kWFwaMxmBVOkAqkFPIiE87JSa1PgYlu8WykRPA1VTMk=; b=IT3HbzvdmWj/LByHMjYOEwjyPmsEa22ss8HAVUB0Qn9/Gxd+3xuAoDa7yQcadtFRBQ 8VZUS2SQ1xZ/gcA6A3eGDrVXGXhvtZ08ESuvQiT1ZDW/B5VBo8ASA6syF6QnneDdNDjk M6pg+FzfnakIvvq3hSmSk2PaMZ+CwVZX9t93QJxN5Y9NQgd7XIUAIg9IWrMaf1olV1WZ XkWjQmRnVVjVNErc7v7a2/MmWAKQ4FrkVNXpeq5Wk4RSx35tpqJUwSI+/PyBaE8SbYS2 Ax3neeUxAPcuJhlZGkaAHHhZLy3YFuOikCTd3x4MhPRYcW6pNglC61xE4xOG5jy1iL+v PYBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785266821; x=1785871621; 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=kWFwaMxmBVOkAqkFPIiE87JSa1PgYlu8WykRPA1VTMk=; b=rUIrkDqOOiqUFc/o/j2DvNvTaulAvj2tTxM35MD6dpAtj7n6ciuVfKN0/KA0NeG37/ iTZyZTtAQZpfH3/edoMYhKxHbfW01HHnJrb7a2tsTQWrBOJi7caQJndJvHn6i9+/jbI2 F4hO1fKrEaFl1QLjgMROMr9S9oy+q5oEm9hl3utPtyaVfrb3rCLb692dh+NqQ6yBgOYR LAOFJq7mccO4Rz+jPY45gbIAoa1uaxb/IQ8fVi0Wm7sb4K163ea3aW8VAOp4x66eiY5A RwKybu7jcVbRe0JxdaTglVZ3GZlU7YP6nPp1mr44XqxVmheQ8S9U/1FAQ8UWU6yhDR8t ft5g== X-Gm-Message-State: AOJu0Yzh5hEcQ1DfKhPrW/IkgQXJVzpbVUst+qfo+ppWFh36jMM8oq+O vZHqVQ+8DN04Vr73mPnqJx6W0jUD0yWjRko4D6I0nLCe/pjchKEerFM0qZMCfdIAWy4= X-Gm-Gg: AR+sD1009xRfQF7Ignon/Ahk85Yi9xv3APHEZoV1oXlE3f3JhJAo752XRLI3f8TMkDh oNtsEsrUbMV9wtQC3FrnX8bTAtQbZuaOM4KkvsA3C0WNA7fIwuLnO6ZR7p7MyK42MJ/9iuQPJiY TShgz3zVcw6+Rn5R1rzP0AGvToU4X683RO9sOOpFt7umCJvvO+/iYqzhibVOJ8LU9nh4hahhMtV pHdIDECv9HJK6P1kTsyH9FLm3EMSwfXS/4h8uYbUlgRZp7cy7z9Vqzj76cWi3i1zoOBlKKnqQ3L 8c84QuAiMXpU6urQikI2PPCcShfvQJ6fQwj7oISjT5k+eFfkrG1QhyHGfOVcKK9oxfeWDXmrH4y ywP3QEwiHVzp2VrMcuRJdDsAazY5/7J6ME+WQXvuJwNT2B/w30Bi82Pci7nh5YqThcoV/aRHqjA 7MFe+3EUHn+c7WAmU66HNcbkAAysZ0 X-Received: by 2002:a17:90b:55c3:b0:38d:dc13:6f94 with SMTP id 98e67ed59e1d1-38f6a565d8cmr4083368a91.37.1785266820455; Tue, 28 Jul 2026 12:27:00 -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 Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v2 12/24] target/arm/cpu: Set number of breakpoints and watchpoints in KVM Date: Tue, 28 Jul 2026 13:26:18 -0600 Message-ID: <20260728192630.240375-13-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260728192630.240375-1-mathieu.poirier@linaro.org> References: <20260728192630.240375-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=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: 1785266972399158500 Content-Type: text/plain; charset="utf-8" From: Jean-Philippe Brucker Add "num-breakpoints" and "num-watchpoints" CPU parameters to configure the debug features that KVM presents to the guest. The KVM vCPU configuration is modified by calling SET_ONE_REG on the ID register. This is needed for Realm VMs, whose parameters include breakpoints and watchpoints, and influence the Realm Initial Measurement. Signed-off-by: Jean-Philippe Brucker Signed-off-by: Mathieu Poirier --- target/arm/arm-qmp-cmds.c | 1 + target/arm/cpu.h | 4 ++ target/arm/cpu64.c | 81 +++++++++++++++++++++++++++++++++++++++ target/arm/kvm.c | 56 +++++++++++++++++++++++++++ 4 files changed, 142 insertions(+) diff --git a/target/arm/arm-qmp-cmds.c b/target/arm/arm-qmp-cmds.c index 83ec95c290f6..9ed65eb090d7 100644 --- a/target/arm/arm-qmp-cmds.c +++ b/target/arm/arm-qmp-cmds.c @@ -76,6 +76,7 @@ static const char *cpu_model_advertised_features[] =3D { "sve1408", "sve1536", "sve1664", "sve1792", "sve1920", "sve2048", "kvm-no-adjvtime", "kvm-steal-time", "pauth", "pauth-impdef", "pauth-qarma3", "pauth-qarma5", + "num-breakpoints", "num-watchpoints", NULL }; =20 diff --git a/target/arm/cpu.h b/target/arm/cpu.h index c7927036360c..d6f64daec2a3 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -1174,6 +1174,10 @@ struct ArchCPU { =20 /* Generic timer counter frequency, in Hz */ uint64_t gt_cntfrq_hz; + + /* Allows to override the default configuration */ + uint8_t num_bps; + uint8_t num_wps; }; =20 typedef struct ARMCPUInfo { diff --git a/target/arm/cpu64.c b/target/arm/cpu64.c index 28167355773b..3f12009befa8 100644 --- a/target/arm/cpu64.c +++ b/target/arm/cpu64.c @@ -666,6 +666,86 @@ void aarch64_add_pauth_properties(Object *obj) } } =20 +#if defined(CONFIG_KVM) +static void arm_cpu_get_num_wps(Object *obj, Visitor *v, const char *name, + void *opaque, Error **errp) +{ + uint8_t val; + ARMCPU *cpu =3D ARM_CPU(obj); + + val =3D cpu->num_wps; + if (val =3D=3D 0) { + val =3D FIELD_EX64(cpu->isar.idregs[ID_AA64DFR0_EL1_IDX], + ID_AA64DFR0, WRPS) + 1; + } + + visit_type_uint8(v, name, &val, errp); +} + +static void arm_cpu_set_num_wps(Object *obj, Visitor *v, const char *name, + void *opaque, Error **errp) +{ + uint8_t val; + ARMCPU *cpu =3D ARM_CPU(obj); + uint8_t max_wps =3D FIELD_EX64(cpu->isar.idregs[ID_AA64DFR0_EL1_IDX], + ID_AA64DFR0, WRPS) + 1; + + if (!visit_type_uint8(v, name, &val, errp)) { + return; + } + + if (val < 2 || val > max_wps) { + error_setg(errp, "invalid number of watchpoints"); + return; + } + + cpu->num_wps =3D val; +} + +static void arm_cpu_get_num_bps(Object *obj, Visitor *v, const char *name, + void *opaque, Error **errp) +{ + uint8_t val; + ARMCPU *cpu =3D ARM_CPU(obj); + + val =3D cpu->num_bps; + if (val =3D=3D 0) { + val =3D FIELD_EX64(cpu->isar.idregs[ID_AA64DFR0_EL1_IDX], + ID_AA64DFR0, BRPS) + 1; + } + + visit_type_uint8(v, name, &val, errp); +} + +static void arm_cpu_set_num_bps(Object *obj, Visitor *v, const char *name, + void *opaque, Error **errp) +{ + uint8_t val; + ARMCPU *cpu =3D ARM_CPU(obj); + uint8_t max_bps =3D FIELD_EX64(cpu->isar.idregs[ID_AA64DFR0_EL1_IDX], + ID_AA64DFR0, BRPS) + 1; + + if (!visit_type_uint8(v, name, &val, errp)) { + return; + } + + if (val < 2 || val > max_bps) { + error_setg(errp, "invalid number of breakpoints"); + return; + } + + cpu->num_bps =3D val; +} + +static void aarch64_add_kvm_writable_properties(Object *obj) +{ + object_property_add(obj, "num-breakpoints", "uint8", arm_cpu_get_num_b= ps, + arm_cpu_set_num_bps, NULL, NULL); + object_property_add(obj, "num-watchpoints", "uint8", arm_cpu_get_num_w= ps, + arm_cpu_set_num_wps, NULL, NULL); +} +#endif /* CONFIG_KVM */ + void aarch64_cpu_lpa2_finalize(ARMCPU *cpu, Error **errp) { uint64_t t; @@ -806,6 +886,7 @@ void aarch64_host_initfn(Object *obj) kvm_arm_set_cpreg_mig_tolerances(cpu); kvm_arm_set_cpu_features_from_host(cpu); aarch64_add_sve_properties(obj); + aarch64_add_kvm_writable_properties(obj); #elif defined(CONFIG_HVF) hvf_arm_set_cpu_features_from_host(cpu); #elif defined(CONFIG_WHPX) diff --git a/target/arm/kvm.c b/target/arm/kvm.c index ca25b707a0a8..93686b038263 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 Mon Sep 28 02:09:43 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=1785266872; cv=none; d=zohomail.com; s=zohoarc; b=YbPRC4mQC0ilujere00ryssHgxy8gM27quyIBV5ON3FW5RNZUYeU3PAicNPjQIyst6di8wXKG8jZK87LTJtdSPEuSDgQ3v7w+QumzWXuQhatgegFmvBMBGI5LUxPeyykhEO1j3PmJt37SnNMEev88Kxw8RpqBhVuuB6+4028+MU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785266872; 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=/8GltLr+b3V/6euRVKmuC1vGLuoDnwfsRwYpfR+HJng=; b=CWXUdGNHLh8I3HkDIMD6ml77pmQOKLtjGK5/6hpN5pcJttk8HPhfG3FIU1LnTN+f28I/zjKZ7ze3u30Wk24u+QLCrxw7ytEakRBfRs0plEs0ZbSEjUIzBQ90YV0UPhoI8gWqyEJFF/ErhY9PPJh3Y0D5stW2ss/0EOHZnTWnD0M= 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 1785266872782357.1013055934052; Tue, 28 Jul 2026 12:27:52 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wonSF-0003NT-Np; Tue, 28 Jul 2026 15:27:08 -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 1wonSD-0003Id-8O for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:27:05 -0400 Received: from mail-pj1-x102b.google.com ([2607:f8b0:4864:20::102b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wonSB-0001WY-Fr for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:27:04 -0400 Received: by mail-pj1-x102b.google.com with SMTP id 98e67ed59e1d1-383b4a3755fso183578a91.3 for ; Tue, 28 Jul 2026 12:27:03 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:b9d1:87c9:a085:86c9]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38f7f1353fdsm372650a91.8.2026.07.28.12.27.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Jul 2026 12:27:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1785266822; x=1785871622; 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=/8GltLr+b3V/6euRVKmuC1vGLuoDnwfsRwYpfR+HJng=; b=poC9XprdJujlDxxQSu2zTWWVKXRl/Jwdn6N00xKQGgNHjli9NoUg+mis6TgeIAt2oY 7hk0aOlOumDYIZ6qnb9tUuocphBHu/7/gdHheWHdZSaWtsWfGc+fyxaK4hg4mmda1Zll Rqnj5SqdQISrSkn7iTDvUaVQ/o/B8FIQZg7jBJrdfaNYB6V29xplMR2cYKMzdFIW2mBA aO3kUbPVYGew764ZBjIFcAvl8qfZ41vXS4pvuFds+74fmz7k/vDmoVzrEU8tvydgFyL5 G96xh7s/ExivqkykeDNtjqOrtkwVFppHFtqfe9uAizTs+IXIoK/dd0GBWdjtrfbqFWgl AsRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785266822; x=1785871622; 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=/8GltLr+b3V/6euRVKmuC1vGLuoDnwfsRwYpfR+HJng=; b=SKc8COfXNupqYDVKfdu/aVmqF//uv4QijnbOmrcMiAcxQ22fwYRn2Ex6J76qzmpF9u aUw9Cns435ey87wmOwYZzjjvaAJTOpGexduDU71rbFg96zCP6WBHMUKA7tjvbc3bUG6v YDl9T+UKglQ034RRgaRnyjBG2GnOn/2dW/Y77QD4wofl9MO+HSiKAHYhBJMQYejQhQ4X 3HRwa3R5QA9sicl9PMOchYiZCVQ3yTM6CaP/jLss/RzRmVOx1dm9P0bQb8xCB2sF8rNw ml7bfM5BVdH1VHQywUw5/467eT2AtA63iqYfQHa8fnEtaNumQwzNiS5Xi3lq44KspnWd bKuw== X-Gm-Message-State: AOJu0YxyKS9gpeL+0RWsHJXdOxNcWlOFAQCzUYtfqfQ13QMkG2BZoHGG Abj5z0iBQ1ogMia0rIpc+YLa0YkfCDc2j79h87XprTYCddAMQXhW7TNTAHW+wgY7Z/Q= X-Gm-Gg: AR+sD10N4JZr8SiWce2qHe6Ztl6rvu7qlu5Cn8Bgou8o/2rPqSBUKiB3AhJHMl+DeKz 55bi1y5p/g5f0GVj+K+/DA69Oe7erizAVSw0GgAl45vRiRGrHhSQbKAQ0XVwY5iGv2OaF0fmiwb Yzguom2DUPjxdYrnV4M2Y3neZpUa6FpNQYTQcxy8lXs8vDujj0rJ5oGpyq0ZA427M06oorRPVMK XSklu5MzhkHWRvMv+dMF1bPHl1XxYwjMDBgkTPccMCETxnpz22ra6t+0FhCGVyW93eoCAcEg2QA MvoVVBonje1//CxVZsdI1Nxbv0goimsFDvSjgoW5v7zG0n8q1agbgDSohrnH+A8WQFztAzHnioH TFl9k8COcsC5meHZo6nu64+NpXLtGTNRrLrrdOIXxhW3kj9kYBXBRDn+e+MFA49rqaXE6X1q3MR QXzBI3wagilB3uebyrQ0c3GGY1vOT9Vh/4CnpCaz0R8Yh5n4FSL1QBZrojbdkWIYWFFvuODWBPm U5VcHob0/HwGMlILfUoUc9JkQ== X-Received: by 2002:a17:90b:4423:b0:381:e74f:8a6a with SMTP id 98e67ed59e1d1-38f6a40f23dmr2808925a91.16.1785266822134; Tue, 28 Jul 2026 12:27:02 -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 Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v2 13/24] target/arm/cpu: Set number of PMU counters in KVM Date: Tue, 28 Jul 2026 13:26:19 -0600 Message-ID: <20260728192630.240375-14-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260728192630.240375-1-mathieu.poirier@linaro.org> References: <20260728192630.240375-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::102b; envelope-from=mathieu.poirier@linaro.org; helo=mail-pj1-x102b.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: 1785266874089158500 Content-Type: text/plain; charset="utf-8" From: Jean-Philippe Brucker Add a "num-pmu-counters" CPU parameter to configure the number of counters that KVM presents to the guest. This is needed for Realm VMs, whose parameters include the number of PMU counters and influence the Realm Initial Measurement. Signed-off-by: Jean-Philippe Brucker Signed-off-by: Mathieu Poirier --- target/arm/arm-qmp-cmds.c | 2 +- target/arm/cpu.h | 3 +++ target/arm/cpu64.c | 41 +++++++++++++++++++++++++++++++++++++++ target/arm/kvm.c | 34 ++++++++++++++++++++++++++++++++ 4 files changed, 79 insertions(+), 1 deletion(-) diff --git a/target/arm/arm-qmp-cmds.c b/target/arm/arm-qmp-cmds.c index 9ed65eb090d7..9350dc30d12f 100644 --- a/target/arm/arm-qmp-cmds.c +++ b/target/arm/arm-qmp-cmds.c @@ -76,7 +76,7 @@ static const char *cpu_model_advertised_features[] =3D { "sve1408", "sve1536", "sve1664", "sve1792", "sve1920", "sve2048", "kvm-no-adjvtime", "kvm-steal-time", "pauth", "pauth-impdef", "pauth-qarma3", "pauth-qarma5", - "num-breakpoints", "num-watchpoints", + "num-breakpoints", "num-watchpoints", "num-pmu-counters", NULL }; =20 diff --git a/target/arm/cpu.h b/target/arm/cpu.h index d6f64daec2a3..50d482b09b0d 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -1178,6 +1178,7 @@ struct ArchCPU { /* Allows to override the default configuration */ uint8_t num_bps; uint8_t num_wps; + int8_t num_pmu_ctrs; }; =20 typedef struct ARMCPUInfo { @@ -2134,6 +2135,8 @@ FIELD(MFAR, FPA, 12, 40) FIELD(MFAR, NSE, 62, 1) FIELD(MFAR, NS, 63, 1) =20 +FIELD(PMCR, N, 11, 5) + QEMU_BUILD_BUG_ON(ARRAY_SIZE(((ARMCPU *)0)->ccsidr) <=3D R_V7M_CSSELR_INDE= X_MASK); =20 /* If adding a feature bit which corresponds to a Linux ELF diff --git a/target/arm/cpu64.c b/target/arm/cpu64.c index 3f12009befa8..00b3511dcbc3 100644 --- a/target/arm/cpu64.c +++ b/target/arm/cpu64.c @@ -737,12 +737,53 @@ static void arm_cpu_set_num_bps(Object *obj, Visitor = *v, const char *name, cpu->num_bps =3D val; } =20 +static void arm_cpu_get_num_pmu_ctrs(Object *obj, Visitor *v, const char *= name, + void *opaque, Error **errp) +{ + uint8_t val; + ARMCPU *cpu =3D ARM_CPU(obj); + + if (cpu->num_pmu_ctrs =3D=3D -1) { + val =3D FIELD_EX64(cpu->isar.reset_pmcr_el0, PMCR, N); + } else { + val =3D cpu->num_pmu_ctrs; + } + + visit_type_uint8(v, name, &val, errp); +} + +static void arm_cpu_set_num_pmu_ctrs(Object *obj, Visitor *v, const char *= name, + void *opaque, Error **errp) +{ + uint8_t val; + ARMCPU *cpu =3D ARM_CPU(obj); + uint8_t max_ctrs =3D FIELD_EX64(cpu->isar.reset_pmcr_el0, PMCR, N); + + if (!visit_type_uint8(v, name, &val, errp)) { + return; + } + + if (val > max_ctrs) { + error_setg(errp, "invalid number of PMU counters"); + return; + } + + cpu->num_pmu_ctrs =3D val; +} + static void aarch64_add_kvm_writable_properties(Object *obj) { + ARMCPU *cpu =3D ARM_CPU(obj); + object_property_add(obj, "num-breakpoints", "uint8", arm_cpu_get_num_b= ps, arm_cpu_set_num_bps, NULL, NULL); object_property_add(obj, "num-watchpoints", "uint8", arm_cpu_get_num_w= ps, arm_cpu_set_num_wps, NULL, NULL); + + cpu->num_pmu_ctrs =3D -1; + object_property_add(obj, "num-pmu-counters", "uint8", + arm_cpu_get_num_pmu_ctrs, arm_cpu_set_num_pmu_ctrs, + NULL, NULL); } #endif /* CONFIG_KVM */ =20 diff --git a/target/arm/kvm.c b/target/arm/kvm.c index 93686b038263..b8cb04f7eeb1 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 Mon Sep 28 02:09:43 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=1785267017; cv=none; d=zohomail.com; s=zohoarc; b=FrQ70fkKLk8XLdEev6ZVl8HpKZoJNrHouPMJISNPgnqAocXYgzixudEzjY81TpJzOrGyLKo1pE0k8bt26iGhe3RiBgnhk5SR1W+MuTD1jRRptiihgVpwLLwkEIEQ6ML1rkF695p5kOq2qyBFk9leZajO1THVp5S2nA9lsB+18Ws= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785267017; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=2LOuBVMlOe80id4VIdSsW07pBBJsvlGWj514CqDOCv8=; b=RGZIyfRg5y+ATJApB3rpACPNRN4mujD14Vxp6FoHrQ8f8GekBrfzh/SpqoBH/ZCGVwK9PMyEScFtPsr+pIV+kwyXdt6bwW/FBf8WSBqic4bWvtICeywiUpPR5GW9Y13wCseyLxuM0oCpUbUAG10iAApHaN/DnzIltTSw7Y6iOQc= 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 178526701784116.032670141100652; Tue, 28 Jul 2026 12:30:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wonSH-0003P5-E3; Tue, 28 Jul 2026 15:27:09 -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 1wonSE-0003MV-QY for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:27:06 -0400 Received: from mail-pj1-x102e.google.com ([2607:f8b0:4864:20::102e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wonSD-0001XB-EU for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:27:06 -0400 Received: by mail-pj1-x102e.google.com with SMTP id 98e67ed59e1d1-383cb94f742so241071a91.3 for ; Tue, 28 Jul 2026 12:27:05 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:b9d1:87c9:a085:86c9]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38f7f1353fdsm372650a91.8.2026.07.28.12.27.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Jul 2026 12:27:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1785266824; x=1785871624; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=2LOuBVMlOe80id4VIdSsW07pBBJsvlGWj514CqDOCv8=; b=gIaxNUQsYS6dMjR3slJWeGxAZPbdBXojT2vcwNr9Sx1LG8ayLRv+1TSaji9pMmJ1BK kIkSehRbIjtx7UoYTfD6g+fpVfkGK08V/OG+/WJXFrQiSehpmKAZJ4JQqDFNjrhr5f8r clgLISZW/2QSdKPaKFBH/F9FyrXxn+W1eJCaScShazFnKmg2XKwszh21rSgv3drZxZNY qC+lYDpY9OSR9cA7H/Sernfi1wTgKv+pGaOmTag9eH+Kja/yLgxHp4UzzXWhS58fQAMl qdV6Rc1VIm2tuzklRiLKNCYwpNZ2YxeWbP/rElUc5bdhdsFw5QOCwWFGshQDUzl9BW3W 7Lqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785266824; x=1785871624; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=2LOuBVMlOe80id4VIdSsW07pBBJsvlGWj514CqDOCv8=; b=bm1r7uBN2r/I113UsdqCh4Ckvt2wSzbezOtUOBpCGqwcQmHw2mtzzuBsIyqy5OCddH Yb1SvBdMZKLlsLHRqEpPbzQqcySzybMpHXlYzS0eeGJ0PUpxOGafc2j+m+oeIhjMFIOx nMTQO9cwV1qBIWwBQ+fR/FEGT41Id9qnefRNWC9EAEet4enTIqBtW6kqKY3sUUiHK78a 7A6fVxWv46DHae3mkSVCQp8PXTMSr0w68KyyTcfZVBB2mLJqi9BvCckjyVgQT1/TuNIq 3GzQBbQzvNssz7uzK9+0vdQw2NoVwtoFU9F+2u6v8sEpWp+EC8W+gHvt/3ElalJslDda lIeA== X-Gm-Message-State: AOJu0Yz9R1nv1aKwdfLCxroim0UxPzIXNPWJmS20T078xHWzkOMnUyBl ojdN22orDYCLRDoPouUWB4WijCs0Ux9Cp6SSS3evzU4ByZtN+tSdl5lKkH76oD57HnM= X-Gm-Gg: AR+sD13rwdktu7o0bTS6uO/ufKQr6DSecdrAkYXP0SlsYPwaoWFraLCFK7YZiznc7t9 ziUedoq2pKaVCLKla4YRx8WLiSUYUtoCF8Xg9L02Lj+aZhzT9tt7mTAEhzB58PcHGwgOiodpjPc Keg/QtRj6GwVt2G0SsVmA86rAvZwRCPvlBrshUZEaQYyNpnXlYP1A+zsro+Raba6XWMgEGLYeE/ 8oUeaTjBD+VIIgM9kF5YgLGqY6RmbLGP/gcj+csVrwCEkZLzHdhpbPjp+T3Nsy06wbwXzat7R4s /R0t93TRWVWHzjUFgaZmC8wNFfB7D4sKvoEzi4pGQ5AillvDL93mfwPxfRp5Lil5dK7y6zGYEvF VjZ7u43JhZWIOFnyEV/lUq7ZaMiWm79HRM3Oq1ipbBfDTn2VbgfiVeVs0/yH3m03RJBztsxtFXg xNM45IgjEl0gUiK5W/1+5UHOB32Xgk X-Received: by 2002:a17:90b:1645:b0:38e:6aa7:686f with SMTP id 98e67ed59e1d1-38f6a465625mr3705387a91.36.1785266823878; Tue, 28 Jul 2026 12:27:03 -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 Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v2 14/24] target/arm/cpu: Don't read Realm registers Date: Tue, 28 Jul 2026 13:26:20 -0600 Message-ID: <20260728192630.240375-15-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260728192630.240375-1-mathieu.poirier@linaro.org> References: <20260728192630.240375-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::102e; envelope-from=mathieu.poirier@linaro.org; helo=mail-pj1-x102e.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: 1785267018562158500 Content-Type: text/plain; charset="utf-8" From: Jean-Philippe Brucker The host cannot access registers of a Realm. Instead of showing all registers as zero in "info registers", display a message about this restriction. Signed-off-by: Jean-Philippe Brucker Signed-off-by: Mathieu Poirier --- target/arm/cpu.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/target/arm/cpu.c b/target/arm/cpu.c index 787e4dc7ab23..7679b8758262 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -965,6 +965,11 @@ static void aarch64_cpu_dump_state(CPUState *cs, FILE = *f, int flags) const char *ns_status; bool sve; =20 + if (cpu->kvm_rme) { + qemu_fprintf(f, "the CPU registers are confidential to the realm\n= "); + return; + } + qemu_fprintf(f, " PC=3D%016" PRIx64 " ", env->pc); for (i =3D 0; i < 32; i++) { if (i =3D=3D 31) { --=20 2.43.0 From nobody Mon Sep 28 02:09:43 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=1785266927; cv=none; d=zohomail.com; s=zohoarc; b=XqbFSwbZlg5+lWvQUXOQqwKQQpECzLf7lppfeLFoKXJcOhtXQ3/XPz9Ov9VP+oXd5cvMZlA2n6+GaWqocc4Sysr6rOlIr/BzMSiEZX2KWsKN2WRwRNWVBGOAZhyfw03XhT+KV3mA9NFRtQhnp16Htp4+QfDRM6jezrCtzpUuou4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785266927; 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=rKkplhtluFWmCm3zdoFzjKyPXsLnGiTn/fxUme5nI1g=; b=XBxHpn3bDBw6xahV9mURShGj7JnF5OckFjPzfA3qFr7IAlnt9kLMMAfKL2VteyUwVlw/A5x0oCiaeUAnSdBBZEpGeIiHdCUDfzEtS5a9/WX+qMhZKUl/3IcK1SizlyRiEtD5LDKJ27FnrOIdWSatHCb9uTXh5kMNrd7+eFFxCk0= 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 1785266927659985.9013487208634; Tue, 28 Jul 2026 12:28:47 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wonSJ-0003QA-0I; Tue, 28 Jul 2026 15:27:11 -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 1wonSH-0003PH-FJ for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:27:09 -0400 Received: from mail-pj1-x1035.google.com ([2607:f8b0:4864:20::1035]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wonSF-0001Yf-Vr for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:27:09 -0400 Received: by mail-pj1-x1035.google.com with SMTP id 98e67ed59e1d1-38e347638adso231658a91.0 for ; Tue, 28 Jul 2026 12:27:07 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:b9d1:87c9:a085:86c9]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38f7f1353fdsm372650a91.8.2026.07.28.12.27.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Jul 2026 12:27:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1785266827; x=1785871627; 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=rKkplhtluFWmCm3zdoFzjKyPXsLnGiTn/fxUme5nI1g=; b=nqtA8uCjEV9QsM7CBKNTyw+2WDdVFmSioSPkRUig34qC21Bev0fjgQQfGcziIbffeX GNgAGFmIFZdslxiyXCvw06Lpe0dqJ9M7ia4HHlsdyILxeKDVZxRhqAlssETkeOkveFFZ F1mwfsJ/dCi2UOSCiAmx6QnrdrCpgC27k3MGq7ov4cjN1dlHd4EwdSfV/c8oPze1s0EC aqeRy+7HcCXY0vLIJG7FnQY1s3a9zyOq++FDizWnwJ509LfRTmYWtEeP81Lcj8Dzg9xj WUa61MC3jK4/8NuZfp8VlWUD8PhgcRgiu6YOb9fhWL+In0yj+sBgHCuSB/2jAsUnHvJl i6VQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785266827; x=1785871627; 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=rKkplhtluFWmCm3zdoFzjKyPXsLnGiTn/fxUme5nI1g=; b=kyFgnNEoKmwuGhWS4yyMlSy4Jf17D5heWejCKES9SOvXWF9+q2jmoj6KsDQY7dRUc3 vT/B5Gn4z5LcLziEirFQ38cR+n/vMDJIZwqXb0SURnq4ws2MKq+mdbj+9W2Ane1oPk/L DFfZfy1T/9wJ0ujnBHAOktp4TZg+SRj7RaxpTxnTFTDWINLWVJ+9bo/uN3Mvysvy51+O olh6+FYhdqIfv7OL1ZOVgtx3GlfVc2nSiPynwGScWJzHOP7RUR34ZntYMidifeUVwMTd h1HTHTgw4cAqqcuF2Raviy8oSYcOaDlrCoFcqcrllA9O19B8peFvXXbvjW7kx0H30yGY RLSg== X-Gm-Message-State: AOJu0YymyEKkPxNj6FTXdBa0v7RUGtis36W2E8VJDgZMNHOfql91w9D6 z0Fmf6tadaZviSwBG8ahc2B62oODyDp2Jva55YodWewHKWuAwJNDyzBJ2LD7w1/cvMk= X-Gm-Gg: AR+sD10q3UUcJ+1Mq6dX3f0WZ1A5VITZblrXeR9t2On/9BbGl2Z8sT9gip7De26pg45 aXPxLqo7/VWL8eIZEDVYpPryURy0ipX33gSOo8S0ScY+UsyyTib68zAp4AlXVeAGotRH7wtK4/k HBYN5Mqki9iEwMhpeOQ9TQicB5fn6pK5+YYJ3WrY2FSZLfzIpNp1+iqJgCGBSyfWPD3fNjUlNQ4 HCL194FC8Z2sn6TcD5kV/BHoEd0xMWVgA0x2VlJYQwELjiZnqmSzMHDtmqF/tUddl8kF8YBswdM 1ZafTopzt0iJ6A7LYGVDBhSYGTjenWWhrlhbuFIxSTX48DTNVQeUyAKTELltQBshqvmggHwUxM+ 4FwYESI8OHF/dQJfZUJutiwWigvniSXhAZ7gOST2hvRbDnR1C/Fq55To1RfdZUAuKX5erNMkF4R qarI6oQG62mLyC2Ffl26Ya7JU2lDqfyn5gVITGPbk= X-Received: by 2002:a17:90b:4f91:b0:38f:57f3:4dc6 with SMTP id 98e67ed59e1d1-38f6a51c0c3mr3700949a91.21.1785266826646; Tue, 28 Jul 2026 12:27: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 Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v2 15/24] hw/arm/virt: Set proper conduit method for Realms Date: Tue, 28 Jul 2026 13:26:21 -0600 Message-ID: <20260728192630.240375-16-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260728192630.240375-1-mathieu.poirier@linaro.org> References: <20260728192630.240375-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::1035; envelope-from=mathieu.poirier@linaro.org; helo=mail-pj1-x1035.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: 1785266930339158500 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 219597cabd0b..27bed9755320 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -274,6 +274,11 @@ static const int a15irqmap[] =3D { [VIRT_PLATFORM_BUS] =3D 112, /* ...to 112 + PLATFORM_BUS_NUM_IRQS -1 */ }; =20 +static bool virt_machine_is_confidential(VirtMachineState *vms) +{ + return MACHINE(vms)->cgs; +} + static void create_randomness(MachineState *ms, const char *node) { struct { @@ -2952,10 +2957,11 @@ static void machvirt_init(MachineState *machine) * if the guest has EL2 then we will use SMC as the conduit, * and otherwise we will use HVC (for backwards compatibility and * because if we're using KVM then we must use HVC). + * Realm guests must also use SMC. */ if (vms->secure && firmware_loaded) { vms->psci_conduit =3D QEMU_PSCI_CONDUIT_DISABLED; - } else if (vms->virt) { + } else if (vms->virt || virt_machine_is_confidential(vms)) { vms->psci_conduit =3D QEMU_PSCI_CONDUIT_SMC; } else { vms->psci_conduit =3D QEMU_PSCI_CONDUIT_HVC; --=20 2.43.0 From nobody Mon Sep 28 02:09:43 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=1785267103; cv=none; d=zohomail.com; s=zohoarc; b=E0WpjP+Wkh1ETMz9uY3jWYMSaI0VHIIQFZUMHgHNzFIXDykNRDxTLMOBoh/u1eTW2/HlaeHoTfG/r7rBLb0WajTi8I7SeMwUbOvTqyH8C8qjkaVTSDW20hMKQ76TIKyApfxCP4+QfIxoS2/96XCMRR1sLrep67DoVo2+Ua+7Q50= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785267103; 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=O97834IMZHMJj8CNpJQMqMEGxl2bcDXLGwhFx5nEj0E=; b=ZnaFU+FjKHfRAlIoTUIs/ZcbayBMbdfjWr2qkiJneQ2W79lzCqMas6/uQCpDnNd3Yl8rJHQ0ai8TpmW5ZcMuuHBU/Ujn5e8H/AcnJreKNqgOLtSPecukB1JYmU37WA1PaDt6kWYy6n0haXVEoA7cIKVgBGZhar4OYwYC/cxN4WM= 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 1785267103708510.0887419861764; Tue, 28 Jul 2026 12:31:43 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wonSx-0003dw-UO; Tue, 28 Jul 2026 15:27: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 1wonSJ-0003SX-Vh for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:27:12 -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 1wonSI-0001ZX-HT for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:27:11 -0400 Received: by mail-pj1-x1029.google.com with SMTP id 98e67ed59e1d1-38dc69c74b8so246648a91.0 for ; Tue, 28 Jul 2026 12:27:10 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:b9d1:87c9:a085:86c9]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38f7f1353fdsm372650a91.8.2026.07.28.12.27.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Jul 2026 12:27:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1785266829; x=1785871629; 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=O97834IMZHMJj8CNpJQMqMEGxl2bcDXLGwhFx5nEj0E=; b=JGvp3EC9S3QKc2++uBAqH4Q5I0O+DaoAUSg4jSpE8loaJH6Nf9sKjLNRHK6zhbnkHD eCFEAK0snC/ZtSIvQrYUw4Y/X74nBXKkaeugCfMyHKTMPBTb3TBLj/8Iv5oBcydeHE7j NIIOFEX9+PAdZEfqPzHjcwbDGJ6fm6LAxDzr9F53mPrXLZfz0QBfqLgqphoSTfEXl6Xl xptfsRrNBaxnsgnfgclph0vjgZjIDESeOkFaGZv/U1+wpvUrOjnFJtqNz0jCk+iWMoEf uHD5Dd83F5H+ImOwQlBkrhGOqbMDhW2hXUVpQIhBHV4os9xNX1zynudAy78OymxweBhP zBfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785266829; x=1785871629; 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=O97834IMZHMJj8CNpJQMqMEGxl2bcDXLGwhFx5nEj0E=; b=Hq3jD4f/jmb7urS0deKBW3k5qKNQV6UTfFtrrES3PYLdI0LyoAUGf7pxrzcmlOrbNL ZeLv56B8llFAqoTQ1qwIKeRRr8ykfM/JsS8HnzqlS6pwS74fOvgeIqTYe7k80PmUpAeE eZCL2ILD6JaSUu7SgC520sd+bsHjblaWWBaZcacZo1wj0j5m6rDjyhoNGf7B29wfppQh 6wtffXBVgDjUONXWX4N5Di1zpKxhfEcIFmbBXnf8s49cFN0RmwWDecPuVn8RJsJzRujU 2b1AWAlMSGLS0/WZ9f7P4bK5bhNycLw/rz198nC/HMqZijdaFpi96hyNXmPStt+v0sBB dQhw== X-Gm-Message-State: AOJu0Yz2uXDYsk0qqucg4y22AzvluOZPoMwiCvzQSOdVFvciAhVWTUUn J2TzIDonyeq2KiF4aBbW55laZg7vUs+qPUJ5I0YOtWWpqGlve9htMSStn2e09/98cZE= X-Gm-Gg: AR+sD13vHWRtxJGLI50pThhPquYjPNGrzCyz+itiFH4Y52Y7Pp+0F+32vLrMaltc8qc Ei5Ztqw+0F3V/9OWd6zQ21Ia4yyYwAVIIl85oIghW7YoKfweJ0juAAj3Tmz2oEJESCg+x7wAC9W y5impy0iaieGUqn3S0gp/sg2Yxa1+sFYRQ+5OV4y0mQQ7nruAIzZuzdsS8KlUD8ojnzm+1GnW7E znSDkTjNf82CLidvAHJZhnuqxNW6RzIZdisGleisNjeNWsuiXc2/9c4AP764jPENDQHly257Ui7 aP5ugx+0KYYmYFSGsEBVBXJ2wan5eu8a9rL26PmZbhvADa/kaDP1i9hT66aYpQZsoMTpZ8rwJdg TJ0yBiFc5nP/OjhVLUEBWuVGINH8AbxOFa9uci8BBy8ROUV4tgCNO2XOwZPWMVuVaC4nfoIgwhk L8RpG5EBYa3qZvoLxF6L4lGcT20aUs X-Received: by 2002:a17:90b:4483:b0:38e:584f:2515 with SMTP id 98e67ed59e1d1-38f6a465c40mr3652686a91.37.1785266829178; Tue, 28 Jul 2026 12:27:09 -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 Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v2 16/24] hw/arm/virt: Embed Realm VM type with IPA address space Date: Tue, 28 Jul 2026 13:26:22 -0600 Message-ID: <20260728192630.240375-17-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260728192630.240375-1-mathieu.poirier@linaro.org> References: <20260728192630.240375-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=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: 1785267105366158500 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 27bed9755320..9123f46fae4a 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -97,6 +97,8 @@ #include "qemu/guest-random.h" #include "hw/watchdog/sbsa_gwdt.h" =20 +#include + static GlobalProperty arm_virt_compat_defaults[] =3D { { TYPE_VIRTIO_IOMMU_PCI, "aw-bits", "48" }, }; @@ -4053,9 +4055,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 @@ -4080,7 +4085,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 Mon Sep 28 02:09:43 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=1785267011; cv=none; d=zohomail.com; s=zohoarc; b=UIDnZ9wmShpoWSD3Wg+rGqAyiJuGxoaG92sV1BmHa4JjYCGn1KdJygLfiLNeYE/IocTuJVIIVWuuezetpbAdmtknjT93hL0YlJHwhrC7cBU+AhISox49lY+hJ9IH5rjhjZ7yzv++oczprz/7YJOkzDSzc6Ajn7ABf+eHBBH6eQc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785267011; 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=pK2tYb+uha0OTzKJ3jiWlIwpjnwXssFbFzC9Lye+Plw=; b=IqHkkAtg9lUygUhZ9LVYjDwoK0yZoRSBaVj/R0OZBGvZ9UthH7+E8yE8Gd8NXzUg/Vbb8021U+UKMQWptNp9F8HO2NH0PWFdhwfKH9uz3r5/Y5A/xDYmph5V6MoaUIUWfUCq8/pjrDYy7pOPM+mrkUf5v/2m6ShTjgJn7nO1OuU= 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 1785267011683673.4744434458504; Tue, 28 Jul 2026 12:30:11 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wonTM-00047a-Jh; Tue, 28 Jul 2026 15:28: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 1wonSN-0003TN-3C for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:27:19 -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 1wonSL-0001aQ-Fp for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:27:14 -0400 Received: by mail-pj1-x102d.google.com with SMTP id 98e67ed59e1d1-38125cebfdaso257873a91.1 for ; Tue, 28 Jul 2026 12:27:12 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:b9d1:87c9:a085:86c9]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38f7f1353fdsm372650a91.8.2026.07.28.12.27.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Jul 2026 12:27:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1785266832; x=1785871632; 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=pK2tYb+uha0OTzKJ3jiWlIwpjnwXssFbFzC9Lye+Plw=; b=ob31+VHf4H1bYkQdzWtVNSBZQr1vSnSFxFTJBWCpgUMVY8k/HlZYkrcnEUP7eD+jWb EfrLDYAqbBLaILaf6oI0khQZ3CoayT59OIr3KT03c7wV1KohPGw2DWzBuXDpClFYVjdU nK5+dZbj+jXMTh6iXRi/GNwxhNAnP24zBNRNrCOfL8a1bOesG+Ys4bMzUnrHueY3Hts2 2/6C5GrZLrw+TXN+hcnvdPLxFhiH/ABuv1B4ByXu6GcpATgI5Z8vm3Fds+OKHv03XcFY OmBeC44Kh/oBQLrfLNBaBhtaWSW8skzpwxl+CiGf9ue2gQOBEhyRF5eGz3NDBefqwbRy 7Kww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785266832; x=1785871632; 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=pK2tYb+uha0OTzKJ3jiWlIwpjnwXssFbFzC9Lye+Plw=; b=NYcGreklIXaXQdF68sFLEfzAK9QhVnNV4VT5JpHw/vNunClzq4ZiJn0eQYSB7Io1ij 0cRHkY7zGtdhjM0uVygcstOSXYdvF2Wxc2N6QBbHSlIn8L72TSo1kNXD2U2uydkeim7G eKsuFnoeJdp5qgdzCNbRB7tDPq3XD7zQ263T6E4R7JDWesWHopk0S5KATbQTUkXtqr92 eaW5gFpnYyJC+X6ZHIM/aYM4QgmyZy0zQ+a+58x7GpQWcUNo5wNH/CYgKEl0Y+elIO4Z pnFdQZQQsayz/Y6lnMCksjmisCUobiI0kWm3zBwB6OxsnrFIb21e3+tZEbuSkI5P/Cj5 cC1g== X-Gm-Message-State: AOJu0YyHor9Tgpd0W0HPutjmBIZl4m2k3U7YtOt7JfKfFkdkstku3rxB jRiYpXZFxgWepeDcrlUV37fXUEvNWnykyfeeP8IPXxljJGg7LJ7DSasM3f2VGED9lgk= X-Gm-Gg: AR+sD10HSMDsT940o+iYn5T3SUos/AqfG6C2dPSefj8Zkpy9w77CflbJSmvKMvhJ8gT yIUbEwyv3y7mjl8PYPX2bnsyOhaQJlvirVTPr7uhdrwLpM27KT6howQ537EpksW/4uX4OdVY5Nx L1AFRzOjgX7OR24PEyrINWCxCSUsKzvCcaejT8jHa3Jf5e66IhWU4/3qUYE+lUKJAXY6CeQlze8 ghuMovJlEKSTbGml1wW8R6CNIH4vHjfYKWTYTfJw4EG8XUFWQkCFPDMiVSmwz3LLg1clp09h508 Of2FU3RItY2NpNjpm7Jxf6gpbiKUjk5EIDCPEsJSwaeKx0FHitDgmhVpFVPN0JQ8zttWG9nDqsg dCwa061bPk2hMfrqO9aytDdc4joBW/BWYSE9/2UwXPKA0yOlAQHVme87OttQ0csGvs2KJ8a7bJC 8iy2zE/06pnmGxLng9xwAd0ZD8o4B9Pzy24+QxTlF7lvFlaxC9ED9fH/rj2WdyASsAIMdPVlM3u nj1NZKFD6YUHAo= X-Received: by 2002:a17:90b:1d04:b0:38f:57d0:3a9 with SMTP id 98e67ed59e1d1-38f6a51c0b8mr3938868a91.36.1785266831998; Tue, 28 Jul 2026 12:27:11 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, lorenzo.pieralisi@linaro.org, gshan@redhat.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v2 17/24] hw/arm/virt: Reserve one bit of guest physical address for RME Date: Tue, 28 Jul 2026 13:26:23 -0600 Message-ID: <20260728192630.240375-18-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260728192630.240375-1-mathieu.poirier@linaro.org> References: <20260728192630.240375-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: 1785267012523158500 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 9123f46fae4a..fa6cd62a335c 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -4054,17 +4054,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. @@ -4073,11 +4083,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 Mon Sep 28 02:09:43 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=1785266956; cv=none; d=zohomail.com; s=zohoarc; b=mV+06riFogS69a5LsZJpZhLkqB0J0g+ZPHf4PXcKYEJVNdPmneW0jfxLU3/+T2xhmQS29iwtvXUyXtX5EyYG1C0kGCaHweUFTHQXuP+DBn7tfL5y5XQjMcISRiQwGKp2QoBcyL+idruey9L6NYDqlS54XSgwXO9dk2wS9O/UrlM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785266956; 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=B/s2MhOVNf5tNx0QLnD9DD7cZjOjKqSbP0aTOIvlKbQ=; b=LfPwvlkjnP75pzfcbshFkGxlYmQQIZxXhTKQxfhbqi9mwt/3nICD0anh8VEGaxLz3fxRPsd8fEP9OdvlBvShjHAF6QEiR197A7/hqUVVQt/YNo59AnomiXJ9YZsBK6TFOr11eR/sf5ZQ6JnjPBUeD99axMKx3LHce0NXtzGr1ro= 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 1785266956415742.4733857544632; Tue, 28 Jul 2026 12:29:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wonTB-0003yU-Br; Tue, 28 Jul 2026 15:28:05 -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 1wonSP-0003TY-0e for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:27:19 -0400 Received: from mail-pj1-x102e.google.com ([2607:f8b0:4864:20::102e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wonSN-0001b1-7i for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:27:16 -0400 Received: by mail-pj1-x102e.google.com with SMTP id 98e67ed59e1d1-38e347638adso231748a91.0 for ; Tue, 28 Jul 2026 12:27:14 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:b9d1:87c9:a085:86c9]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38f7f1353fdsm372650a91.8.2026.07.28.12.27.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Jul 2026 12:27:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1785266834; x=1785871634; 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=B/s2MhOVNf5tNx0QLnD9DD7cZjOjKqSbP0aTOIvlKbQ=; b=jhc2ES0qqECbG0DvG0aMrnD0ac57mWBA171tF7+PL/WlqQN13/FUnE68f9ULxs6PDh 5YXtLfaTV+J8XmbEw+gf/U9cDRikv6ejlg99CJoBjaErqengHRRXA23d5ivIDaAme3T9 LrI3IF7CWVAv+qtX4ZTvVELo/5mpYQWBgpxmqQmaXMKmodtofiWyDJPY7/Qu3jXwzFNQ dwD35jbiX907Bb3fjzqw+23phEMgLgdjUIb7iqK9S3dD2had8bgxWM0s994FX1CkQFC/ plk+19lB66H+tQTnNmmVOkwquXUw1XlJg+SaIQ8gACqArppPSz+0YhChgFXyeZLmhA8L 3qcA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785266834; x=1785871634; 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=B/s2MhOVNf5tNx0QLnD9DD7cZjOjKqSbP0aTOIvlKbQ=; b=JexRDyeA2BdHddXp32eZiVucppuv4+YTZB1UCMCDLX5xcCKIAMiqKl0uPeRB5GIdP3 HxthP58nnr0uY1qChEx2GZgZCoQrf6rbTtZ9pK0oMzDs4vBwcPxz8VbIQsZGkg1cWitU gEZwdRIEzvPkMC1un6Xrt3fQXPwBrDlsRyIJ0Peq6veSioV/1JnYrTU0sN0sMe1As10/ BXIM5yscuXfSGn9RO23A+50N20y28DlRXh5vX6YFM0NF5PzRU57xZq2pqy66GDs4yNFo CBcCXY2VAAQOqiMkz5WdVznGHgTDPay3Rljx9MHoQA9UJe/GGCY1blrkrNqp3YsKqgaT 9VOg== X-Gm-Message-State: AOJu0YzXIaRDPCW9CqzHTUSXgwx7Rww62rlnDOBO0HnGSeskJd/3zoTi L1PLvfymfkA6dF6yx/wgcSrg+LUBjNGhK2+bpC800l3o1+05axlw/XGJrDgUXQY/E6w= X-Gm-Gg: AR+sD11FRJd349KjLwxHCqPeySXEuG1daNDPwKapxKli+EjiFMMxxwqP4IMeEVKI00A vbhnSQZL8ShU8oquDNBZ9M6HP0jGiUBPIpfmSR2oFW/Nf6wM9ONXvP9Mzuc2WDqQhRiGv40SEHU Vh64kMOWjBtEn7GMxFDx4rhT55wL2bf6T/juLPddfJtBBYt31alEJNHjF45vRuC3bdt8uhLIQ6p FfXT7pyEA4odbJjs4k+gFYfc3nj+8zvzZHOUX0x8i5bUaHZ7YPbqKk53tpWQndQcrpX/Ul7pyM3 rj8MYUudbbJRyaIfS5c9cWY77oW2XEkZIz6ymkG3Xy5L7TGD5erXSn85zFN8xg4Wc09mwPhE5do erqMtGinpawFzQw8b9oYCzAhpsuwyfZrAfaqWB7Rz4xHE3y/DtRMxckEF6zgQYafrw8BQBUwNj0 W6y7aneWe0duoHXJGmYYblFlhVb7Pw X-Received: by 2002:a17:90b:4a06:b0:38e:69f8:cc49 with SMTP id 98e67ed59e1d1-38f6a569e3emr3771045a91.40.1785266833744; Tue, 28 Jul 2026 12:27:13 -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 Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v2 18/24] hw/arm/virt: Disable DTB randomness for confidential VMs Date: Tue, 28 Jul 2026 13:26:24 -0600 Message-ID: <20260728192630.240375-19-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260728192630.240375-1-mathieu.poirier@linaro.org> References: <20260728192630.240375-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::102e; envelope-from=mathieu.poirier@linaro.org; helo=mail-pj1-x102e.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: 1785266958427158500 Content-Type: text/plain; charset="utf-8" From: Jean-Philippe Brucker The dtb-randomness feature, which adds random seeds to the DTB, isn't really compatible with confidential VMs since it randomizes the Realm Initial Measurement. Enabling it is not an error, but it prevents attestation. It also isn't useful to a Realm, which doesn't trust host input. Currently the feature is automatically enabled, unless the user disables it on the command-line. Change it to OnOffAuto, and automatically disable it for confidential VMs, unless the user explicitly enables it. Signed-off-by: Jean-Philippe Brucker Signed-off-by: Mathieu Poirier --- docs/system/arm/virt.rst | 9 +++++---- hw/arm/virt.c | 41 +++++++++++++++++++++++++--------------- include/hw/arm/virt.h | 2 +- 3 files changed, 32 insertions(+), 20 deletions(-) diff --git a/docs/system/arm/virt.rst b/docs/system/arm/virt.rst index 5f6dd1797862..9882b842ddd5 100644 --- a/docs/system/arm/virt.rst +++ b/docs/system/arm/virt.rst @@ -238,10 +238,11 @@ dtb-randomness rng-seed and kaslr-seed nodes (in both "/chosen" and "/secure-chosen") to use for features like the random number generator and address space randomisation. The default is - ``on``. You will want to disable it if your trusted boot chain - will verify the DTB it is passed, since this option causes the - DTB to be non-deterministic. It would be the responsibility of - the firmware to come up with a seed and pass it on if it wants to. + ``off`` for confidential VMs, and ``on`` otherwise. You will want + to disable it if your trusted boot chain will verify the DTB it is + passed, since this option causes the DTB to be non-deterministic. + It would be the responsibility of the firmware to come up with a + seed and pass it on if it wants to. =20 dtb-kaslr-seed A deprecated synonym for dtb-randomness. diff --git a/hw/arm/virt.c b/hw/arm/virt.c index fa6cd62a335c..65ed8573f8b1 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -401,6 +401,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); @@ -410,6 +411,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 */ @@ -431,13 +442,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"); } } @@ -3512,18 +3523,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) @@ -4343,16 +4357,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 @@ -4415,9 +4429,6 @@ static void virt_instance_init(Object *obj) /* MTE is disabled by default. */ vms->mte =3D false; =20 - /* Supply kaslr-seed and rng-seed by default */ - vms->dtb_randomness =3D true; - vms->irqmap =3D a15irqmap; =20 vms->virtio_transports =3D NUM_VIRTIO_TRANSPORTS; diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h index 22e66d1a113c..d4c1aa04f664 100644 --- a/include/hw/arm/virt.h +++ b/include/hw/arm/virt.h @@ -176,7 +176,7 @@ struct VirtMachineState { bool virt; bool ras; bool mte; - bool dtb_randomness; + OnOffAuto dtb_randomness; bool second_ns_uart_present; OnOffAuto acpi; VirtGICType gic_version; --=20 2.43.0 From nobody Mon Sep 28 02:09:43 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=1785266970; cv=none; d=zohomail.com; s=zohoarc; b=WfSjktw78UZoQmSq+3EZN63EBROeHFjtv96ThbqaAB8r9KyBq13QDtA9EyxJSKlyJ4YAhz4pPYul/oy6hQ7kUIIK8un18CZxj40CWE6HiV1BNRu9efIILIgGcck9okg/uO6/ivtGsL8MxjkFQkyhtjyTGHFWSlJ2ZERjqqIauR4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785266970; 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=k1OKTxouEu3ExdbBGp8MAamXpMFfZiX+8/wuyJN0otc=; b=fDPFrBVyBg9jCM4UAKeOSoEEVSD633fJJlFmUY5mZG5/G2lfrnlMzWgw182BPWNiQg7kxv5dXtyOy2nSigxWdx3YBWpMUkZL+E0tHBsh30GA6xT7WadTtfe5TRPyJ/BbJ/Gf/v+bByW8ktBrN4+bteAd0egtTj9vvZpkiHv2dOg= 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 1785266970330444.6319195053777; Tue, 28 Jul 2026 12:29:30 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wonTB-000405-EZ; Tue, 28 Jul 2026 15:28: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 1wonSR-0003Tk-Pp for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:27:22 -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 1wonSQ-0001c6-7P for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:27:19 -0400 Received: by mail-pj1-x1033.google.com with SMTP id 98e67ed59e1d1-38e08baf860so210403a91.2 for ; Tue, 28 Jul 2026 12:27:17 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:b9d1:87c9:a085:86c9]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38f7f1353fdsm372650a91.8.2026.07.28.12.27.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Jul 2026 12:27:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1785266837; x=1785871637; 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=k1OKTxouEu3ExdbBGp8MAamXpMFfZiX+8/wuyJN0otc=; b=kDUuU7EYJKbvlcrKC1Pitug/tRwnvkvU/+zGRFviXmL6qgqAixaLkZbSLsGOh3vQ8u W7AJX2TsrDN/rIVSJaDDvNN7JawIo+2zlElJpAhn4n8m7fRLbR2AySactO9Yg5oCZLT8 vvvNvphfosvVOo/qtyW7Wx0fSUNf/+fBwW6IOSGvCd0NkrewpbrrSqPB8o4HB+n7lcZK Jlg6ZazstsPYd0qXKbo1zhR62Cn6RiR5wEi07DvoIxtbEQquJ+CaPNSZMasdLkKxAxnh FjWn48YxRM6iH1c8fvypPUbN0tlxQsNPevV28VPQPKjVh+vlhDIneEWSFL3qx2Wg0au5 1oEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785266837; x=1785871637; 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=k1OKTxouEu3ExdbBGp8MAamXpMFfZiX+8/wuyJN0otc=; b=Dby0R0CdtNNLPmVGXXn/Bbe0uoPUeFVjzOAbuYEgSnhMIiXpUCYZVMEB/tYaieMIDO BHMyxQ+0Fq7F2l8Dt0+t2UBrPB9sI3gemvNqUlAfyOfd59ErhoEmhRX/cICk0YkSsT3e GIglDresNUvGZ1TA6uV2GTHI+AxUIkppMk1wEO6XQDGI1/HJ45CPp4evNoIR1xYDrAhN /1EpuSf4n8RO7eB41FwPLVRYt6cT+KmiTxG9/z2mPv/SQVwZO7+m2ryzncMMT5Y7IfOb PjVqzefjsX1B6ATdKPv6BYyKexB3j2kUKTAD5Xj21v8SRLJTaeeN3T52lFHdXOpNibHE YcMQ== X-Gm-Message-State: AOJu0Yx30VQaRr8OplcXER0Y7zHa3iHUqK//+oYuTj0pU2T3AIKX+PAQ w/C0nOROPLJHmSz3O6h0kuKt1sgnpY/IA5eMeYb0Qod8/wMIKFd7Ql5CCaxi6psJGqM= X-Gm-Gg: AR+sD10n7ZDDns8seNyzjbHkCfqZw/SeEWHGK0eeXAoyg02rU/2hBJ0anTfvxKSe2VH qM3bpazTbjyInCAgm7xSu2bvtnSanMrBcVntvcnM927vgyuJoo5ar3WmHjGaRbjvRTakJ5i7qse WGQ031IXgtxQQ5BE0viGCC2hKWOsVAeUgelzVlp4NGHmABCUvq0McWGmaIhmE7viXKZ6z0fztR7 qleYQ59tW41oxbAh+xNL3iZYE6RCnyAZtGlmIeITn4wnCG+ifRfJfLIrwENIDzq072/Z0oAOes4 bOCjncjkqpvdtm7qHi/dh+IdWZ3XMtqm9PSbbqa2ae8tAySWizHebhAkk35ZWHJ5C8nqhBTaISY D42I84AWnJG5CSzx6t6/IKqk8cpHUWhPUe5Ep/eS/XcQcDlcxGKUReKJRhuUxM3Ccwh913DoXFc bUUyO1bqGS3HL+7H/eQf1E2N1/1j5m X-Received: by 2002:a17:90b:57cd:b0:38f:23d6:b4a9 with SMTP id 98e67ed59e1d1-38f6a518021mr4060765a91.21.1785266836872; Tue, 28 Jul 2026 12:27:16 -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 Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v2 19/24] hw/arm/virt: Move virt_flash_create() to machvirt_init() Date: Tue, 28 Jul 2026 13:26:25 -0600 Message-ID: <20260728192630.240375-20-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260728192630.240375-1-mathieu.poirier@linaro.org> References: <20260728192630.240375-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: 1785266972361158500 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 65ed8573f8b1..74fe21712d4f 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -2911,6 +2911,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 /* @@ -4433,8 +4435,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 Mon Sep 28 02:09:43 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=1785266943; cv=none; d=zohomail.com; s=zohoarc; b=Q8Wc4F6RaPHB1H/L93gJofZI6E3p/7KpQT6cr5oq2+h+cIziDRzTyzbhUHHy5pTonZ9nRdyu4QJWtD1qqoaWj0f33R4brP/NqIDrK8+0sDSLDev6n0Y5Kimj18wd4gnFLfvBTP8dHtIOk1ewbrLur1FhGlkl1Fe1z48cHTv2I5I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785266943; 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=n9HsMvAh/qkeYI9JbPnuTDiGCok2SGFh9CrU4gL7bDU=; b=KCYxLYOhE0mEOR6jbTKE3W8bJMUR9z4JPg5F4GBZWzZLgGpWMfJ2Whxoo5oYoOojXjHLNyXXYsBrEQt3JvU3yR0M72ZWwfvsTvvxOBzPnbISTBWPmWsic0ZKe0A8vwn83+boeHtbCRz7cAwkLA7EqqhPgGKt8k+klBRi6Km/xb8= 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 1785266943264347.0606437579265; Tue, 28 Jul 2026 12:29:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wonTt-0004k3-67; Tue, 28 Jul 2026 15:28:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wonSU-0003UA-0d for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:27:25 -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 1wonSS-0001cX-4l for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:27:21 -0400 Received: by mail-pj1-x102a.google.com with SMTP id 98e67ed59e1d1-38a0c7e841fso221832a91.2 for ; Tue, 28 Jul 2026 12:27:19 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:b9d1:87c9:a085:86c9]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38f7f1353fdsm372650a91.8.2026.07.28.12.27.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Jul 2026 12:27:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1785266839; x=1785871639; 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=n9HsMvAh/qkeYI9JbPnuTDiGCok2SGFh9CrU4gL7bDU=; b=Ntq+Nvba2O405hXKOUBJRgA4Di7ksse+oHrVvjGr/f5Zw/vxDQiEEMqP2QUB1y2Tv6 XLx7t09JwPzlxrQ0DQ7sAsXHBYgZxpe5XbBUfVrDam04ObuZzYOVJIMmI/lXNdTT4o3F wrKC5ppmtWuVE5px2hvb+5yBTzfxEkrg+tJNOzQsdsLb7yUx+I9J5rmJDJf87g57rlGe sywwHq2E5LrCrJFbkbBSVthQQhhcRuIwzElL8V0pa5t56htMV7b3CIoRtYDW8k+I+V2J z731GQ/qdzSmnuJIHlFoiBp4ggWYd9arQeRcTrkUpVF9k8CI4DQGPypAYxf8tCZ3oqez y/bQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785266839; x=1785871639; 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=n9HsMvAh/qkeYI9JbPnuTDiGCok2SGFh9CrU4gL7bDU=; b=FLReO9maqkRtctdhwWY2TZrWWYUK6NZEYCkbvPVAdXMhA55M4BN/zCT+SyeTZi+Hk/ LRcbAwEIZd7vGBNKIm83Tyg8f43/8Y7upbVa52SNUdq934mb/+RFO7S1RjubzNlTBJYJ sVZx/xRjfePkj8nTLacdR3k8eZ0vZ5ZsbxgCP/BW+KljbtXTrN6V4PygA96xsqV1YVji nKmsmKhYDAndQWswjR2nEJ6CSIjt1l9RXVWHi/GTHJSYAlyqmAJcUDEsjEJk5HuEzJPD IKjOmlynXhrrUTvVmS+NDBFfLIg2iK/Ofs8KnapIQyJTxHRx3nniOAK72aAFk9PgwYgV EUeA== X-Gm-Message-State: AOJu0YwlQNJn0GsRRNaKCZwNRYoF8E/frZ43TRtNoKZ51ZOBtaJt/HxT 7nHPwSDK5jW7poQWb7jn+f0121BMTgxWGJ/qirhj5AcQGaRaOvVB2xRcWM4nhiFL/dg= X-Gm-Gg: AR+sD13Ak0gL4I4a5njeZQdikFxKOad2oqzWjFNeB/9nJFqk/1uRgTcqmD1unmWBRjZ qt8xCF7Yl4kfdGvOIf+9J15M4O9uzT3lZGeAltoxvskeQGEI1KhSOiEvyDcFRQIwc4dap2bSKOO N53Cd0u5aFaJYrmtkkoKqK5dWmX+3bdn1DE4IR9f05hfzJpyJDaULufGRLoGujlaOJgV+m7ACgo zI6Qc41AJFwJ6p3kk74UV8xQLes8ycDIxfP3CXR5LeHYMMm93//C0QkfLjH/dveISHRGjZV7QU2 8YCjjs3Fu3cmoQS/l/jXS9pJ/AbTr5fokQg0wna6x2+OJUnka0CkzAXmhx1Twq7hOj7a1vaV+mB vlN5LBrEXw2bdxyD1eYjItANsa8ZApn1458eS8ZoiyRd2yNUveIELuqN3o1+UO9qrwnQcXUlRFI XENpcw/CjJ0QRAcXvt215rzsZE8PV8UNAraYPOMyTJ8vUEbyG1iUhJ0eTkbZ94ySgOaaDgSS2b4 4UpF1Na+XGPuYM= X-Received: by 2002:a17:90b:2803:b0:38e:79f:76c6 with SMTP id 98e67ed59e1d1-38f6a4e2786mr3548232a91.24.1785266838605; Tue, 28 Jul 2026 12:27:18 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, lorenzo.pieralisi@linaro.org, gshan@redhat.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v2 20/24] hw/arm/virt: Use RAM instead of flash for confidential guest firmware Date: Tue, 28 Jul 2026 13:26:26 -0600 Message-ID: <20260728192630.240375-21-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260728192630.240375-1-mathieu.poirier@linaro.org> References: <20260728192630.240375-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: 1785266944388158500 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 9b7553dde5e1..1e8efada209f 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 @@ -1168,6 +1197,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 @@ -1212,7 +1245,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 74fe21712d4f..ae663d051ac3 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -1823,6 +1823,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"); } @@ -1873,6 +1883,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); @@ -1908,6 +1928,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) @@ -1916,6 +1962,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], @@ -3278,7 +3333,10 @@ static void machvirt_init(MachineState *machine) vms->bootinfo.get_dtb =3D machvirt_dtb; vms->bootinfo.skip_dtb_autoload =3D true; vms->bootinfo.firmware_loaded =3D firmware_loaded; + vms->bootinfo.firmware_base =3D vms->memmap[VIRT_FLASH].base; + vms->bootinfo.firmware_max_size =3D vms->memmap[VIRT_FLASH].size; vms->bootinfo.psci_conduit =3D vms->psci_conduit; + vms->bootinfo.confidential =3D virt_machine_is_confidential(vms); arm_load_kernel(ARM_CPU(first_cpu), machine, &vms->bootinfo); =20 vms->machine_done.notify =3D virt_machine_done; diff --git a/include/hw/arm/boot.h b/include/hw/arm/boot.h index 94386fdbea6c..fe7e14e94651 100644 --- a/include/hw/arm/boot.h +++ b/include/hw/arm/boot.h @@ -113,6 +113,10 @@ struct arm_boot_info { */ bool firmware_loaded; =20 + /* Used when loading firmware into RAM */ + hwaddr firmware_base; + hwaddr firmware_max_size; + /* Address at which board specific loader/setup code exists. If enable= d, * this code-blob will run before anything else. It must return to the * caller via the link register. There is no stack set up. Enabled by @@ -136,6 +140,11 @@ struct arm_boot_info { =20 /* CPU having load the kernel and that should be the first to boot. */ ARMCPU *primary_cpu; + + /* + * Confidential guest boot loads everything into RAM so it can be meas= ured. + */ + bool confidential; }; =20 /** --=20 2.43.0 From nobody Mon Sep 28 02:09:43 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=1785266970; cv=none; d=zohomail.com; s=zohoarc; b=miRLIGcxh7G/ujxLVVxe5keGg1RCAtHAtmOz2DqA1xNQhIVUqiaAQC4/bmJ27aWpp06MPowLVrr+EpqqCu2+kCCDaMcHXLVVtkcYC5dYq3yQmHKLIx1jwYL3CakRPQd2zcvbM8VN1ETiwkc954hIbNYv6OrgxWukf3sPcWBdt4s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785266970; 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=HYPotfW6kht+UmRZFPn5+m79E9+yzPHwQhZ3Fc3kQx8=; b=JsB3P4qdw4gnYwEyYSsJ0p0RQPAsiMUeZ04QJSZ3oNTheVpnEV8LR+FC9IIsELbjhaBLHvfc+lkxGNlPBJRQOK0WDdSc3jUrKug2OezGfgDVYLK0JaWC2y0hcsh8NHAyzObWz8Ykt1+oGA8HSfv+rSNPYVaBDkPu73DQsk6fJRk= 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 1785266970735800.3087854797166; Tue, 28 Jul 2026 12:29:30 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wonU5-0004zG-QE; Tue, 28 Jul 2026 15:29:01 -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 1wonSW-0003XZ-9W for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:27:28 -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 1wonSU-0001d5-0o for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:27:23 -0400 Received: by mail-pl1-x636.google.com with SMTP id d9443c01a7336-2cc61541f8cso21632985ad.0 for ; Tue, 28 Jul 2026 12:27:21 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:b9d1:87c9:a085:86c9]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38f7f1353fdsm372650a91.8.2026.07.28.12.27.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Jul 2026 12:27:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1785266840; x=1785871640; 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=HYPotfW6kht+UmRZFPn5+m79E9+yzPHwQhZ3Fc3kQx8=; b=bn0js5jYIMA1UpYISZDPy+4RkrnAhaggCFXdY9ZtgMFuNmVVvfo50szKkfNF7KvJ9/ sQ5ODwkN71IGKN4dAtRMz2TEwPcXOBcqGObD65+lnj/gCSAtHDmpKUgcnXKxEnJkfIfw tseOe98+gSaNSvUxZcKe+hynpxbVQARDxd1sZ8ZYLTfsaRSqprr6akhnHTx/xBhRoaWl /5hnJ3KKZ4t68PzgbcIuNvnM4sek/LYHbp0akVLybrbnfh+ekZO+NxHeSUYil/vpGMr7 IrBjvEf9u7FhGKG/oHDfgz7Xe602SeqXv8p8goJJzd5Vf72xc8gt57sL+WxdyTo5nzkU U8Uw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785266840; x=1785871640; 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=HYPotfW6kht+UmRZFPn5+m79E9+yzPHwQhZ3Fc3kQx8=; b=HdEw2KwfTQC/MBhgIArYJ9HmIiCWVLXLVg7ge1NQSEMvTiT1LVjeOSiGg3GSdJIiV0 KGigFo5KbmJq5UU+RSMPlNs2YNW5M/CIFj6wdcHY9xwrERGLVpB1ralDt0kd1N0opLr3 BZBfdmp99SULb+hgEJiofOxYrCWEz2WVXmTCBII8HnKQywFo8OXqtRd1L18uBGGQ8BAH fY85/NL95uN9/JpOgyQIOcMJpehTq2JGXLRJ86MONIX5Re+2vNm+MZM56cs7vAMDndZJ /8jNErdbmYgDREQjhIx86/Bmhy3mkDrfXBKJdIZ0d7QTbmpC7wTZruzQ9Av1kq16A+UM rBpA== X-Gm-Message-State: AOJu0YwDAEiWqwz2VfNCzcReymiEvssH8YIjqQc2ju/iN5NJIzmgWMyT I9/bDkcQCRubLNIVrX14GY/SP71HFJ8POqhlC0yyjYpjCsPxJ7ytIfEklTeJCJpsJC4= X-Gm-Gg: AR+sD133FscaZryW+mdBnA20W4WY4deq4FjZB5ZJwtPklkpZPsmGbh+3Rk21oBGzMSS 8ioayucD1cyK5GbOK8ftE09TK5HMP7QFgfTy6Ehwqrmed18XqxjJSuODOX9keupDHD7y4fnslH8 qT60cOc3RaMJHGXnxnCrLD5pvTk0Vv3wfvI60wd6eQmat2ZhKe8PLNwUQ3a3jZhGKJtO5a/vnmz 5RziI7YUH8VKu5HpUOSPus57Sxuw7selHMu9SVUocwqoEkAT8gk8vlJVijJsq6uWSj6lH4rKQt+ PD4mmVdp629ZIZSd9nJTHsfBd7lOCcffGYD+k40uxziffcflniEDQ7+R1oZ9E0dfNowNmfUXRsR QHTYZy5png5elEPfo/zCnfPBEdOOLb3O/VUh47LO0g/6ObfBP2xaVtJ2TpF3zPK0jn4KTcrWuGl yR8vFg2xyi2/lBT/UqNgM/BaTV03AF X-Received: by 2002:a17:90b:584f:b0:38e:7297:a92e with SMTP id 98e67ed59e1d1-38f6a26e75dmr3724141a91.9.1785266840446; Tue, 28 Jul 2026 12:27:20 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, lorenzo.pieralisi@linaro.org, gshan@redhat.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v2 21/24] target/arm/kvm-rme: Add DMA remapping for the shared memory region Date: Tue, 28 Jul 2026 13:26:27 -0600 Message-ID: <20260728192630.240375-22-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260728192630.240375-1-mathieu.poirier@linaro.org> References: <20260728192630.240375-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: 1785266972442158500 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 ae663d051ac3..5b1608c23462 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -3327,6 +3327,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 335ad60d0f3b..7b83de2f956b 100644 --- a/target/arm/kvm-rme.c +++ b/target/arm/kvm-rme.c @@ -11,10 +11,12 @@ #include "hw/core/boards.h" #include "hw/core/cpu.h" #include "hw/core/loader.h" +#include "hw/pci/pci.h" #include "kvm_arm.h" #include "migration/blocker.h" #include "qapi/error.h" #include "qemu/error-report.h" +#include "qemu/units.h" #include "qom/object_interfaces.h" #include "system/confidential-guest-support.h" #include "system/kvm.h" @@ -25,6 +27,23 @@ OBJECT_DECLARE_SIMPLE_TYPE(RmeGuest, RME_GUEST) =20 #define RME_PAGE_SIZE qemu_real_host_page_size() =20 +/* + * Realms have a split guest-physical address space: the bottom half is pr= ivate + * to the realm, and the top half is shared with the host. Within QEMU, we= use a + * merged view of both halves. Most of RAM is private to the guest and not + * accessible to us, but the guest shares some pages with us. + * + * RealmDmaRegion performs remapping of top-half accesses to system memory. + */ +struct RealmDmaRegion { + IOMMUMemoryRegion parent_obj; +}; + +#define TYPE_REALM_DMA_REGION "realm-dma-region" +OBJECT_DECLARE_SIMPLE_TYPE(RealmDmaRegion, REALM_DMA_REGION) +OBJECT_DEFINE_SIMPLE_TYPE(RealmDmaRegion, realm_dma_region, + REALM_DMA_REGION, IOMMU_MEMORY_REGION); + typedef struct { hwaddr base; hwaddr size; @@ -35,6 +54,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, @@ -205,3 +228,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 Mon Sep 28 02:09:43 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=1785266992; cv=none; d=zohomail.com; s=zohoarc; b=nornZ/4HM4n61SMhtMjBjURbfoxfpHYETDG5SjfOLuD7LRYo6MsURU/E/xSo9LGd2CvlqnsBOGK0QCciHZa/aLdXCY1C7YyhLfLZ0vu5Ajn2pDqIaZdXdyzHeCdC945lIp/RJbxPfs+Oakz+/oUM2GDstD2qeRTSwHqMzkhDrTU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785266992; 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=Rp/eDciSC7GmG0DBwxd53+xP3HivGrzU0uzKP5uRDnvnweo/hfKmYkBuxn7Hi1sKVgbXRyGx4zIgMjRkquhOSInWv69rUXg43aNSsAu+ihUEewZ6x2Rs4ny8f3ERS3m1u8dtmWVx58sbe7sI1g2+O6QIAKfY6g3nKb9GfcCY3vM= 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 178526699241167.33667631452624; Tue, 28 Jul 2026 12:29:52 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wonTM-00047k-Jh; Tue, 28 Jul 2026 15:28: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 1wonSY-0003cR-T9 for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:27:29 -0400 Received: from mail-pj1-x102b.google.com ([2607:f8b0:4864:20::102b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wonSW-0001dd-1L for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:27:26 -0400 Received: by mail-pj1-x102b.google.com with SMTP id 98e67ed59e1d1-381b831d535so269115a91.0 for ; Tue, 28 Jul 2026 12:27:23 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:b9d1:87c9:a085:86c9]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38f7f1353fdsm372650a91.8.2026.07.28.12.27.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Jul 2026 12:27:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1785266842; x=1785871642; 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=aA461d18SCgxJJPLdJpLmuedoq8/77lD+ZTGHV92ZIUr2ok8EZlJAHK9K08Le6vy1d ZbuYi1m/OBmMf7qkJSiblzt3OcMzqejZ9fN/+EWMcJxuYYoX+Aci+sd06lNRrN826LaX tECLnSZMkHcNfPJsrwKc+/RsG0/WhcxXduSD6TskeCAywyW67TfzIOfKJXviAB6tmmbT ftxwe7Q/GCZQs4t3XAUrJSe4RZTs2clSMc5vGaFL5AiraxdE9mYvRdXFHXFby2WQRSAe K9TQzpqrAGjaHnHuk235Nc7l3HWg309NRtJaSF5zj20x81p7tpDHGGTdyLF3ofZmhE7j m6fw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785266842; x=1785871642; 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=C0YQ2rprYfJHmcJZskJSz/JjO7lTwt+cc4Y6xHe7dEheSvNv5LAeIYTyJPFINatnsH C+q8kBnNQnK6G4McKdgtoHaU51vjwHLeL3PIukAHMFbFgv/lkL8GUQNW+YUhOqVQc6or HiSVJQaQIK5Ct/ROKDAAdldpamxEVvtkUG6nnF5hpdLvSNEJQvLbUAPKtSZIX8bqrEEy LgGggQw6yxuk22tNOjlretmuhxV1R8FOwC2NEzECo8KFZeQjmDSoEzVBDXkywb7CGyT6 uWEnv4f0LKqqhOl8rCARsJne7eVtxLIgPrm74UdC36qeUeEPUesNKILSJaZQKO2c/eGT ZgFQ== X-Gm-Message-State: AOJu0YxT92HicgNWRWFhVFwKSaRu0B8pJa11w2Z5c9F/Ho+d6Z5dV31S W+7RpRcPM5rhrH9FF83zh0AE0WNrrDzQri2ZU1ha7GwOArTtcWH1ft6ZFdAYMRtLUpw= X-Gm-Gg: AR+sD11bVn0prGUSbZ5ESG42Dte0OTftNkZv79NOCfBuBV+bYi0+ermoWoAmK2/f/3o wPviFhgUNeLTyNqJyN1LmpsfRLBk/3b/3ku39pEWCxphe9kEWMC9cNol5y1aSixe3OaJkgy3R2r 90/bVDdxQ0/4AKKyYSKZsImA7axzMmQBiaULrd5EcE+sfzNrZ6lfP76Zg+XlPoZ1VP93TXleoRr 2fxchE9/oaQWfe74gm3mqWWGtRA+So2DyrhUep0TbbBRNehZMV4I9viwpWy0duYEC4wKpOvCreR PnFq+tDZQTthzc+P97BxlukUi0rtdA6BE1F3nHbC1vGPf7QILU0CRhi3/sBTwDnRiTVzwCiEszX oMthXxt7FV+R1iUdf7Hm54h/seYZoXiqLum5iycJA+fk0g7Al871e6kFWLa1CaF2To1Vf2xbVy+ tOWz4hb5WSS/KtVCb1WKS4AlRf6zHI X-Received: by 2002:a17:90b:390b:b0:38e:2f21:3bb5 with SMTP id 98e67ed59e1d1-38f6a4e3667mr4131018a91.21.1785266842244; Tue, 28 Jul 2026 12:27:22 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, lorenzo.pieralisi@linaro.org, gshan@redhat.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v2 22/24] docs/interop/firmware.json: Add arm-rme firmware feature Date: Tue, 28 Jul 2026 13:26:28 -0600 Message-ID: <20260728192630.240375-23-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260728192630.240375-1-mathieu.poirier@linaro.org> References: <20260728192630.240375-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::102b; envelope-from=mathieu.poirier@linaro.org; helo=mail-pj1-x102b.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: 1785266994448158500 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 Mon Sep 28 02:09:43 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=1785267114; cv=none; d=zohomail.com; s=zohoarc; b=RjwVONUCpqmlzIDe3FTqLP4iR+7L2vFBf/0QzDQNLI1sDERsElu6HWyPfWRallweQmNbeDAPVHQ1NCdi+T8IvxS6P26OUsH5FE6NW40/uh8kUR5w/QWu4t34woofnkHoDoeryBNwvbxuh8zw7JbDNpbRgGmRc5+xTjuQU//TCxA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785267114; 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=LpASq3jOBF00q1EZdBLVp0S8hhXgpRTHfBnK0kI8ssk=; b=Gpothc2DtnD1/FqRvuIpEr7Rwv5la9TEdrD8R5nsMYzItFLsSJc1zLwNmma5vl+4PhNdVbHG8imMx7O1Bm7dLwB8ZeZv+30JI05GAOC+oi7ool3yE9jDrisRkovCbyGRysm62k0gGpGtYwlGqQDh9eFbNqIrcn4z14i2DmvZ9n0= 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 1785267114837558.2468430302912; Tue, 28 Jul 2026 12:31:54 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wonUE-0005Ps-JH; Tue, 28 Jul 2026 15:29:11 -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 1wonSZ-0003cn-HK for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:27:31 -0400 Received: from mail-pj1-x1035.google.com ([2607:f8b0:4864:20::1035]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wonSX-0001eJ-Qx for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:27:27 -0400 Received: by mail-pj1-x1035.google.com with SMTP id 98e67ed59e1d1-38dfe910e9dso161195a91.3 for ; Tue, 28 Jul 2026 12:27:25 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:b9d1:87c9:a085:86c9]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38f7f1353fdsm372650a91.8.2026.07.28.12.27.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Jul 2026 12:27:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1785266844; x=1785871644; 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=LpASq3jOBF00q1EZdBLVp0S8hhXgpRTHfBnK0kI8ssk=; b=D8omu9Du/0UkorCtGyhr73TtjY98gEmaL/qXwyorjycBqE/D8xs+aguGR6po/XCZkt GMYHvK7LOMWaezsf7tcWoq2J199u7rz4foCJBJDYLS3Gqv46UyO2SLJV0UlW88J/b3CO Y7hcL7SKBQOgv7FbP/AyO5PMyHHPkjqdGm+sa9DuCaIf8IK1+cdUzlwjC+8HXwck51YN Y1M1BvlHwAxbOEQZAXycyoQcTfIAwL1tIpXEjgkiHiY28yC81z3PayEJs94hYpIxbZnM r+Nswyrlr91NyDtSTqWgI0mztzL4bI8FmDpnOarWhE962t/c4iha1wOqCGhoVxr8BoVq afkQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785266844; x=1785871644; 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=LpASq3jOBF00q1EZdBLVp0S8hhXgpRTHfBnK0kI8ssk=; b=FAxrOX4ZcZkL/6s965ARvGVDEI6zHsPyLRBuqhkAdo3ZzyPga0nadtpLf5pWtuMeg7 i+mfZHiEceQpm0tVD/r7CA8Cjh7lsRmxfOFR/Ipdso/iu1+XW07/XFQmfnVLSRO++huX SpWRI9OTsKPqHy6mp/tm0PTyMLYZ+BSeoVW5gPViXIcxi8BPZYsHXnAusn4oIrRymBv5 DmpyGfCQYXvjsmDS/2L3zlfw/XsmrvdW1LLagAjIKJvfOaZwTyxjyNsoouHirPH/7lQC mtaHpzn09CbdClsWCFYWA8fDo5oDkqKqKDstu7pAD6fKVNymF2j5i0GKusFds/dGFxBs 1Jcw== X-Gm-Message-State: AOJu0Yz5JbeEG6gQ2hca8fxrq2zqxiH38DI0tRbIEzocRPYEvgTc12Lm pHBihPg0svUyqFOUiaUWVq5wKLI1zJ0aYckeEBkagpEOC4uBc2O0nRzzwkicDJaHBx4= X-Gm-Gg: AR+sD12ii0mtGTV/kR9XB2SbAjdcTKXMxCiB0EU04K4XeqI3/3+vj9Tysd6F0u/qmHn kCz2aS9XYnIKbGVH0U/L8xuniwep8NZgRTqTFcwFnSFOGgPi/Kly5LhpA7BeGRmA5BXbEypprYW R+kMcWepmM5T21HecRwer17tdemRLM1ZhA4WuVYce2RFYVqm4qKu0m3ubEW8jRQNDGfgKVCuIP0 nvYIpNy0Tl2YOF9CucV7HHHqh8LJnc2M/ZZLBuw4u7bS6B5HCXJ+/IW6+rIgx71X8HjAQbC5xRR 0nVzoHykvg4kNQ5jL3k2tzknSsNqknl/Roi/W7OLKVvS1cfahfDaTrCCu0aCJ2cKjSpvnvBj6Ul DRkU0VL8LCfeHN4VQz+OSrwhMY06ULo+V4wKMPNxzBvNd7ki7aYkVrlAQ4sTx6Jv5bOTh8436hA RKjYZdqvCN+KjWjFJ5fwV/jpHi7yx/PVqyxsyScdZGxQe07y7DEetrbF1g505qet8OoaefPIHXU 1eBUvkOdhfRzWc= X-Received: by 2002:a17:90b:5864:b0:38e:c7b0:84ad with SMTP id 98e67ed59e1d1-38f6a1becc7mr3877953a91.0.1785266844304; Tue, 28 Jul 2026 12:27: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 Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v2 23/24] hw/arm/boot: Load DTB as is for confidential VMs Date: Tue, 28 Jul 2026 13:26:29 -0600 Message-ID: <20260728192630.240375-24-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260728192630.240375-1-mathieu.poirier@linaro.org> References: <20260728192630.240375-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::1035; envelope-from=mathieu.poirier@linaro.org; helo=mail-pj1-x1035.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: 1785267115217158500 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 1e8efada209f..9b3d3558bcbc 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 Mon Sep 28 02:09:43 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=1785266954; cv=none; d=zohomail.com; s=zohoarc; b=ChADQfnPkLHmQiIeE8EXScS1MaKEGDq3UwH7OjOkGYzZnhQ2hXKX1Gjtus54WypuZN8v2JCmgS73taZwZ3M3gPhIuXYd5TSJ1QXsnlESexez2ulb+kJtDXVgROsF7YrC0tKa1ce/3DPbLFGO8L459crlTsHazs9Ahj5DawvekZg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785266954; 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=ECmgHwSv+GZ8NtYZYa9Wu8TZqcXs72gUdyc3woKQsHw=; b=DEDdsniKBJdhcnBp92binIaMwYHYMzv9ZCLzoXaH6rSzoggCTJ4IcVNNMND9xFq5RO9k7o2GGAc/ENyltT5VeaZ8q6fzOCwiNz0JJS4RW6uc3V4fY2L+3XGbsQXzeTHSTIRG59FoAbKzJaO8UI6IEFGYsk0MLYs48ZhJRGLWZss= 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 1785266954436394.1480673901094; Tue, 28 Jul 2026 12:29:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wonTn-0004Xa-Fx; Tue, 28 Jul 2026 15:28: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 1wonSb-0003dJ-8U for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:27: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 1wonSZ-0001ez-GB for qemu-devel@nongnu.org; Tue, 28 Jul 2026 15:27:29 -0400 Received: by mail-pj1-x102d.google.com with SMTP id 98e67ed59e1d1-38ea87caafeso162281a91.3 for ; Tue, 28 Jul 2026 12:27:26 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:b9d1:87c9:a085:86c9]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38f7f1353fdsm372650a91.8.2026.07.28.12.27.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Jul 2026 12:27:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1785266846; x=1785871646; 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=ECmgHwSv+GZ8NtYZYa9Wu8TZqcXs72gUdyc3woKQsHw=; b=bIah5Jv33DO+0ubqPVlIG4C+Id85DdYOBDrN0E2cmWrZ6/2r1KtgOm7PPTBxJ9EkhI riKvcHZ4+tytl1rAvC4k1rdjI567dhiCaxDm0lrgA1meHniJOHImmWH0uD28wuTd47Hz CK6XOGRaDP8xaZB7dKeYHlPJQgL3bHsXqI4zhNf5xHRopUDCjzlUrNQvSck8VuNcBSr3 zt4k1ma+ks89myQBlkEtQCebHJ5hhhAvMNPnCVCDFAqfmI8MevX5OoyHHnUB+PSR5x0N siwz6fkaCJGufuUofDvD7bkGQEsshw431u3qQKkBRf5dFQt1J2WHjd2UzAEkRm7KxSNg xeug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785266846; x=1785871646; 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=ECmgHwSv+GZ8NtYZYa9Wu8TZqcXs72gUdyc3woKQsHw=; b=Yf5/+FneHi27TiZ4WrN1CTT+ROxRSttbHuxSkQeliZn3e3NbCUzG3R1SEBa+shHc19 yQ0Mybt4KONtrcYHi4FDzMdvpsPbgnE3JgbOGsO8j6B0ZWgJOFkpse3Atw/gCQMea6Bk uUgQJNYcthfEwp4XJ6ZfejW/hWtSwDRKTQImmc04Z7OXN1nmC0tpczRc3D5l1vKbUjBx 97R3hjQX8B+tWniJVU4j5Te+jiYeKufgaQb1vuYZA09V0ktUOIpnUkCXDE0qC2YweBy1 TTsZ17CtjTnKywaX6BXrOuZy8onm957K3kASuoqBV2yl4IGdvhtE6oE4VEFPDyAOKR8c fRUw== X-Gm-Message-State: AOJu0YyeZY2IPaA2TvuwbWSRDg/inYkxdeaAeg5d82RutjGNKXbhGoBV W/eySSAPM7ZKL61pCZWcslKq1SVrHdtiyEocVGMVxvZh731Tgo0hWcFjWGk/24/zeZw= X-Gm-Gg: AR+sD134Lq7G7NhLlsDrxhErklEDFZAHa9DHbc/L3hKxw1d3kWr5uFIiQjK8mjmlwF2 tEsNw2Ig0vMUb8i89691xzzvGb0ni7xWm8J8z2WCun1dR3kQf02fBu6SOou3ydxqzUo7D72SDTN k2PwfYkQsKj+IG9NEq7LOdkbsN1UTYUSM1wlo/gXAS1H+/OYxAIgEbm44EQtImhc4aPWlDKG8gb lMFVzrmOoLciB2sEg7OflRX6vgOvbiq9+7LKyyG6z72MW99XOJxgATQpC5c2Ozfe+8hsHdiLtjq 0lXXFCHrgLokctLsnbvUmEEo64jMY5SZUqKrcJdcGMVTsN+Hsbph2uIekIS4VcoR210gpE8nVjp lLD1Qb6wqp/sIp2ieNnkbvMQhPzHwaCbKwZKdUlVcDWX8F3sLqzHvQXr5koy9VbspI/qbjzskzG 9DTtIJOVy5sbX1KWEao9HgZ+dipVOa X-Received: by 2002:a17:90a:d888:b0:37f:9ce1:735a with SMTP id 98e67ed59e1d1-38f6a556c28mr3900727a91.27.1785266845926; Tue, 28 Jul 2026 12:27:25 -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 Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org Subject: [RFC v2 24/24] hw/arm/boot: Skip bootloader for confidential guests Date: Tue, 28 Jul 2026 13:26:30 -0600 Message-ID: <20260728192630.240375-25-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260728192630.240375-1-mathieu.poirier@linaro.org> References: <20260728192630.240375-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: 1785266956353158500 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 9b3d3558bcbc..da4f399a3026 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