From nobody Sat Sep 26 20:52:33 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=1788464247; cv=none; d=zohomail.com; s=zohoarc; b=EmxYhYBBZvO5WzxcIeF/CMtPqGNkP8Uu6exOm+25RRwhXNLBJK05TtdHIS8PkxX5/DL1Flzbhmxp5OG89uLIgQOA4xeFYMsSj6d7g6Ha8iTe0/heoTn0sGbYP8At33KPYCDgUx7oYhhQkVTi8Tidi7ELc5GGjIOngVQ/YgyeL8E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788464247; 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=f32IWeVjFPoScpLFlx02pOBXGIUqQvqEdKcNhwp+k0w=; b=eEJT+opOfsptrqZCsROKMeT9i6va4dxSMcgzqjOnWlxuA9t9ZIVASa1qieDgBQjh0IM4irWIdAhMlci21Hzttxc+kO2UDyNBAZx08rXyMjzq7cHWkx+ZMYTLRfNwPTT2AuWbZ9hBrG/zVV9JdmToduESax6OsPu1uqHddU8AMpc= 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 1788464247177820.6387984464798; Thu, 3 Sep 2026 12:37:27 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x2DEa-0001Ki-8F; Thu, 03 Sep 2026 15:36:28 -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 1x2DET-0001Fw-FT for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:23 -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 1x2DEP-00045x-Hl for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:20 -0400 Received: by mail-pj1-x1029.google.com with SMTP id 98e67ed59e1d1-38ea87caafeso158763a91.3 for ; Thu, 03 Sep 2026 12:36:16 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:40c0:ec33:6266:c275]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39b083e4fafsm6836951a91.1.2026.09.03.12.36.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Sep 2026 12:36:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1788464175; x=1789068975; 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=f32IWeVjFPoScpLFlx02pOBXGIUqQvqEdKcNhwp+k0w=; b=tCYxKihtpSwybewlAo5OAxjiNscJ8OT41dVNpzcQeplsBt6pOD1YOPLrpfK5xFOB4L /yQUviDfIOPm77JZC6ygHF/440AQGDfDD09u0+AjDe0qvRMXrDxrv7FrAY0B/xjfVQW6 0BPoWWJKYlA7pLSnNa20/sgV1ujD4dUtYFthun4SEAHHYl38vKriz4vDMxI492sfAgq7 fThlRCmTlvY5gCj9r3duetjp7PWVZ5zXwM17UqirAgr59potypgHANUaG3azziNThaX3 sTeBRQMsoI807t/xarvp6KMRHU9yAyGWzEaFcV78ZysjoUhn587LmjhMKkGj3uQXNt+9 JX+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788464175; x=1789068975; 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=f32IWeVjFPoScpLFlx02pOBXGIUqQvqEdKcNhwp+k0w=; b=RzIhB0lpDsrHFLqwE6jI+FhbCOrlsiRXZPvd2Y2B+YOMI/WyTCyvoGpHmSmyotP7jT UGuQxT811mtT97Exi/G2Qp9MLfVapGvb+wa0s/46kLRY/JJziqWtG/v2iBZPR6JDFYvc mDQG1oN5g7Ubchln4HGE1+4zBMLz19ImqMJ4GzTp31lhBhYDNeJECPLcjQ0XTOTED1t2 OHesmnqH11O0J81iJxjVeq2YdVHFfBuNOiv2fxfziPuuXYPSoAoUo5HAou2ojjq+OY2P AzB87DCUb/WBpjiD/hmouvQaiZQk7Hjxj4p80eviEYCxgAzpm6uRBzFuxSSRQ+M7FjDe xn1Q== X-Gm-Message-State: AFuF++ldOOL6nJ72b4Ip1J1BZQXonfDbuz2uvx4/pmXPDFh8bx1ZNtfx FPo37vlq6cJVGPVbju8NLo6lZSAvTd/zpHnKs7cHRh4JzYv0oJU4ZZefO082GyYNtSk= X-Gm-Gg: AYBFou1HB+AW3P+1ppondrhZQkStkv2emPQg8hkEzX8LCxjSp0RZR2y1S8swyqSBJIX 4P5RnZ6LKEd4P74OQ4zkuCyC/mGsxhElfTYRf75LpZmm0UL/NV505kC5eMO9o/qDlKKU2y1GxZz R3fXMLHeVtgr/xHBClgSnaGmBZ/6D7En/L4Ioy/F80RJ4s5olegWK0+2QgJhBjQK94+ulu3s/AI tawC0MImCBwMxf5RY4jlsLRavdQeQlsDdItoKzosfv3eUjTdaZL21yLZsU/MW4jveuqUOFrpDx9 JoYGMIbwoERLLYeOQAqCmkN78XqQqUkv/swtORPUvmhCGzJole3AUVQjlWXlor/U5qRxl7tVpnb A6eFU1BEgZTkcqwRVpPQaM7K+PfP/Cfphydiyr79LyVdACj8AFil0SnOPp7TUY3hmR0G/jgPPPc zzSZ3fDCh387vTTUpxJaD274FWeqv17SpWRxbPUFcKj4WHpkQl4rKFbOZPAZN0SIEJeSkAtwkgX se95jOWqxhL0Z9UEqw0+bI9qg== X-Received: by 2002:a17:90b:5287:b0:38e:6a44:671b with SMTP id 98e67ed59e1d1-39b25eeeef9mr1274489a91.0.1788464175209; Thu, 03 Sep 2026 12:36:15 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, lorenzo.pieralisi@linaro.org, gshan@redhat.com, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v4 01/24] linux-headers: Add RME related definitions Date: Thu, 3 Sep 2026 13:35:48 -0600 Message-ID: <20260903193611.1058589-2-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260903193611.1058589-1-mathieu.poirier@linaro.org> References: <20260903193611.1058589-1-mathieu.poirier@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1029; envelope-from=mathieu.poirier@linaro.org; helo=mail-pj1-x1029.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1788464249004158502 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 29f81c05aca2..8b7627f11447 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. */ @@ -988,6 +995,7 @@ struct kvm_enable_cap { #define KVM_CAP_S390_HPAGE_2G 249 #define KVM_CAP_PPC_COMPAT_CAPS 250 #define KVM_CAP_GUEST_MEMFD_MEMORY_ATTRIBUTES 251 +#define KVM_CAP_ARM_RMI 252 =20 struct kvm_irq_routing_irqchip { __u32 irqchip; --=20 2.43.0 From nobody Sat Sep 26 20:52:33 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=1788464336; cv=none; d=zohomail.com; s=zohoarc; b=ho+su8MumaLh0+yuJqcgQAW47cywFUN/Hay0xPPg7u0onuTw2d5C2Wq2QbkxDvi7gwG4YUVI19+d9uFDKcUyZy091Z5Tqb/rcNpsc/LW8ozmj+yiKmXbQ9y96kZ0eCWTdC1N+QP7rL7aqm61rqDYVd2AVtqFk4fA0GX2LO0tfD0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788464336; 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=IvXJEMFcERvycsNKTrwCeLDxKZkC6g5UrA0e/gxmm8kV93ypXKZ/Hv22Z4jCnnYLoXD+AdjdZLVI6/q6yJIN2CwzsMwJsME/JNRZRFsnDXiZUFFIymOvJsLTMZnawyL2ofFNrW+/5iIP8oU/oMDTr7ddxPA+LtnCVZ1rZsZ7Gws= 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 178846433693338.58563102693256; Thu, 3 Sep 2026 12:38:56 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x2DEY-0001J8-RO; Thu, 03 Sep 2026 15:36:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x2DEV-0001GU-GP for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:25 -0400 Received: from mail-pl1-x62f.google.com ([2607:f8b0:4864:20::62f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1x2DER-00046e-Ub for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:23 -0400 Received: by mail-pl1-x62f.google.com with SMTP id d9443c01a7336-2d72ae08fa1so1941955ad.2 for ; Thu, 03 Sep 2026 12:36:18 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:40c0:ec33:6266:c275]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39b083e4fafsm6836951a91.1.2026.09.03.12.36.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Sep 2026 12:36:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1788464177; x=1789068977; 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=QPLK5h45pUJbVPq3uaax6C8kyOzyhkdzwPDR7o36hs0Ogb2duPBlLDaRYjU34hg3CS XcXwTDENNa/t6CNPTt8OsScaz9U7V/bmfCSitSp7znlFl1KNtPoMt0eikzLCvuudy93s 49b+I0eH8g1ZFLIctjftLo8aRMbJyYD3dmViN4gybXbyl+2Sp1G9YdnLmixD/YO0jqIY Hcc8pZ40gxrB8fz0nG1DgdtJjw0BFJAZ6Gk7fnmyHAuSOahCs6iiZo4BF8IHz4zeT6RY ufJSb5EqwPmHuKeak5lyPUrQwlCHKIXYLl19PuR857o+1OS0CZFouSMNd12lehLNV2Je RwVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788464177; x=1789068977; 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=Q7o6mOJ9/HenP6hW3+QdM5ZNwxupuRAH1lGDPe34AG51QkTwgz0QkqwRGKihEM5f7f /8ivHG8CpyKOY1Xs0HOQ+kgi5NmmAR0SXeiJ3tDgs7gS/zdFMNE48ENaFJxNeHQPMJ4S ONgDXDlA/j+mW1XyXLWswVYsFAOyeh2CAeeVttpVp41UnuOg/BpjSsle9ELKQ0DJIqTH SOg/bCYqkKTgrQDC6duJQ1ZBaRdBzva9LfidHIpKBnpf3XwoF0APwuxEDQfLSHauphH5 9QillGOgoYU8AZ2XiskOjepqvwz6ZIroSJGjFyQeB++8nMODg7yzphuMGkPHV2Ypu67G wAxQ== X-Gm-Message-State: AFuF++m+v6CSyjNEceMSw+bMVvlBNGT7GpaKPd4qT3lcH3uw/geRmu/U BlzqKOQH9pYZ7lICQ1ildK16DLVzSrFl7XRvjys4t02gpyYH/rhShQucR8LQzOslkaI= X-Gm-Gg: AYBFou27ewqf39/U9+7+igdievYLP6Wuw1trsBpZ29uTtJoHuD9OH8WhtQnos/W1qBn HF4nwT95rKJlnQ34nxjthz9YH8XHQNjuQsBstRqbXHSfob7VWceZtm2uAHek05hNabkC7F8BG7Y nBQba+VxdXQs3aEGKg58Zn/Tiok8GB8O8KnlkP+oREZACV/IlQ3lR9H5wo3ikVK1TDJAlBPwuxk khFefGavSPTEby8rakrzCKykHy3yPTtxOSAW/xkokaJDD4o3Dej35zwZ6iW6k8PsKwqAN7JKwoV kl5QbIAYp0h1+fj+NkDa0G5GAxQmcg9vblPqZgWC4UNqyozRAzuGzWqbc2c8DQOjRP/LJYXYkGz rcAVewMH/LCx36Gxf9Labj5N26O7K1h/fK2AZHwImbGEY736n2G7nwNUCrtLg8VROSMea/UBCn7 V8iEWP97lqhPjPksXiqOqy+ZuGoPc2gWgooIHNRcs1Fi7Mo/B/d7vmGCf6PI4IWGFtfOQPis4VB 8ivUkVI4L6BnmU= X-Received: by 2002:a17:90b:57cb:b0:398:9be6:f998 with SMTP id 98e67ed59e1d1-39b262e2139mr1100782a91.23.1788464176850; Thu, 03 Sep 2026 12:36: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, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v4 02/24] target/arm/kvm: Return immediately on error in kvm_arch_init() Date: Thu, 3 Sep 2026 13:35:49 -0600 Message-ID: <20260903193611.1058589-3-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260903193611.1058589-1-mathieu.poirier@linaro.org> References: <20260903193611.1058589-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::62f; envelope-from=mathieu.poirier@linaro.org; helo=mail-pl1-x62f.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=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: 1788464337517158500 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 Sat Sep 26 20:52:33 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=1788464266; cv=none; d=zohomail.com; s=zohoarc; b=KbIQo076pAdS8aw1+pjPYHznNTN6J9awqbWRPTUYIs3ykdb/OfukP4vertYLwlKtprPKi2DGwem38Tn8wSqxoXe+MXBKRCwVctAa42Pqf0XrUzDt1JVqiABrFgH54rctcOBYA1QjS0fUBmpjacv/aRTyYkrIRR93fM9pkSnVxUY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788464266; 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=5FLJuLA46SDmJixQDc3xXINwsQvKq769fvjo0KX4+Uw=; b=nSiv3NFX32lE8K311RwaVbCOisnmNOCUV5bYE25+EgxZjY5IbCqwbFoNiTmRLQ4KkamGhe5t53LILRib4WGL3R26rhwqEQSF5yBTaHpnlxMlgLLfeyJwdHq8hFb0mOnrpYPNGZ0nkcR8YWnWtUEsSVe4B09Kyx6soAfDCPMqf7E= 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 1788464266835296.30276421837516; Thu, 3 Sep 2026 12:37:46 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x2DEa-0001Lb-N7; Thu, 03 Sep 2026 15:36:28 -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 1x2DEV-0001GW-Ha for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:25 -0400 Received: from mail-pj1-x1032.google.com ([2607:f8b0:4864:20::1032]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1x2DET-00046v-5h for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:23 -0400 Received: by mail-pj1-x1032.google.com with SMTP id 98e67ed59e1d1-39927410578so272629a91.1 for ; Thu, 03 Sep 2026 12:36:19 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:40c0:ec33:6266:c275]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39b083e4fafsm6836951a91.1.2026.09.03.12.36.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Sep 2026 12:36:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1788464179; x=1789068979; 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=5FLJuLA46SDmJixQDc3xXINwsQvKq769fvjo0KX4+Uw=; b=cEHWwK8QCA1sU+/CoMD7axBtE+DW1KeXP3WmsLahcSaoHfxE12Gu0YEFWjkJdTQtJB Drqq3R6tjSdkFL/89QU1Kb0UEWN/2Ys+bUTuFTr0giJ2wUpJ3f+j53rJmCELf7aufpjs +6wiUjxxOzC1qsxSfyNtpMFx+6GvybZFgsgC8wQ6vLq343iAVJd/iaxMGadtRHZg2fED EVOr0kj9riQeei1DyzDsWo68jzEdmzRbH4ALGvuwyjSMaU6zomNDfog31EJGyQvZMunu +dUO5j220O4tFK7iYaYr7HINPdUUGgTnN9Vhw/t/c1fJxdgCSiv6ZpFWBspJFUY4vVT8 7zAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788464179; x=1789068979; 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=5FLJuLA46SDmJixQDc3xXINwsQvKq769fvjo0KX4+Uw=; b=AvufAZiWHqiQcJW4vSL/x/Oo8PeOxgXQI6RD5WlJK2tItpZwjnAdnD1WlPuzP+4gEX WIlUtIMdTYSXWEygKS9wX2cFkwjL5/mQ+bp38ith9+Eq1S/1+zNKITR+ejwBuBzd4UBI EyBP23gui5Gyi9Go2mUDBaTiZxD7sN5ANXsS+/6JijmFOHw8rapaxrqnBzx4qoNjQvAh JkBpt194PwErSiVZeMkcVfJtrFhlHnXfAYZF20McRC8HZDyKvOPIizRM/ij7ddG2eIIs DoOj4ER3xzWztY0krIUCp0l6yOPLUbQH13sbVsUZhUVsfHSgZkIXxUuaYGiy7tCm+SJJ 6uAQ== X-Gm-Message-State: AFuF++kw512BQmRpwhEKbYwp1V4Z//bp6OMyV0qyX7p6ZVBYjKXzrbVE v8LUHvjp8URqhSKzloXA5ntUrXImLgCDVX0cyJjstpWtdCIN3o1CuCB6jrWS5P2dlBo= X-Gm-Gg: AYBFou1fScuwG/whk5KMT+Y1E6WWSeORgpAIFDGrEj+qYdPB9S6k1VrrRdy+ARvUvqC A66QJ7VjutvkmntJQyufc+qdDpSsWqRoajQPCKW2zV/9dHGBl5GQMr/ueAXgink62FrBUKQeVs9 6uT0rsQuZOlOJ2c5oYHI8napzLSWctyuafVdIMRB+TxtyFwnVpt+JtIyQBqlzgFwQoNT50XJGc+ pU8sm66tmmt/roS9Eolc0NfSyOCvt6N1jU7bUswfTzXnxReXdNS1h9cfRYCCwM6vufjGc/NZJyR hO4dWWY1EiFMwPZ6w23h3OtF/Hb8BKLD7F6z/qMvQpB4Wx65cTuANPVvNe8VxXdsRBmlU9+IGaC liLSD/N1Ra0oBSJ11BUMS38hyYk7Wg1NLuEQU/tGcDoiGW1J2HdxWgZeX1QOWODky1y0D7aDWt2 +eM0yUMH6pan+cm4FM+fKN4A3ZYnrkBPfrOziXF8+o11G1otRU/5F3jYixradYO9YASc/P7j1c3 xH4Eq1Rh7VKFrFHtY2INOpEz0c= X-Received: by 2002:a17:90b:4ad1:b0:396:635a:9b10 with SMTP id 98e67ed59e1d1-39b2616ef8amr1085128a91.11.1788464178684; Thu, 03 Sep 2026 12:36: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, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v4 03/24] target/arm: Add confidential guest support Date: Thu, 3 Sep 2026 13:35:50 -0600 Message-ID: <20260903193611.1058589-4-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260903193611.1058589-1-mathieu.poirier@linaro.org> References: <20260903193611.1058589-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::1032; envelope-from=mathieu.poirier@linaro.org; helo=mail-pj1-x1032.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=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: 1788464269159158500 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 Acked-by: Markus Armbruster --- docs/system/confidential-guest-support.rst | 1 + qapi/qom.json | 13 +++++++ target/arm/kvm-rme.c | 42 ++++++++++++++++++++++ target/arm/meson.build | 5 ++- 4 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 target/arm/kvm-rme.c diff --git a/docs/system/confidential-guest-support.rst b/docs/system/confi= dential-guest-support.rst index 562a7c3c2852..abb56923ad13 100644 --- a/docs/system/confidential-guest-support.rst +++ b/docs/system/confidential-guest-support.rst @@ -42,5 +42,6 @@ Currently supported confidential guest mechanisms are: * POWER Protected Execution Facility (PEF) (see :ref:`power-papr-protected= -execution-facility-pef`) * s390x Protected Virtualization (PV) (see :doc:`s390x/protvirt`) * AWS Nitro Enclaves (see :doc:`nitro`) +* Arm Realm Management Extension (RME) =20 Other mechanisms may be supported in future. diff --git a/qapi/qom.json b/qapi/qom.json index 776b13027fd8..52997c29a32d 100644 --- a/qapi/qom.json +++ b/qapi/qom.json @@ -1288,6 +1288,17 @@ 'data': { '*pretty': 'bool', '*close-action': 'MonitorQMPCloseAction' } } =20 +## +# @RmeGuestProperties: +# +# Properties for rme-guest objects. +# +# Since: 11.1 +## +{ 'struct': 'RmeGuestProperties', + 'base': 'ConfidentialGuestSupportProperties', + 'data': {} } + ## # @ObjectType: # @@ -1346,6 +1357,7 @@ { 'name': 'pr-manager-helper', 'if': 'CONFIG_LINUX' }, 'qtest', + 'rme-guest', 'rng-builtin', 'rng-egd', { 'name': 'rng-random', @@ -1427,6 +1439,7 @@ 'pr-manager-helper': { 'type': 'PrManagerHelperProperties', 'if': 'CONFIG_LINUX' }, 'qtest': 'QtestProperties', + 'rme-guest': 'RmeGuestProperties', 'rng-builtin': 'RngProperties', 'rng-egd': 'RngEgdProperties', 'rng-random': { 'type': 'RngRandomProperties', diff --git a/target/arm/kvm-rme.c b/target/arm/kvm-rme.c new file mode 100644 index 000000000000..42e1d1e7b859 --- /dev/null +++ b/target/arm/kvm-rme.c @@ -0,0 +1,42 @@ +/* + * QEMU Arm RME support + * + * SPDX-License-Identifier: GPL-2.0-or-later + * + * Copyright Linaro 2026 + */ + +#include "qemu/osdep.h" + +#include "hw/core/boards.h" +#include "hw/core/cpu.h" +#include "kvm_arm.h" +#include "migration/blocker.h" +#include "qapi/error.h" +#include "qom/object_interfaces.h" +#include "system/confidential-guest-support.h" +#include "system/kvm.h" +#include "system/runstate.h" + +#define TYPE_RME_GUEST "rme-guest" +OBJECT_DECLARE_SIMPLE_TYPE(RmeGuest, RME_GUEST) + +struct RmeGuest { + ConfidentialGuestSupport parent_obj; +}; + +OBJECT_DEFINE_SIMPLE_TYPE_WITH_INTERFACES(RmeGuest, rme_guest, RME_GUEST, + CONFIDENTIAL_GUEST_SUPPORT, + { TYPE_USER_CREATABLE }, { }) + +static void rme_guest_class_init(ObjectClass *oc, const void *data) +{ +} + +static void rme_guest_init(Object *obj) +{ +} + +static void rme_guest_finalize(Object *obj) +{ +} diff --git a/target/arm/meson.build b/target/arm/meson.build index 0369f96b4cc6..9d322a7aad28 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 Sat Sep 26 20:52:33 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=1788464455; cv=none; d=zohomail.com; s=zohoarc; b=fIQ2YBH9Zi46jyGUYzEJ1gV9v8U61HXGT4x90qHQ+pWgCO4NCCA5MwQj/kwHm0ne/vDK7Gre21JvITH6n9Z/YrLrBxFSoODNozIRomxUbTkj8kUnySX30WR9NoNzN7azLvWCBvsdQllOprvsTgRN9AWAtmX4d9IFi3azvYlBKvE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788464455; 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=i3s4/uL2nCcl6R6HIOwHPfPYar75XVk8sVrkSd1EszE=; b=BEHJymhTqavdNQJc1rCkArOpSajMMP4xVuyVal53iDSL6iTJAlJF+kEBgWop1fBbw08U7ykZY7HP190nn5+JQeNpmaVnYAk1CEiVNWOcE8w2GUwHpk1tE66vvmY+TfQJJ51Ty77DCWK7AyOqU0L//yI1LfhQsHvqpiUuVn3Lci4= 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 1788464455008409.9318641337028; Thu, 3 Sep 2026 12:40:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x2DEZ-0001KP-SD; Thu, 03 Sep 2026 15:36:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x2DEX-0001Ho-Ew for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:25 -0400 Received: from mail-pg1-x535.google.com ([2607:f8b0:4864:20::535]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1x2DEV-00047J-5T for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:24 -0400 Received: by mail-pg1-x535.google.com with SMTP id 41be03b00d2f7-cc149372c14so215651a12.1 for ; Thu, 03 Sep 2026 12:36:21 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:40c0:ec33:6266:c275]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39b083e4fafsm6836951a91.1.2026.09.03.12.36.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Sep 2026 12:36:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1788464180; x=1789068980; 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=i3s4/uL2nCcl6R6HIOwHPfPYar75XVk8sVrkSd1EszE=; b=ReQrJMgA/ZwJqzhB0n2C5aYza0rt0SqnGJtkc/KW2dgcgayQebJCjEh9pRjIlptihj c2qiWFTC4fgqryxAum82fzXlLv0hR5BwdtEC9CvK0SR/0RjYmB6gjfwK0byWWRY6KJ6n ya3RtAag7p62L4mS0NCBRiWOu0yXxcxQvA1hQH+wl3/AdRyUFEfFwWjrlFYQhhLfhm1f ftkdX1g+VJlVfdYJGiucQBJs+XZMR27xhp4JoHhS3OnoH/vzFP7i3p+OWjzOJoCGIESt uYbiHm4C35DrrgLRiK4y0rbc8G/lYWU7DaCxDPxuBMGTKSvZIenPpDBuKZtWUrBu5rir fSxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788464180; x=1789068980; 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=i3s4/uL2nCcl6R6HIOwHPfPYar75XVk8sVrkSd1EszE=; b=A9DkO5Tx+fGgm3d3iFya+768yEqen93PTz4OXt/Xv58YrHm2hpCTTGi5hP7/+e39IQ LKu073qtQrneDgUq2bTMvGJWOvyYcpHYPuSLzIFZJlQ2nSh4NO7pqTpErEzGFEnnrXar CZf+CQWXwn9PEaIjc2xock9utfZwwCUkSjgzUavBvLYe+fkV/YhjR+m0cJuiWopB+EwH GN2nEgzwb20fONqy3zo3mepK2WGvJr/qcLPMAcLc+l/0oEdFePu+SoxxLhZi3NGJpdcR QcQDpRJ0Z04j787KAp3rSmR8w6cDbxdznAfK7GpuHbDX6wkNanY72XVz/Ypq+YTpwzKl Ct+Q== X-Gm-Message-State: AFuF++nbVCDfsxyluZxa93ffp+JpMR29wN1zq9MJNAJKKnmrqRlEHzVl hyChrSnKH72O/F+mUE8PTzXLCTUhy93MUBtnTBTeqqJP4Wdoq6hQcsVTO2nJc4rJllI= X-Gm-Gg: AYBFou2n4opDw/3m7g+aNP3orXroEpbvbhgvXfhgNAub6taF1vgEtqMESFd33kpNOrU DsiOh9SrPpvEhlxu4nuStNwAGWiR8P35be1q97CBIOTNTJzcWUeqhzfh9KfxJe00H3IrCf9aERG 7UY6IlqE2h5W8uzSodW7q0sfm5tLxoHzn0nznUYmTNM8ht/fuezan+YCEaBTC6T/tk749uBJSp7 IOkHJIrSKOnCjHo8ldIR6en+UvH4mJiJZatfBRDIXB4dLuKhSc8vmJO3jSl/AIHUG+6Lw+Hp3CC FE5bMf8NAeFXjxXRAcPRZG7SAJvQM8wqfwzGGZRItazk73TXGe7Uxl/PFNgFf4Kl5yYIXxa5l2j mkcZmbkWZbZiIL0tOeozQp8Rq/nCG1igZ6uJnZ/lhfYX6I9H16ABfxtqNnYlo/4v5dekkA077BD 2S04OyE4GZ9XIv32yj5q58wCssa/z7RSQK5UV/Yolz0HD/Tr69GMnGSV+2avCDVtX2sqou4z7rH aKaf4yuhjtulpY= X-Received: by 2002:a17:90b:264e:b0:398:9bd1:3215 with SMTP id 98e67ed59e1d1-39b262e28cdmr1126889a91.22.1788464180505; Thu, 03 Sep 2026 12:36: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, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v4 04/24] target/arm/kvm-rme: Add mechanic to initialize realms Date: Thu, 3 Sep 2026 13:35:51 -0600 Message-ID: <20260903193611.1058589-5-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260903193611.1058589-1-mathieu.poirier@linaro.org> References: <20260903193611.1058589-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::535; envelope-from=mathieu.poirier@linaro.org; helo=mail-pg1-x535.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: 1788464456197158500 Content-Type: text/plain; charset="utf-8" Initialise an @rme_guest object and install a handler to get notified when the Realm is ready to start. That way we can finish reading the Realm once we know everything is in place. Signed-off-by: Jean-Philippe Brucker Signed-off-by: Lorenzo Pieralisi Signed-off-by: Mathieu Poirier --- target/arm/kvm-rme.c | 51 ++++++++++++++++++++++++++++++++++++++++++++ target/arm/kvm.c | 15 +++++++++++-- 2 files changed, 64 insertions(+), 2 deletions(-) diff --git a/target/arm/kvm-rme.c b/target/arm/kvm-rme.c index 42e1d1e7b859..a4a5e195c196 100644 --- a/target/arm/kvm-rme.c +++ b/target/arm/kvm-rme.c @@ -13,6 +13,7 @@ #include "kvm_arm.h" #include "migration/blocker.h" #include "qapi/error.h" +#include "qemu/error-report.h" #include "qom/object_interfaces.h" #include "system/confidential-guest-support.h" #include "system/kvm.h" @@ -29,12 +30,62 @@ OBJECT_DEFINE_SIMPLE_TYPE_WITH_INTERFACES(RmeGuest, rme= _guest, RME_GUEST, CONFIDENTIAL_GUEST_SUPPORT, { TYPE_USER_CREATABLE }, { }) =20 +static RmeGuest *rme_guest; + +static void rme_vm_state_change(void *opaque, bool running, RunState state) +{ + if (!running) { + return; + } + + kvm_mark_guest_state_protected(); +} + +static int kvm_arm_rme_init(ConfidentialGuestSupport *cgs, Error **errp) +{ + KVMState *s =3D KVM_STATE(current_accel()); + static Error *rme_mig_blocker; + + if (!rme_guest) { + return 0; + } + + if (!kvm_vm_check_extension(s, KVM_CAP_ARM_RMI)) { + error_setg(errp, "VM doesn't support Realms"); + return -ENODEV; + } + + error_setg(&rme_mig_blocker, "RME: migration is not implemented"); + migrate_add_blocker(&rme_mig_blocker, &error_fatal); + + /* + * The realm activation is done last, when the VM starts, after all im= ages + * have been loaded and all vcpus finalized. + */ + qemu_add_vm_change_state_handler(rme_vm_state_change, NULL); + + cgs->require_guest_memfd =3D true; + cgs->ready =3D true; + return 0; +} + static void rme_guest_class_init(ObjectClass *oc, const void *data) { + ConfidentialGuestSupportClass *klass =3D CONFIDENTIAL_GUEST_SUPPORT_CL= ASS(oc); + + klass->kvm_init =3D kvm_arm_rme_init; } =20 static void rme_guest_init(Object *obj) { + ConfidentialGuestSupport *cgs =3D CONFIDENTIAL_GUEST_SUPPORT(obj); + + if (rme_guest) { + error_report("a single instance of RmeGuest is supported"); + exit(1); + } + rme_guest =3D RME_GUEST(obj); + cgs->allow_convert_in_place =3D true; } =20 static void rme_guest_finalize(Object *obj) diff --git a/target/arm/kvm.c b/target/arm/kvm.c index 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 Sat Sep 26 20:52:33 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=1788464353; cv=none; d=zohomail.com; s=zohoarc; b=ZIxPbR8QbOcDCxPodfWVm+JtmWNSFuR68bw5knDw5/NSgK440JLovIq3TPxamB8hiqvy6X5RC16PWvITPUFHiHGTxwed+qjE7PRpg2x7NZ8rlYVqBSNV787uRIYxTSptU89dXcSPUl1tLZJ1m/IFEd15+frw9rPjLgxtgAUD7j4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788464353; 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=dbYIA/3O1P0ALhf0v7xLqPRmbV7kqSR5Ie3zeYDEJHR4YUv5rOH3PvQQ94RN9+OdHRt4/mNjC+KIpZRsGvHBi3xCEgH5y2c7aX+Ta7rpRXtKlN5gaeA178UPYABnpwBEpSQmF8BGjWp+xQ1whWCjDN4nn2ejzSpxrqrttkC8t1c= 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 1788464353789116.10885758846337; Thu, 3 Sep 2026 12:39:13 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x2DEf-0001Ns-Kb; Thu, 03 Sep 2026 15:36:33 -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 1x2DEZ-0001Jw-FN for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:27 -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 1x2DEW-00048M-Oz for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:27 -0400 Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-2d53197d8b5so1909395ad.3 for ; Thu, 03 Sep 2026 12:36:24 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:40c0:ec33:6266:c275]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39b083e4fafsm6836951a91.1.2026.09.03.12.36.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Sep 2026 12:36:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1788464182; x=1789068982; 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=HzvFmfN/BHxkDgOsnE/Xl5iQZYcQDTxu15Hq6pnLgR6anZZEgN9313BDAY2WyZ3sLr B6H4OLhtah0KsCWXw0vXSaSD4X/D+FzI+61dhj1DvRiBViSx1f6604Nxjkd7VmxdcJAM uvvMk9uCyVutFLkSOKYGpQ21VtGVFdgI717zcjyTvU7xWzNgeNc8PhBQS9pCT/xPY3oW ec+dioL9YOjZLXHpEqyQA3tAcP95b0KJuJCFSRVbntaqC3FEx+n0HH4ouL9UmE50v/8T SVdhBoG/8skB3B4bB5FxPQ4eQytWdk7ZNNt9zRFvIeARfM+xWZTQ10a9+EX6/nx7WAlh LSoA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788464182; x=1789068982; 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=oTu92KIKYafPF8L7vUvDGEcd0+EYpIAyzlArwcXUFDmNXEN38oT2Bu5Mvha0D91NtW HRG0n9vbvE/A52o6jBTIirfy8y+Th0MyxIcUcnYepAP99iWNTx56bt3hKUSu+8T+WPYE Patntdh+h4kvR1+3hMmvGV3muKnpSpV5jVkM7NjMakVWkEqQ+vFGOTfxIaViVKvUtFSM ROAiSOQTG1/a6Ou85kZ+syqPATcTb8xF+7nvmG3ck6Ugwzw2zw5r2e9eoXgRKxweDnOR LRWAfPO4L5vtz9Vi5/qgH21AeDPV0e0ayFPHhLy6mvGe64/cyl9G5lUkZEIRY6hSYMrh fAdA== X-Gm-Message-State: AFuF++myszPf7/i20C2Fv3be+uedCjJyUMRBkuUh4Ba7d+WmcYaMMHcQ oZUSuyZoZ1wydOxY1dqXY+5Ql4jRCMIuhhPp1380D8xRcfXY1pb5W0AN0of714WiWC8= X-Gm-Gg: AYBFou2kaVW8xCEZ8YNpDsfOlioWHuCW9LPpExcWmZ/htkrjVwM9hEoKoNUeJRCfq4z 5oVek3QF8ijxy9OhpsYCeFSyWMDtrvq6bhaub4p7C1ui8eylY5gKrxD6I4ocznbWiCHeRgCj+4q 8WZRokrnZQnny3vTFjdXNScdbEcgckQuKEa1gNPBxh3kYJuyzYmwow6Qoog/XcfGu/3wsGme8/T h1FaqytdkiK2lnrg/vTkxSxbQGXmS4VhY7tEfC5iLCDpBB9vtNoQlwmryK2NxBcLywR7LqbI0yr 7oGdXNvSIQYWc0N3Qvv1k+x3vb875OtZ+uuSNoyN/uWatKa6DypQjZwGO3NET05vdZ+mh8ptWNl ItwT8jPAKFfSlMt3XiE2eCeuLMgKv6nH3JeIPsHNoZ0NmvLJmGHH+Urzd+CPjbtZAE6d0hfEsXZ 1yHYjnLtAgOTjyksVfswVKKCjQQKOSapnotIKgKIyUzbF1ExHzkhOTccmE/9Z6MDobGRMynLb7b 1at77qY08el0cg= X-Received: by 2002:a17:90b:2542:b0:38e:6aa7:68ad with SMTP id 98e67ed59e1d1-39b26101402mr1172680a91.5.1788464182044; Thu, 03 Sep 2026 12:36: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, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v4 05/24] target/arm/kvm: Split kvm_arch_get/put_registers Date: Thu, 3 Sep 2026 13:35:52 -0600 Message-ID: <20260903193611.1058589-6-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260903193611.1058589-1-mathieu.poirier@linaro.org> References: <20260903193611.1058589-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: 1788464355707158500 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 Sat Sep 26 20:52:33 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=1788464292; cv=none; d=zohomail.com; s=zohoarc; b=dEI/R9mZhl4oB2VBZhsyf4LILvwD/GFCZTczByHOIQB3pVTx30qsr/6t72R8lorb7lPB3pHO+xlmj9OgQQRJUUFuCBRqsNIrkqCt5WQKYAe6RjLGyY+VICfBFtQsrPS0V9SffXf1Gc220ZyeQxIUWKNjjQEmlbKAOgtuhjTldcM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788464292; 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=pjEnAWjV/7L51IbxCkjqlwouDh6XAo827NCEZ3RXico=; b=OfCeCF9OthWfCJxRJlYI/HrkbF7Ates4zjSdjHy+1PkfO7Xi3Jk3UvbupWcBLVYpjQ1uAtxCA2mFA9GkfHTNbajWdnr1++1EJu7X9zrvFxO6aOCZFvG6yjUPUDJFTkTqXck1xE9ShzbHQjX+bNeOt7Hq1ijZjKamoRwA4qrGy7k= 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 1788464292850536.8260526244279; Thu, 3 Sep 2026 12:38:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x2DEc-0001Mp-Ag; Thu, 03 Sep 2026 15:36:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x2DEZ-0001KS-Sj for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:27 -0400 Received: from mail-pl1-x62d.google.com ([2607:f8b0:4864:20::62d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1x2DEX-00048b-Ub for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:27 -0400 Received: by mail-pl1-x62d.google.com with SMTP id d9443c01a7336-2d53197d8b5so1909685ad.3 for ; Thu, 03 Sep 2026 12:36:25 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:40c0:ec33:6266:c275]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39b083e4fafsm6836951a91.1.2026.09.03.12.36.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Sep 2026 12:36:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1788464184; x=1789068984; 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=pjEnAWjV/7L51IbxCkjqlwouDh6XAo827NCEZ3RXico=; b=FnQ1fjMY8S/LTrufIZbUKA1D71RrZdTaOmKmLdvfc5rJVC4jWGfzVuvuK/5nQcTAdY 9OqFAxL/sZaIrWoUjjT4cxEYX1aVT9LqgwqUa4jHT6JuoJfcV22+6kY/sKNtTLDQyIdt j8FUa/jtBkcwCN7TCR2UEd/6st4uEu3gwkdZJgzDZVypCKoUc0xoNpSW1LN6V0/MUxIT 3Z1MUXCZLyKvWXWZLyFbKwqvrB3wwi6XLZ8sC/tA68oq+HfeO+4khWF92LgQQi/u+XjA ZYAV1TH7Coq8njyp063AFt1nQjKQIstszpustAH/Q+Z0BGlJLI8TqekYdoaPZ2OS95OJ yGlw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788464184; x=1789068984; 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=pjEnAWjV/7L51IbxCkjqlwouDh6XAo827NCEZ3RXico=; b=W1/mVkPbbWCF+4IP/i8cNoJ6SRVM2tY5crNTd1ImrZgFsSQANn1x/PQk84NG2zw1uv kgQNeHk5BNPYIv8TLX5Ux+bLR71yrb60YY+HGxqd0U0r+oYbXC/KViA1hU0z4OLSI6ZE hr1z7N5oFy7e/T4rao51jNHJVhPbuXkMvTxAHNGEz3yH38H6PBGCjUd+HPB45srOw2pb ZfqxJQR2i1glPJWvLlz9a3k7plP8p1Z/FV5c4xorsmNfJmSQHOVnflvrcOtwUVDa+MSy kHSb1u5EcGgbcQLInGPNZYvhLNF/tjc3gpvQyZS7rm1DUaaADwEip4q2CQRAxAZz8gIT Y1Pw== X-Gm-Message-State: AFuF++kHYnuLLjfLYO1lhz2SiEFMOaJsPCff7RTdAGvCtWvS8yTuGHbr vsPb0wG3w9zPTZdfZHJxcc38svSvM+zeYQDjyWpAH72rFGhB0r29DAmo9F5+q4/wZjk= X-Gm-Gg: AYBFou2UWArNXDsfYR60i8l3n8XyyybilUQA1yJzQpQ/Ja2Wya324L9bHnYjnPG7Aoc 020+mES9mbEdaPK06MbqjCJNjBDAbKES1+lVcEw3HwPvg5W9JxfA2PBwbQQ5Duxa502sV3GkvU8 zrHM+CsaqKJJH4sckcocJR/ikbBGw7Iyl7YY2sTZGros0VsxmB5vv4fMhJ8RSaDj9+W82RggDrN Ku2ww2ysk7U3HfB2CaqCSS5ilDCO7kmslqC3R9R0QlW5jZX/YPQ1sLHYvIr9hKoQObGparhfOzi i1w1t+6DC7uGGXv7gHE6J9qvgy/+nFMVU1yZO24HZ3cYggKWocXHRMJ3GnbwmZod0XcdDypmFfO O2506NB0PQJHjqzQBvyyeyDCLP/0yU9ePt9JklcjR2swhJOv7KCpDff9ua0h63weFo4Mww4qFAw xgNz8qpTs2EE8JYfxLELahpPhFoe6SdXrcOicJaNuaM1TUUQ6yzz6ka4zkA4mpBoy3pdqkO8+dO HpHbjiqlQEYZAM= X-Received: by 2002:a17:90b:4c4a:b0:398:bc52:825b with SMTP id 98e67ed59e1d1-39b2624c32amr1003136a91.21.1788464184154; Thu, 03 Sep 2026 12:36:24 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, lorenzo.pieralisi@linaro.org, gshan@redhat.com, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v4 06/24] target/arm/kvm-rme: Initialize vCPU Date: Thu, 3 Sep 2026 13:35:53 -0600 Message-ID: <20260903193611.1058589-7-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260903193611.1058589-1-mathieu.poirier@linaro.org> References: <20260903193611.1058589-1-mathieu.poirier@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62d; envelope-from=mathieu.poirier@linaro.org; helo=mail-pl1-x62d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1788464293379158500 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 e3f931dba26b..6bbc942f9a59 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -1054,6 +1054,9 @@ struct ArchCPU { /* KVM steal time */ OnOffAuto kvm_steal_time; =20 + /* Realm Management Extension */ + bool kvm_rme; + /* Uniprocessor system with MP extensions */ bool mp_is_up; =20 diff --git a/target/arm/kvm-rme.c b/target/arm/kvm-rme.c index a4a5e195c196..f7c2cc786e2c 100644 --- a/target/arm/kvm-rme.c +++ b/target/arm/kvm-rme.c @@ -69,6 +69,15 @@ static int kvm_arm_rme_init(ConfidentialGuestSupport *cg= s, Error **errp) return 0; } =20 +void kvm_arm_rme_vcpu_init(ARMCPU *cpu) +{ + if (!rme_guest) { + return; + } + + cpu->kvm_rme =3D true; +} + static void rme_guest_class_init(ObjectClass *oc, const void *data) { ConfidentialGuestSupportClass *klass =3D CONFIDENTIAL_GUEST_SUPPORT_CL= ASS(oc); diff --git a/target/arm/kvm-stub.c b/target/arm/kvm-stub.c index 88cbe8d85c41..5fde96f9b281 100644 --- a/target/arm/kvm-stub.c +++ b/target/arm/kvm-stub.c @@ -119,3 +119,8 @@ char *kvm_print_register_name(uint64_t regidx) { g_assert_not_reached(); } + +void kvm_arm_rme_vcpu_init(ARMCPU *cpu) +{ + g_assert_not_reached(); +} diff --git a/target/arm/kvm.c b/target/arm/kvm.c index 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 Sat Sep 26 20:52:33 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=1788464279; cv=none; d=zohomail.com; s=zohoarc; b=UiaT/qb5vu5Z47rI69kziJpRd2q8jVQ+xzVsmBScIei9kcJmhnTLQTENtoltbiI55/9ZNR0Nz8g5dGfT7OAn8RzwJxeXHJV7uj3VoQ3YkDM5z9TAFyXALJa1XE3RmizoUhqybuohByArUBQ1z/HHlTiqhGeAH+8+GpX56im6RiI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788464279; 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=duX3KQ2JODfIu5j/Kc3XF1mGB7X5+RlT4MfgDKQYJ94Q5sPOu5YhtH7Wnb2pIZiMAhAHoliS/jHFku3+N3UzNU7QMamsaHGeEp+BAUEOmA91PSYqLKAZBNypJh75PiTrRf+cUsuVwvdqCllusBm4KOu8byiwE3jcPX1z+v/j+Lw= 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 1788464279922801.6677842462927; Thu, 3 Sep 2026 12:37:59 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x2DEg-0001Ow-Dm; Thu, 03 Sep 2026 15:36:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x2DEb-0001M9-3A for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:29 -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 1x2DEZ-00049q-IN for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:28 -0400 Received: by mail-pj1-x102a.google.com with SMTP id 98e67ed59e1d1-38511175ad3so161132a91.2 for ; Thu, 03 Sep 2026 12:36:27 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:40c0:ec33:6266:c275]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39b083e4fafsm6836951a91.1.2026.09.03.12.36.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Sep 2026 12:36:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1788464186; x=1789068986; 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=yBJ4agoBTQbQd7Vkz9bYjxon/c8C/XuTCwT79SjstETTHZio7gy1XgAhovehD6n2GR xhfXgNXG7q1Ms3N6ZVf72OfZ/djDmss0ga1S+/Fn+YfxULpQTNTdIZUKfWbXLpOv/lE5 QGpoAIms1rL/7xqHuam794QJtGVxi7RVUmeF5W+3+6hcff8s6v6OncVbVBzUSt9dfpSo fxqPE2helov33XfdNDe6LQZ5M0LGy4m637AXA+iMEHbCPp1LNKWTfXsShsZp494PN0Xf 7it9IarrF/aFZ8BbbvhPaI1yF7mpxXLc/gGpetkDc+WWb1cSuGFAa+nBOyW5tU+J3Zwq glmg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788464186; x=1789068986; 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=GX5qUO5JQ9TEYSC6K29bvjLOmkfk5NoSn+AS7xwyUpsp9pqrQPdXOBCbbRPgXzK5vF D8dcG5p+7r6KSb/X2gpuZuvOtvRitoKkfpX2EfGh/DDhVi0W0Ka2o3M3JEdEMw9EcUk2 awclBHk2oJTWobAK1rGZh077MYFOHECjT74vVJxdGsre8D813Kzb1uM3ggAVJD7EW+Qu 6+lIRCjTRNUVzsKZqbgh6eB3jw3a38iQkA2R3WCx+QoPfyhIDJ0gJm5x/o8AvT+xKhxl 97O9U2fo/mDTyd3mNMMDTEkU0mFlGarqW8Fj+i1RhseoHvLD2416iC576OaWgpQX/WaV VOgw== X-Gm-Message-State: AFuF++mitZ97QhT5cl+G0vACTTXzeH/+hAnYcoCg7WrjRMXMnw5W2EwH vLEE2XxAfNVLkkuiGFFk4RxVwl/22cs4SWlpzpjtv7CXejZAnJH5s4FHYaGucw45GTk= X-Gm-Gg: AYBFou2qrN6JsYRTSSx1bc/xIyQ0vhtsfj3IqJXgohy/eaolr7nEw+kwBpzDHIw3oID pPWfd2/RkOnKeZ39HoZOWYws+nXcq+xi60xGX8UTJ/GJ2NE6cURvRjW3MfYMSOvSETP9bAdHP36 XRQnqn/sOn2Ss9eloqrj/JnC08sKVAZE+aqEDNtAJNwp6C5Qzd0e9vw9Gyu0aTLiHGAxKl811Xb dOIPkCFFbYyMD2XEE9zEl0hoR6ujaXcarLIoVVY1ZYylIGXJHzpW1gpy+q11aX1tPoEmjiEuNCA 886rBOjs+4rVUVWDubBjoZzQDhohHMWW/FaMLH5J9GxkLY9ce2CPXgo5Mp1x9zUcfpOeDV0kyS/ DIdV10L9HpCCEj3ecketwu9lIdzEe7pZaI+n/eg8/AjsQ489JlI+W1Ws+CWZ3ONGFNP8Y2S7kYr NZCRdkFomR/BweC2RSHRRTIDJn0rPJYSUir5LTG2KJMbPhMI6XAbk9gLUBZnpUUmBFpw1ro2H/W Hrdhe1EbNVnVmU= X-Received: by 2002:a17:90b:4c51:b0:38e:57a3:f218 with SMTP id 98e67ed59e1d1-39b26204e5bmr851072a91.13.1788464185768; Thu, 03 Sep 2026 12:36: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, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v4 07/24] target/arm/kvm: Create scratch Realm VM when requested Date: Thu, 3 Sep 2026 13:35:54 -0600 Message-ID: <20260903193611.1058589-8-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260903193611.1058589-1-mathieu.poirier@linaro.org> References: <20260903193611.1058589-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: 1788464281141158500 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 Sat Sep 26 20:52:33 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=1788464404; cv=none; d=zohomail.com; s=zohoarc; b=U6ZpW5dCTswQZtNXuqA0nQ+ac+yNgmErJLQ5ZNsukbl5Oyyagbi55lzjzoYJFt4hs4tTQczrn8atvlp1ZVtgJetIa+ku4kKnGvOGLxGQyou9mB4LoLxv5gJ2axvgkHMalnfeCgS5pI0Pjxwqo3eehOLLNMHJpnVUWIVyMRa2mc4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788464404; 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=WkBIOKR4nn6Cp90N68JmMr/qaQZgLTq2QO4yasLXKy0=; b=k3fIbjBYzqC4modkQSH2zdyybgSY8I2GO+FUxAtI5tC8j5FNaADa9wY2hlSIyXNGFFX6NKr+x0NG/wsypPddPh7NhYeUIkuzw+HsDXSCUz+T7kTzmxRc7y7u1m2fjCcSIuFwcm18Eg18tggmRHC6mhE0zyHKscXxmiKLi2xvL+s= 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 1788464404610768.2371858960705; Thu, 3 Sep 2026 12:40:04 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x2DEh-0001Oz-9Z; Thu, 03 Sep 2026 15:36:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x2DEc-0001NM-Or for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:30 -0400 Received: from mail-pl1-x62a.google.com ([2607:f8b0:4864:20::62a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1x2DEb-0004AU-6p for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:30 -0400 Received: by mail-pl1-x62a.google.com with SMTP id d9443c01a7336-2d9004f39d3so2771295ad.2 for ; Thu, 03 Sep 2026 12:36:28 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:40c0:ec33:6266:c275]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39b083e4fafsm6836951a91.1.2026.09.03.12.36.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Sep 2026 12:36:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1788464188; x=1789068988; 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=WkBIOKR4nn6Cp90N68JmMr/qaQZgLTq2QO4yasLXKy0=; b=SY54dgM+mMcsSeUiy9m6Cvh5+Od+v2ywSLx7cMPhhXsLucYbGg0s9YTzrWVtxDNshf bAnT7kEmARTwIncZ/WKltiLxPrSggADMdfv4rNgWATKjVAvFmk63MGZ43e90e0WQmHjg MyWm4Czov2r12J45BiNsZw0ByBOWLTdoE+OQ+XAxfgdv7kn/MqqQdPdcLQnetpOkUNb2 b4PtsZayYohbZS/1JRz7osq/WJfgnOP1BFEgjsVUZJ8L9A8qZws/voql6JezRJ7cY4hs LpRMhJNfGGvAvOwSx3AOraCesWzfNOZ9B9UK6SFe9tN+rXJrLq1k3ipzuMcaNkRUWnl8 tC6Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788464188; x=1789068988; 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=WkBIOKR4nn6Cp90N68JmMr/qaQZgLTq2QO4yasLXKy0=; b=rEsFiob2nCHz+p0zlLUIqo03LMOpFmQeeORSh8QEHxF9VsKzLo126OZIKjfM3iZAr/ Q3IcUx7mg5aND24HqYZHL19j1asjBUsvSEiri9yp/jEKKQxTyiKC4gbsWhSWOchKFuv4 ykTumIo4QhLqbdc+kcK7RMl/yj4C+mn+fLrwQQMlNL/xf22op+zme9+VN68wWVMtTBQD 8AQ5PHJL0naENrnG1tQDNjlyehPB5qM0elsOrgsiFUjZX9fm40qx87t1t5l+fPoDepNX npNBXUUiEFRFluMDP3OZ8dnyaYQPmhNKxKj0qR8asxwE/34zj5vI0Hv6BelqbZIcXvVD htTQ== X-Gm-Message-State: AFuF++lFe3OYsyS/bKulWwufej9AR3+T0uj2u5YNbtAPFEOEnF8/OcXQ TNOgD7I92ew17XowPwg6yxllv/K7EzVPKnRiUIzMegTOvGCg/9exHSOp2h64BrRVqG8= X-Gm-Gg: AYBFou265lY0Z+IGufoclujAp2lsq1dDpbwwiJB3HMy+kSe8zGbEjrJnJuBIivin9Hp jET1UHwYwYy4VBNtg+12+iW1Hs/O3NVSz+xhhNV8rNQAWwGIuMhNFLsO6XdfJC/TByKuRvK7pZi 6Tl3U9UbipjPSiVIMG9o7M34p/KscRzSWhcnxlVhloHAGuAD14qd2D9bZNeMLYT+RZR6PzvVdRd LykZQFl6eX3OD1c52FxV2hY9qZv8S0phQh73wp6f/hPjJ/gS4bOvaVjoAuug6pkhw/uCtdI6fK0 u2K56u/FYpo1VQ2si6qgi10pwFgojY2Gs/4MWC9TLqR+365kW70BBD+6q8c4TjHI8G+Gry5nxC7 mACUkpHmdliSy51p0dh1rZEDcfI8sk+h0KBS9hbtFeKVSAeqVQEuncaJCgMhsmMxWSchpUJl95N XPwehVGQ5EPN8jC4+DxSTQ78mEmg3rufCgDVVKhXmnAY+nhl4eCp7+C9E7b3oV574F9tR9yrw4H IZhxjmoUccAMvSN6mr2jwxhKQ== X-Received: by 2002:a17:90b:394a:b0:393:19a3:4f1 with SMTP id 98e67ed59e1d1-39b2613150amr1206644a91.6.1788464187787; Thu, 03 Sep 2026 12:36:27 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, lorenzo.pieralisi@linaro.org, gshan@redhat.com, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v4 08/24] target/arm/kvm: Use kvm_vm_check_extension() where necessary Date: Thu, 3 Sep 2026 13:35:55 -0600 Message-ID: <20260903193611.1058589-9-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260903193611.1058589-1-mathieu.poirier@linaro.org> References: <20260903193611.1058589-1-mathieu.poirier@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62a; envelope-from=mathieu.poirier@linaro.org; helo=mail-pl1-x62a.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1788464405965158500 Content-Type: text/plain; charset="utf-8" From: Jean-Philippe Brucker The Arm KVM code can return different values from KVM_CHECK_EXTENSION depending on the VM type. Use kvm_vm_check_extension() where necessary to ensure we get the right response from KVM. Signed-off-by: Jean-Philippe Brucker Signed-off-by: Lorenzo Pieralisi Signed-off-by: Mathieu Poirier --- target/arm/kvm.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/target/arm/kvm.c b/target/arm/kvm.c index 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 Sat Sep 26 20:52:33 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=1788464462; cv=none; d=zohomail.com; s=zohoarc; b=YMEWDL0HzOltxaeaMxuNxT0jqiBlFLjN89wF2aD6OEdVj5zw46pJ/IJ2/Y0OX7Ar0sPBWKlaMfankMm5Btb1lFnPilRmP/OecnVvGUWd2hNdmEhmZjtKRenxmqi7OXQgKxkLyISe3xNjaTpJ8Bjynuom+3SbMoB5u5hTM3ysf4c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788464462; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ycFh0f47IuceK21rmhYjAzxurWXaF92SY8dhiJMI5DE=; b=YYbQCb7xAA7WJQA7QDSO4gfTypWVuu/Y675J9Au8yH99mkH1NrQzetRqpf0gCqAxUYJUWnjuwXTm684En2keOPAmJcbhe9olFqou7JAqumoyEN6a/21fxUGQ170AjvLZ6CHcDMUz2A7Ma1GNmiLJfahcxONDLfaulm09yVTBmXo= 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 1788464462145320.8656663669286; Thu, 3 Sep 2026 12:41:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x2DEh-0001Q2-VC; Thu, 03 Sep 2026 15:36:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x2DEf-0001OO-RC for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:33 -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 1x2DEd-0004BF-2f for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:32 -0400 Received: by mail-pj1-x1034.google.com with SMTP id 98e67ed59e1d1-38d489b6b71so231511a91.0 for ; Thu, 03 Sep 2026 12:36:30 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:40c0:ec33:6266:c275]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39b083e4fafsm6836951a91.1.2026.09.03.12.36.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Sep 2026 12:36:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1788464189; x=1789068989; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=ycFh0f47IuceK21rmhYjAzxurWXaF92SY8dhiJMI5DE=; b=tB3IlDClbD/8VJsv98HcG5xJFGXZgaeAwRRB4R+Ogvvsa0VVXyNkZZR7F9tR0A5RIh hPTi5m+13qsTMuMKMoiY+0tUmH1zVgsa6y43JqYEHdW2GbSzn4hBShF05Lk5hhaI7RGj vujqpLIgna/Qo6YwSlJ+FzyMHnT02gUAcSSqUMRwuuVfk/VUEd4GK5fMSQP3GcW+qeta G/Wy/rYIlYivBTAlDUUwXcfJFenHxJItMWYIVbWgPZbVik3juZAyovi3fIzTZCVBXPfW i8PfC1ys1KXs/SqVtdLni2HjrLeHVJ1ye4ZaT4riopMkzCgl4lFFFmZQE1DAC35WUwkT rMKA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788464189; x=1789068989; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=ycFh0f47IuceK21rmhYjAzxurWXaF92SY8dhiJMI5DE=; b=P1aWg+db7328a49az6b4sOKqc8O7TWWW79/F6kDvTfnXZxdFX6Nr/JJ6GKfw+XvRbr CoKovRsdmTEEBBsaIrPbn7d4431kSsqqhx7U39G81zt1F8y9H/bwqIhkP8di0ZTLd1TR eWS+QSa2zKbNSfjb5SfFQ8weYkrnoP/un7UjbQ+BlAdHlEtu4zAv/kvApoM1cRXb16Be WTxvEI9H6fNjB/M7IVq5YDEgZQuJca4IrXW9QGj5dIdLpqg9zv9UuC8At42d6TwKhj13 JOjuwBtsVw+b3OaJI0U2bcfVcdTJ97MOdzRmdXBvZgIIDdHv36WLilPWotaQ4QI/Xt85 nABQ== X-Gm-Message-State: AFuF++kPq5C0eFo35dkRSLDooKLLWqSq9zPqvRcSQLbe/DDU+moO6cJ5 Anff4iqJ3aUZdWEX8lun4uKt1w+j9VdyBR56sZSpOS4XeKtQZgxdQh2YSd9CuJsq/s8= X-Gm-Gg: AYBFou3LKf9/TycSgPHwj1gWvY8p0ej6IwizlPZP+8tw7VE/bMrtFZTaZctXUOlUkHd oo2iJC75z2L22f0hj/nRqWoS8q7vFBmXPgzgvBYtmO2F5JmhgYlJ+WETFnTaP2QqPWNB5o1GSVk tFRoXR2TbPBHkru2O23fKVyBAHnzVIACIn7vIEhnB9P+hD6WzLbvUJQcfWF5WW9sxI5kWou2I5p 2G3nFgvOqrn/s16Cow1Nqy4jkrJlZnB9K+AnKXLSGsEfTxdcMyZ5kPxq3QOot+tT9RoY0OWN0/D fFgNZQSlZe+n1ovXprhiVfbOlW00qt8I9MyHG3WIWhrwL7qXV6004ZZe48LixuI74s0Q9vbpHzb HaG94J1tnlJGkrAAtNy/TuR+WSJKm2k2Qdl4jkaqUDWnYxKl2SYGCFh1tVThPS9DEd5MxKfrGYR eKJvmmXNx4N04YDppHKlpM3VTvQ6xjgEi2N5VbUsxI4RxiyWfxDyzufvb7qn+c1TwiMePBnoQ4X Pprapnlq0gXBUw= X-Received: by 2002:a17:90b:3d89:b0:398:9be8:ea69 with SMTP id 98e67ed59e1d1-39b262167e7mr1125588a91.22.1788464189422; Thu, 03 Sep 2026 12:36:29 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, lorenzo.pieralisi@linaro.org, gshan@redhat.com, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v4 09/24] hw/core/loader: Add a ROM loader notifier Date: Thu, 3 Sep 2026 13:35:56 -0600 Message-ID: <20260903193611.1058589-10-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260903193611.1058589-1-mathieu.poirier@linaro.org> References: <20260903193611.1058589-1-mathieu.poirier@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1034; envelope-from=mathieu.poirier@linaro.org; helo=mail-pj1-x1034.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1788464464150158500 Content-Type: text/plain; charset="utf-8" From: Jean-Philippe Brucker Add a function to register a notifier that is invoked when ROMs get loaded into guest memory. It will be used by Arm confidential guest support, in order to register all blobs loaded into memory with KVM, so that their content is moved into Realm state and measured into the initial VM state. Signed-off-by: Jean-Philippe Brucker Signed-off-by: Lorenzo Pieralisi Signed-off-by: Mathieu Poirier --- hw/core/loader.c | 15 +++++++++++++++ include/hw/core/loader.h | 17 +++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/hw/core/loader.c b/hw/core/loader.c index 5cbfba0a86d2..388f10e828db 100644 --- a/hw/core/loader.c +++ b/hw/core/loader.c @@ -74,6 +74,8 @@ #endif =20 static int roms_loaded; +static NotifierList rom_loader_notifier =3D + NOTIFIER_LIST_INITIALIZER(rom_loader_notifier); =20 /* return the size or -1 if error */ int64_t get_image_size(const char *filename, Error **errp) @@ -1201,6 +1203,11 @@ MemoryRegion *rom_add_blob(const char *name, const v= oid *blob, size_t len, return mr; } =20 +void rom_add_load_notifier(Notifier *notifier) +{ + notifier_list_add(&rom_loader_notifier, notifier); +} + /* This function is specific for elf program because we don't need to allo= cate * all the rom. We just allocate the first part and the rest is just zeros= . This * is why romsize and datasize are different. Also, this function takes it= s own @@ -1242,6 +1249,7 @@ ssize_t rom_add_option(const char *file, int32_t boot= index) static void rom_reset(void *unused) { Rom *rom; + RomLoaderNotifyData notify; =20 QTAILQ_FOREACH(rom, &roms, next) { if (rom->fw_file) { @@ -1290,6 +1298,13 @@ static void rom_reset(void *unused) address_space_flush_icache_range(rom->as, rom->addr, rom->datasize= ); =20 trace_loader_write_rom(rom->name, rom->addr, rom->datasize, rom->i= srom); + + notify =3D (RomLoaderNotifyData) { + .addr =3D rom->addr, + .len =3D rom->datasize, + .data =3D rom->data, + }; + notifier_list_notify(&rom_loader_notifier, ¬ify); } } =20 diff --git a/include/hw/core/loader.h b/include/hw/core/loader.h index d9431e8a8d12..fdfddfa7443e 100644 --- a/include/hw/core/loader.h +++ b/include/hw/core/loader.h @@ -342,6 +342,23 @@ void *rom_ptr_for_as(AddressSpace *as, hwaddr addr, si= ze_t size); ssize_t rom_add_vga(const char *file); ssize_t rom_add_option(const char *file, int32_t bootindex); =20 +typedef struct RomLoaderNotifyData { + /* Address of the blob in guest memory */ + hwaddr addr; + /* Length of the blob */ + size_t len; + /* Blog data */ + uint8_t *data; +} RomLoaderNotifyData; + +/** + * rom_add_load_notifier - Add a notifier for loaded images + * + * Add a notifier that will be invoked with a RomLoaderNotifyData structur= e for + * each blob loaded into guest memory, after the blob is loaded. + */ +void rom_add_load_notifier(Notifier *notifier); + /* This is the usual maximum in uboot, so if a uImage overflows this, it w= ould * overflow on real hardware too. */ #define UBOOT_MAX_DECOMPRESSED_BYTES (64 << 20) --=20 2.43.0 From nobody Sat Sep 26 20:52:33 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=1788464409; cv=none; d=zohomail.com; s=zohoarc; b=mD9fZdWHfKOB5zsl2SsC5CLtw9peutcU/fIjVwempyCGhv+KobapjQdH0204ZooLc1K0gnuSEdNJKM745kqJlhdy0BYrWP/1ac6WJF57DNRMjE32EwipYmi3AWhjaSGIqp7zOE8mf3wfsbPSGPtW6nsHhT4ia7kINpxV2OyRu9A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788464409; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=6yAZYi7h64i0sOWTrsMVth4dHq383ltCyuAo47L2qv8=; b=CKE6sWY7c2Iicy03MxUkTmUMg+wij6LbWwcemuAKgxyo8hHoOS91PpDpkrJWEUPvhZrz6/6wCel5TU/+09aQJOwuEf9Dwd54qVf6FNiTEgW0XUJanrEyvWTEBrECfAmHN1ymYAK7K+h73kC/ClD6QbFY0yBGw60becMBzXOmkJM= 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 1788464409682821.5509780452218; Thu, 3 Sep 2026 12:40:09 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x2DEj-0001RV-If; Thu, 03 Sep 2026 15:36:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x2DEh-0001Oy-62 for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:35 -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 1x2DEf-0004Bp-Dh for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:34 -0400 Received: by mail-pj1-x102d.google.com with SMTP id 98e67ed59e1d1-39b24d114d4so217047a91.3 for ; Thu, 03 Sep 2026 12:36:32 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:40c0:ec33:6266:c275]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39b083e4fafsm6836951a91.1.2026.09.03.12.36.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Sep 2026 12:36:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1788464191; x=1789068991; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=6yAZYi7h64i0sOWTrsMVth4dHq383ltCyuAo47L2qv8=; b=rh6nwpAhUZvMQRRojCOpzAUZQ0QypeJLtPMuN9k3EhIUroQtxKVSbrRDN+pRar640w OdpGBHm2XiOAxwadSWxWhQhR4lnXe9aRLHus3bZAzIvWoWbSGUZ90WHzh8N7wlKDvUcI lomPKdO21KkgNsJBcESpwGyx0pN6EC5nWb2r8JLdQhVkPCh+YgsvuDITsI7wYDZsMO/m aDqpQZylVZeC6fmSvOJEJcGX2dfaC7AdUnnAnnDnRtz1qzmva0dVbihO144oeDc7yA0s ZZgadDAX+UaN+NQCF6MciNWNiUj9dqrl05ZqQBftznM3d59bkpBv3oZbs9Gjp7ynntBa 37fA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788464191; x=1789068991; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=6yAZYi7h64i0sOWTrsMVth4dHq383ltCyuAo47L2qv8=; b=SlKipRj2sFISZYhsuD5lEURroUKXWtT+e3UHdalN12YcmabtHM2Z1Nuw1ihPxdQcTX /BD9SaNVLCeZ5QfdhVEfhUweqYVQLBxf7wBvIWQBCGm9ZZts1YkCSeFadwh1UcCikrrt DquuTLZ47FFyx+Wc4Xcj3PsUMFxpF4E2PHITNJ2Nsj/FcdMxBTCXFUSwUR5NQYcAOm6l Zu9DfaWePdDarHnsy3UYo3hoyCCxqh8u2tXn1HudxitFlWfV7jNZEwFDklUnYos4FgDz F/DRqwUoKWzd6XJpqfQbpAQQbq32H17s4QhqoaN4/aWxcr+Ls0B+sJOfOblHWNLuCzs1 KJjg== X-Gm-Message-State: AFuF++nnpY+7re0RGdYIboskwkCyiksWK2w5CH6WRF0Eck2PypVz8Rtp VFyywsdUAz54oYlll3Qpf9GADWFCtjZ/L4kP9aGZcs+4qqtU7VQvrO46aJYmGwFOnTw= X-Gm-Gg: AYBFou37f2pW4vEVtxK6eyoKbft08M5Rz4+8cd7KGTuTfslaljm+BuCE/Kt76XsnvcS iqMtoOTugkTn9hCyANN+/GFXXxL9v8KuutfzhnEJxUSKjoZNmcDX3a4iNoKLMrZiEhAfrLdLyrJ ZtBZY5ep3hsG/D07/EEnqtUbHkjW8gKqp0FSk7zXL5yEDN/2AI/gJuViLxEQ9Js5AJX/GE0SVs1 XfA90lQYiQxWj3ael4BGtgrFCnei7N9vr6Luc/6eVnIoYjFxw76cVYOk9fTUUEH2sN68DN1qFLX 2H6wWpsn6JbIO913ZEsHFe1nEtnuUSJgoz9/FQJTfyZlj9e92LFSFwubIfpzVsdtjECcMiqiJ1n HB+WTKvtTx/0+vpVJWd3Bxb6Xab/tV+50ZjEq5sDXO0c6uNm6NrjHe0KOqqsUNWojtozqEB9uNz 4u6el9RUQj6RMYEOteZ4ehi95drAUuI7WXiDP5kBkgAnkpW8D/67YhwQ78nODCFM3mlts8HWadz H8vX22N2mI9D4w= X-Received: by 2002:a17:90b:17c2:b0:38e:659b:f366 with SMTP id 98e67ed59e1d1-39b25f1c5bdmr1024392a91.0.1788464191280; Thu, 03 Sep 2026 12:36:31 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, lorenzo.pieralisi@linaro.org, gshan@redhat.com, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v4 10/24] target/arm/kvm-rme: Keep track of images loaded in Realm memory Date: Thu, 3 Sep 2026 13:35:57 -0600 Message-ID: <20260903193611.1058589-11-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260903193611.1058589-1-mathieu.poirier@linaro.org> References: <20260903193611.1058589-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: 1788464411989158500 Content-Type: text/plain; charset="utf-8" From: Jean-Philippe Brucker Add a Rom notifier to keep track of binary blobs loaded in Realm memory. That way we can deterministically calculate the Realm Initial Measurement (= RIM). Signed-off-by: Jean-Philippe Brucker Signed-off-by: Lorenzo Pieralisi Signed-off-by: Mathieu Poirier --- target/arm/kvm-rme.c | 52 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/target/arm/kvm-rme.c b/target/arm/kvm-rme.c index f7c2cc786e2c..9985f5daba89 100644 --- a/target/arm/kvm-rme.c +++ b/target/arm/kvm-rme.c @@ -10,6 +10,7 @@ =20 #include "hw/core/boards.h" #include "hw/core/cpu.h" +#include "hw/core/loader.h" #include "kvm_arm.h" #include "migration/blocker.h" #include "qapi/error.h" @@ -22,8 +23,18 @@ #define TYPE_RME_GUEST "rme-guest" OBJECT_DECLARE_SIMPLE_TYPE(RmeGuest, RME_GUEST) =20 +#define RME_PAGE_SIZE qemu_real_host_page_size() + +typedef struct { + hwaddr base; + hwaddr size; + uint8_t *data; +} RmeRamRegion; + struct RmeGuest { ConfidentialGuestSupport parent_obj; + Notifier rom_load_notifier; + GSList *ram_regions; }; =20 OBJECT_DEFINE_SIMPLE_TYPE_WITH_INTERFACES(RmeGuest, rme_guest, RME_GUEST, @@ -41,6 +52,44 @@ static void rme_vm_state_change(void *opaque, bool runni= ng, RunState state) kvm_mark_guest_state_protected(); } =20 +static gint rme_compare_ram_regions(gconstpointer a, gconstpointer b) +{ + const RmeRamRegion *ra =3D a; + const RmeRamRegion *rb =3D b; + + g_assert(ra->base !=3D rb->base); + return ra->base < rb->base ? -1 : 1; +} + +static void rme_rom_load_notify(Notifier *notifier, void *data) +{ + RmeRamRegion *region; + RomLoaderNotifyData *rom =3D data; + + if (rom->addr =3D=3D -1) { + /* + * These blobs (ACPI tables) are not loaded into guest RAM at rese= t. + * Instead the firmware will load them via fw_cfg and measure them + * itself. + */ + return; + } + + region =3D g_new0(RmeRamRegion, 1); + region->base =3D rom->addr; + region->size =3D rom->len; + region->data =3D rom->data; + + /* + * The Realm Initial Measurement (RIM) depends on the order in which we + * initialize and populate the RAM regions. To help a verifier + * independently calculate the RIM, sort regions by GPA. + */ + rme_guest->ram_regions =3D g_slist_insert_sorted(rme_guest->ram_region= s, + region, + rme_compare_ram_regions= ); +} + static int kvm_arm_rme_init(ConfidentialGuestSupport *cgs, Error **errp) { KVMState *s =3D KVM_STATE(current_accel()); @@ -58,6 +107,9 @@ static int kvm_arm_rme_init(ConfidentialGuestSupport *cg= s, Error **errp) error_setg(&rme_mig_blocker, "RME: migration is not implemented"); migrate_add_blocker(&rme_mig_blocker, &error_fatal); =20 + rme_guest->rom_load_notifier.notify =3D rme_rom_load_notify; + rom_add_load_notifier(&rme_guest->rom_load_notifier); + /* * The realm activation is done last, when the VM starts, after all im= ages * have been loaded and all vcpus finalized. --=20 2.43.0 From nobody Sat Sep 26 20:52:33 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=1788464314; cv=none; d=zohomail.com; s=zohoarc; b=UuiqaD4odTO2IVLmnl3BAKQclWt32L67Mg98xweSGGyNZla1rH1/LyCrV8Izg8l3J0B1KaIKYclshq7+VUiBlwgO0P7SSTh8xTS6fcb+BDC8xLu7yQENIDMqQguLK9YzNtASMofj4qvE6evTgBbyVdxhzpB8NChB1xa5AwHtoIE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788464314; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=v/EbG9/3Hb8DCKZa1jZljaYOgVIsiNG77AyoF+zPvP4=; b=X9d2bA4kTserj0GC6u23Nh6LF7Hj9UAULju50cvql6qWatesew4XGTqdvSSNtWlsWISwLgw61ME5Q6jrEsa7pAQEnwej4A+7XqXPq+S8EZ0uBZV6ogyVxXwsHhYMCEs/AmKrSZB5UWZCSD3kXjW5vacX6huDVgd0VPtGsV7c/bY= 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 1788464314545955.2790751765183; Thu, 3 Sep 2026 12:38:34 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x2DEk-0001SC-Ey; Thu, 03 Sep 2026 15:36:38 -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 1x2DEj-0001Rb-Nb for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:37 -0400 Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1x2DEh-0004Cn-Oj for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:37 -0400 Received: by mail-pj1-x1031.google.com with SMTP id 98e67ed59e1d1-3965d3d9ab8so136220a91.3 for ; Thu, 03 Sep 2026 12:36:35 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:40c0:ec33:6266:c275]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39b083e4fafsm6836951a91.1.2026.09.03.12.36.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Sep 2026 12:36:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1788464193; x=1789068993; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=v/EbG9/3Hb8DCKZa1jZljaYOgVIsiNG77AyoF+zPvP4=; b=Q5rGxrm/iSYC7Q/wCwREU5hUej3GZoq/716ZXpHWYR12rxBvCEG859T5JPpqIcUP0E gxUtXZUcrLroVmSfuOIUrvKXjMbj2Tgk5X0md1snUeFm1lx8csym0hsC0Ge2JSMKuu+A dzHOdIkZrWAuDlaFYdU3Wq7LWh/3B6itp9zPBHBIFqFo+CGvcMJ5xXPoorp39uXgGzC2 3EDwE8cgn02zoAvzJZ7j2nL8VZc/IzPnRn/v4gbQNUNuedxkxW7PYRxdMFXEFZUxqNyc oJHANDHYsUGSiQar2aJca4u4CBsr/M2Ar/hbG6URNGd991VEODRhjm1giiZCkhGakH9l 3aKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788464193; x=1789068993; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=v/EbG9/3Hb8DCKZa1jZljaYOgVIsiNG77AyoF+zPvP4=; b=nbzMlITudfW5uqZtzJJHz5IoWudhVthMUBLqqIZHFDZHdZ1+U4e8y/SC6tT495WFYr 4NCrF2NjQXy/RM+8wyzb7SE/7IN8lu8SdtWVJUZyP4M0YKn6t0RNjUXCc3EizGBLYEcr SHaorBi77xI6zvCF89NJb1GUL6MoJDr2i4mE13ORwV4AieV/nsiqJmWkiZKC1nqYwmg+ sWXHEy7KmUG9UAtNMXBHpctKPOl/Auoc+iwW4K9v2Tch7ZDhnFRY22caYws/zYhebP2d mkqaHzGOASNtfMQ3dbuoYnLlfC1QQBYbyLm3q7AEFpjcRJazZFn5C4CfbV5jSlfkZW5V 53dg== X-Gm-Message-State: AFuF++kmYpj3MaRuiboJZ4t2Gic/JvcXemnqqg3HB/3ng8LC5Qf9DO9D EDyL8SF5s/MTNjeYTyd8hHDkcioW1ViapMaGvXYpx8RMtGaTVeupYSzyFnB3/+ifAanBEiUwAxt /Hp1E X-Gm-Gg: AYBFou2A52lTFVZoCNINksvMu7KEtujOq2QFhB5uNqu5iURdCP1TrDzSr0x9RIRGXDr H5eUYKyN3rt2PZPu4IdqmwPnt7ZLnIdSsVHmnCr9j//TTb6vBc39sDtjBLS66S2Y+p1F4thJ5rQ 8mGRtYFi2YKIGP+ANCD8o3ibCSm9s5pNuIU0C2BC2+WhtTyz2cELHsr+LXFbO2yTI4Z9AQ0cawq P+4ZurRfu53tXcfkH9dq+x/dMEbCflav4t4ZWHsl2tBKGlaq4m6GjaNtgXd+J2TABJTxNCQ5cfW 0pUTXsC1SXFjLc0acbZcA9adbLEbBUxSxrl6CGYGbiTRHdEM2TSa76KZu6r0EmA5RWB5SXWtVyf AXPepQcRmAeooQAfMzVuNqHyanRMPF83S9YSaundpCNgJgJfjFIq4rvaeM2roh7u56lb5zqAQ1z 4//9uPKVk+8JrkfCaaWvzsIsT9OypPyIzrlljATd1ifU0VkDLcX5aBmjcVx3aN/tv6fDVoJ0h+J w5j8L7wAV9NjXs= X-Received: by 2002:a17:90b:3810:b0:398:9beb:5c18 with SMTP id 98e67ed59e1d1-39b26213a86mr1124061a91.19.1788464193150; Thu, 03 Sep 2026 12:36:33 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, lorenzo.pieralisi@linaro.org, gshan@redhat.com, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v4 11/24] target/arm/kvm-rme: Populate Realm with runtime images Date: Thu, 3 Sep 2026 13:35:58 -0600 Message-ID: <20260903193611.1058589-12-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260903193611.1058589-1-mathieu.poirier@linaro.org> References: <20260903193611.1058589-1-mathieu.poirier@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1031; envelope-from=mathieu.poirier@linaro.org; helo=mail-pj1-x1031.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=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: 1788464315411158500 Content-Type: text/plain; charset="utf-8" From: Jean-Philippe Brucker Once the Realm descriptor has been created, tell KVM to transfer runtime images (kernel, DT, and rootfs) from guest memory to Realm memory. Signed-off-by: Jean-Philippe Brucker Signed-off-by: Lorenzo Pieralisi Signed-off-by: Mathieu Poirier --- target/arm/kvm-rme.c | 76 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/target/arm/kvm-rme.c b/target/arm/kvm-rme.c index 9985f5daba89..c082a5d8f3d1 100644 --- a/target/arm/kvm-rme.c +++ b/target/arm/kvm-rme.c @@ -15,6 +15,7 @@ #include "migration/blocker.h" #include "qapi/error.h" #include "qemu/error-report.h" +#include "qemu/memalign.h" #include "qom/object_interfaces.h" #include "system/confidential-guest-support.h" #include "system/kvm.h" @@ -43,12 +44,87 @@ OBJECT_DEFINE_SIMPLE_TYPE_WITH_INTERFACES(RmeGuest, rme= _guest, RME_GUEST, =20 static RmeGuest *rme_guest; =20 +static int rme_populate_range(const RmeRamRegion *region, bool measure, + Error **errp) +{ + int ret; + void *buffer; + hwaddr size =3D region->size; + hwaddr base =3D region->base; + hwaddr start =3D QEMU_ALIGN_DOWN(base, RME_PAGE_SIZE); + hwaddr end =3D QEMU_ALIGN_UP(base + size, RME_PAGE_SIZE); + struct kvm_arm_rmi_populate populate_args; + size_t aligned_size =3D ROUND_UP(region->size, qemu_real_host_page_siz= e()); + + if (!region->data) { + return -ENODEV; + } + + ret =3D kvm_set_memory_attributes_private(start, end - start); + if (ret) { + error_report("RME: failed to configure initial" + "private guest memory"); + return ret; + } + + /* Allocate page-aligned memory */ + buffer =3D qemu_memalign(qemu_real_host_page_size(), aligned_size); + + if (!buffer) { + return -ENOMEM; + } + + memset(buffer, 0, aligned_size); + memcpy(buffer, region->data, region->size); + + populate_args =3D (struct kvm_arm_rmi_populate) { + .base =3D start, + .size =3D end - start, + .source_uaddr =3D (uintptr_t)buffer, + .flags =3D measure ? KVM_ARM_RMI_POPULATE_FLAGS_MEASURE : 0, + }; + + while (populate_args.size > 0) { + ret =3D kvm_vm_ioctl(kvm_state, KVM_ARM_RMI_POPULATE, &populate_ar= gs, 0); + if (ret) { + error_setg_errno(errp, -ret, + "failed to populate realm [0x%"HWADDR_PRIx", 0x%"HWADDR_PR= Ix")", + start, end); + break; + } + } + + qemu_vfree(buffer); + + return ret; +} + +static void rme_populate_ram_region(gpointer data, gpointer err) +{ + Error **errp =3D err; + const RmeRamRegion *region =3D data; + + if (*errp) { + return; + } + + rme_populate_range(region, /* measure */ true, errp); +} + static void rme_vm_state_change(void *opaque, bool running, RunState state) { + Error *errp =3D NULL; + if (!running) { return; } =20 + g_slist_foreach(rme_guest->ram_regions, rme_populate_ram_region, &errp= ); + g_slist_free_full(g_steal_pointer(&rme_guest->ram_regions), g_free); + if (errp) { + return; + } + kvm_mark_guest_state_protected(); } =20 --=20 2.43.0 From nobody Sat Sep 26 20:52:33 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=1788464289; cv=none; d=zohomail.com; s=zohoarc; b=JlEWoZJY9gL7kDm/NUGFWLM52CnJhn/kPeGT/dIPEEjnSH5oZnbu6DKKIm8FiIvQnKAREGdoLuW1+WPtCiw0H9N6hg79Fc15EqCCrljpFAF/KjhiCvyPhfDbnan13xD4YqABa1n8wmg/ml3AqGRzJm+vVSw3rtjFKeXs+j0M8rg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788464289; 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=HmGpSn5np7qxh7tTF9vO+IGJge7cylIvjl4owtZOfJ8=; b=kmR1HLqa6t9kne+sb9Wabi3Wqv07veVAVF1iSUcm1CqHcDjvszvu0FMVq7ZYsH1j5t7/eEaitrvI8Irj2VZPzoGsIkSGViCRgYv6dpusaUYnQvlekU/NOVnMhO185333Xc/1Y1W5xZmRtxtupNYb34Bn1x6cs5lzE9PZeQKUgBs= 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 178846428978973.36635873037721; Thu, 3 Sep 2026 12:38:09 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x2DEn-0001U7-KB; Thu, 03 Sep 2026 15:36:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x2DEm-0001TQ-En for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:40 -0400 Received: from mail-pj1-x1036.google.com ([2607:f8b0:4864:20::1036]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1x2DEk-0004ES-G3 for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:40 -0400 Received: by mail-pj1-x1036.google.com with SMTP id 98e67ed59e1d1-396750cfee6so161878a91.2 for ; Thu, 03 Sep 2026 12:36:38 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:40c0:ec33:6266:c275]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39b083e4fafsm6836951a91.1.2026.09.03.12.36.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Sep 2026 12:36:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1788464197; x=1789068997; 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=HmGpSn5np7qxh7tTF9vO+IGJge7cylIvjl4owtZOfJ8=; b=mvC3OaDhr147g7QWL61ck8QoBVha27TkHz2Tur9A2afJU3PRIHxMWM4GJvTcyOwVDQ D3sT/aYhl/CpCOruDx5SIgTfxwm9kYQy0VhnxFEpJL3wAXH1jMjN7NWDpUX6cTBJre1V k1lTdZJztIsnF7KH1/IdyJmr3Bmy1LPY/5uje8PuMUGsvJAu5OLOWR4gvsPRnCNZt9tK Z/7aKfSocKQXhcoEuk7qKGuuOCEkzDUgoLC2nOHtNTrW6bL6UJIhvS02/EwHNeK1PWbe b8tqfqyzileKsfi7846ESX3lUgCGo6ud+pnnKBnc9CjAUyQNKQvgaGWStIc1FvCjxAp/ GtyA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788464197; x=1789068997; 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=HmGpSn5np7qxh7tTF9vO+IGJge7cylIvjl4owtZOfJ8=; b=UUcNuJshixklnNCZ5/b2Sz66U0/e9C8Q+GsK5Z12rtK+KVYJuL0r6GzKLmTPRkYtoi d19dgy2dPN/8RLPfDj5WNUU4I98yJTd+zrea7Dgitqk/C1Snlpc8BXKkhZ5u5XvHYj7N q/qzFPD71RJRK2KL78NDExBHbt1++CMcPob6ieiIQPBKdS/S1S29JX1RMABk1yCUX6qT pe2BqyuOn0JbLtFplPMUE5rBM3zCmiapmupqyKC0aPObwpa7518Y7dGVxWw5bwaZRsQU sjeBCUXFbib/gC6uQ8eptDRlj0Jw8l1LpN0nlFI9frdSpnT1x98mMdDZXQ78dQN5vhK1 6ybQ== X-Gm-Message-State: AFuF++k7LQxeYz7GNDUP4XqJ8v0GpErAJhrON3PUvev59jx95SwV23Dk +85AxhJQV7ina21swZLg89uzl5Dc+S6LdxAGxvZPHcU2cRKw/o9KztH0FAZ3zRwueW4= X-Gm-Gg: AYBFou1C7kEb5gQ2rjY/wjSkdQw+2YfBOj8gukL3qQ5TiusjZg2l/XnH9kt6Qd7syEW bGbmc/vDd6GDGs+qIlNfzdJ1Sq7ST+aUyJggJJqmH71TSNFeqGfNczVfAgzz0oeoRvn+cMTQkSY aw2XLOeaQf/whYPAaDey/Xoc86ldB4ZRlgqsAFvoWzDhnK45BiOSAyjy7vYfQrLwz+IebxYNR/w qk5UYI5Rqqw7IqVUb0C3ETlC4/IgUQmQvhZNeGYMq1aCi3wT16GM76cXXY8XEl9aMdGFEbl61Mx e6l9UpoxehDwApU1ZgABsYFEA4wApY225gzDt3nikaFLqKTSSW+zbo7pqGwcSbR0U3D+3w4kNbU VDi8TW06Q6Xdqn2BSXTruMEVNuZW4I3/ZmFDO/2baouz+gqzeMRJT+CstkAYbkB49hmjQzRCjUf ec7JCBYnjFiIAcSt85tyC1jzRLZJcEylx6LnGDbFQNsPFsQ/qc7ASRS8bUNpPWZA+JAcRUOjdfV Vy/R5tBdTh2zwY= X-Received: by 2002:a17:90a:ec8d:b0:38e:67e1:15b with SMTP id 98e67ed59e1d1-39b261002f5mr1254010a91.6.1788464195615; Thu, 03 Sep 2026 12:36: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, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v4 12/24] target/arm/cpu: Set number of breakpoints and watchpoints in KVM Date: Thu, 3 Sep 2026 13:35:59 -0600 Message-ID: <20260903193611.1058589-13-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260903193611.1058589-1-mathieu.poirier@linaro.org> References: <20260903193611.1058589-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::1036; envelope-from=mathieu.poirier@linaro.org; helo=mail-pj1-x1036.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=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: 1788464291265158500 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 6bbc942f9a59..d256d66a3e1b 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -1173,6 +1173,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 4e8c47253086..18adb06d78ad 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; @@ -807,6 +887,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 Sat Sep 26 20:52:33 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=1788464254; cv=none; d=zohomail.com; s=zohoarc; b=SwoT3MO9dJfy1qM6CoTM+PRBiX4QYrHXfRb7O/0+/RC2lJadKIRl2jPaKMFgb6gXB5clBSyFPhkAdauPuKwopicvf1xAzuqx6FI+tOfxd0NJ1oB1pXLMqicc2NLCBpwKMmuBQ3g0ce2f37Ec/1TSkJV5GCY5J9wCjlJlJdY/TQA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788464254; 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=ZyMMTgmt2sQTNt+w2rcYuEGgP51if0I05nXqeLHxTK8=; b=Jgi9FZXBW/Mg1SHOHYM/GsYvV3Y8OK/rmOZvnMiXQCLVY2AkMfZeyfu3PlilyMobg3yyif2Tehxcy+viSNPXWcU3V7WWKJ5bo9vv7UM4fBCvnsMYpx3svM452Dqax1qvwKTGo7yDIOJEeM2BkvTHdZqlLh1eT++O+A1yIExHUGI= 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 1788464254663893.961754911396; Thu, 3 Sep 2026 12:37:34 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x2DEo-0001UU-Eg; Thu, 03 Sep 2026 15:36:42 -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 1x2DEm-0001TY-RP for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:40 -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 1x2DEk-0004Eo-V4 for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:40 -0400 Received: by mail-pj1-x1033.google.com with SMTP id 98e67ed59e1d1-39682983a0fso204704a91.3 for ; Thu, 03 Sep 2026 12:36:38 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:40c0:ec33:6266:c275]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39b083e4fafsm6836951a91.1.2026.09.03.12.36.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Sep 2026 12:36:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1788464197; x=1789068997; 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=ZyMMTgmt2sQTNt+w2rcYuEGgP51if0I05nXqeLHxTK8=; b=Mc3zsmV/Ivpl+ipGalinFGdd7kgP5g+7wFY/8L5ml2KBsGAsHYi5kJxBTra2UggUGs w66Dmy9jfhGH930PW+R6aLEGZDrGQO+KFaAHmuqgk3jzu/yCYG3ejdz5K4IcFFlErEec +TDRkk/m0UjuxvF9kkgp6veZu7cEfqAmsgLp3SDOFa/lMKG+N2yFHNImgBdAxE7nDTNs XGgjkH0jCv02cQSEUQvhT8cCkDcog5dHNlNYz5PbDZXAs9PLyQ+7zFIeIt0nig7OnKCY wLG+C8aw+CV8Lt6s0gTtIvrW9GQ+DWa7Y1iB5WMKqYLE+LNHCQ+r9mY3R46L7cM1cyy3 wqkQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788464197; x=1789068997; 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=ZyMMTgmt2sQTNt+w2rcYuEGgP51if0I05nXqeLHxTK8=; b=aVN2SPM+KVVF4wiIL923PC2mtw8aS4a6ZGnkGVKQ/OUoS4waJ2P23Y5ss7LtKD9DGn rbWFEOCxaG4eAE8wg4FqYvCkac6P/jkzG0L4NyUvigOSuxnXx39zICBLwIv4mPCvN47F xuTQJ6/yzpnDncmMxW9lQ+qRkT0O0WkvjWU72Sop/hu1LiZwgIRIvd89F0LlQpfLV9OW yk/S/m6c4pLSmdScwD8aM40rRuTBMupI/BrZ9D5zAJpRuLiret+8dWrnz5wDbOxXNxQR PSeMDVFLlCw7pJOHI37F2bAHiOkbOx/0TX2h5ou5CUEcKbhsD3xYKheCG76Qrp0RYdJZ 9QvA== X-Gm-Message-State: AFuF++k6ETAMqupiQSnXmql7Wi6n2MqxGViaVhTTfrSKDvanL+kkZ5HD ITk7jpYJiUGiHpHd/aTf6gex+nc8aFK8Rr4JSq2rwjPEFq92hIRkdEIhbfpazUfz27k= X-Gm-Gg: AYBFou0h2eKLzHJ7qHI1ZZoh3Ak4B6OE3VTn7OMBIHaHeIatjuiL77CRpWUngJqbjvt 6GjZEpTIi7K8OecSXz6tu+0KLuTe99hJLJXzNcpgLo5KMtk7PQMuZZEhrA8Gpbs2LbvDU72e0Os 9/1UfiXXN7u8DGv+4HQTp2YrtgBbVxEL9MCw9jSKJic+Mi57zHn/o6bl9TyFQtecG4gKvgOQNiI DcrUo2Nzb49LpSP44g40DRYKdVg/BZ2/6e3+p5otS3/FhQDsDnztExatnsaIuqV76OFqMi3b66g fyZw70L41Xg2SvwYqAL/G/0hao3Ky/6FWJwakAa/ADnMPXLaQZV5wLh43y7efsgje5CVwulXXZb KlZV7lUYN8HwifEZV7VIW+jyfYWrgf54zI+xfD7N09Lykyt1HIvNR61Y2VAI93LrcmcyASklbzR oTANA9dRseTEY4sHxSKP66/DQlRnhiceJolBMd9jXB3eRXsXLdi4xm/RhuZfFtrkpNyZabFZmmE O2ql3iqCSTTZ6g= X-Received: by 2002:a17:90b:528e:b0:38e:ad9d:1161 with SMTP id 98e67ed59e1d1-39b25ee67f0mr1432023a91.0.1788464197492; Thu, 03 Sep 2026 12:36: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, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v4 13/24] target/arm/cpu: Set number of PMU counters in KVM Date: Thu, 3 Sep 2026 13:36:00 -0600 Message-ID: <20260903193611.1058589-14-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260903193611.1058589-1-mathieu.poirier@linaro.org> References: <20260903193611.1058589-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::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: 1788464257076158500 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 d256d66a3e1b..608c5e0124b9 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -1177,6 +1177,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 { @@ -2133,6 +2134,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 18adb06d78ad..3581268cd718 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 Sat Sep 26 20:52:33 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=1788464429; cv=none; d=zohomail.com; s=zohoarc; b=U4HniFj3sKzqILKWxNJ90OSAbHVWJoKj3vC7U8YTAf8fcNBeSosHQ7XOz432H7JYZpyQvCKz8Pr9pIIZ3FF/pglVrFxaMxYYJZIjPMvvIO1sHK1b0hD7NZUSIIARY6Fj4vpzE41RJzwtBuHu0gG1a1C3JMUiOvcMJ/w2uThlrV0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788464429; 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=QiMoKtfrtM+3TWwYQneleIhe2dU3Jpv/t9kAYcs0lKo=; b=Pqbk91feZDrLVshkBLIW/cmYSawbmVv2kD79V9QjJNwKaL/ai0vZ42xgFNwnRQe5ayIKeSJr3CItNGt6T6fnftDdp2zgXrd2mmNH/fCb6xHT4wxlpqqjUxeZHHzr3WABrHM3m4GhP0sa7xaNXiu182S4fPxsWnjxE8degX38NYU= 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 1788464429351222.50269450990515; Thu, 3 Sep 2026 12:40:29 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x2DEs-0001WQ-9E; Thu, 03 Sep 2026 15:36:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x2DEq-0001VI-Lo for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:44 -0400 Received: from mail-pj1-x1036.google.com ([2607:f8b0:4864:20::1036]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1x2DEm-0004FU-I3 for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:44 -0400 Received: by mail-pj1-x1036.google.com with SMTP id 98e67ed59e1d1-38d489b6b71so231632a91.0 for ; Thu, 03 Sep 2026 12:36:40 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:40c0:ec33:6266:c275]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39b083e4fafsm6836951a91.1.2026.09.03.12.36.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Sep 2026 12:36:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1788464199; x=1789068999; 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=QiMoKtfrtM+3TWwYQneleIhe2dU3Jpv/t9kAYcs0lKo=; b=eTHXSzqkCguI72XKr6AEdjoUF6IdI5WjK6d0cbDySCuXbqlf4vwgryPrdNgBpVF2+X qc4k5mTLBs9K51kF18XS01z5dAS6U7B3cgqHtO4O+hwGreEKpP2tZWGVmm6EOGI1q7Tw phOnaC9VD6/dGshxXiwpy8O72Vkm7SncANs3B9oBaAPrh9GKMc1iD+3tvA6JRdjtOjQE /bkW5z0L0tYdOluBqFmlvql0w3BwPbSVDjC0C29EiMs2EQjLH6s2lFWOaYsY6RhJvZ5E Cz2xDfMFFEiLCbFXPEMqZFxWXC+cxySoCjVKFSBg5eki7zY7WKU4ctnWpot7tDXP8Uzl E8yw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788464199; x=1789068999; 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=QiMoKtfrtM+3TWwYQneleIhe2dU3Jpv/t9kAYcs0lKo=; b=kFACHa6SCF9IvZqsFcg7QMuUyZiTpoTmb//C2XzRr2gg5vMwPEc78oxDjZiWiK6c8C IoJ0IEf8f2aqx67iZcOpgEPx+jC6s5tpKjDMZsg+59iAVglAblx2/EPW3eTf3kxQOvQw ZP+berLwIFoI6HiVLwbxFnNqkdomSWv6vVCbJjTugoHRA/uf5n4QgqsyzrKodevfiYfM EY5WznMhvHc4YWy9l1RKZM46h5+nXSblxYMU0+u4MwoNFUk8o6Tc2REQFVGzTmZk/AvF 5Hwlb7IYo2KDciq18RoHihzhPVLFcV2uZTwEeg8YcCHbxxP/8P0HpLuG1ZC4+1SbKMZN dvzw== X-Gm-Message-State: AFuF++l7V9eFRxw79ZNGsmdYGAhtlx0p8LVwYhQexioiG7dkDa+vals8 38obODIm0hOpYW4495Rs6R76rwbDKKBfAz8+IoACKX0dGUwW28Jrvnd6ubXbpRl9+Pw= X-Gm-Gg: AYBFou1QS9EpZ7dUYyKTaQyGiMZRG1XmPfvuJKKUS49FfxigdR3fzn03bb1ewhQhPdd LnYBIlZHKiV8PQR1vCTVs57EOgRFvzOH2Avntwh/+rh+zVk/HqbhmPJisETV51JIc6iq/hBJ7uE AsdTutWIkY52SUOywNXzVkFQq4WYlhjpkDaXQ+yDco9Cn9tuYWjI3r+o3DTYRydWSoDQGrBIv1y NRaZG7oi+XbZWZPCaiqxg/jODI9u+j4hNnb2gdl2DdWXMJFnULTaPw4bSMpPqNmj0e8lPjpetkq 9GJLfEeq1/eNzzMhXFrBe9ydn6mAfqtoq4ZLX0vRGQvYTsIDka4ypEk7sxCjUpQALfKiw72gEGb xTNk8Szmi2Ydg+uBerbpJJdSsv2y+or8nq8EzUqeB6/q5VyXwm2ByxfSPFaPNBlSNzu2Wdg7UFn 4BEo2sxJiQEpQTkTaX2Ivkp+7k3tksZO5a2L2E0A2A8ecFKvZSUTy9r4nbXCn6B1sX+1eDqqFz6 Izp0NdkYYWcrj0= X-Received: by 2002:a17:90b:28ce:b0:38d:fda6:4873 with SMTP id 98e67ed59e1d1-39b26100cbfmr1254551a91.10.1788464198938; Thu, 03 Sep 2026 12:36:38 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, lorenzo.pieralisi@linaro.org, gshan@redhat.com, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v4 14/24] target/arm/cpu: Don't read Realm registers Date: Thu, 3 Sep 2026 13:36:01 -0600 Message-ID: <20260903193611.1058589-15-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260903193611.1058589-1-mathieu.poirier@linaro.org> References: <20260903193611.1058589-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::1036; envelope-from=mathieu.poirier@linaro.org; helo=mail-pj1-x1036.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=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: 1788464429996158500 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 77aa78f00e2f..51c2527d840d 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 Sat Sep 26 20:52:33 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=1788464426; cv=none; d=zohomail.com; s=zohoarc; b=LQ8RiCapl0HgMD+DYx9LPTm+p1vq65zz++HYU0WBmF5LE2VQuQk9EE1g73TqUAnY/sSevOGp4YfZl4s+GL9icpMJdj7Wqtpeot/J5AJommko+3Byqx/HTtZwELxybJ5smXDgFwTYXXqjVCtSZaWKI+gdcUQM0MRN3yzxSOyIsO4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788464426; 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=jnpbPx5FmdZp5NVb3i561iSd61Y1NnaCqk0khHU6ssM=; b=DgQVred20FzKRSjkqTTzuvi4atbpJ+xkc+4ws5rR5K2F8qskzP1/kfV028LIiQ5VLtTywsBk/nU/r8cuDmFwyGI8WyiWyWt2XpeWWUEbbzLDDt+LhsY5FLzvwsdNhpbazwNSOd0TrCNkmY0na2WNusrdju5OS7TvDOOOq1/1ip4= 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 17884644267041021.3422269523163; Thu, 3 Sep 2026 12:40:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x2DEs-0001WY-Le; Thu, 03 Sep 2026 15:36:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x2DEq-0001VN-SB for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:44 -0400 Received: from mail-pg1-x52c.google.com ([2607:f8b0:4864:20::52c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1x2DEn-0004GP-Ue for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:44 -0400 Received: by mail-pg1-x52c.google.com with SMTP id 41be03b00d2f7-cc328b43a56so309524a12.2 for ; Thu, 03 Sep 2026 12:36:41 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:40c0:ec33:6266:c275]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39b083e4fafsm6836951a91.1.2026.09.03.12.36.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Sep 2026 12:36:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1788464200; x=1789069000; 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=jnpbPx5FmdZp5NVb3i561iSd61Y1NnaCqk0khHU6ssM=; b=TxikQErAmI0QQeZL6E4f4ArGv+hYz5c3PQPP5vnx7eCHbovU4QzXCautW9ENZud2oT XYTVfjCadgtsOyJdPlDKFIsJPvCK5ZYwD7puh4TjawKCu5Kp45I2fzDID21V7pEmuLL4 D0bup6FMuKQL3QCvj6q6mLIUv+YNmbCoI//VVZfXq+kXzZKPW3tqF6CfENraGiSxF5Lj Uy1CPt3fH05g2wZgW3KPvY0o8ZLgUF06SKdozsObtsMfbmRnjGOeHm+KoLl8tUCA1cNz fo6Hp1TEcfP62Aj310ZNdgCeLd4RP2KcbpCbi+uI0GBGol9QbnP24otmtorKqyfwK8Er KxPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788464200; x=1789069000; 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=jnpbPx5FmdZp5NVb3i561iSd61Y1NnaCqk0khHU6ssM=; b=rXVHnB80uliOxnLm9T0sxk4Op6+IGNBtLCd2Re/GnF/4TJIIaj36f9druDPpi80cBr YU24xDBzgsN9KeWIpoRxiKj6dx5jz2fLJIzGLXhT1QqfjufBqYjrgE79x3s4kODJ+jf+ MhQM6I23/BP7PC2pIZ+SAzbSbzJ0/QmKUSpqNP4bJpZRj1f3fCZUUoIEdM9oj5ewGMGY ckuE7qEqhGXxI7JxJMZsOuwFV0J57ttWpdmWNEZhhqtNUdxBzNEASR02UShZ0XOld1ox P4Frgmjt6FABf9fz6OOClmRko0ZOO9N24bnIbFjZpcMrOuxTcTT308osD91M5UXBVP0K 206Q== X-Gm-Message-State: AFuF++nop0Js0G6NNV/a5889dvIbu+Vb6AZT7WsyUc9Q/W7G6BjmbB/P KkL6b/cJghCtSqjELJgz2AonkiK23KMvmKyQSO7ia8pY4Y1X+1xs7EmtyOI+aotCwAA= X-Gm-Gg: AYBFou3vq4wsKvhhnRUFjHt/hrmBcrx8tEc1RnpyzNVnuMgSeewWO8Oqh16Yj3iGTAL y3/TnFPMKzzgytVwTClIEF1RFY6Ak5grf/hrt2Xcddx/BRhYR5hJZOO8BXQChkilEfxJLnd9IMX 2XUDVPVpvifecNXCFiZ5aVCEtGhM4KjMcTbaZENWEhaHUfVsMpakjKuDfqUwPmXPLerw8ty+Hr8 mGgIjCzFVVMdCwkDHTTC0qIGeTCfox0+PNLv4sBFsE/Yft2HpFcwAv+mNyxdnjj69TnjJlYpkjZ ZByQWHArR+pWXDgmXndLfjdrOEbUVe7kEXOL6+Plu/c/PEfVxaPXmRUES1oJsMZMxm0y8lcCQEj nDoPiLCB0vigHootNr+Y1NFscFtmPqSf4u4xxLhwOz+tU/oSC2MmB68MDetNswNva3xLjLYlSvv gm8A0+u0xzbWGz/sFyRHF+DdbaYzYtgGLpjA6Msv4/K2dkeOE7eBvRD7f6azf7wYD6pma3m97DI cjlpweHuNNZ4/Y= X-Received: by 2002:a17:90b:3c05:b0:393:288:29e3 with SMTP id 98e67ed59e1d1-39b26106c44mr1332861a91.10.1788464200324; Thu, 03 Sep 2026 12:36:40 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, lorenzo.pieralisi@linaro.org, gshan@redhat.com, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v4 15/24] hw/arm/virt: Set proper conduit method for Realms Date: Thu, 3 Sep 2026 13:36:02 -0600 Message-ID: <20260903193611.1058589-16-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260903193611.1058589-1-mathieu.poirier@linaro.org> References: <20260903193611.1058589-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::52c; envelope-from=mathieu.poirier@linaro.org; helo=mail-pg1-x52c.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: 1788464427998158500 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 d738b95c7264..37211bc81926 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 Sat Sep 26 20:52:33 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=1788464466; cv=none; d=zohomail.com; s=zohoarc; b=PxMOUQ1ele/DU+EmomLUzRV1dePgiJHE61uynMj0+U+fcJLidCSnNp6z7K+jDaGrJMzOciWG6Vfixd4Zy+WiPYNUmMq94IKdo+LZ2LKpRSOioCNuQA6ZWt7stRCWVNfRF3pkKfS1vcFXNnWc/GGYOng3poJjnzN32g7DWcG48zM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788464466; 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=yYE9pOet48lRlcAA3fKM0Js3n1ztODOyy6XvoWvQ26M=; b=JpX2FTlTsq/0w+QhVHBRb+E8CSLcvrIKl9uGPeY1wJdxCnhZhRANd9EdvESvAej+AkTQ6+epxwbmOjl/JBH/T0T0uvPLBi6zuwARXE4ndcwieqPy1h7J4bo5blKFPp348UtfoBVw1fg90yam6o39X8wjQ5eTz1Am9tkAiSjlwnE= 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 1788464466110892.4511491520489; Thu, 3 Sep 2026 12:41:06 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x2DEu-0001Xz-GB; Thu, 03 Sep 2026 15:36:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x2DEr-0001Vl-VU for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:45 -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 1x2DEp-0004IJ-RT for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:45 -0400 Received: by mail-pj1-x102b.google.com with SMTP id 98e67ed59e1d1-398b1e63c49so1360776a91.0 for ; Thu, 03 Sep 2026 12:36:43 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:40c0:ec33:6266:c275]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39b083e4fafsm6836951a91.1.2026.09.03.12.36.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Sep 2026 12:36:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1788464202; x=1789069002; 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=yYE9pOet48lRlcAA3fKM0Js3n1ztODOyy6XvoWvQ26M=; b=SQPD9hWTFokx2hy45BNdd5KDBy+HmaAC8mJewjQRj74g0woobMpOqk3yC+Qng90wV9 dY94An4kwKUV7K5C0Mo+FXYbhmAEISait84gi4kvzsucU0Kj5ARfMhM/qdTI4ZTTNg46 AC12+hAqRWDJlAOV0jo0MkM0+0FlbBvDRPHur2BC+uV1TBsOSmaiESlN+by1AcdyQavN l/rd5z1hFVhCCvUEJBX8yffF4CPp/Q8B9/YWoT9/eJpH+p13gtYMRmLHv5sjH7w0uh7j /ZDGDQj90UIC5FylUglarDnPzah/lh+nbprCKF1MOzl+5dPE/fO2pagDJCEUcitItJiC V6Ow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788464202; x=1789069002; 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=yYE9pOet48lRlcAA3fKM0Js3n1ztODOyy6XvoWvQ26M=; b=FGBFXpS2qTjZnr3yFVAP1fkScvtnhtXM9iEMNw/qCK6kwP7rc9shgA1VoHcd8EDZZs 4hw7DcZ/zkDI4bTn8Tr+O0zgA7Tfeysms0ETRiRCZHfnKDzNXR4UKLmntK/hS6Renkhr Oi91kxdxYjEDGI2YWbC1o/3xfZPHJzJT/dUQ21OzejlKOO8MmdOZBazkkyXRVJuRxjaT k33qKz1sRM0tcnM6hwpYw6wo4IhIfccTGhvOUf1JwHJxW2nu0dNc6rDwLMJ4gUREtOK9 TLnSIU/cVYY0LzxNj0ZcjPhLaJgCHD33ClpNSH9J3pR/SpkcFqDcX73Lq4ri932K8Yb4 V9fw== X-Gm-Message-State: AFuF++kZl5WrT1xzweN7WbMQaFI1L+RTXBirMslzxihvpNo/fMcXAbdR M7NPzQ9Qbp1XmQsM5ylx7plZDQ4hfQnJnD0dEZy8zQ52Ev03q5qWliB0OozH+55GzUo= X-Gm-Gg: AYBFou26X4W8o4JKZ/tVvuvBocOwfGpopNIwzCnE7Ry+pEK+G7rSiVTOEk/bTo9YpE/ RF6ubq6ik3hYL3eUFP/h60Bu9/tGjXWqikxskDt6Vw/t8GgwkiQ2xsbNoqBlFxw+ccjtKRtQzLa VbHI+y8s2/mkSRIE0vCH3hOBvCEjRuwksaE1QfP+uXLsxFHtIdcrHEnf3kdUW70k6226SU9G2xy EJ5PCqs11lV2nU6CkqCm9fpmXLyCNRzrDIXtMqbNLjwPnnTcI/lNA+pyswoURDtuDsO/EY6v61J kN+ABjC09PAcfQI2wuITz2kb3g1ky1WgnO2APgmZWAAO1QifNju4TTC99WYo3UQDxOmh1AkMogQ XtevevbZ3/qudU6M+/ubd15eNCI3h8xONG7eDdxlwCIH9h+O7FwrWldLRdKLyZpEMdUo+EEu5zj 4be0mCPj73rsmmcF1wyL8zY5uq3ku9G9Gpnh+UZ5Mp6eZ+nRCJYC8zzM1MYVljoQSxayExezlW8 VX68FMGKAxSWEM= X-Received: by 2002:a17:90b:5484:b0:384:927f:3db9 with SMTP id 98e67ed59e1d1-39b27c0fa43mr86643a91.1.1788464202333; Thu, 03 Sep 2026 12:36:42 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, lorenzo.pieralisi@linaro.org, gshan@redhat.com, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v4 16/24] hw/arm/virt: Embed Realm VM type with IPA address space Date: Thu, 3 Sep 2026 13:36:03 -0600 Message-ID: <20260903193611.1058589-17-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260903193611.1058589-1-mathieu.poirier@linaro.org> References: <20260903193611.1058589-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: 1788464468307158500 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 37211bc81926..61751aa31e0d 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 Sat Sep 26 20:52:33 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=1788464468; cv=none; d=zohomail.com; s=zohoarc; b=hEioKC58YGX1yLFB+ul8E5aFIJQE0I3WFJ4r5yJYh6Yc4B7Y0ZBBAEbN19THQ9aBujQgo+ieCDSdmEJR74R3SCsE9py2k+rRh72xF1WPLRiLcWs3kR/FYvESGI9y3JddV4ADomwPHOPdy5+oHt1SZ78V9YBi7OR7rsqujxFLwQ8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788464468; 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=Y7O2QFPzNWx332l2m0iFWMqO57jF7lDWROu5Spv39Uc=; b=Ngy6FlDIz0uuKLv5NGL/ogswYRiRzQR9DHhISOtxPFZEHjaCe/CXr14AaAFb7Bdsk6EojnTvly9yTIjlHAQRh9/Gmfvdl54S1QPumN5f7amX8PnBbFulXgeVpu46kZVipv5Fxj9SNQkzvjHBP/LVranQ/GdVts33mYZ71UqUga8= 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 1788464468145865.1545572345353; Thu, 3 Sep 2026 12:41:08 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x2DEu-0001Xb-6Y; Thu, 03 Sep 2026 15:36:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x2DEt-0001Wh-5O for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36: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 1x2DEr-0004Jc-8A for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:46 -0400 Received: by mail-pj1-x102b.google.com with SMTP id 98e67ed59e1d1-38ea87caafeso159141a91.3 for ; Thu, 03 Sep 2026 12:36:44 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:40c0:ec33:6266:c275]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39b083e4fafsm6836951a91.1.2026.09.03.12.36.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Sep 2026 12:36:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1788464204; x=1789069004; 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=Y7O2QFPzNWx332l2m0iFWMqO57jF7lDWROu5Spv39Uc=; b=pgM3rZlGE+fILtvnRoyn/6Zzu3qkoTZUFPiHYVDIBWguTn8m7vU5Hs/1LxXQSOm4+U bLZc+bDDptEYn6hM6zVaV7npqKeHpdTQYtizZin5eSzWyzLFiMp4mnoqR7EuoKmoaAK5 lnaXbShKRXqgbERIBHCj8LrWSF3+joKOfbgQ0c804f3fdSIg+kbXXoA6d4c44SC+sPLl P6LegvVwDbf+ABwmq5JU99wg5xQvBmsDkFt4ZX1s0JpHRPYTXk3vE56C+u+ZPX6Gmwoq UzzSoFNDfB9BbnZ3FrQoMqCpooGmBi0HPf9zJBsoS4l/WtBv+8orkrBz/guMloSXT274 AXuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788464204; x=1789069004; 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=Y7O2QFPzNWx332l2m0iFWMqO57jF7lDWROu5Spv39Uc=; b=drTmbIqwcC9hZymluE7Vyt9GPY8fyCY9lJ2PzQZIvh789u8JIwwjk/10/6j0AyWZ1i 6e5MZYtG7m/ooBSQyCtWXdszTaG1m0j16JKcXbN1PhAgUQsZlJ/A1WK61Qt+elE9ZHTK LB5yfLA0xoB+k2jApfdVDXMVT3d0fbzm0LG8XHjYVu7PUQI/WNgeWip6O5H2aKghfLc4 JNuGD8SpngrekRUkw+jm9qTq/XB83hYV5xISwuFTlbJ+fgBnOkEW+cfV0uQNOJTUcIzN U0jcPwPXz89vyo3saSk2u+WCyPZ/nLtRHr2B47P8OmN7GfK9qRGxHj5gqexE4MP04oql toFQ== X-Gm-Message-State: AFuF++mGZUn/3rC0LsNw7jz4AudexZGAe06kgRxAgYc3UwQQLuAt503x bfdXOuRrCe/bYVT73Jq9m5zr9th1XIGIrtqMEO/0WWeoCzlz3ciRlfVa3TxHjfMwgXw= X-Gm-Gg: AYBFou3KcV8MY9u0kNMbMxxaVaFJklFUb2OSwjIlfy/EbbMPa7wOo6qek2ILsuOxaYJ 5tZHGMtXRPzSaSwoBPLK0qMbPHBE9S73IbsXpiFOLYmZswOfMgVYFrUQy2YDxD1rzdezO7OfbH8 ySWlWDUTuuCINrC/9mxk2k8OoRSXgPCzAmcuo7vc1flEk/PCRgRbmGw5kwvaNCiO+Ia6FIkdi6/ vu8bGRMO8yhjqmqcu94xqoCGWzZoP6x6ShTp3ga/+b9W93/AFyg5czDOSf5BAkLjTHWkGA9s8dh pQvH1GrdsNSDCHPVOiSuKb1uPLAEk5GIKbNnYXYURoVYhe1PJzckPae5Dc7XNVxKknDcMNXiYIv h9b9CBRP33QuOFbrpstTSJeSuqL0/9X3ElHjKsBO/jyOK5M6ENsXQqs9YJFRIfRJuG2MlJuSooS bXkObIwuCDbOelTdrsuMb4VV75J1a19h31++xBVyISs/GCkYnTbwEcw6reopCEMjYRfKV7HRBOm G9WQ3X7sKNT0jw= X-Received: by 2002:a17:90b:274c:b0:398:9be9:ab92 with SMTP id 98e67ed59e1d1-39b2629b27fmr1266138a91.23.1788464203921; Thu, 03 Sep 2026 12:36: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, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v4 17/24] hw/arm/virt: Reserve one bit of guest physical address for RME Date: Thu, 3 Sep 2026 13:36:04 -0600 Message-ID: <20260903193611.1058589-18-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260903193611.1058589-1-mathieu.poirier@linaro.org> References: <20260903193611.1058589-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=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: 1788464470182158500 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 61751aa31e0d..cf3a9320dc3a 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 Sat Sep 26 20:52:33 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=1788464300; cv=none; d=zohomail.com; s=zohoarc; b=T4RQKsfDnciQooHd/cXKJ753buqxK6l+Ls/7cRrboyOjRaZ463CIzxIbEhhE2PWj/lh+lD+rzR52WEcNfXv337ZJicmKD4gNrmoVzbbV/fAotx5sePMctYBQ6bqUcoj1ugYFz5U/7kmEpehLdEvXsPBtiB5Lyy2/8WELG7MyfB0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788464300; 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=FqEMLe/F4bhf+smjGpRF2fQvXrs0fPuNu8A5xb4n6+c=; b=KkblGEZwlOXedpXl/RvDQZOnxCpEwNWLbf8u59sF4zr+iRacCzIaSg91nMp3aOOlHeBl5MJ/T2tI1dkojIN7aPGyF09b9F29pL5T0jgSguDkiH8DxnK95gDHrc5GtQMIGVzbwU9+kCSnA39hvVVdIYeqbYTXWSD8DUOyWDSynjg= 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 1788464300445779.2640014583541; Thu, 3 Sep 2026 12:38:20 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x2DEv-0001Yj-Jq; Thu, 03 Sep 2026 15:36: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 1x2DEv-0001YU-13 for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:49 -0400 Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1x2DEt-0004KL-4u for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:48 -0400 Received: by mail-pj1-x1031.google.com with SMTP id 98e67ed59e1d1-3964e480f76so227353a91.1 for ; Thu, 03 Sep 2026 12:36:46 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:40c0:ec33:6266:c275]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39b083e4fafsm6836951a91.1.2026.09.03.12.36.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Sep 2026 12:36:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1788464206; x=1789069006; 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=FqEMLe/F4bhf+smjGpRF2fQvXrs0fPuNu8A5xb4n6+c=; b=sa9ESye9Yd6xW4tU+CUtRfGKZ1hUKOGD6pheExEhKFtl8DzxJeSGi0q8n4Qp9lCR7L aVYaTLww0jsYqHtSB4m+Pq9iCNYVxx5fxqyjPIYACP+dO+bIBaNRBK0NDnxcQrN5TUte zWXaLq4p2lFgFLE83K+0U0eiK02Q4/VZZibd5AawPg1cCXzoN8GTXdCWvRdihYf74Nuh eWJOzKIw094WmRDGM0Z6XpUuKwmkEC4DjoTGxoGgR/vl5xzgmUKTqhhj7esQMDznWq3v Z6XxC6siF4JAxp2SbHouTB880dSdUpCSf4ZsyAWMJbsh6liN5Xm15tY82fSI1axzybFf X5rg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788464206; x=1789069006; 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=FqEMLe/F4bhf+smjGpRF2fQvXrs0fPuNu8A5xb4n6+c=; b=ICbYoJyP0cf8h3LjtKEuH7LBEa/OpsrvSZKRO1DAkwNu/G0CpcQnPO4BHPqY1vhKRf suoVRb/d18ePKwomhQ4ZZJICwHoSiigAEBCoMb1ANLNIZz4ULuL/joPewmb7L5rBUwa2 w7X32S4QGPqab8hbx84fpMaARL2uI6XbY+kKEF2BCA8qQDgOfF9MJSXW7p5VFkvhLXIW hHqUo22aVFuuBQf4PTQezPlt4Bh9tKNp0sLA1pksb9gDYshNTqbV1EM4Ri4azp8Yil74 S9RvoeZbYuGSohkP8jFZgP8qnhB5wpEvNKBJXJhoAgE8viDdwkdlngmwO1qaAX2UPw/y iTKw== X-Gm-Message-State: AFuF++neCmLIb12BZObtyTX8MfeD+vD6m9BA1MCeAeY52oFxQd6S6WCz PNQch9QQfYG+GSccEtDQ28Uk0LbE09szXRFChhB6NzngBGlf0EIBbyFztottZDoxfak= X-Gm-Gg: AYBFou3f01FqTj9DlkObSzeV1tH/rJpEo3XsVCtMKVBY4oVe0/rO5mQ7i/44C9Gzi58 ZTk6Dy2WSNvWxp0Ks22udslfTUqlw4I95lyY1NpIZ6dxojIZffXSZyOHPa2JAOcRB2U5SGJ/JmT zRYPysdmQrF6B5hI2qgMiH3YVq17xszGc1q2mHRPj9nK2Zr3pZQ6lZcIXBtJ6WBeV4H1QsMQSPV +ox3fVXmC71GrH4JG3e68/vJTT+eA/LWF8MDJ7mTWDHC9drW70cuC1IBVArmqUFHeRarCkrrJ6S K9XH05cb0e803IX1R3KGIv5zCbnF11u3L+vf1KtSGL2/YHsZXRFR+h+G6Y/3iTpZlKlLB+xAiGv 61rUvxuOiYpuzNUMoHtNfIKwxPrjkuW6AoXi4uaY585X+cI93QpV9fvL6vbu3o8iXv5qy4wU4rQ yGaPe0382e2tXHd3WLRLilbAi7K2P0w0uU3PJ/sFXiyDxeK9wsA0oez1n1zoFuGapKM7kxDNRU4 f+mmLztzxBYfd3R4fpy3vYK8A== X-Received: by 2002:a17:90b:3943:b0:398:d8eb:cb2a with SMTP id 98e67ed59e1d1-39b26273e31mr1288750a91.23.1788464205719; Thu, 03 Sep 2026 12:36: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, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v4 18/24] hw/arm/virt: Disable DTB randomness for confidential VMs Date: Thu, 3 Sep 2026 13:36:05 -0600 Message-ID: <20260903193611.1058589-19-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260903193611.1058589-1-mathieu.poirier@linaro.org> References: <20260903193611.1058589-1-mathieu.poirier@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1031; envelope-from=mathieu.poirier@linaro.org; helo=mail-pj1-x1031.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=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: 1788464301466158500 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 cf3a9320dc3a..329c881eb91a 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) @@ -4345,16 +4359,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 @@ -4417,9 +4431,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 Sat Sep 26 20:52:33 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=1788464237; cv=none; d=zohomail.com; s=zohoarc; b=MP3pJG8mfGNXaoDm5ypsGFJ/DBfjVDlZ8M7fgAredyVCs6458B8oZBtukaeUWyjSvpPJns63CqISf4Bk6z5ebb/nzZUoxK+Vo/IRWF+NNCEfneuBz0aZxYtBNMtQuXPRj5SrBDyzN7K7kNdHuWRwxGLK/UpOqG0OAYi4hnUXYq8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788464237; 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=1L228YeDnliJno5IJsBCLMujCzUwIWC4F+2ZyI1byow=; b=TNPHpShpp9Kbn7vstsLXXVwfA9DrroeRCJqrhnGxdxNvjuyZkwDik1lEyt30rp223zzcR/vgLikNFSyjpLFTPkAKxoxcmtK7dTkslnl82/Tm8O2X6oCRVvZjXPxnmLEDNqG0sE6UB46WcqGXWzMm4oj03wbsSeleyMiANHvAiMw= 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 1788464237072545.8082441855951; Thu, 3 Sep 2026 12:37:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x2DEx-0001aa-Kf; Thu, 03 Sep 2026 15:36: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 1x2DEw-0001Zu-JL for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:50 -0400 Received: from mail-pj1-x1032.google.com ([2607:f8b0:4864:20::1032]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1x2DEv-0004LM-0d for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:50 -0400 Received: by mail-pj1-x1032.google.com with SMTP id 98e67ed59e1d1-38dc4553f62so225902a91.0 for ; Thu, 03 Sep 2026 12:36:48 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:40c0:ec33:6266:c275]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39b083e4fafsm6836951a91.1.2026.09.03.12.36.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Sep 2026 12:36:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1788464207; x=1789069007; 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=1L228YeDnliJno5IJsBCLMujCzUwIWC4F+2ZyI1byow=; b=Qr8AxNsINyciuwRzhZdhqZOIvRS5CIYxgQzoeQOfpB5Qt59g9hnpRUdyRD22TNpdBk QWznTfMmz72GdXlj56uNlWkiPW6wXXhe5J6uPtHGM3/3YmEi1jtN4qyvmUIRUeoAlfxi HZbbob4PeteK4xM1V65ZwT8pQ1aba+pWvkUZmYkUn4qZZ2F19Td0iRvSTYpbwEDBwENi OhNLGdBXpokSj5iEMk3OrAYUYhvM24txagZW0UegFQKmswzxIDO/dm61FisaOV8Ak2NY S98g6D3Vt57nOHZ/fcNL0abQNVz2lC18f78MamCf+crBERykosYdfcQtGF6EuCapeqCQ ffTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788464207; x=1789069007; 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=1L228YeDnliJno5IJsBCLMujCzUwIWC4F+2ZyI1byow=; b=cY7XAisChmdPnj0iNNuVs9se78OZypwRuaQUbrMEfsENhuPLRS1Eacl431bZDicTNE GB/i6XiWuT8240gp/cI5hPa2c393JjOcuXFEJKcAVH+ByVlX6WteeJpGZ6SG+aQ3tKUv cZzEZVD/NSwT37eyTmWEtD3vPRaM3Y11iqNyLSxWxjolY/sxNh2EiH/gNee5T+DO/09F OxyKu4X6NwFJGNlo4hMUnVwv8KRot3dFRMpucgmtmogrjBzNM6eZVS+bTTd2D1qLhHeC Bfst4FBRONBYgx1Fx83G759W47qZUqC4enIEeQUX2LarFSPJuKrxOcrwcCkoIK5F2LDw QPIA== X-Gm-Message-State: AFuF++n5Bwl19Pk03FTWEyJuQc735cFHvnjOLkImAo3quejtQfTJbEDo wPuHdOBFWWBhQMkuDmoNJTTDi/bW8/d2ie6tkqQ4KL0U9jsrnvD8Q7O/7z5+Nif5tmk= X-Gm-Gg: AYBFou1GXK9Bg8NScwi3+lzozPy1FEl8ALS3EkoewoZnsPq4vvTVzxfIdSt5TqIX22X sla0fR7K9resAFIm2eIYUHJoPG8E+upX2rIquv+6vuOuKlwNm1XrYzxDtd9ByZeH25ANdMDNv6p cVkR6Bx49CPXxBOWsEkv4TmJvJmTi5m1cv4vyipa76EWwaJy/JkWt6JgsLJgd6eb3fVK6soWFs1 sfNaXG7+aJEVeCMqoej9TGkL9UGaB0FFpWW27l4N8Ct+zf1xyX6pznH0ALs+atxfGqLa44qqNID ibz37d7+oX1YEqUE2Z5uJe2AATVAl74yc4Lue1M96cJiEW0PfeIGB75mJpYjMtW9us1DSbxlUEf 5d4Mw30E3qpCqT1tDPFCI/ndzoD/7JNJx2EE9H2pMiXHxqDSv46zjo+J5AS8/D07mVFG3w6rzFx B3z2yJ2jmJ2Fc7MPwuxF1KDNGYWFJBjfPvB8TPIKyf4pyqKeBUqJ6mZ3cWNbwoueXaPkqGiaK34 nqhqrPd8NeHzqAFl6qxy6+ku1M= X-Received: by 2002:a17:90b:4fcb:b0:381:a766:efcb with SMTP id 98e67ed59e1d1-39b26100e5dmr1338301a91.4.1788464207294; Thu, 03 Sep 2026 12:36:47 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, lorenzo.pieralisi@linaro.org, gshan@redhat.com, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v4 19/24] hw/arm/virt: Move virt_flash_create() to machvirt_init() Date: Thu, 3 Sep 2026 13:36:06 -0600 Message-ID: <20260903193611.1058589-20-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260903193611.1058589-1-mathieu.poirier@linaro.org> References: <20260903193611.1058589-1-mathieu.poirier@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1032; envelope-from=mathieu.poirier@linaro.org; helo=mail-pj1-x1032.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1788464239029158500 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 329c881eb91a..f3ece746916a 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 /* @@ -4435,8 +4437,6 @@ static void virt_instance_init(Object *obj) =20 vms->virtio_transports =3D NUM_VIRTIO_TRANSPORTS; =20 - virt_flash_create(vms); - vms->oem_id =3D g_strndup(ACPI_BUILD_APPNAME6, 6); vms->oem_table_id =3D g_strndup(ACPI_BUILD_APPNAME8, 8); cxl_machine_init(obj, &vms->cxl_devices_state); --=20 2.43.0 From nobody Sat Sep 26 20:52:33 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=1788464446; cv=none; d=zohomail.com; s=zohoarc; b=arPhnvsoF21+QRH0b2AVtwBVeKFQaiSrIs76HXUKCeA8AthesWmVs5eQtB2yIgPoBR+RLf0Xz9SwXnujbi5oHyvhYxYw898AtQnVcfgvOdsFzu/VfFwxQxI/vIHfxT7i5JBKBZUUqpCTa0kIPWXa+9oP2YM/MwY6xQ8/3Ubazbw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788464446; 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=4s+gWx3Z7SGHYqFVsHJPwfsd2AZQGSH0lSxZmriyQ6E=; b=Km/1OPlIx6yextLjDvaJKSEHabhQ/2LsYkvblOvpqHhgMDWG7Sgr0dHomLxPQUzuw7HOB+H/HIQJzHdX2t1sS1HSTlQqnJs5wWR3VHSIoefrzaUM3CHY0DieERq3zE7pYDkj7UbXY13D0E1cj9xnpy8/gBpugXPOmESYgwIIHWY= 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 1788464446504196.47479788024884; Thu, 3 Sep 2026 12:40:46 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x2DF0-0001cT-Ev; Thu, 03 Sep 2026 15:36: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 1x2DEy-0001ba-OA for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:52 -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 1x2DEw-0004Mt-R9 for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:52 -0400 Received: by mail-pj1-x1030.google.com with SMTP id 98e67ed59e1d1-398d2b28acfso144561a91.1 for ; Thu, 03 Sep 2026 12:36:50 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:40c0:ec33:6266:c275]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39b083e4fafsm6836951a91.1.2026.09.03.12.36.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Sep 2026 12:36:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1788464209; x=1789069009; 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=4s+gWx3Z7SGHYqFVsHJPwfsd2AZQGSH0lSxZmriyQ6E=; b=z2TReM3XDGxgrvHmqHMpDlXwOsP/F2/Sd+jj+4jKUXOV3Wcn9c4ft9KzlTVd+BLNQv 4kzqYiFgKdrzBn7L5tq5jEgAEipkJIitW74uAqhRc9TYQ6nwgw0WY+q0M/OOcLeU1oiE N/YiIfy4qscUf42jK24n9VaaTJQNm79Jm47tFDa/GqYR0xv1zDA0hufPduw4TnsWj10u lZ9/8GtYmNiLy0Jsga+F/WOmWnBUtUklCWk8QPUbcUSxQLQnOpk8k2omABJQNls3qUoT bmSKERtJQ7SKSCr8uDyUbPCQBa4phd6mOqqLGvrYpxkWwm/bkBmZGQj617g3NS0MvPeE llhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788464209; x=1789069009; 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=4s+gWx3Z7SGHYqFVsHJPwfsd2AZQGSH0lSxZmriyQ6E=; b=Ryt1tid2XeB54kds9UU+rlK00y+me3C8lsfqUyLRykBNvQvfnFMymgFrKsaA7OAslx 76XnvTON1b+nLPeVB5GVC4GQxjJ/rHA3P2QxBvFY5UdWs98caWWUxl+kiPDAyD+T3XSm c9vsLsqnySE+9X8YPqIrKmymi71ydDbrYCE8HW5FkMY0Gr3C46S8K1qHCNJhGc8QAtUE YZ2GUTLW0X3oo+UF3lKnKZsxZXpvSkrxuG8eaoQr2vPXLXOgbcYG6DmNEQy1TM7kUqLv 7k/MHntWAzpuH8awCt/LIkLISvvq0uRQX09XaMdtdw9xATD9VWIy/H5PHVNKWzenxbgM jIHw== X-Gm-Message-State: AFuF++nBPSkULR+h8dBeth+LaFYT8p8e47wqts1y4Fa3SvvFy4/Aak5m 58VL0rhY2PPlyQBOAQHiFvyFKQwvgLw9R/nyii5dHH1Do+3zZeP+qzBrlWJ1UWg2ElQ= X-Gm-Gg: AYBFou3AmD+Xp05649OtsqS/KKIvw7byW9DEZAUmSVyA39kFipj1OMOk9SfTiPWnD+V BC+sRQmNbHyeVrAGjsrknzO4FgF+dyp+q/pD5ZT80t+naLIDeOUC6FIp3iEKthmH6sJIe8x9ttQ 7K0OSAFIaSXAsUUR5Yl3zUbd/Xefr1MmCwSA6eArjqG5+PjLlMptN/9mwJL6gQYHCseFigwySNp mF6aAEdr3Q9fs7CaehlzoYsRsxOQN1YvUmJfJQNb/e0JbsNJktG6Lz/hu76VYoAvbj+xJhMCtKa /mp+pcDoeXDXZ8Zyyv8hg1WmZ38ZmSvVo7IYVcV8uaDpOqLGOldA2R8p19E8NTIRehlFR9sujzr s9VmnGQOD7YBXbM8re8BSWJaULmQ616raUPVW33wyK1/vV8jSuXLN5iOqRJYS1pB+OZLJ4pbenc pVZ6+0z2QKHHjkaEWItf0Xmbh6BoRP3VRm/1z229L2FI0dBq0bPDvkCkFhe3/fyUYkWTVw3dgmI sVXuCAYFwMXGI4= X-Received: by 2002:a17:90b:2e4b:b0:398:a145:5d3d with SMTP id 98e67ed59e1d1-39b26151b89mr1118745a91.6.1788464209329; Thu, 03 Sep 2026 12:36:49 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, lorenzo.pieralisi@linaro.org, gshan@redhat.com, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v4 20/24] hw/arm/virt: Use RAM instead of flash for confidential guest firmware Date: Thu, 3 Sep 2026 13:36:07 -0600 Message-ID: <20260903193611.1058589-21-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260903193611.1058589-1-mathieu.poirier@linaro.org> References: <20260903193611.1058589-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: 1788464448137158500 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 f3ece746916a..b1f425f8935c 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 Sat Sep 26 20:52:33 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=1788464323; cv=none; d=zohomail.com; s=zohoarc; b=CBMWk1uM5bCDYzw07xq3l/AQHVSlQFKv6OXsPWVoA/zxYv1lUnBvojPdW3p8HaB2g4UHRrteaia+qu4s5B5pyjaldG8DgJKM7zYvknwnBNOopF7idIgi8RjkquOiquz1gPYm6CH34WALTSjYGhHp0zT0kVYTYRhRH6suFMaU8ro= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788464323; 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=Pkg0GmhggtDiv6+ieSF/bEGnhsOlgxQcXDTKuc0WSSw=; b=jihbYXFgzW97BIEOEcaHYf+9JB0yho2vDwp3XMzCB1gvttF1btHVku1Q/jO3Aj3CkGb0JffTl74Jrkys5KsJorUE05ioIbenLFfeXOtEVc5zM3dI70Y+wNnFL+zwTPmMXKOsbo+s5EhesLe3txCxHGlEJrq+gJX/gupXNvbuvF4= 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 1788464323529788.5117402326872; Thu, 3 Sep 2026 12:38:43 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x2DF1-0001g9-Mn; Thu, 03 Sep 2026 15:36:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x2DF0-0001cf-E5 for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:54 -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 1x2DEy-0004Nu-DZ for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:54 -0400 Received: by mail-pj1-x1035.google.com with SMTP id 98e67ed59e1d1-38a0c7e841fso247792a91.2 for ; Thu, 03 Sep 2026 12:36:52 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:40c0:ec33:6266:c275]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39b083e4fafsm6836951a91.1.2026.09.03.12.36.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Sep 2026 12:36:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1788464211; x=1789069011; 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=Pkg0GmhggtDiv6+ieSF/bEGnhsOlgxQcXDTKuc0WSSw=; b=sdrhbdn/3JquqE67Fx0cnrMfEu7drk+OfqN4S4l099rg2UozfANHM7Zi26gYMmB08J i+XyAk/dB5cOOcNEi4blCRD9a3LmiZtGG4AI+54y6iwIfQMYeoRavvF7He/4niWXZyfc 0KMTr4wBFZCMin9sK8go9Xs2N3+oPf5c5f9e+RLTiTvgBGwchU3uK9jb5MT5IrQgu3nX u6gRXOH2QnxX8oDM6mCbdkw2sZ8jYGcsuwnVEFbp7bTN2Race5Kixz6Hmyp3bmGOgn5x uzKznzWqtxaVLbYPXP551lBi0mYzwjmTBi+TLhwXXiGph3HkzqMMEOIDMIeGoaG06iM2 QAKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788464211; x=1789069011; 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=Pkg0GmhggtDiv6+ieSF/bEGnhsOlgxQcXDTKuc0WSSw=; b=AMCyk3wUCUdzUfVrdphc/T4CxvlAe/LjCGbBIOuYe2zrH6dcwQfG/VlfcGgAOABkZl mCgQeT/0d367dlARjdnDBp3xD3egYXKir+d6UDo7xVkTajsfsqBfAGoiQm5lSTsM6GrV bv+gJdrFNXPGY/mLx2RIjVyUUXH9idoAPgbtyyHgxPxI36HeNv2czr3ttpHLLh5kj9P0 FsnDOADtA8QaDCrD+JQS/b04EHA2N2M8mMy15PUOhyopmso1FowLo2tA8zgZfy27GBQy AUK7iL9iR4PivTm95nIXOkKop6CpsvWsxQ0qk6fIDUi/AlEBPzx7Qii3eFxNNioqTKEM dk7g== X-Gm-Message-State: AFuF++l3TX4sQRg9oTt4q7BdzvYu+K/JZY/jLDWPUzdNnwQo1Pv0UJwO 15HzVEJg8Ce+laIz0XF6agEQLuiIxKjXT2bGrj3yD0H+0rPiQqrOEVIyE6NKfP5V970= X-Gm-Gg: AYBFou0a4VsgQg8Eh2qZd0kK3xpx+aMBjEuep7fTGLYEFUD1cBb14WO4z59PntLJz6t m1MJ8hzEY4TXrn2hutv0Soxq7n1cAZxqnvitSlg8c1pZ8yIS8zNKZZGUZFLk0EVeZrCifut7JFG jFERsEFgKEc9zTci+dsRiHndjUGaY3sAgbwgiRi48S1THhLQlUrIAQFtkHPd9UqmuIA0ZrMTQsF L+67j0c4mwfpPTXP8bZok/ACwQL6kjFbAO0GUgHwDb9pP1PjTu271p1xd6sRmMeNnBiexUlq3+P aYy5z0ZFR3/CltLP0r9g3xjpjMLBDvadSQh9GbApzIzyoCjF0jz6FhCFL2Smq1yKVA8MGvNmA0/ R/6X+tkMLAOFVUespqjVUZcyixxKcQ8fwG8vVrryytNn27WelXCmXgLV/xHllER/6hdPMlnfwCe OtPbBZSjldnTYhNKwxDLRDVHAzmJLkG7v/l/c4WOoGwpKmVRJ0U77xs7KUaxd4FU1UABL0luBpo YKhMVrUGTTQAK8= X-Received: by 2002:a17:90b:570b:b0:398:deed:6e1d with SMTP id 98e67ed59e1d1-39b260de5bbmr1362788a91.5.1788464210804; Thu, 03 Sep 2026 12:36:50 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, lorenzo.pieralisi@linaro.org, gshan@redhat.com, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v4 21/24] target/arm/kvm-rme: Add DMA remapping for the shared memory region Date: Thu, 3 Sep 2026 13:36:08 -0600 Message-ID: <20260903193611.1058589-22-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260903193611.1058589-1-mathieu.poirier@linaro.org> References: <20260903193611.1058589-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=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: 1788464325944158500 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 b1f425f8935c..47f91774e71b 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 c082a5d8f3d1..4adfe37a7e8d 100644 --- a/target/arm/kvm-rme.c +++ b/target/arm/kvm-rme.c @@ -11,11 +11,13 @@ #include "hw/core/boards.h" #include "hw/core/cpu.h" #include "hw/core/loader.h" +#include "hw/pci/pci.h" #include "kvm_arm.h" #include "migration/blocker.h" #include "qapi/error.h" #include "qemu/error-report.h" #include "qemu/memalign.h" +#include "qemu/units.h" #include "qom/object_interfaces.h" #include "system/confidential-guest-support.h" #include "system/kvm.h" @@ -26,6 +28,23 @@ OBJECT_DECLARE_SIMPLE_TYPE(RmeGuest, RME_GUEST) =20 #define RME_PAGE_SIZE qemu_real_host_page_size() =20 +/* + * Realms have a split guest-physical address space: the bottom half is pr= ivate + * to the realm, and the top half is shared with the host. Within QEMU, we= use a + * merged view of both halves. Most of RAM is private to the guest and not + * accessible to us, but the guest shares some pages with us. + * + * RealmDmaRegion performs remapping of top-half accesses to system memory. + */ +struct RealmDmaRegion { + IOMMUMemoryRegion parent_obj; +}; + +#define TYPE_REALM_DMA_REGION "realm-dma-region" +OBJECT_DECLARE_SIMPLE_TYPE(RealmDmaRegion, REALM_DMA_REGION) +OBJECT_DEFINE_SIMPLE_TYPE(RealmDmaRegion, realm_dma_region, + REALM_DMA_REGION, IOMMU_MEMORY_REGION); + typedef struct { hwaddr base; hwaddr size; @@ -36,6 +55,10 @@ struct RmeGuest { ConfidentialGuestSupport parent_obj; Notifier rom_load_notifier; GSList *ram_regions; + uint8_t ipa_bits; + + RealmDmaRegion *dma_region; + AddressSpace dma_as; }; =20 OBJECT_DEFINE_SIMPLE_TYPE_WITH_INTERFACES(RmeGuest, rme_guest, RME_GUEST, @@ -228,3 +251,86 @@ static void rme_guest_init(Object *obj) static void rme_guest_finalize(Object *obj) { } + +static AddressSpace *rme_dma_get_address_space(PCIBus *bus, void *opaque, + int devfn) +{ + return &rme_guest->dma_as; +} + +static const PCIIOMMUOps rme_dma_ops =3D { + .get_address_space =3D rme_dma_get_address_space, +}; + +void kvm_arm_rme_init_gpa_space(hwaddr highest_gpa, PCIBus *pci_bus) +{ + RealmDmaRegion *dma_region; + const unsigned int ipa_bits =3D 64 - clz64(highest_gpa) + 1; + + if (!rme_guest) { + return; + } + + assert(ipa_bits < 64); + + /* + * Setup a DMA translation from the shared top half of the guest-physi= cal + * address space to our merged view of RAM. + */ + dma_region =3D g_new0(RealmDmaRegion, 1); + + memory_region_init_iommu(dma_region, sizeof(*dma_region), + TYPE_REALM_DMA_REGION, OBJECT(rme_guest), + "realm-dma-region", 1ULL << ipa_bits); + address_space_init(&rme_guest->dma_as, MEMORY_REGION(dma_region), + TYPE_REALM_DMA_REGION); + rme_guest->dma_region =3D dma_region; + rme_guest->ipa_bits =3D ipa_bits; + + pci_setup_iommu(pci_bus, &rme_dma_ops, NULL); +} + +static void realm_dma_region_init(Object *obj) +{ +} + +static IOMMUTLBEntry realm_dma_region_translate(IOMMUMemoryRegion *mr, + hwaddr addr, + IOMMUAccessFlags flag, + int iommu_idx) +{ + const hwaddr address_mask =3D MAKE_64BIT_MASK(0, rme_guest->ipa_bits -= 1); + IOMMUTLBEntry entry =3D { + .target_as =3D &address_space_memory, + .iova =3D addr, + .translated_addr =3D addr & address_mask, + /* + * Somewhat arbitrary granule for users that need one, such as + * address_space_get_iotlb_entry(). Should be relatively large to + * avoid frequent TLB misses. It can't be larger than memory region + * alignment (eg. address_mask) because that would mask the whole + * address, preventing vhost from finding the correct memory regio= n. + */ + .addr_mask =3D 4 * KiB - 1, + .perm =3D IOMMU_RW, + }; + + return entry; +} + +static void realm_dma_region_replay(IOMMUMemoryRegion *mr, IOMMUNotifier *= n) +{ + /* Nothing is shared at boot */ +} + +static void realm_dma_region_finalize(Object *obj) +{ +} + +static void realm_dma_region_class_init(ObjectClass *oc, const void *data) +{ + IOMMUMemoryRegionClass *imrc =3D IOMMU_MEMORY_REGION_CLASS(oc); + + imrc->translate =3D realm_dma_region_translate; + imrc->replay =3D realm_dma_region_replay; +} diff --git a/target/arm/kvm-stub.c b/target/arm/kvm-stub.c index 5fde96f9b281..e5af5d20367f 100644 --- a/target/arm/kvm-stub.c +++ b/target/arm/kvm-stub.c @@ -42,6 +42,10 @@ bool kvm_arm_el2_supported(void) return false; } =20 +void kvm_arm_rme_init_gpa_space(hwaddr highest_gpa, PCIBus *pci_bus) +{ +} + /* * These functions should never actually be called without KVM support. */ diff --git a/target/arm/kvm_arm.h b/target/arm/kvm_arm.h index d95381c13afa..b4a293911f71 100644 --- a/target/arm/kvm_arm.h +++ b/target/arm/kvm_arm.h @@ -250,4 +250,14 @@ char *kvm_print_register_name(uint64_t regidx); */ void kvm_arm_rme_vcpu_init(ARMCPU *cpu); =20 +/** + * kvm_arm_rme_setup_gpa + * @highest_gpa: highest address of the lower half of the guest address sp= ace + * @pci_bus: The main PCI bus, for which PCI queries DMA address spaces + * + * Setup the guest-physical address space for a Realm. Install a memory re= gion + * and notifier to manage the shared upper half of the address space. + */ +void kvm_arm_rme_init_gpa_space(hwaddr highest_gpa, PCIBus *pci_bus); + #endif --=20 2.43.0 From nobody Sat Sep 26 20:52:33 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=1788464434; cv=none; d=zohomail.com; s=zohoarc; b=WjwOzto8O61iL7KyqfRVoVRSxwv1NXPCx3mYSOmk16fRsMHrVkBQ400QGtpwwcxW6tboDKrsJZdCV+8wkENEZVtWv9WTRucC4lM6FqyvD9xXC/bIwOLQYhq4raHR7DDeD+oZVT91ZjZPeP2826KcEAAAjjpZen2ue4TW3R4gaoI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788464434; 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=Tn49q8gLpDnS1W9koEaEUVBhdE8Xtwh1BvoAvme2BlCEuDKRvXhn2Kq0pNeFNZXWNVmwDZdOWmdBzce+9tS5iTV7N+RAEu3wV+tjMi4tYm3obXkX9EsdXlA6lKC69HKGOKTlCPAURuvEQcP9qtW+gjXgCsDWss25+8AKQlBT8AY= 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 1788464434822890.2051163613346; Thu, 3 Sep 2026 12:40:34 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x2DF2-0001h9-8s; Thu, 03 Sep 2026 15:36: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 1x2DF1-0001fl-JX for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:55 -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 1x2DEz-0004Pv-KM for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:55 -0400 Received: by mail-pj1-x102e.google.com with SMTP id 98e67ed59e1d1-39927410578so273314a91.1 for ; Thu, 03 Sep 2026 12:36:53 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:40c0:ec33:6266:c275]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39b083e4fafsm6836951a91.1.2026.09.03.12.36.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Sep 2026 12:36:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1788464212; x=1789069012; 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=So5Pf7G+LgLVTNZwsLenRxfkN3wO0OHsQXlgvlL353yZ4/PL4ME3+3Aw/M0zeqcdbO vX/JO09aMalbGTy//r0bK3u/H1rMr3T0hHZ6bzH+8Pl4HRP/Y9VhJJnP7CikRfGTiGka LCCV5ImZX/0SHrkzNf2cSi2gOCmpAxoL9Gcvqr3emow+XMThDnNLlwytlYjvVMpO4AFe XoSwotPmMQo8dF4YiuqYcac6DFoKPpx0RywN2yrIloxbSGgjbfcHCqxY1ANIctgiW2fE Hvs8/IEea3JhvVn4KD2UZQPjvSdFTYoWIIUPYYl02+SqyNgF4IF63K2iyz8so1A1Z0k6 O3Lw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788464212; x=1789069012; 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=sasHKYfmuHF7/3l9hZWj8/3ourKa7eGXTepxCPuDMBc4q0P+kEl+CUP6i4pvtCeejj bLNecYqK8BmWoPEBWXlAjlwiHwTMnNvX6uW7SRYFd0PKbTZnKYDi+1j+8BrlIxnz/OwN BH2XPSZhWr48P05P1pA2+iq1daC6Oyp8AMrVDZRUL3INqAHuemNZXooTb1XLCjXWcy00 D6XydlU6BjATD/0eEzSjjlL3sz+AmDSM6ZcEhGTQjjvsyu4S5RsxdCY43imwnEEw8jPI N4cbdtXrX72Z/DQPXpFx5yk33zYQ913k/FIbcYlVkFqMp9mjmkim31nVGnWOJZHGa5GS hXlQ== X-Gm-Message-State: AFuF++m2I6cSaMOqJ1DQRGOnjP3Hi45FtvjsGxSzi6ScmgvCGVJt3/S2 WWTxfBYRaZoXS+P3NKouuNKQpvYTnscN8KAROjEgbPZ5B1teeIOepY76ROOvjDQ0lq4= X-Gm-Gg: AYBFou2W+FQLpDPOXhPjokDl0EgZMNuVdRFK8ahqKo2SBcn8w56ygc54mSvqVBgM6eB Z6CG5jVfHONwqxzSiK8pyOF8ItiLqCnh65LS4MtpcMv3GSv6sdKjg6yXQGzEyQjS/GiqrCaPqng XX0nrw3+UH4gggdZRtXYWdQyeYsi/P/SHZIRHFeAyeNG1x32dsInFKZggFF/prU5A+vtlajhTQT 78l9k/UvaBtDe4E/mDPtHB4gGLGY7i8C/1udwlrQNbCj3Go/aE79/nvBagPMVv++Jh36r+9JP6W V/oDK6wRVbYDYJGxfxe1n/o9AYN4UYfHN5oIEhU2wLBJDgckW2MWwfbgxVSLK29NzYdb9oY24jr nptCxT/ovYZ9pi8MfEHd52ix5Yuw71jkpULcv2xr+piRRdAZnUsZ/Q9Flpx5rWjhT8Fx7OG57UQ zOuwk4hQx1vO3kxzUggPNZzN/8fWrxTsbncf4HS6xRcPyvVj9W+KpWAdn1ca84JssSxyRu/lA+W /wnI230c8qeZoQ= X-Received: by 2002:a17:90a:d610:b0:399:1b08:28de with SMTP id 98e67ed59e1d1-39b2613259fmr1288284a91.7.1788464212290; Thu, 03 Sep 2026 12:36:52 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, lorenzo.pieralisi@linaro.org, gshan@redhat.com, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v4 22/24] docs/interop/firmware.json: Add arm-rme firmware feature Date: Thu, 3 Sep 2026 13:36:09 -0600 Message-ID: <20260903193611.1058589-23-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260903193611.1058589-1-mathieu.poirier@linaro.org> References: <20260903193611.1058589-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::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: 1788464436064158500 From: Jean-Philippe Brucker Some distributions provide packages continaing firmware to be run under QEMU, such as "qemu-efi-aarch64" or "edk2-aarch64". Those packages also contain descriptors in /usr/share/qemu/firmware/*.json listing the firmware features, so that environments like libvirt can figure out which firmware they can load. Define an optional feature for arm64 firmware to indicate that a firmware supports running in a Realm. Firmware implementations need extra support for running in a Realm, in particular to distinguish shared from private guest memory. Signed-off-by: Jean-Philippe Brucker Acked-by: Markus Armbruster Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Mathieu Poirier --- docs/interop/firmware.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/interop/firmware.json b/docs/interop/firmware.json index 421bee0e5ed4..2850b91078d9 100644 --- a/docs/interop/firmware.json +++ b/docs/interop/firmware.json @@ -161,6 +161,9 @@ # options related to this feature are documented in # "docs/system/i386/amd-memory-encryption.rst". # +# @arm-rme: The firmware supports running in a Realm, under the Arm Realm +# Management Extension (RME). +# # @intel-tdx: The firmware supports running under Intel Trust Domain # Extensions (TDX). # @@ -229,7 +232,7 @@ { 'enum' : 'FirmwareFeature', 'data' : [ 'acpi-s3', 'acpi-s4', 'amd-sev', 'amd-sev-es', 'amd-sev-snp', - 'intel-tdx', + 'arm-rme', 'intel-tdx', 'enrolled-keys', 'requires-smm', 'secure-boot', 'host-uefi-vars', 'verbose-dynamic', 'verbose-static' ] } --=20 2.43.0 From nobody Sat Sep 26 20:52:33 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=1788464410; cv=none; d=zohomail.com; s=zohoarc; b=n8xya2E4t3CCYneoOlvQtyOLCr49uEnCMsp6+lq3g+caza3hoylGwmq93UO/QyyG1v9TpFkz4Zti/z4BstKlpKbPG3gYcCx38EpZq/gfpWk+VL5dAYjhTC/6QtgjL9Q9SIQlr9LooBhJQ+DFY4rMU0J76OvRvjL2R5dnv8qC3dg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788464410; 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=C0wYklN0qaY35hPwgw469HH0rPBgA547UPfJaN8QXXtC9Y9M12kUZXTIeFnK5a62zdldaLY40Pno0XFbfVEN9B4d3ubnPAMdH05sP7bCN70ONVrJu8VUTr4xhrWiNcHqKdbDuAcGUFpVi05YVtkTte1gncz7/2HbqR45zYZ7og0= 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 1788464410283125.10123444462249; Thu, 3 Sep 2026 12:40:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x2DF4-0001ku-Qp; Thu, 03 Sep 2026 15:36:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x2DF3-0001k1-Ay for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:57 -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 1x2DF1-0004Qt-Qx for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:57 -0400 Received: by mail-pj1-x1034.google.com with SMTP id 98e67ed59e1d1-383b4a3755fso177922a91.3 for ; Thu, 03 Sep 2026 12:36:55 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:40c0:ec33:6266:c275]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39b083e4fafsm6836951a91.1.2026.09.03.12.36.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Sep 2026 12:36:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1788464214; x=1789069014; 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=e9B39ZiJlE15iLXKIgZO9g16ASDPuCVTCmvoN2w1UzrId+Z6RhYyzg7i6EjJV3HEQQ FkCzNg2NgeilqSC5hGqSpywgeYDwVkb329lLVrJQIwfWfeHyGw+j+Q1zAy00sjnpgYQi IgzsemKY0s68LLnGgfXNW8+UtnDLw0PQg2ntawNNrAzM7QMqsYuMtWChP82Ik+tZOlrS UwivBYriORxspuIekCQCO1c954pEgo7TXclgfEjx+j4YQamJ6p2SyvOhMCf1BnEH+BCB f1OisI9uF7vUjq9hZkMqfIdvWSfplJ4chK+wcbHUpASLaTC2Qbfwd00fHBIAqE6Ys9nY +xoQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788464214; x=1789069014; 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=RurjdsECTNoxxNoZhYtxPzPQWRffOVBimTqNhEH7e4itJlCNMIv9KIO8TZRXT6IW7Q uitkXzBWhWW1hb/Y9FYaUKXt9OkNZH6t+vvngPv2lPXs4y9nfyqgcfNe0X1FrmYedLxd KT/9k3vI/ADPo4bgu4ien2E0OC2VYvtqFXsmj7FdHPz/0cFNv1D8IGJLPxUipFQVrRUG IHliyqna6x8tbjtNFcpjBu6htFqtywBX4oZWmcUHZ3bdsCSi42yt7+6CUKh0eDA5mRxJ 1L6voWOrHfI4wqn3PhXVpBcchCwzAMxkN16rOJXQ8kQFn4E9vt34+Niwz/jOe6SQJmiG upTg== X-Gm-Message-State: AFuF++k3VobiNoquS9YN97Nm2nf61HASqwQRdOLjMlI3aCbqp13jRXxc xscy79LhgHmejdM8TkmyFQtIIZXzqu53XndCtn2JC+olBYE6LGYtoCOARwh7+twD720= X-Gm-Gg: AYBFou3xRMmFnR1g/clAm18ZTsiFstKaboQsylHnFRfHEaVdGuPqnMpug76K9axEq7g 3WofVyc/Tf9DM8nntMAOGiu82QXdV+UOAfPcWWUZssQ432MeY6C+fNAf3xlHaQIQcXGWIz18eXB qF/qOSKpu+JAKQVmcNcs7OtH4WknpxlRJwx8iM1SWLPCBuFlaEd5bfRPLmbNdjw12N5Vv//Mpa1 ADodcrvCViYxo+1E3enUpmvCprxGYQUuLVP2Q3QJmSChmRXUugIKOgAVigsyL3XIED1wwqZSVTO Z/1hd2Q2BOsrz306dERxxWII/KmaH94S9DCe33bzWIWAGD+OpBdvs3r8uzTn5hZp35bgBKcoY5i Wy3z+ySixdYeT8IaPExpoZMDAdNkTRTZjoEP4Mx0l+duL+Ny9e7dzEmOIKa+cGljNjtqt5fXQKj RLx3CEeo3tRAtYaQ7BFNfM0RyL6pcZ/md9AtFfzE55HFqpQv5hP7wh3lP1yW2FDCgTMj5HeuHzb rNNs8L+81MgVL0= X-Received: by 2002:a17:90b:4fd2:b0:398:9be5:b416 with SMTP id 98e67ed59e1d1-39b2621e4edmr1288438a91.17.1788464214324; Thu, 03 Sep 2026 12:36:54 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, lorenzo.pieralisi@linaro.org, gshan@redhat.com, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v4 23/24] hw/arm/boot: Load DTB as is for confidential VMs Date: Thu, 3 Sep 2026 13:36:10 -0600 Message-ID: <20260903193611.1058589-24-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260903193611.1058589-1-mathieu.poirier@linaro.org> References: <20260903193611.1058589-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: 1788464412001158500 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 Sat Sep 26 20:52:33 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=1788464265; cv=none; d=zohomail.com; s=zohoarc; b=SkpykVXxibhFy9EBrgoMdwBejvBQWfGoi8OyQ0SAcL+xxXH9KiablUvbMl8v0UUGxjviAutVp5IKyRT5CDJAJ3MOl/KKPBdV/QbUGrMut+Xq8tFkOiY06aBaOG4kyPjaFHDSUqC8u7GGIzWlLj3UNF1/qT1wX79TNUA85Y9hG1I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788464265; 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=HBp6DiGdO8A393pQ6YlEkG5MYjtXxBsHB5saJZn2lQmf0Ao/1j3hYYjhib3g5/07WFeZuK7og+R9I/OlC7jPUOYxBj7lzvucq2U2D4V5VOUWDJDpew1rrSa9YMQvGREWy7LAlfQq/aUMCSNLm66H4ZKwUR1urZbCNzRu1dgUCTI= 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 178846426521832.82529349646188; Thu, 3 Sep 2026 12:37:45 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x2DF6-0001ll-II; Thu, 03 Sep 2026 15:37: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 1x2DF5-0001lP-AC for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:59 -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 1x2DF3-0004RL-F8 for qemu-devel@nongnu.org; Thu, 03 Sep 2026 15:36:58 -0400 Received: by mail-pj1-x102c.google.com with SMTP id 98e67ed59e1d1-398b3c37877so223509a91.0 for ; Thu, 03 Sep 2026 12:36:57 -0700 (PDT) Received: from p14s.cg.shawcable.net ([2604:3d09:148c:c800:40c0:ec33:6266:c275]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39b083e4fafsm6836951a91.1.2026.09.03.12.36.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Sep 2026 12:36:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1788464216; x=1789069016; 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=cbqCW/Aw6AkJSwlZQth8oxLEa0qdL6DTxpxRhyYo/sjAF/STyC80h5tVV9gfGPYkxm iBGEP/LK4OjHcsS6COmXtEVb8YCN9gUID8bS+IGxQIe8v6Kmd0jjf2MtbAzL3YNKo1cR 688KnijAveMbkEt0ExN0L8yMkS5F8VOWTzgekSaXhVcVXzlbTTc2GNQGCahbv0aRm1IY jL5xHM/oXB5hRWec8obmm+cUJVIzRKRrDg389s5d/aTx/uUHBIAfGIXaF5LAFT801QRG bwkgmTv6pY0aumK0UAiaQQCMaaR9+fLTnpmItwVslH4T1Yu8XMBYgstA2NLeRYKIRdoH O6Hw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788464216; x=1789069016; 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=sdcwcahAg07T0ZO1nlk/EnTn5JYwwW2PEuE4fBVLPVTDd507yoDHJeyHCBOdTotyge vzDEGP4J5epHpnWG7BjVPxwytz8KupluuXRyakt836PulaQaujdVXww9g9zaHkl1txjo mmjoIbu2v+ykS5JgJodf/zTbXyQbIGKe5IwH8rqUgcJGlAWb69ne5VQcMYjQ8Ojo2+3x dQrvhI2wakUOMZPEgebA3YQ/V7w8XyaL3ZVTaNoA4tTn1tdJKVrb1houaWGrcTFd1SrY Wg5QSOvJlVHyqeopB9G8AaPKw36PhlBcXkdrTMyFC6tgmOOcDcj/L40FJli9wPBY+MCv lZlg== X-Gm-Message-State: AFuF++ntdlTgn3oEit1Sa+FEcZlGiqhoOc8ObcobPUG0wwuLkRdIOb8m 0zoUq1EVeBC1U0bhK5fWyeoQI2NKKoyb31UoEo7iKqSokrLzluNw8qzKz5h5QEnEBUA= X-Gm-Gg: AYBFou32TaImKJOsG/fgsu7r+mlz1kk+OcJDQzSBjzNQdREWnwGKJsgNmsHPjY9AKJX q/RhhEyr8buor9IvcKN0GLgrQHxVMDhR5xbGFqBrg/lqoJHuVSz7wwZS3KarZBfVFc85kA5CE7O rBqbxvPoFaIectfn/vKqhowfJx+IQW5krS/EJgeeddXnuJ/bJDmVvtZjEcwnmwG8uXZADCoVpJS SPYN8HX9zgWUMuZ2K84llU8PGa8YbV3nivjczhQidr3PSmd98yRX52WGvdsV97NPAPuQ4JgyQ6I WhgJkMgs687CtNd7iXAxEAioyQhrzbz9GWR+YjEyGHVCf56lvdkdz9/HQcn17TSRMqWQ+iS2lLP /sBgu8etq7rAoY5cbahx5bVR3AG2B0F0cNFK08JOJRjMQezoEmUe6DsHoqOHuwgTcA8mcepctdB U++4xG+ZV8P7i7EuHkO2xz9g6fdTGf57jnOFx+VbiIgpY3ebuWlU9QXSJfB5k7NvKn6ZDW9b2wh SQ2WnJpgtIy/f4= X-Received: by 2002:a17:90b:5844:b0:398:dc16:3c29 with SMTP id 98e67ed59e1d1-39b26101530mr1289326a91.7.1788464215941; Thu, 03 Sep 2026 12:36:55 -0700 (PDT) From: Mathieu Poirier To: berrange@redhat.com, kchamart@redhat.com, pierrick.bouvier@oss.qualcomm.com, peter.maydell@linaro.org, mst@redhat.com, cohuck@redhat.com, pbonzini@redhat.com, eblake@redhat.com, armbru@redhat.com, lorenzo.pieralisi@linaro.org, gshan@redhat.com, enju.kohei@fujitsu.com Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, kvm@vger.kernel.org, mathieu.poirier@linaro.org Subject: [RFC v4 24/24] hw/arm/boot: Skip bootloader for confidential guests Date: Thu, 3 Sep 2026 13:36:11 -0600 Message-ID: <20260903193611.1058589-25-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260903193611.1058589-1-mathieu.poirier@linaro.org> References: <20260903193611.1058589-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: 1788464267162158500 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