From nobody Mon Apr 13 08:43:36 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=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1772906697; cv=none; d=zohomail.com; s=zohoarc; b=E9FU8rfOb6fT399zHrtTTzTFK5vohWsnETU2PVHIf//8LPJd5/xOebPhevnUSHa1oNbkAX64lMnbHhTSDCpnkpKr4KHLfHXV1OIYBPdc9sVwGJKrUhbs577ikhy+gOIZ/kfzTwMyt0yDzdcO0ojBgMBADSJMzPcosy9CF3l2cHc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772906697; 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=fZA8/l25pege+AA3tp9V2oguHyeiwhKKjkx8GHgz6Co=; b=CU/RcYv+bFaFOtJ2ZzplNE1sgtrtzVMR1PSwPsDp44jtPlFclv32+PyN/QjEAyqD+V9J2wfTpAGJS6Ud7jiKebgdkUgSoSil4P4AeVffrQP5/BgmaKVVS3PQRi9SyziAVIwzOiCwAntulYUkGEisjjCReRc/g8jvB0NcDl6cB4g= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1772906697443380.39974085398853; Sat, 7 Mar 2026 10:04:57 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vyw0B-0001gd-PF; Sat, 07 Mar 2026 13:03:47 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyw08-0001fF-0t for qemu-devel@nongnu.org; Sat, 07 Mar 2026 13:03:44 -0500 Received: from p-west2-cluster1-host5-snip4-2.eps.apple.com ([57.103.68.45] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyw04-0003SV-Iu for qemu-devel@nongnu.org; Sat, 07 Mar 2026 13:03:43 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-5 (Postfix) with ESMTPS id 5AD3C1800115; Sat, 7 Mar 2026 18:03:38 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-5 (Postfix) with ESMTPSA id 3D3F518001BA; Sat, 7 Mar 2026 18:03:36 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772906619; x=1775498619; bh=fZA8/l25pege+AA3tp9V2oguHyeiwhKKjkx8GHgz6Co=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=Y4UTV+BAPRqZITkq0UsqE9PNWwC4VKo6PKhYfS86JZWEXU0qMO8AXzQ5A8OOMz8IvkMVcaQBkGdb7yQLk0fGkZo9sKRfE83jQWDOzTlkxJ2sEXRVpvpnl8RYSM3TwAuMFIttKFRhydffX3R0kLH3JW5ndZIsUFlktINxphl4N+yzDCjquIvWwD+HSlV7HsCWTfraq5nMyokyuqltPa0JddMDal5gKKlvImLnlvnar7R/ylOS1dHXrll/AACIsJUBvG2Lg6jD9wgcgM1nA/GCFFrH41h80HRk4w1+se0X+TIdasrtG3zKRqJ/tAo5+qVhTpGqs+2kb0J+TZyflvIbAA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Peter Maydell , Roman Bolshakov , Manos Pitsidianakis , Alexander Graf , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , Mohamed Mediouni Subject: [PATCH v19 01/13] hw/intc: Add hvf vGIC interrupt controller support Date: Sat, 7 Mar 2026 19:03:18 +0100 Message-ID: <20260307180330.75168-2-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260307180330.75168-1-mohamed@unpredictable.fr> References: <20260307180330.75168-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Authority-Info-Out: v=2.4 cv=TdGbdBQh c=1 sm=1 tr=0 ts=69ac687a cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=D2JAlcJVxmvnjXxMMLIA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: K9OLhiZvUpzHBPVv7-8zLOvLa5txsKtw X-Proofpoint-ORIG-GUID: K9OLhiZvUpzHBPVv7-8zLOvLa5txsKtw X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA3MDE3MSBTYWx0ZWRfXxhv6EtH6g5x2 Kq04UStcrBpUCOmXa5DkPlj+/dgs1v+yhN++MntFFiD2EsOGAZcXBJM247K+UjpyxZ0sFZbiIGw vbhzNj+MFeseiaSoLa4GgtXUyUotal5TMqOO2C24buPLeJ8Q3OadsmaWzkLj3xtK4PvD3Id6K+n qPm8NCtVcvA6f2PoZ2a/CmfBSR589w1o+pADxtzXzdDBlQbZSDWGTxAlS5oUQWvzwBQkd32FRdO VOjrAWNTO1ni7RMNWZf3ORAUytapDc9eSQd55T4ELWc9/Oxnc0kQr7alU8F/ubTVJkwQRIUE5/0 UP6wIfTirnWUjRIK7IT7FoTfqNauYpLoDFIFDosTVhSbk+nGB++6B/PKMCWFEc= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-07_06,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 spamscore=0 mlxlogscore=999 adultscore=0 suspectscore=0 bulkscore=0 lowpriorityscore=0 mlxscore=0 clxscore=1030 malwarescore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603070171 X-JNJ: AAAAAAABmHHfDbsDPBHb+IGVasACorjFizHRUghFX68N1pTaI/3+rOFvhr+nVXq8QdpV800H33waMN2YmAuRHmz4vgBoX0AcKznSvtCXDKaBzO2Ed/XjgFmdoUNWkbnC3PXu2iWR2zKuaKUeU1dsVRt59UoDlK8fxNMdSAnlIqU83hKtKx97Pr1u7zi/PGNS4KtS30MRezRDS9jufcMVIr15NNUcU43v1pO9fkuuMNuH9wC9ZLiIs7TKm9o7hYnJRNiGxvpiYY/lr6GyooX/oJtycCKHoyOohePlIPYGE/d0Oi8fKcokDvuYEDYuDcwgpMxCiF5Rfuq/FlaRvoNfeI67+86vCrZi14CSCBsmVP28d0vHLGgXQ2o2L7Y7iPmq3N2bGK4vzxh4T5QsDyOGu7oKvhkFhCQIN5SCwzeT+5A73gxmkZIh0d3k7t0D0tpPQAhDkdAJ8jLVEFSvx315fjQfXgubC6Hwhj3YAaoFlsrIbbEyyutqmmcYSFnQkGuaCKRvqrLM7wRbimBONOY9oZG525Q4Ap51HXox+v1OYcjpHxrfKrj7m/q3idGWb7I4lcdovCMdR5uwR9JDsjY/0oZNJ94FXkBUj9fhTvlqjuWDiG9yHjUarQmX2O9vyQz9mBTMXaVfnLMbz+X7ytvaq8BurrT6GwkYhwtyCB+epZbo6mlWvwebcedrO3/zSqm75nZjFyLEsehlhktH/quUiljR+V/ZAYBfQzSn4dVKy+HCgf0zgxvRu08t07qsdSc9tZH9u+8= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.68.45; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.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_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @unpredictable.fr) X-ZM-MESSAGEID: 1772906699815154100 This opens up the door to nested virtualisation support. Signed-off-by: Mohamed Mediouni Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/intc/arm_gicv3_hvf.c | 741 +++++++++++++++++++++++++++++ hw/intc/meson.build | 1 + include/hw/intc/arm_gicv3_common.h | 1 + 3 files changed, 743 insertions(+) create mode 100644 hw/intc/arm_gicv3_hvf.c diff --git a/hw/intc/arm_gicv3_hvf.c b/hw/intc/arm_gicv3_hvf.c new file mode 100644 index 0000000000..55171a796b --- /dev/null +++ b/hw/intc/arm_gicv3_hvf.c @@ -0,0 +1,741 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * ARM Generic Interrupt Controller using HVF platform support + * + * Copyright (c) 2025 Mohamed Mediouni + * Based on vGICv3 KVM code by Pavel Fedin + * + */ + +#include "qemu/osdep.h" +#include "qapi/error.h" +#include "hw/intc/arm_gicv3_common.h" +#include "qemu/error-report.h" +#include "qemu/module.h" +#include "system/runstate.h" +#include "system/hvf.h" +#include "system/hvf_int.h" +#include "hvf_arm.h" +#include "gicv3_internal.h" +#include "vgic_common.h" +#include "qom/object.h" +#include "target/arm/cpregs.h" +#include + +/* For the GIC, override the check outright, as availability is checked el= sewhere. */ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunguarded-availability" + +struct HVFARMGICv3Class { + ARMGICv3CommonClass parent_class; + DeviceRealize parent_realize; + ResettablePhases parent_phases; +}; + +typedef struct HVFARMGICv3Class HVFARMGICv3Class; + +/* This is reusing the GICv3State typedef from ARM_GICV3_ITS_COMMON */ +DECLARE_OBJ_CHECKERS(GICv3State, HVFARMGICv3Class, + HVF_GICV3, TYPE_HVF_GICV3); + +/* + * Loop through each distributor IRQ related register; since bits + * corresponding to SPIs and PPIs are RAZ/WI when affinity routing + * is enabled, we skip those. + */ +#define for_each_dist_irq_reg(_irq, _max, _field_width) \ + for (_irq =3D GIC_INTERNAL; _irq < _max; _irq +=3D (32 / _field_width)) + +/* + * Wrap calls to the vGIC APIs to assert_hvf_ok() + * as a macro to keep the code clean. + */ +#define hv_gic_get_distributor_reg(offset, reg) \ + assert_hvf_ok(hv_gic_get_distributor_reg(offset, reg)) + +#define hv_gic_set_distributor_reg(offset, reg) \ + assert_hvf_ok(hv_gic_set_distributor_reg(offset, reg)) + +#define hv_gic_get_redistributor_reg(vcpu, reg, value) \ + assert_hvf_ok(hv_gic_get_redistributor_reg(vcpu, reg, value)) + +#define hv_gic_set_redistributor_reg(vcpu, reg, value) \ + assert_hvf_ok(hv_gic_set_redistributor_reg(vcpu, reg, value)) + +#define hv_gic_get_icc_reg(vcpu, reg, value) \ + assert_hvf_ok(hv_gic_get_icc_reg(vcpu, reg, value)) + +#define hv_gic_set_icc_reg(vcpu, reg, value) \ + assert_hvf_ok(hv_gic_set_icc_reg(vcpu, reg, value)) + +#define hv_gic_get_ich_reg(vcpu, reg, value) \ + assert_hvf_ok(hv_gic_get_ich_reg(vcpu, reg, value)) + +#define hv_gic_set_ich_reg(vcpu, reg, value) \ + assert_hvf_ok(hv_gic_set_ich_reg(vcpu, reg, value)) + +static void hvf_dist_get_priority(GICv3State *s, hv_gic_distributor_reg_t = offset + , uint8_t *bmp) +{ + uint64_t reg; + uint32_t *field; + int irq; + field =3D (uint32_t *)(bmp); + + for_each_dist_irq_reg(irq, s->num_irq, 8) { + hv_gic_get_distributor_reg(offset, ®); + *field =3D reg; + offset +=3D 4; + field++; + } +} + +static void hvf_dist_put_priority(GICv3State *s, hv_gic_distributor_reg_t = offset + , uint8_t *bmp) +{ + uint32_t reg, *field; + int irq; + field =3D (uint32_t *)(bmp); + + for_each_dist_irq_reg(irq, s->num_irq, 8) { + reg =3D *field; + hv_gic_set_distributor_reg(offset, reg); + offset +=3D 4; + field++; + } +} + +static void hvf_dist_get_edge_trigger(GICv3State *s, hv_gic_distributor_re= g_t offset, + uint32_t *bmp) +{ + uint64_t reg; + int irq; + + for_each_dist_irq_reg(irq, s->num_irq, 2) { + hv_gic_get_distributor_reg(offset, ®); + reg =3D half_unshuffle32(reg >> 1); + if (irq % 32 !=3D 0) { + reg =3D (reg << 16); + } + *gic_bmp_ptr32(bmp, irq) |=3D reg; + offset +=3D 4; + } +} + +static void hvf_dist_put_edge_trigger(GICv3State *s, hv_gic_distributor_re= g_t offset, + uint32_t *bmp) +{ + uint32_t reg; + int irq; + + for_each_dist_irq_reg(irq, s->num_irq, 2) { + reg =3D *gic_bmp_ptr32(bmp, irq); + if (irq % 32 !=3D 0) { + reg =3D (reg & 0xffff0000) >> 16; + } else { + reg =3D reg & 0xffff; + } + reg =3D half_shuffle32(reg) << 1; + hv_gic_set_distributor_reg(offset, reg); + offset +=3D 4; + } +} + +/* Read a bitmap register group from the kernel VGIC. */ +static void hvf_dist_getbmp(GICv3State *s, hv_gic_distributor_reg_t offset= , uint32_t *bmp) +{ + uint64_t reg; + int irq; + + for_each_dist_irq_reg(irq, s->num_irq, 1) { + + hv_gic_get_distributor_reg(offset, ®); + *gic_bmp_ptr32(bmp, irq) =3D reg; + offset +=3D 4; + } +} + +static void hvf_dist_putbmp(GICv3State *s, hv_gic_distributor_reg_t offset, + hv_gic_distributor_reg_t clroffset, uint32_t *= bmp) +{ + uint32_t reg; + int irq; + + for_each_dist_irq_reg(irq, s->num_irq, 1) { + /* + * If this bitmap is a set/clear register pair, first write to the + * clear-reg to clear all bits before using the set-reg to write + * the 1 bits. + */ + if (clroffset !=3D 0) { + reg =3D 0; + hv_gic_set_distributor_reg(clroffset, reg); + clroffset +=3D 4; + } + reg =3D *gic_bmp_ptr32(bmp, irq); + hv_gic_set_distributor_reg(offset, reg); + offset +=3D 4; + } +} + +static void hvf_gicv3_check(GICv3State *s) +{ + uint64_t reg; + uint32_t num_irq; + + /* Sanity checking s->num_irq */ + hv_gic_get_distributor_reg(HV_GIC_DISTRIBUTOR_REG_GICD_TYPER, ®); + num_irq =3D ((reg & 0x1f) + 1) * 32; + + if (num_irq < s->num_irq) { + error_report("Model requests %u IRQs, but HVF supports max %u", + s->num_irq, num_irq); + abort(); + } +} + +static void hvf_gicv3_put_cpu_el2(CPUState *cpu_state, run_on_cpu_data arg) +{ + int num_pri_bits; + + /* Redistributor state */ + GICv3CPUState *c =3D arg.host_ptr; + hv_vcpu_t vcpu =3D c->cpu->accel->fd; + + hv_gic_set_ich_reg(vcpu, HV_GIC_ICH_REG_VMCR_EL2, c->ich_vmcr_el2); + hv_gic_set_ich_reg(vcpu, HV_GIC_ICH_REG_HCR_EL2, c->ich_hcr_el2); + + for (int i =3D 0; i < GICV3_LR_MAX; i++) { + hv_gic_set_ich_reg(vcpu, HV_GIC_ICH_REG_LR0_EL2, c->ich_lr_el2[i]); + } + + num_pri_bits =3D c->vpribits; + + switch (num_pri_bits) { + case 7: + hv_gic_set_ich_reg(vcpu, HV_GIC_ICH_REG_AP0R0_EL2 + 3, + c->ich_apr[GICV3_G0][3]); + hv_gic_set_ich_reg(vcpu, HV_GIC_ICH_REG_AP0R0_EL2 + 2, + c->ich_apr[GICV3_G0][2]); + /* fall through */ + case 6: + hv_gic_set_ich_reg(vcpu, HV_GIC_ICH_REG_AP0R0_EL2 + 1, + c->ich_apr[GICV3_G0][1]); + /* fall through */ + default: + hv_gic_set_ich_reg(vcpu, HV_GIC_ICH_REG_AP0R0_EL2, + c->ich_apr[GICV3_G0][0]); + } + + switch (num_pri_bits) { + case 7: + hv_gic_set_ich_reg(vcpu, HV_GIC_ICH_REG_AP1R0_EL2 + 3, + c->ich_apr[GICV3_G1NS][3]); + hv_gic_set_ich_reg(vcpu, HV_GIC_ICH_REG_AP1R0_EL2 + 2, + c->ich_apr[GICV3_G1NS][2]); + /* fall through */ + case 6: + hv_gic_set_ich_reg(vcpu, HV_GIC_ICH_REG_AP1R0_EL2 + 1, + c->ich_apr[GICV3_G1NS][1]); + /* fall through */ + default: + hv_gic_set_ich_reg(vcpu, HV_GIC_ICH_REG_AP1R0_EL2, + c->ich_apr[GICV3_G1NS][0]); + } +} + +static void hvf_gicv3_put_cpu(CPUState *cpu_state, run_on_cpu_data arg) +{ + uint32_t reg; + uint64_t reg64; + int i, num_pri_bits; + + /* Redistributor state */ + GICv3CPUState *c =3D arg.host_ptr; + hv_vcpu_t vcpu =3D c->cpu->accel->fd; + + reg =3D c->gicr_waker; + hv_gic_set_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_IGROU= PR0, reg); + + reg =3D c->gicr_igroupr0; + hv_gic_set_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_IGROU= PR0, reg); + + reg =3D ~0; + hv_gic_set_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_ICENA= BLER0, reg); + reg =3D c->gicr_ienabler0; + hv_gic_set_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_ISENA= BLER0, reg); + + /* Restore config before pending so we treat level/edge correctly */ + reg =3D half_shuffle32(c->edge_trigger >> 16) << 1; + hv_gic_set_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_ICFGR= 1, reg); + + reg =3D ~0; + hv_gic_set_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_ICPEN= DR0, reg); + reg =3D c->gicr_ipendr0; + hv_gic_set_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_ISPEN= DR0, reg); + + reg =3D ~0; + hv_gic_set_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_ICACT= IVER0, reg); + reg =3D c->gicr_iactiver0; + hv_gic_set_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_ISACT= IVER0, reg); + + for (i =3D 0; i < GIC_INTERNAL; i +=3D 4) { + reg =3D c->gicr_ipriorityr[i] | + (c->gicr_ipriorityr[i + 1] << 8) | + (c->gicr_ipriorityr[i + 2] << 16) | + (c->gicr_ipriorityr[i + 3] << 24); + hv_gic_set_redistributor_reg(vcpu, + HV_GIC_REDISTRIBUTOR_REG_GICR_IPRIORITYR0 + i, reg); + } + + /* CPU interface state */ + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_SRE_EL1, c->icc_sre_el1); + + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_CTLR_EL1, + c->icc_ctlr_el1[GICV3_NS]); + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_IGRPEN0_EL1, + c->icc_igrpen[GICV3_G0]); + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_IGRPEN1_EL1, + c->icc_igrpen[GICV3_G1NS]); + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_PMR_EL1, c->icc_pmr_el1); + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_BPR0_EL1, c->icc_bpr[GICV3_G0]= ); + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_BPR1_EL1, c->icc_bpr[GICV3_G1N= S]); + + num_pri_bits =3D ((c->icc_ctlr_el1[GICV3_NS] & + ICC_CTLR_EL1_PRIBITS_MASK) >> + ICC_CTLR_EL1_PRIBITS_SHIFT) + 1; + + switch (num_pri_bits) { + case 7: + reg64 =3D c->icc_apr[GICV3_G0][3]; + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_AP0R0_EL1 + 3, reg64); + reg64 =3D c->icc_apr[GICV3_G0][2]; + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_AP0R0_EL1 + 2, reg64); + /* fall through */ + case 6: + reg64 =3D c->icc_apr[GICV3_G0][1]; + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_AP0R0_EL1 + 1, reg64); + /* fall through */ + default: + reg64 =3D c->icc_apr[GICV3_G0][0]; + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_AP0R0_EL1, reg64); + } + + switch (num_pri_bits) { + case 7: + reg64 =3D c->icc_apr[GICV3_G1NS][3]; + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_AP1R0_EL1 + 3, reg64); + reg64 =3D c->icc_apr[GICV3_G1NS][2]; + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_AP1R0_EL1 + 2, reg64); + /* fall through */ + case 6: + reg64 =3D c->icc_apr[GICV3_G1NS][1]; + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_AP1R0_EL1 + 1, reg64); + /* fall through */ + default: + reg64 =3D c->icc_apr[GICV3_G1NS][0]; + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_AP1R0_EL1, reg64); + } + + /* Registers beyond this point are with nested virt only */ + if (c->gic->maint_irq) { + hvf_gicv3_put_cpu_el2(cpu_state, arg); + } +} + +static void hvf_gicv3_put(GICv3State *s) +{ + uint32_t reg; + int ncpu, i; + + hvf_gicv3_check(s); + + reg =3D s->gicd_ctlr; + hv_gic_set_distributor_reg(HV_GIC_DISTRIBUTOR_REG_GICD_CTLR, reg); + + /* per-CPU state */ + + for (ncpu =3D 0; ncpu < s->num_cpu; ncpu++) { + run_on_cpu_data data; + data.host_ptr =3D &s->cpu[ncpu]; + run_on_cpu(s->cpu[ncpu].cpu, hvf_gicv3_put_cpu, data); + } + + /* s->enable bitmap -> GICD_ISENABLERn */ + hvf_dist_putbmp(s, HV_GIC_DISTRIBUTOR_REG_GICD_ISENABLER0 + , HV_GIC_DISTRIBUTOR_REG_GICD_ICENABLER0, s->enabled); + + /* s->group bitmap -> GICD_IGROUPRn */ + hvf_dist_putbmp(s, HV_GIC_DISTRIBUTOR_REG_GICD_IGROUPR0 + , 0, s->group); + + /* Restore targets before pending to ensure the pending state is set on + * the appropriate CPU interfaces in the kernel + */ + + /* s->gicd_irouter[irq] -> GICD_IROUTERn */ + for (i =3D GIC_INTERNAL; i < s->num_irq; i++) { + uint32_t offset =3D HV_GIC_DISTRIBUTOR_REG_GICD_IROUTER32 + (8 * i) + - (8 * GIC_INTERNAL); + hv_gic_set_distributor_reg(offset, s->gicd_irouter[i]); + } + + /* + * s->trigger bitmap -> GICD_ICFGRn + * (restore configuration registers before pending IRQs so we treat + * level/edge correctly) + */ + hvf_dist_put_edge_trigger(s, HV_GIC_DISTRIBUTOR_REG_GICD_ICFGR0, s->ed= ge_trigger); + + /* s->pending bitmap -> GICD_ISPENDRn */ + hvf_dist_putbmp(s, HV_GIC_DISTRIBUTOR_REG_GICD_ISPENDR0, + HV_GIC_DISTRIBUTOR_REG_GICD_ICPENDR0, s->pending); + + /* s->active bitmap -> GICD_ISACTIVERn */ + hvf_dist_putbmp(s, HV_GIC_DISTRIBUTOR_REG_GICD_ISACTIVER0, + HV_GIC_DISTRIBUTOR_REG_GICD_ICACTIVER0, s->active); + + /* s->gicd_ipriority[] -> GICD_IPRIORITYRn */ + hvf_dist_put_priority(s, HV_GIC_DISTRIBUTOR_REG_GICD_IPRIORITYR0, s->g= icd_ipriority); +} + +static void hvf_gicv3_get_cpu_el2(CPUState *cpu_state, run_on_cpu_data arg) +{ + int num_pri_bits; + + /* Redistributor state */ + GICv3CPUState *c =3D arg.host_ptr; + hv_vcpu_t vcpu =3D c->cpu->accel->fd; + + hv_gic_get_ich_reg(vcpu, HV_GIC_ICH_REG_VMCR_EL2, &c->ich_vmcr_el2); + hv_gic_get_ich_reg(vcpu, HV_GIC_ICH_REG_HCR_EL2, &c->ich_hcr_el2); + + for (int i =3D 0; i < GICV3_LR_MAX; i++) { + hv_gic_get_ich_reg(vcpu, HV_GIC_ICH_REG_LR0_EL2, &c->ich_lr_el2[i]= ); + } + + num_pri_bits =3D c->vpribits; + + switch (num_pri_bits) { + case 7: + hv_gic_get_ich_reg(vcpu, HV_GIC_ICH_REG_AP0R0_EL2 + 3, + &c->ich_apr[GICV3_G0][3]); + hv_gic_get_ich_reg(vcpu, HV_GIC_ICH_REG_AP0R0_EL2 + 2, + &c->ich_apr[GICV3_G0][2]); + /* fall through */ + case 6: + hv_gic_get_ich_reg(vcpu, HV_GIC_ICH_REG_AP0R0_EL2 + 1, + &c->ich_apr[GICV3_G0][1]); + /* fall through */ + default: + hv_gic_get_ich_reg(vcpu, HV_GIC_ICH_REG_AP0R0_EL2, + &c->ich_apr[GICV3_G0][0]); + } + + switch (num_pri_bits) { + case 7: + hv_gic_get_ich_reg(vcpu, HV_GIC_ICH_REG_AP1R0_EL2 + 3, + &c->ich_apr[GICV3_G1NS][3]); + hv_gic_get_ich_reg(vcpu, HV_GIC_ICH_REG_AP1R0_EL2 + 2, + &c->ich_apr[GICV3_G1NS][2]); + /* fall through */ + case 6: + hv_gic_get_ich_reg(vcpu, HV_GIC_ICH_REG_AP1R0_EL2 + 1, + &c->ich_apr[GICV3_G1NS][1]); + /* fall through */ + default: + hv_gic_get_ich_reg(vcpu, HV_GIC_ICH_REG_AP1R0_EL2, + &c->ich_apr[GICV3_G1NS][0]); + } +} + +static void hvf_gicv3_get_cpu(CPUState *cpu_state, run_on_cpu_data arg) +{ + uint64_t reg; + int i, num_pri_bits; + + /* Redistributor state */ + GICv3CPUState *c =3D arg.host_ptr; + hv_vcpu_t vcpu =3D c->cpu->accel->fd; + + hv_gic_get_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_IGROU= PR0, + ®); + c->gicr_igroupr0 =3D reg; + hv_gic_get_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_ISENA= BLER0, + ®); + c->gicr_ienabler0 =3D reg; + hv_gic_get_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_ICFGR= 1, + ®); + c->edge_trigger =3D half_unshuffle32(reg >> 1) << 16; + hv_gic_get_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_ISPEN= DR0, + ®); + c->gicr_ipendr0 =3D reg; + hv_gic_get_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_ISACT= IVER0, + ®); + c->gicr_iactiver0 =3D reg; + + for (i =3D 0; i < GIC_INTERNAL; i +=3D 4) { + hv_gic_get_redistributor_reg( + vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_IPRIORITYR0 + i, ®); + c->gicr_ipriorityr[i] =3D extract32(reg, 0, 8); + c->gicr_ipriorityr[i + 1] =3D extract32(reg, 8, 8); + c->gicr_ipriorityr[i + 2] =3D extract32(reg, 16, 8); + c->gicr_ipriorityr[i + 3] =3D extract32(reg, 24, 8); + } + + /* CPU interface */ + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_SRE_EL1, &c->icc_sre_el1); + + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_CTLR_EL1, + &c->icc_ctlr_el1[GICV3_NS]); + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_IGRPEN0_EL1, + &c->icc_igrpen[GICV3_G0]); + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_IGRPEN1_EL1, + &c->icc_igrpen[GICV3_G1NS]); + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_PMR_EL1, &c->icc_pmr_el1); + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_BPR0_EL1, &c->icc_bpr[GICV3_G0= ]); + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_BPR1_EL1, &c->icc_bpr[GICV3_G1= NS]); + num_pri_bits =3D ((c->icc_ctlr_el1[GICV3_NS] & ICC_CTLR_EL1_PRIBITS_MA= SK) >> + ICC_CTLR_EL1_PRIBITS_SHIFT) + + 1; + + switch (num_pri_bits) { + case 7: + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_AP0R0_EL1 + 3, + &c->icc_apr[GICV3_G0][3]); + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_AP0R0_EL1 + 2, + &c->icc_apr[GICV3_G0][2]); + /* fall through */ + case 6: + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_AP0R0_EL1 + 1, + &c->icc_apr[GICV3_G0][1]); + /* fall through */ + default: + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_AP0R0_EL1, + &c->icc_apr[GICV3_G0][0]); + } + + switch (num_pri_bits) { + case 7: + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_AP1R0_EL1 + 3, + &c->icc_apr[GICV3_G1NS][3]); + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_AP1R0_EL1 + 2, + &c->icc_apr[GICV3_G1NS][2]); + /* fall through */ + case 6: + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_AP1R0_EL1 + 1, + &c->icc_apr[GICV3_G1NS][1]); + /* fall through */ + default: + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_AP1R0_EL1, + &c->icc_apr[GICV3_G1NS][0]); + } + + /* Registers beyond this point are with nested virt only */ + if (c->gic->maint_irq) { + hvf_gicv3_get_cpu_el2(cpu_state, arg); + } +} + +static void hvf_gicv3_get(GICv3State *s) +{ + uint64_t reg; + int ncpu, i; + + hvf_gicv3_check(s); + + hv_gic_get_distributor_reg(HV_GIC_DISTRIBUTOR_REG_GICD_CTLR, ®); + s->gicd_ctlr =3D reg; + + /* Redistributor state (one per CPU) */ + + for (ncpu =3D 0; ncpu < s->num_cpu; ncpu++) { + run_on_cpu_data data; + data.host_ptr =3D &s->cpu[ncpu]; + run_on_cpu(s->cpu[ncpu].cpu, hvf_gicv3_get_cpu, data); + } + + /* GICD_IGROUPRn -> s->group bitmap */ + hvf_dist_getbmp(s, HV_GIC_DISTRIBUTOR_REG_GICD_IGROUPR0, s->group); + + /* GICD_ISENABLERn -> s->enabled bitmap */ + hvf_dist_getbmp(s, HV_GIC_DISTRIBUTOR_REG_GICD_ISENABLER0, s->enabled); + + /* GICD_ISPENDRn -> s->pending bitmap */ + hvf_dist_getbmp(s, HV_GIC_DISTRIBUTOR_REG_GICD_ISPENDR0, s->pending); + + /* GICD_ISACTIVERn -> s->active bitmap */ + hvf_dist_getbmp(s, HV_GIC_DISTRIBUTOR_REG_GICD_ISACTIVER0, s->active); + + /* GICD_ICFGRn -> s->trigger bitmap */ + hvf_dist_get_edge_trigger(s, HV_GIC_DISTRIBUTOR_REG_GICD_ICFGR0 + , s->edge_trigger); + + /* GICD_IPRIORITYRn -> s->gicd_ipriority[] */ + hvf_dist_get_priority(s, HV_GIC_DISTRIBUTOR_REG_GICD_IPRIORITYR0 + , s->gicd_ipriority); + + /* GICD_IROUTERn -> s->gicd_irouter[irq] */ + for (i =3D GIC_INTERNAL; i < s->num_irq; i++) { + uint32_t offset =3D HV_GIC_DISTRIBUTOR_REG_GICD_IROUTER32 + + (8 * i) - (8 * GIC_INTERNAL); + hv_gic_get_distributor_reg(offset, &s->gicd_irouter[i]); + } +} + +static void hvf_gicv3_set_irq(void *opaque, int irq, int level) +{ + GICv3State *s =3D opaque; + if (irq > s->num_irq) { + return; + } + hv_gic_set_spi(GIC_INTERNAL + irq, !!level); +} + +static void hvf_gicv3_icc_reset(CPUARMState *env, const ARMCPRegInfo *ri) +{ + GICv3CPUState *c; + + c =3D env->gicv3state; + c->icc_pmr_el1 =3D 0; + /* + * Architecturally the reset value of the ICC_BPR registers + * is UNKNOWN. We set them all to 0 here; when the kernel + * uses these values to program the ICH_VMCR_EL2 fields that + * determine the guest-visible ICC_BPR register values, the + * hardware's "writing a value less than the minimum sets + * the field to the minimum value" behaviour will result in + * them effectively resetting to the correct minimum value + * for the host GIC. + */ + c->icc_bpr[GICV3_G0] =3D 0; + c->icc_bpr[GICV3_G1] =3D 0; + c->icc_bpr[GICV3_G1NS] =3D 0; + + c->icc_sre_el1 =3D 0x7; + memset(c->icc_apr, 0, sizeof(c->icc_apr)); + memset(c->icc_igrpen, 0, sizeof(c->icc_igrpen)); +} + +static void hvf_gicv3_reset_hold(Object *obj, ResetType type) +{ + GICv3State *s =3D ARM_GICV3_COMMON(obj); + HVFARMGICv3Class *kgc =3D HVF_GICV3_GET_CLASS(s); + + if (kgc->parent_phases.hold) { + kgc->parent_phases.hold(obj, type); + } + + hvf_gicv3_put(s); +} + + +/* + * CPU interface registers of GIC needs to be reset on CPU reset. + * For the calling arm_gicv3_icc_reset() on CPU reset, we register + * below ARMCPRegInfo. As we reset the whole cpu interface under single + * register reset, we define only one register of CPU interface instead + * of defining all the registers. + */ +static const ARMCPRegInfo gicv3_cpuif_reginfo[] =3D { + { .name =3D "ICC_CTLR_EL1", .state =3D ARM_CP_STATE_BOTH, + .opc0 =3D 3, .opc1 =3D 0, .crn =3D 12, .crm =3D 12, .opc2 =3D 4, + /* + * If ARM_CP_NOP is used, resetfn is not called, + * So ARM_CP_NO_RAW is appropriate type. + */ + .type =3D ARM_CP_NO_RAW, + .access =3D PL1_RW, + .readfn =3D arm_cp_read_zero, + .writefn =3D arm_cp_write_ignore, + /* + * We hang the whole cpu interface reset routine off here + * rather than parcelling it out into one little function + * per register + */ + .resetfn =3D hvf_gicv3_icc_reset, + }, +}; + +static void hvf_gicv3_realize(DeviceState *dev, Error **errp) +{ + ERRP_GUARD(); + GICv3State *s =3D HVF_GICV3(dev); + HVFARMGICv3Class *kgc =3D HVF_GICV3_GET_CLASS(s); + int i; + + kgc->parent_realize(dev, errp); + if (*errp) { + return; + } + + if (s->revision !=3D 3) { + error_setg(errp, "unsupported GIC revision %d for platform GIC", + s->revision); + } + + if (s->security_extn) { + error_setg(errp, "the platform vGICv3 does not implement the " + "security extensions"); + return; + } + + if (s->nmi_support) { + error_setg(errp, "NMI is not supported with the platform GIC"); + return; + } + + if (s->nb_redist_regions > 1) { + error_setg(errp, "Multiple VGICv3 redistributor regions are not " + "supported by HVF"); + error_append_hint(errp, "A maximum of %d VCPUs can be used", + s->redist_region_count[0]); + return; + } + + gicv3_init_irqs_and_mmio(s, hvf_gicv3_set_irq, NULL); + + for (i =3D 0; i < s->num_cpu; i++) { + ARMCPU *cpu =3D ARM_CPU(qemu_get_cpu(i)); + + define_arm_cp_regs(cpu, gicv3_cpuif_reginfo); + } + + if (s->maint_irq && s->maint_irq !=3D HV_GIC_INT_MAINTENANCE) { + error_setg(errp, "vGIC maintenance IRQ mismatch with the hardcoded= one in HVF."); + return; + } +} + +static void hvf_gicv3_class_init(ObjectClass *klass, const void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + ResettableClass *rc =3D RESETTABLE_CLASS(klass); + ARMGICv3CommonClass *agcc =3D ARM_GICV3_COMMON_CLASS(klass); + HVFARMGICv3Class *kgc =3D HVF_GICV3_CLASS(klass); + + agcc->pre_save =3D hvf_gicv3_get; + agcc->post_load =3D hvf_gicv3_put; + + device_class_set_parent_realize(dc, hvf_gicv3_realize, + &kgc->parent_realize); + resettable_class_set_parent_phases(rc, NULL, hvf_gicv3_reset_hold, NUL= L, + &kgc->parent_phases); +} + +static const TypeInfo hvf_arm_gicv3_info =3D { + .name =3D TYPE_HVF_GICV3, + .parent =3D TYPE_ARM_GICV3_COMMON, + .instance_size =3D sizeof(GICv3State), + .class_init =3D hvf_gicv3_class_init, + .class_size =3D sizeof(HVFARMGICv3Class), +}; + +static void hvf_gicv3_register_types(void) +{ + type_register_static(&hvf_arm_gicv3_info); +} + +type_init(hvf_gicv3_register_types) + +#pragma clang diagnostic pop diff --git a/hw/intc/meson.build b/hw/intc/meson.build index 96742df090..b7baf8a0f6 100644 --- a/hw/intc/meson.build +++ b/hw/intc/meson.build @@ -42,6 +42,7 @@ arm_common_ss.add(when: 'CONFIG_ARM_GIC', if_true: files(= 'arm_gicv3_cpuif_common arm_common_ss.add(when: 'CONFIG_ARM_GICV3', if_true: files('arm_gicv3_cpui= f.c')) specific_ss.add(when: 'CONFIG_ARM_GIC_KVM', if_true: files('arm_gic_kvm.c'= )) specific_ss.add(when: ['CONFIG_WHPX', 'TARGET_AARCH64'], if_true: files('a= rm_gicv3_whpx.c')) +specific_ss.add(when: ['CONFIG_HVF', 'CONFIG_ARM_GICV3'], if_true: files('= arm_gicv3_hvf.c')) specific_ss.add(when: ['CONFIG_ARM_GIC_KVM', 'TARGET_AARCH64'], if_true: f= iles('arm_gicv3_kvm.c', 'arm_gicv3_its_kvm.c')) arm_common_ss.add(when: 'CONFIG_ARM_V7M', if_true: files('armv7m_nvic.c')) specific_ss.add(when: 'CONFIG_GRLIB', if_true: files('grlib_irqmp.c')) diff --git a/include/hw/intc/arm_gicv3_common.h b/include/hw/intc/arm_gicv3= _common.h index c55cf18120..9adcab0a0c 100644 --- a/include/hw/intc/arm_gicv3_common.h +++ b/include/hw/intc/arm_gicv3_common.h @@ -315,6 +315,7 @@ DECLARE_OBJ_CHECKERS(GICv3State, ARMGICv3CommonClass, =20 /* Types for GICv3 kernel-irqchip */ #define TYPE_WHPX_GICV3 "whpx-arm-gicv3" +#define TYPE_HVF_GICV3 "hvf-arm-gicv3" =20 struct ARMGICv3CommonClass { /*< private >*/ --=20 2.50.1 (Apple Git-155) From nobody Mon Apr 13 08:43:36 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=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1772906771; cv=none; d=zohomail.com; s=zohoarc; b=cW3MewzM3eRmEmJYvL3v8ylogKwcoG+gOAnc0PQvNWEcwI4Z0gGbi3f4+qiRXFE7Gh3Mmrmde3GESmLFg7ZP4T1yq8aTyWCNVIZyc7wlZUB57/D4GyS22SNxFejyN0ZeJ10Fa1StzthZRnyhHwSQu0ZulckfsvVPwzUkisV0Kt4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772906771; 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=1RV2oa9C2DaRGIF3rfTp8Tdv8xxfIYsPZWi/MFo/wCM=; b=l+F0zs9S/tyJlgFEmzpu87FXtQe3WApC/z9d9WJakr1p8kzhWZKM0bh89SDXjwj8HnmyfYDOQIbtUBlizFHQi3WmAMUnj+MRclwQVMN7mp1ltX157pXtnuv8R4zWZ1wGPYjSCXpHs6+QbG6GXg+izrBhzX8wBsWjQ79EoqgJCKw= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1772906771753236.28506034184966; Sat, 7 Mar 2026 10:06:11 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vyw0E-0001iR-KC; Sat, 07 Mar 2026 13:03:51 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyw09-0001ga-Th for qemu-devel@nongnu.org; Sat, 07 Mar 2026 13:03:46 -0500 Received: from p-west2-cluster4-host6-snip4-10.eps.apple.com ([57.103.69.171] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyw07-0003Sr-DB for qemu-devel@nongnu.org; Sat, 07 Mar 2026 13:03:45 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-5 (Postfix) with ESMTPS id 9AC8018001B3; Sat, 7 Mar 2026 18:03:40 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-5 (Postfix) with ESMTPSA id 7AB0D1800127; Sat, 7 Mar 2026 18:03:38 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772906621; x=1775498621; bh=1RV2oa9C2DaRGIF3rfTp8Tdv8xxfIYsPZWi/MFo/wCM=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=PJH/cRzX7fFl8bPgma4NyJU7EcEKMFaIai1kDPrm4garZiVq3ZlF6QjNCN3K9e7q11WCp3DSpBmhC+yNyQrrk8rYZQ3DWg7CAVVHeFh3/Guut1f4wk/Qzl1rJi3Sbq9urY2q9RpQDkJZXa29G78Pc9pRVXmv4A08hYm/J0w83+JAjnshcGFDdrIl0CVkMx8sJsjjYRinZBh7zLBT1ghZx/EoJiWd0CO7+pOZja0Y4uuCsOrdeP/mW+uuoUSZhi1By6mUrQKMJGFZYS3TIFBEBS9BaI+yL3NFBTZCRvXEGI+V2AHjdOjmOH4xeiNMAXwQWa17q8TcVaIFXtlYD8wDxQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Peter Maydell , Roman Bolshakov , Manos Pitsidianakis , Alexander Graf , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , Mohamed Mediouni Subject: [PATCH v19 02/13] hw/intc: arm_gicv3_hvf: save/restore Apple GIC state Date: Sat, 7 Mar 2026 19:03:19 +0100 Message-ID: <20260307180330.75168-3-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260307180330.75168-1-mohamed@unpredictable.fr> References: <20260307180330.75168-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Authority-Info-Out: v=2.4 cv=TsTrRTXh c=1 sm=1 tr=0 ts=69ac687c cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=kNOF8fv34t_zTB2Y_VIA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA3MDE3MSBTYWx0ZWRfXxQjITgEUDtKN NCSLvh9GL73I2LmXs/AbF15JqSlBBetcSBM7dNglWx9ZnMLdsNIQ8vlJ7U4CH9CGkIjJA70W6rr togH96D13eQI7r7r+0tBWK8mspaQf9KoXzMcsuu8+Mri13bU5uNXCOiu5GF0D0GlNkRxh+qcIKH t9lhw/iJnvQJZfUhPZFv/SCyCwEyImpG0t/MuZPtlrSbp0f3MD6aFv3x4qgQACl9uUM3V6RsOfI 0hjy6+0U3EG/LdUYtkY6VSPlsLf7nN48yKPj/8okrSSCy8frmMMyWWXsx4a7fTIIC/stV3q9KJR zeMfRslfZAjPWJEG6Gdjm54JJjlxJNW6Jlh4xwJzYiigsZD6R4xFoz8+xqSNCM= X-Proofpoint-GUID: t8JWjwZLmfAya2D3bMdUM-xblHzr_p0S X-Proofpoint-ORIG-GUID: t8JWjwZLmfAya2D3bMdUM-xblHzr_p0S X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-07_06,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 clxscore=1030 adultscore=0 suspectscore=0 mlxscore=0 lowpriorityscore=0 mlxlogscore=978 bulkscore=0 malwarescore=0 spamscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603070171 X-JNJ: AAAAAAABjVsYtfQvE63MrrGgLYastmHqra7LgUw0IitXPXP8WUko8rP+LQJuIrs/hypmIrpdsdUJw7NOUEQ9VNGUGrjpdVAnYxezj/3jkgeMlhO+nMFzupCq1IBHqGsRMT8bu4OqsmWn98nnHg/aihWT8K8ZQEQjXncogSlmxH06yvMQNqbiqL2MquL8dtcwcFqAYG+pR5T0bQSSwvxcWWhjRfylARfax+FqV+SZgA20hTtFNSjTKidLzPEqDhWJX+OXXCrZXSf09xOorpX/5QvG/DNsmBNdTxy3VSWk9v8uR+SZmIulsSjr36F4Ioz/7SYCGTMitTWZSWLW23fBllfjeyqGypbxxZGbJx+nJTTEFzbTGT6I96OKRZdB5nzPdGD8Q66hzEGvhV2Z9qlaf+3a9incQ4icStWdyF4sA4dxiXdmgE8lgKIzFNlDbgBg+LThtTzsJoRzhnqIXXpxiim1H3gaIU0Kbr9+1TSMjj/S9WS7Izxhc5sQmynCiWOmL3bVgZ4NehdAsKsMU/aAbN/0Nl5BdVJ4yUGwfvbOGqVZYfWWpdGEZqXGxtWBAFpkNeoUkQkwgo807xsn05/WqT/u4dtbTPBRz03BImJzlO/M4q6K2gSQKgI8ErJpkWXzSv9EaL6q6UEUgsSMGJeNXg30GEubUiTOva6ZBx1+6Qhf4213dyQOnCKCQzLJ1yBNMdMwr3/EBzz0OUL9cS/lZbOkWiaKpy59SPKfC0F5SetYgtlaf1z8sgXCqhTU8afPkwJFhxseuyZFefOBwdlUsUPZwcmuRIb5TyJs4MlIlXTWMbI8It71mG8VZTRlvw== Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.69.171; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.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_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @unpredictable.fr) X-ZM-MESSAGEID: 1772906772780158500 On HVF, some of the GIC state is in an opaque Apple-provided structure. Save/restore that state to be able to save/restore VMs that use the hardwar= e GIC. Signed-off-by: Mohamed Mediouni Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/intc/arm_gicv3_common.c | 1 + hw/intc/arm_gicv3_hvf.c | 95 ++++++++++++++++++++++++++++-- hw/intc/arm_gicv3_hvf_stub.c | 25 ++++++++ hw/intc/meson.build | 1 + include/hw/intc/arm_gicv3_common.h | 3 + 5 files changed, 121 insertions(+), 4 deletions(-) create mode 100644 hw/intc/arm_gicv3_hvf_stub.c diff --git a/hw/intc/arm_gicv3_common.c b/hw/intc/arm_gicv3_common.c index 9200671c7a..9c3fb2f4bf 100644 --- a/hw/intc/arm_gicv3_common.c +++ b/hw/intc/arm_gicv3_common.c @@ -305,6 +305,7 @@ static const VMStateDescription vmstate_gicv3 =3D { .subsections =3D (const VMStateDescription * const []) { &vmstate_gicv3_gicd_no_migration_shift_bug, &vmstate_gicv3_gicd_nmi, + &vmstate_gicv3_hvf, NULL } }; diff --git a/hw/intc/arm_gicv3_hvf.c b/hw/intc/arm_gicv3_hvf.c index 55171a796b..18e5b3fe68 100644 --- a/hw/intc/arm_gicv3_hvf.c +++ b/hw/intc/arm_gicv3_hvf.c @@ -13,6 +13,7 @@ #include "qemu/error-report.h" #include "qemu/module.h" #include "system/runstate.h" +#include "migration/vmstate.h" #include "system/hvf.h" #include "system/hvf_int.h" #include "hvf_arm.h" @@ -34,8 +35,13 @@ struct HVFARMGICv3Class { =20 typedef struct HVFARMGICv3Class HVFARMGICv3Class; =20 -/* This is reusing the GICv3State typedef from ARM_GICV3_ITS_COMMON */ -DECLARE_OBJ_CHECKERS(GICv3State, HVFARMGICv3Class, +typedef struct HVFGICv3State { + GICv3State gicv3_state; + uint32_t size; + void *state; +} HVFGICv3State; + +DECLARE_OBJ_CHECKERS(HVFGICv3State, HVFARMGICv3Class, HVF_GICV3, TYPE_HVF_GICV3); =20 /* @@ -660,7 +666,7 @@ static const ARMCPRegInfo gicv3_cpuif_reginfo[] =3D { static void hvf_gicv3_realize(DeviceState *dev, Error **errp) { ERRP_GUARD(); - GICv3State *s =3D HVF_GICV3(dev); + GICv3State *s =3D (GICv3State *)HVF_GICV3(dev); HVFARMGICv3Class *kgc =3D HVF_GICV3_GET_CLASS(s); int i; =20 @@ -707,6 +713,87 @@ static void hvf_gicv3_realize(DeviceState *dev, Error = **errp) } } =20 +/* + * HVF doesn't have a way to save the RDIST pending tables + * to guest memory, only to an opaque data structure. + */ +static bool gicv3_is_hvf(void *opaque) +{ + return hvf_enabled() && hvf_irqchip_in_kernel(); +} + +static int hvf_gic_opaque_state_save(void *opaque) +{ + HVFGICv3State *gic =3D opaque; + hv_gic_state_t gic_state; + hv_return_t err; + size_t size; + + gic_state =3D hv_gic_state_create(); + if (gic_state =3D=3D NULL) { + error_report("hvf: vgic: failed to create hv_gic_state_create."); + return 1; + } + err =3D hv_gic_state_get_size(gic_state, &size); + gic->size =3D size; + if (err !=3D HV_SUCCESS) { + error_report("hvf: vgic: failed to get GIC state size."); + os_release(gic_state); + return 1; + } + gic->state =3D g_malloc(gic->size); + err =3D hv_gic_state_get_data(gic_state, gic->state); + if (err !=3D HV_SUCCESS) { + error_report("hvf: vgic: failed to get GIC state."); + os_release(gic_state); + return 1; + } + + os_release(gic_state); + return 0; +} + +static int hvf_gic_opaque_state_free(void *opaque) +{ + HVFGICv3State *gic =3D opaque; + free(gic->state); + return 0; +} + +static int hvf_gic_opaque_state_restore(void *opaque, int version_id) +{ + HVFGICv3State *gic =3D opaque; + hv_return_t err; + if (!gic->size) { + return 0; + } + err =3D hv_gic_set_state(gic->state, gic->size); + if (err !=3D HV_SUCCESS) { + error_report("hvf: vgic: failed to restore GIC state."); + return 1; + } + return 0; +} + +const VMStateDescription vmstate_gicv3_hvf =3D { + .name =3D "arm_gicv3/hvf_gic_state", + .version_id =3D 1, + .minimum_version_id =3D 1, + .needed =3D gicv3_is_hvf, + .pre_save =3D hvf_gic_opaque_state_save, + .post_save =3D hvf_gic_opaque_state_free, + .post_load =3D hvf_gic_opaque_state_restore, + .version_id =3D 1, + .minimum_version_id =3D 1, + .fields =3D (const VMStateField[]) { + VMSTATE_UINT32(size, HVFGICv3State), + VMSTATE_VBUFFER_ALLOC_UINT32(state, + HVFGICv3State, 0, 0, + size), + VMSTATE_END_OF_LIST() + }, +}; + static void hvf_gicv3_class_init(ObjectClass *klass, const void *data) { DeviceClass *dc =3D DEVICE_CLASS(klass); @@ -726,7 +813,7 @@ static void hvf_gicv3_class_init(ObjectClass *klass, co= nst void *data) static const TypeInfo hvf_arm_gicv3_info =3D { .name =3D TYPE_HVF_GICV3, .parent =3D TYPE_ARM_GICV3_COMMON, - .instance_size =3D sizeof(GICv3State), + .instance_size =3D sizeof(HVFGICv3State), .class_init =3D hvf_gicv3_class_init, .class_size =3D sizeof(HVFARMGICv3Class), }; diff --git a/hw/intc/arm_gicv3_hvf_stub.c b/hw/intc/arm_gicv3_hvf_stub.c new file mode 100644 index 0000000000..a587332c7c --- /dev/null +++ b/hw/intc/arm_gicv3_hvf_stub.c @@ -0,0 +1,25 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * ARM Generic Interrupt Controller using HVF platform support stub + * + * Copyright (c) 2026 Mohamed Mediouni + * + */ +#include "qemu/osdep.h" +#include "hw/intc/arm_gicv3_common.h" +#include "migration/vmstate.h" +#include "qemu/typedefs.h" + +static bool needed_never(void *opaque) +{ + return false; +} + +const VMStateDescription vmstate_gicv3_hvf =3D { + .name =3D "arm_gicv3/hvf_gic_state", + .version_id =3D 1, + .minimum_version_id =3D 1, + .needed =3D needed_never, + .version_id =3D 1, + .minimum_version_id =3D 1, +}; diff --git a/hw/intc/meson.build b/hw/intc/meson.build index b7baf8a0f6..c6de2d9d00 100644 --- a/hw/intc/meson.build +++ b/hw/intc/meson.build @@ -43,6 +43,7 @@ arm_common_ss.add(when: 'CONFIG_ARM_GICV3', if_true: file= s('arm_gicv3_cpuif.c')) specific_ss.add(when: 'CONFIG_ARM_GIC_KVM', if_true: files('arm_gic_kvm.c'= )) specific_ss.add(when: ['CONFIG_WHPX', 'TARGET_AARCH64'], if_true: files('a= rm_gicv3_whpx.c')) specific_ss.add(when: ['CONFIG_HVF', 'CONFIG_ARM_GICV3'], if_true: files('= arm_gicv3_hvf.c')) +specific_ss.add(when: ['CONFIG_HVF', 'CONFIG_ARM_GICV3'], if_false: files(= 'arm_gicv3_hvf_stub.c')) specific_ss.add(when: ['CONFIG_ARM_GIC_KVM', 'TARGET_AARCH64'], if_true: f= iles('arm_gicv3_kvm.c', 'arm_gicv3_its_kvm.c')) arm_common_ss.add(when: 'CONFIG_ARM_V7M', if_true: files('armv7m_nvic.c')) specific_ss.add(when: 'CONFIG_GRLIB', if_true: files('grlib_irqmp.c')) diff --git a/include/hw/intc/arm_gicv3_common.h b/include/hw/intc/arm_gicv3= _common.h index 9adcab0a0c..03ab3e8f2f 100644 --- a/include/hw/intc/arm_gicv3_common.h +++ b/include/hw/intc/arm_gicv3_common.h @@ -339,4 +339,7 @@ void gicv3_init_irqs_and_mmio(GICv3State *s, qemu_irq_h= andler handler, */ const char *gicv3_class_name(void); =20 +/* HVF vGIC-specific state: stubbed out on a build with HVF disabled */ +extern const VMStateDescription vmstate_gicv3_hvf; + #endif --=20 2.50.1 (Apple Git-155) From nobody Mon Apr 13 08:43:36 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=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1772906691; cv=none; d=zohomail.com; s=zohoarc; b=NpDyHvZGfJPqOa02n36r1Cknb4XyoU+zrz2qsMUtMGThmSnzAxXGZSPZ3YDaYjkKeAcnbNhmyoTW/F4W8enULSXqDaoOiXcYI2wqkLpyIy+VG4arFlN1/4paEk1qmSIm54bZLfWkdWLcbH6XIg8UV1yqYbJcIsc1u43yjI83mo4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772906691; 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=MVkulPZG/P32eig2T0uS/HmO19+ssM94R08S2oM1hno=; b=RpuKg3E9dYTuXos7l8JjIXD5/2WPVzAhnNHuPWaQ7NrFT24+ENeaxyhaLULCRtRLNFh/SVlnJz/83r3F7c21IgaLCcZibc578+n8kt+H2EX7iobcy3GDo0Wi1MBmB5TPL6MGqT21EbGQ4nmCd0dYKS/XSNtS9azzjmm8AVTGamE= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1772906691328849.5601590709958; Sat, 7 Mar 2026 10:04:51 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vyw0F-0001iu-Ht; Sat, 07 Mar 2026 13:03:51 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyw0B-0001gi-Ey for qemu-devel@nongnu.org; Sat, 07 Mar 2026 13:03:47 -0500 Received: from p-west2-cluster4-host7-snip4-2.eps.apple.com ([57.103.69.213] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyw09-0003TO-MJ for qemu-devel@nongnu.org; Sat, 07 Mar 2026 13:03:47 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-5 (Postfix) with ESMTPS id EDCDC1800196; Sat, 7 Mar 2026 18:03:42 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-5 (Postfix) with ESMTPSA id BBBE518001B8; Sat, 7 Mar 2026 18:03:40 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772906623; x=1775498623; bh=MVkulPZG/P32eig2T0uS/HmO19+ssM94R08S2oM1hno=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=fppMadzGZEfjPItRQF8kHHBAQ787rsRSYufpcViKP+peSDZW/NONjG27G0IOxPZBrMvMm5+nmoASPsk9PPdJeD4vI2fLUzjPE5d2+LFN1sQrU0W1FrdLHxB+pESdM9DBwrc9zIoCxsi09MznbNsuiRKi4b6FKm4k2eN6KeVTJD6ucD5vgu5VxO07VyaXI0RxO96kc2PTy7mKT5CN8XelW0YYjUkQuerYguKqgC3lKRcbzTk2IDZ+U9gXdmKqwqWQoFwKCu4qug+sHTT4eFV+klwhg+dy/I4NjW1MQKK+/JbqC07rZ+6MwY8jzyRch9f7Zfhb1HRAc0sR0V2H1RLwHw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Peter Maydell , Roman Bolshakov , Manos Pitsidianakis , Alexander Graf , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , Mohamed Mediouni Subject: [PATCH v19 03/13] accel, hw/arm, include/system/hvf: infrastructure changes for HVF vGIC Date: Sat, 7 Mar 2026 19:03:20 +0100 Message-ID: <20260307180330.75168-4-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260307180330.75168-1-mohamed@unpredictable.fr> References: <20260307180330.75168-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: YYkK6aYGERtBfud9qJV080uGmuELZHjC X-Authority-Info-Out: v=2.4 cv=RKu+3oi+ c=1 sm=1 tr=0 ts=69ac687f cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=n4FVybPFTm1vobq06wUA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA3MDE3MSBTYWx0ZWRfXyfPwsGZMLRLa TwGPFe+b1dgGfdvA4bOzR9lJEmOEKwrIjaRVYP3FC5Mh38ZGFjzmq0jW8OKNm4U9EWSjvJDy22u ZvdLau1TaSosvEqxN/ff41y8pyIkavRbWrsblHSJ1rtg34OjoMvujPfDwz2C78rxygIXWXuf0rp 2E0UFiCz1v59nKWY7JW/dc1oi1qjL6oavICyuH3hlkGndOVEIzlTGSJ/2617pssfLJORSUfoiu0 9wk2EeJxY1k8IvKMCgM608COFpTLGIDXs4g6dN2p5Y3fhA8PjuicVvjUVdqOfhBS9+zgGKWnVsT O2s2ikrxGl7EUjaqI99qQCndWHT1Sp7FGItQbxGcLteDv7Zmg3+kmlKx6dzIT8= X-Proofpoint-GUID: YYkK6aYGERtBfud9qJV080uGmuELZHjC X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-07_06,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 suspectscore=0 adultscore=0 mlxlogscore=999 clxscore=1030 phishscore=0 malwarescore=0 spamscore=0 lowpriorityscore=0 mlxscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603070171 X-JNJ: AAAAAAABvC1fIw3T2pIQtb43z0YMvAis6qLxlTpv9iZNRmrO910i7A6gg+5xH6LFUsylmzRmq+LMsCyzhU0DX9JFUrFFHEy0eTwiV2V45y8/BovN7jK28B6SLEJJ+GeUcMScb9/A2atFupjyjLm6VU9uPWW6+Lv6ExOjZRCMfxGrj+amKuUt/UmEo3/ZbVlgWdLhTUYW9TUZX2/2EXbsIPzb6rLC/zoYj+rB07hB9c+aoAzZV0l0pC0QSBQ63qc7iU98ly830XZdxH3575PD+UvDKGszNDVBjih+OYY+msf2e4ykJSg/SsofrTYv5Bk8bWQXqGo+EMaFHMtlXkNFxgCf4LYiKRbZZULUyU22kMx8eLPowC0v3r0kVa6n9h21r9Qo7I07xsRAs8JyTqvUSQ25SuCflGhCuoMPTu9XBOod52Y84MTZs9+xvc6bXFhv6cUaSGkXp6OO2bC/IF8VRefOZ9VHB7iy0aqmbRxsuJOs00tJcnjkOXdnUKfnXUXOyhKkmtUUZd5NwAsX+XkFIu9ZfIv7vyLoZDzzwG1BPohcMA0CBsHNnpQ4Fj5334RZiyQPUAbtzxJ7W/8AAsI0cwWC8i7Oa1TClRr0HZlces2HcnW4tI2Ie9aKuZTQS3QWQnwFVtOiHTRqOXlU+5VbcIILeoipKxPRk5OP575U6N0FHG1rOTkkkkNfnndQvCYUXU1Nz5SGHw5jDAHHJT5Y5x6ejVTn3q6GhIt4pbYRrJgdHQBaj7hfyACd7dCNIKK9Jo4XKO92 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.69.213; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -3 X-Spam_score: -0.4 X-Spam_bar: / X-Spam_report: (-0.4 / 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_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @unpredictable.fr) X-ZM-MESSAGEID: 1772906693470154100 Misc changes needed for HVF vGIC enablement. Note: x86_64 macOS exposes interrupt controller virtualisation since macOS = 12. Keeping an #ifdef here in case we end up supporting that... However, given that x86_64 macOS is on its way out, it'll probably (?) not = be supported in Qemu. Signed-off-by: Mohamed Mediouni Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- accel/hvf/hvf-all.c | 50 ++++++++++++++++++++++++++++++++++++++ accel/stubs/hvf-stub.c | 1 + hw/arm/virt.c | 23 +++++++++++++++--- hw/intc/arm_gicv3_common.c | 3 +++ include/system/hvf.h | 3 +++ system/vl.c | 2 ++ 6 files changed, 78 insertions(+), 4 deletions(-) diff --git a/accel/hvf/hvf-all.c b/accel/hvf/hvf-all.c index 5f357c6d19..a296b108bc 100644 --- a/accel/hvf/hvf-all.c +++ b/accel/hvf/hvf-all.c @@ -10,6 +10,8 @@ =20 #include "qemu/osdep.h" #include "qemu/error-report.h" +#include "qapi/error.h" +#include "qapi/qapi-visit-common.h" #include "accel/accel-ops.h" #include "exec/cpu-common.h" #include "system/address-spaces.h" @@ -21,6 +23,7 @@ #include "trace.h" =20 bool hvf_allowed; +bool hvf_kernel_irqchip; =20 const char *hvf_return_string(hv_return_t ret) { @@ -216,6 +219,43 @@ static int hvf_gdbstub_sstep_flags(AccelState *as) return SSTEP_ENABLE | SSTEP_NOIRQ; } =20 +static void hvf_set_kernel_irqchip(Object *obj, Visitor *v, + const char *name, void *opaque, + Error **errp) +{ + OnOffSplit mode; + if (!visit_type_OnOffSplit(v, name, &mode, errp)) { + return; + } + + switch (mode) { + case ON_OFF_SPLIT_ON: +#ifdef HOST_X86_64 + /* macOS 12 onwards exposes an HVF virtual APIC. */ + error_setg(errp, "HVF: kernel irqchip is not currently implemented= for x86."); + break; +#else + hvf_kernel_irqchip =3D true; + break; +#endif + + case ON_OFF_SPLIT_OFF: + hvf_kernel_irqchip =3D false; + break; + + case ON_OFF_SPLIT_SPLIT: + error_setg(errp, "HVF: split irqchip is not supported on HVF."); + break; + + default: + /* + * The value was checked in visit_type_OnOffSplit() above. If + * we get here, then something is wrong in QEMU. + */ + abort(); + } +} + static void hvf_accel_class_init(ObjectClass *oc, const void *data) { AccelClass *ac =3D ACCEL_CLASS(oc); @@ -223,6 +263,16 @@ static void hvf_accel_class_init(ObjectClass *oc, cons= t void *data) ac->init_machine =3D hvf_accel_init; ac->allowed =3D &hvf_allowed; ac->gdbstub_supported_sstep_flags =3D hvf_gdbstub_sstep_flags; +#ifdef HOST_X86_64 + hvf_kernel_irqchip =3D false; +#else + hvf_kernel_irqchip =3D true; +#endif + object_class_property_add(oc, "kernel-irqchip", "on|off|split", + NULL, hvf_set_kernel_irqchip, + NULL, NULL); + object_class_property_set_description(oc, "kernel-irqchip", + "Configure HVF irqchip"); } =20 static const TypeInfo hvf_accel_type =3D { diff --git a/accel/stubs/hvf-stub.c b/accel/stubs/hvf-stub.c index 42eadc5ca9..6bd08759ba 100644 --- a/accel/stubs/hvf-stub.c +++ b/accel/stubs/hvf-stub.c @@ -10,3 +10,4 @@ #include "system/hvf.h" =20 bool hvf_allowed; +bool hvf_kernel_irqchip; diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 7456614d05..7a6fad1094 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -837,7 +837,7 @@ static void create_gic(VirtMachineState *vms, MemoryReg= ion *mem) * interrupts; there are always 32 of the former (mandated by GIC spec= ). */ qdev_prop_set_uint32(vms->gic, "num-irq", NUM_IRQS + 32); - if (!kvm_irqchip_in_kernel()) { + if (!kvm_irqchip_in_kernel() && !hvf_irqchip_in_kernel()) { qdev_prop_set_bit(vms->gic, "has-security-extensions", vms->secure= ); } =20 @@ -860,7 +860,8 @@ static void create_gic(VirtMachineState *vms, MemoryReg= ion *mem) qdev_prop_set_array(vms->gic, "redist-region-count", redist_region_count); =20 - if (!kvm_irqchip_in_kernel()) { + if (!kvm_irqchip_in_kernel() && + !(hvf_enabled() && hvf_irqchip_in_kernel())) { if (vms->tcg_its) { object_property_set_link(OBJECT(vms->gic), "sysmem", OBJECT(mem), &error_fatal); @@ -871,7 +872,7 @@ static void create_gic(VirtMachineState *vms, MemoryReg= ion *mem) ARCH_GIC_MAINT_IRQ); } } else { - if (!kvm_irqchip_in_kernel()) { + if (!kvm_irqchip_in_kernel() && !hvf_irqchip_in_kernel()) { qdev_prop_set_bit(vms->gic, "has-virtualization-extensions", vms->virt); } @@ -2118,7 +2119,15 @@ static void finalize_gic_version(VirtMachineState *v= ms) accel_name =3D "KVM with kernel-irqchip=3Doff"; } else if (whpx_enabled()) { gics_supported |=3D VIRT_GIC_VERSION_3_MASK; - } else if (tcg_enabled() || hvf_enabled() || qtest_enabled()) { + } else if (hvf_enabled()) { + if (!hvf_irqchip_in_kernel()) { + gics_supported |=3D VIRT_GIC_VERSION_2_MASK; + } + /* Hypervisor.framework doesn't expose EL2<->1 transition notifier= s */ + if (!(!hvf_irqchip_in_kernel() && vms->virt)) { + gics_supported |=3D VIRT_GIC_VERSION_3_MASK; + } + } else if (tcg_enabled() || qtest_enabled()) { gics_supported |=3D VIRT_GIC_VERSION_2_MASK; if (module_object_class_by_name("arm-gicv3")) { gics_supported |=3D VIRT_GIC_VERSION_3_MASK; @@ -2160,6 +2169,8 @@ static void finalize_msi_controller(VirtMachineState = *vms) vms->msi_controller =3D VIRT_MSI_CTRL_GICV2M; } else if (whpx_enabled()) { vms->msi_controller =3D VIRT_MSI_CTRL_GICV2M; + } else if (hvf_enabled() && hvf_irqchip_in_kernel()) { + vms->msi_controller =3D VIRT_MSI_CTRL_GICV2M; } else { vms->msi_controller =3D VIRT_MSI_CTRL_ITS; } @@ -2179,6 +2190,10 @@ static void finalize_msi_controller(VirtMachineState= *vms) error_report("ITS not supported on WHPX."); exit(1); } + if (hvf_enabled() && hvf_irqchip_in_kernel()) { + error_report("ITS not supported on HVF when using the hardware= vGIC."); + exit(1); + } } =20 assert(vms->msi_controller !=3D VIRT_MSI_CTRL_AUTO); diff --git a/hw/intc/arm_gicv3_common.c b/hw/intc/arm_gicv3_common.c index 9c3fb2f4bf..f7ba74e6d5 100644 --- a/hw/intc/arm_gicv3_common.c +++ b/hw/intc/arm_gicv3_common.c @@ -33,6 +33,7 @@ #include "hw/arm/linux-boot-if.h" #include "system/kvm.h" #include "system/whpx.h" +#include "system/hvf.h" =20 =20 static void gicv3_gicd_no_migration_shift_bug_post_load(GICv3State *cs) @@ -659,6 +660,8 @@ const char *gicv3_class_name(void) return "kvm-arm-gicv3"; } else if (whpx_enabled()) { return TYPE_WHPX_GICV3; + } else if (hvf_enabled() && hvf_irqchip_in_kernel()) { + return TYPE_HVF_GICV3; } else { if (kvm_enabled()) { error_report("Userspace GICv3 is not supported with KVM"); diff --git a/include/system/hvf.h b/include/system/hvf.h index d3dcf088b3..dc8da85979 100644 --- a/include/system/hvf.h +++ b/include/system/hvf.h @@ -26,8 +26,11 @@ #ifdef CONFIG_HVF_IS_POSSIBLE extern bool hvf_allowed; #define hvf_enabled() (hvf_allowed) +extern bool hvf_kernel_irqchip; +#define hvf_irqchip_in_kernel() (hvf_kernel_irqchip) #else /* !CONFIG_HVF_IS_POSSIBLE */ #define hvf_enabled() 0 +#define hvf_irqchip_in_kernel() 0 #endif /* !CONFIG_HVF_IS_POSSIBLE */ =20 #define TYPE_HVF_ACCEL ACCEL_CLASS_NAME("hvf") diff --git a/system/vl.c b/system/vl.c index 38d7b849e0..871799a2ae 100644 --- a/system/vl.c +++ b/system/vl.c @@ -1780,6 +1780,8 @@ static void qemu_apply_legacy_machine_options(QDict *= qdict) false); object_register_sugar_prop(ACCEL_CLASS_NAME("whpx"), "kernel-irqch= ip", value, false); + object_register_sugar_prop(ACCEL_CLASS_NAME("hvf"), "kernel-irqchi= p", value, + false); qdict_del(qdict, "kernel-irqchip"); } =20 --=20 2.50.1 (Apple Git-155) From nobody Mon Apr 13 08:43:36 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=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1772906669; cv=none; d=zohomail.com; s=zohoarc; b=OTiLWylBjsx8HJCDjYm99wwHgvdkEn98okPE29VCOF71Qx+vtppJnUmrYgOVzZUDQBaQFCGS4ETIMvcMHvbgZoeu5bSPbH20N4TIDuIw5UsriYOd8+XNjPnN0iiTtnfKmCiyKk+3E8jPOtRN8R9o/ZdeXSZMgWqwCEmhN/73/LU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772906669; 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=I39KlZsy6P5F3w8BmyZE0FxzdEcPXKIH1UdSg5cxOh0=; b=U+RuOjGI7DY+pyi2+m3mqXHyGDMKo+pLjl5Fdqe6KvKSCRoUmQGqnHUGdRTtNENOmdfezxq1O5EWd9BleFVGR7kG6qOEX4aGBrHWUT4inDaa0IQ4Cj7L6I9ZPriZMSr6h6lf3loH2tA69lucQI+5w6fj8TncObMjwRT23xVIsSM= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1772906669494772.6936317340728; Sat, 7 Mar 2026 10:04:29 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vyw0H-0001kU-3i; Sat, 07 Mar 2026 13:03:53 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyw0F-0001jN-OF for qemu-devel@nongnu.org; Sat, 07 Mar 2026 13:03:51 -0500 Received: from p-west2-cluster4-host5-snip4-10.eps.apple.com ([57.103.69.161] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyw0B-0003Tm-Iy for qemu-devel@nongnu.org; Sat, 07 Mar 2026 13:03:50 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-5 (Postfix) with ESMTPS id 63711180062D; Sat, 7 Mar 2026 18:03:45 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-5 (Postfix) with ESMTPSA id 04E0218001BC; Sat, 7 Mar 2026 18:03:42 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772906626; x=1775498626; bh=I39KlZsy6P5F3w8BmyZE0FxzdEcPXKIH1UdSg5cxOh0=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=GA/qIy6xXsGMQGnGHzR7So5vFsN+Sl+W1EKdEY22Ef9qYXUE0ToL77xTg/ytHUNLElY/J/Zds9zttqzVtvVXdExqUHbdHz3M1eA6ycsebl3Q2yi3KFvg1mPKoCnq+5gV4dtEtokkYW95/NqdNmfgvC9LHn5XhEhomJmEopct0TAe+kiHfQ2aNEUygTTFtPl+AujFXKlv5/KEIUB/ujTAYswd1J+2jBXnJjLoqh0L57BelN92TJSiHrJhwOfUslk2nf+/sS7mQG7cxprBoDldKFeMyw8xbd0N37zzW8F2kIEKQ9uPtUnAqYhVEf5r0BCRekgHPVFrjoUerc59UhvYGw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Peter Maydell , Roman Bolshakov , Manos Pitsidianakis , Alexander Graf , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , Mohamed Mediouni Subject: [PATCH v19 04/13] target/arm: hvf: instantiate GIC early Date: Sat, 7 Mar 2026 19:03:21 +0100 Message-ID: <20260307180330.75168-5-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260307180330.75168-1-mohamed@unpredictable.fr> References: <20260307180330.75168-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA3MDE3MSBTYWx0ZWRfXwIZxnU9R/bYt yBKMXNSN7zRZsrlhTY342WvVGcDfINGLmsvEIW6ySP4PGT8Jou8V1daL53+OJeJ6yOLRhDZiLD8 ltLTf9wgVOlz/BxOOzfjOZGC3x2C8CrIB0PdHdkX1/Gb6ctAycLfgaQuxkY0q+1Ql7vBcxpczn4 RgUIU3vHwsvMqvbLSjV4k2HWOXp5Kj4RziAN7FdEn5sZPWMGXRpSOHHchaH/LDTZupWokZamRGS MfREJyWCYrght/FdrJ7P1pHj6tyW6e1o36/K8dCTXgSIgLegNCoWTYZmchs7kDX4f5UPLCigc9G x+DNjN3oQAYFWXGwErDQWLDrx1wv7wtbPWMklxqLzIGwNPHyuQW9sowiEjwsWE= X-Proofpoint-ORIG-GUID: 7nU3hdl70mOTh7vsgGsS-ajB8xsSLwWK X-Proofpoint-GUID: 7nU3hdl70mOTh7vsgGsS-ajB8xsSLwWK X-Authority-Info-Out: v=2.4 cv=CL4nnBrD c=1 sm=1 tr=0 ts=69ac6881 cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=8CAvFU3GWpP82fccr8MA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-07_06,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 adultscore=0 suspectscore=0 spamscore=0 lowpriorityscore=0 malwarescore=0 mlxlogscore=551 phishscore=0 bulkscore=0 clxscore=1030 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603070171 X-JNJ: AAAAAAABeWQekmaofsKwllgqXsaoERV9NmJBHMVeQpFaqaL5OBtZyCHRK/RGSr4z6glXebRfen/fbpKz2grVDRK7fsUMIs1OKZWIenXYb/Nu05ArCjxBkVrOHktykNCpc8NBK+kFrHyN9P3hysrloBMhwE70dj7NNlRD67vJzmx4MrSuti7GkgHOza9AdiZIjmG84NlCqznTH324zioXiQLhlIHXUGABFB81X6mX05wchEapuQ5FmvaJdlucaaEt0ksIAoh4YORxt97C6tB36vAfDWfshKjUsPEwybyt7FkEWTqh2MufDA920JATFsNYW5zpHoDY2AHlcFCB8ImL+E58OILA5kDu3MKU3Nr3/Dj28Y1XEW+zyFXmD2lu9/FJjQ/FU2GrEgDD5KM9KPFAO/65JNI4opmv2tl7I125Gean1HfEH8yxMVoDD1Uu3L0jrFcIQ4us0m8U+Txk9rk7ZdOtgYUOz57F+InFx1RLRG/5nRszyL7rMqKwi+Jvw501FBn4fwFQiWFT7sL8hVxiokRgglTiK+9I/wkUMUgaW7IsrHgAR/FVl4tfO0oQJ+D5FtZqTBZCypfbN7RrjqpG0FMy856kqV4Kez50LSBOKVWvfHO2pq9FNw+zO/pFNp+WGgigMq9gyDHSPWJPk4SkFIvPvIfOUEEUdDgfrqvtWgJ9ehEbeZMDsSV09clEcxhsAFdcgwhakPJSgbi+mfTlLfPltORMyr/altlH1mRLKR7yZA== Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.69.161; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.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_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @unpredictable.fr) X-ZM-MESSAGEID: 1772906675137154100 While figuring out a better spot for it, put it in hv_arch_vm_create(). After hv_vcpu_create is documented as too late, and deferring vCPU initialization isn't enough either. Signed-off-by: Mohamed Mediouni Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- target/arm/hvf/hvf.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index 5fc8f6bbbd..d431d96ba3 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -1230,6 +1230,28 @@ hv_return_t hvf_arch_vm_create(MachineState *ms, uin= t32_t pa_range) chosen_ipa_bit_size =3D pa_range; =20 ret =3D hv_vm_create(config); + if (hvf_irqchip_in_kernel()) { + if (__builtin_available(macOS 15.0, *)) { + /* + * Instantiate GIC. + * This must be done prior to the creation of any vCPU + * but past hv_vm_create() + */ + hv_gic_config_t cfg =3D hv_gic_config_create(); + hv_gic_config_set_distributor_base(cfg, 0x08000000); + hv_gic_config_set_redistributor_base(cfg, 0x080A0000); + ret =3D hv_gic_create(cfg); + if (ret !=3D HV_SUCCESS) { + error_report("error creating platform VGIC"); + goto cleanup; + } + os_release(cfg); + } else { + error_report("HVF: Unsupported OS for platform vGIC."); + ret =3D HV_UNSUPPORTED; + goto cleanup; + } + } =20 cleanup: os_release(config); --=20 2.50.1 (Apple Git-155) From nobody Mon Apr 13 08:43:36 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=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1772906692; cv=none; d=zohomail.com; s=zohoarc; b=RVEa7LsfKWPhKeFdrq6lAUPETnjEpr26TRNxgImSDz65MNZlz9gCSjxJWHIMkGqBQdkRETvUcSX8VUiEYsF3FO6QwJnm07QpPCb+cC/VVJ7XNy/aJ/c2GBktE01aVA+fnkjo7243F2Z6iGoSSdwL2exmckVJYmDPWMliy8EiHMk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772906692; 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=Ov64POP+pZwVBL2apOExReA3NsH1PM1K6fyKkqQNOAI=; b=kkQkIe18UzP1REiiYpP5sartzy6V3K960Hh/u+EgKpu1MyKDWojh3+KCF7GEJu4tsFqrj2DIxosvYTYn8xjZJp01Vagi/vhy4y4Ddp6axbhcCzgZXVbDilE19xUplYjtMUpK6/OfEVg7UXl1RsfAu4gkQy9NP0snOM2Bek6sct0= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1772906691922738.4452628614468; Sat, 7 Mar 2026 10:04:51 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vyw0H-0001kn-W6; Sat, 07 Mar 2026 13:03:54 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyw0G-0001jw-FM for qemu-devel@nongnu.org; Sat, 07 Mar 2026 13:03:52 -0500 Received: from p-west2-cluster4-host4-snip4-10.eps.apple.com ([57.103.69.251] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyw0D-0003UA-GE for qemu-devel@nongnu.org; Sat, 07 Mar 2026 13:03:52 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-5 (Postfix) with ESMTPS id 678DA1800626; Sat, 7 Mar 2026 18:03:47 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-5 (Postfix) with ESMTPSA id 4B489180018B; Sat, 7 Mar 2026 18:03:45 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772906628; x=1775498628; bh=Ov64POP+pZwVBL2apOExReA3NsH1PM1K6fyKkqQNOAI=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=d6TR8q+kAYzvITKEc+Kq/+9aGHoh310zym2g65fE+BVa1Fh8AlUTL2KE8qQHFD6aVHZfxFqjRS5AAtPlMjLFWufbU28Pj/ME6DFxafyCqT+1OjOdIC+eXj3Auiy0vMWfN35pABiviZB3lxxVxxvMfWYzlyWcINnPjoIhlgzMJKvp7bqHClYdMnXBWg/ex4oWRsy/jvTxGXwqgzneRFLpaoYsvIGsGq2FHeKVWrHajmEg7zoT+HTj/+9alrmTcVTDyg+yfvi5Ai8BKVZI/ucqkZx9kUn31xwjiw9SO0A1oSpUZ/zdKFaMdVEuI/KVHeZ/7KqXx0inLpgSFNI7FHl7fg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Peter Maydell , Roman Bolshakov , Manos Pitsidianakis , Alexander Graf , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , Mohamed Mediouni Subject: [PATCH v19 05/13] hw/arm, target/arm: nested virtualisation on HVF Date: Sat, 7 Mar 2026 19:03:22 +0100 Message-ID: <20260307180330.75168-6-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260307180330.75168-1-mohamed@unpredictable.fr> References: <20260307180330.75168-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: D5ChkuGs16k9bFnxfvCQDDXFFMnO_nLZ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA3MDE3MSBTYWx0ZWRfX9AdGyn2CMVCo eS7hwE9JO26KnUSkqkW0Uo2OKujgVyZSOJQsZlFp31Tv7ZDBpXrTy4JlWAWn2nc8KKHdO700rMz iUl04ig//HM2tG0g+Wepz6HKeNvLZXe+udrPPdMZwaccpzp2lO0KCMY1h9XzF7uBHdmjHa3pemy nNxDdiLdbqZLdek7H7NT3lfIUOs1Y5sRVstRPPqTwdp0k+YLV7kHJQFQ/eCcNYy3EZAQ02TsW1l ZFff7YvOG1I/BK/10TLfat9220BHCPkaiQuqnDZgpW4NHpC3zg9MLvidbrrqSCs1FpANji85oB6 m6s+yMtuRTKnWd6rNPViN1PRwUhH9XNhKDjuWQ3xJ63eP63EGLYHoKVT1PbjWI= X-Authority-Info-Out: v=2.4 cv=KqNAGGWN c=1 sm=1 tr=0 ts=69ac6883 cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=G65AtosZd4T4P2EQXfAA:9 X-Proofpoint-GUID: D5ChkuGs16k9bFnxfvCQDDXFFMnO_nLZ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-07_06,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 malwarescore=0 spamscore=0 suspectscore=0 phishscore=0 adultscore=0 mlxlogscore=871 clxscore=1030 mlxscore=0 lowpriorityscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603070171 X-JNJ: AAAAAAABE3kmyF2notVUPoC1COsCKE7D7q0IPEz+SnY8GdrLjTnU4xFT9t0LN9Q3xk0P5NkXzg0qs+7WHS9tYJWo5zI+Azm4AWzTMqFRQZC359bahcz7L62fteN6Ac5QDYpo+ftdGpA7pdMhbIcabHlUc7ag0bmO0FbXf9V+uRRsunULHeiR3WuINbPGqolGvK/BfiLmonz9IO40f4J9wetxY/lZzH3e/QqcJ9N8erieD3IMUQ9xMYPvrEdnY1H91wqI0IFy0570r/8nRLUyHXilE/ZPh2pz4yBAbBb6UbQ70NCSVOSVQIpY/ojE5tneR/9CP9w5mugucjPjl4KI5f+xdX0YtbEyzDWIK5ZUN7ftun6ejWpXqm8h3VjCTSMvNC7815K+5/REHgdDhjVXH3AwNPadXURHv7QbMvSn7yuUAg/8sPzBbahC2WMjtCoQgrXNe8BXF6rK3UDp1PtYyCCFFmAVd7fImN8D/lJ0jTWQExoVWc8Om+tqoz1lyfu+R4QeLitVhDjQG6kH/MFHb/K8QIGuc3WK3dQxi3FQk3a5aR3wB7ryUXKehSTIIGBCjFh/yR6Wv9mAx6rJn1jT6e7gu7uJNDdh8cHuk7T/uanu5OppX3kga+zqMzbkPSBbI0iWI18Q6u1wuz/6C6UkE4HYl50xZ6T6euKyPMZeh2vPVyL0Sqnwwqq4LxpYU6x6p7S+c2iP1j5LEV+hxurKK1YddgnD+4CL2ZYLQYjjyZUCgsgq Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.69.251; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.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_LOW=-0.7, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @unpredictable.fr) X-ZM-MESSAGEID: 1772906695169158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Mohamed Mediouni Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- accel/hvf/hvf-all.c | 5 +++++ accel/stubs/hvf-stub.c | 10 ++++++++++ hw/arm/virt.c | 5 +++++ include/system/hvf.h | 5 +++++ target/arm/hvf/hvf.c | 42 ++++++++++++++++++++++++++++++++++++++++-- 5 files changed, 65 insertions(+), 2 deletions(-) diff --git a/accel/hvf/hvf-all.c b/accel/hvf/hvf-all.c index a296b108bc..66c3b48608 100644 --- a/accel/hvf/hvf-all.c +++ b/accel/hvf/hvf-all.c @@ -24,6 +24,11 @@ =20 bool hvf_allowed; bool hvf_kernel_irqchip; +bool hvf_nested_virt; + +void hvf_nested_virt_enable(bool nested_virt) { + hvf_nested_virt =3D nested_virt; +} =20 const char *hvf_return_string(hv_return_t ret) { diff --git a/accel/stubs/hvf-stub.c b/accel/stubs/hvf-stub.c index 6bd08759ba..dc365c5307 100644 --- a/accel/stubs/hvf-stub.c +++ b/accel/stubs/hvf-stub.c @@ -11,3 +11,13 @@ =20 bool hvf_allowed; bool hvf_kernel_irqchip; +bool hvf_nested_virt; + +void hvf_nested_virt_enable(bool nested_virt) { + /* + * This is called unconditionally from hw/arm/virt.c + * because we don't know if HVF is going to be used + * as that step of initialisation happens later. + * As such, do nothing here instead of marking as unreachable. + */ +} diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 7a6fad1094..90769936d0 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -2661,6 +2661,11 @@ static void virt_set_virt(Object *obj, bool value, E= rror **errp) VirtMachineState *vms =3D VIRT_MACHINE(obj); =20 vms->virt =3D value; + /* + * At this point, HVF is not initialised yet. + * However, it needs to know if nested virt is enabled at init time. + */ + hvf_nested_virt_enable(value); } =20 static bool virt_get_highmem(Object *obj, Error **errp) diff --git a/include/system/hvf.h b/include/system/hvf.h index dc8da85979..a961df8b95 100644 --- a/include/system/hvf.h +++ b/include/system/hvf.h @@ -28,11 +28,16 @@ extern bool hvf_allowed; #define hvf_enabled() (hvf_allowed) extern bool hvf_kernel_irqchip; #define hvf_irqchip_in_kernel() (hvf_kernel_irqchip) +extern bool hvf_nested_virt; +#define hvf_nested_virt_enabled() (hvf_nested_virt) #else /* !CONFIG_HVF_IS_POSSIBLE */ #define hvf_enabled() 0 #define hvf_irqchip_in_kernel() 0 +#define hvf_nested_virt_enabled() 0 #endif /* !CONFIG_HVF_IS_POSSIBLE */ =20 +void hvf_nested_virt_enable(bool nested_virt); + #define TYPE_HVF_ACCEL ACCEL_CLASS_NAME("hvf") =20 typedef struct HVFState HVFState; diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index d431d96ba3..d6ef4488fa 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -27,6 +27,7 @@ #include "system/memory.h" #include "hw/core/boards.h" #include "hw/core/irq.h" +#include "hw/arm/virt.h" #include "qemu/main-loop.h" #include "system/cpus.h" #include "arm-powerctl.h" @@ -1103,6 +1104,10 @@ static bool hvf_arm_get_host_cpu_features(ARMHostCPU= Features *ahcf) (1ULL << ARM_FEATURE_PMU) | (1ULL << ARM_FEATURE_GENERIC_TIMER); =20 + if (hvf_nested_virt_enabled()) { + ahcf->features |=3D 1ULL << ARM_FEATURE_EL2; + } + for (i =3D 0; i < ARRAY_SIZE(regs); i++) { r |=3D hv_vcpu_config_get_feature_reg(config, regs[i].reg, &host_isar.idregs[regs[i].inde= x]); @@ -1218,6 +1223,19 @@ void hvf_arch_vcpu_destroy(CPUState *cpu) assert_hvf_ok(ret); } =20 +static bool hvf_arm_el2_supported(void) +{ + bool is_nested_virt_supported; + if (__builtin_available(macOS 15.0, *)) { + hv_return_t ret =3D hv_vm_config_get_el2_supported(&is_nested_virt= _supported); + assert_hvf_ok(ret); + } else { + return false; + } + return is_nested_virt_supported; +} + + hv_return_t hvf_arch_vm_create(MachineState *ms, uint32_t pa_range) { hv_return_t ret; @@ -1229,6 +1247,20 @@ hv_return_t hvf_arch_vm_create(MachineState *ms, uin= t32_t pa_range) } chosen_ipa_bit_size =3D pa_range; =20 + if (__builtin_available(macOS 15.0, *)) { + if (hvf_nested_virt_enabled()) { + if (!hvf_arm_el2_supported()) { + error_report("Nested virtualization not supported on this = system."); + goto cleanup; + } + ret =3D hv_vm_config_set_el2_enabled(config, true); + if (ret !=3D HV_SUCCESS) { + error_report("Failed to enable nested virtualization."); + goto cleanup; + } + } + } + ret =3D hv_vm_create(config); if (hvf_irqchip_in_kernel()) { if (__builtin_available(macOS 15.0, *)) { @@ -1420,6 +1452,13 @@ static void hvf_psci_cpu_off(ARMCPU *arm_cpu) assert(ret =3D=3D QEMU_ARM_POWERCTL_RET_SUCCESS); } =20 +static int hvf_psci_get_target_el(void) +{ + if (hvf_nested_virt_enabled()) { + return 2; + } + return 1; +} /* * Handle a PSCI call. * @@ -1441,7 +1480,6 @@ static bool hvf_handle_psci_call(CPUState *cpu, int *= excp_ret) CPUState *target_cpu_state; ARMCPU *target_cpu; target_ulong entry; - int target_el =3D 1; int32_t ret =3D 0; =20 trace_arm_psci_call(param[0], param[1], param[2], param[3], @@ -1495,7 +1533,7 @@ static bool hvf_handle_psci_call(CPUState *cpu, int *= excp_ret) entry =3D param[2]; context_id =3D param[3]; ret =3D arm_set_cpu_on(mpidr, entry, context_id, - target_el, target_aarch64); + hvf_psci_get_target_el(), target_aarch64); break; case QEMU_PSCI_0_1_FN_CPU_OFF: case QEMU_PSCI_0_2_FN_CPU_OFF: --=20 2.50.1 (Apple Git-155) From nobody Mon Apr 13 08:43:36 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=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1772906741; cv=none; d=zohomail.com; s=zohoarc; b=E0rLaX93eSi13AiNAubsm4dzEBYHjV3S5TGtq/5qO9QwTFY942mRctJlwS3SdNRBmDpbzYTmHbOkYqNH4if/ESc9OdLvZWVR85k286f0S8+P/QJBxj+nw8tb7PzYdFc7u2RNXjHBUKxh3bNpAWGnym1R7foZN5F/kGBUQ/AEUJs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772906741; 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=eCZw8ecsKyAPOmb83e7ghwj/bQ3BfEAJzVmCsc2mLa8=; b=DDx8s58e1ZrrD9NVOH9bJdIAmHX0lVZ1RanY6BA0BY9zzFNmirepONsXzhCEgX+7myi0l3VtmHcXJYcE2e+pi4G+VL2Rs5DnO4gXbGTRMOfWG/iQoafrBKn6UF9NB9EhT1otFHxSYwRqS5U9jKKewhGN/CaeX/u0DlHrQ42ESSk= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1772906741359353.2516745680846; Sat, 7 Mar 2026 10:05:41 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vyw0J-0001lD-3F; Sat, 07 Mar 2026 13:03:55 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyw0H-0001kX-JS for qemu-devel@nongnu.org; Sat, 07 Mar 2026 13:03:53 -0500 Received: from p-west2-cluster4-host5-snip4-6.eps.apple.com ([57.103.69.157] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyw0G-0003Uf-8e for qemu-devel@nongnu.org; Sat, 07 Mar 2026 13:03:53 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-5 (Postfix) with ESMTPS id 0B50D1800127; Sat, 7 Mar 2026 18:03:49 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-5 (Postfix) with ESMTPSA id 887C61800E28; Sat, 7 Mar 2026 18:03:47 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772906631; x=1775498631; bh=eCZw8ecsKyAPOmb83e7ghwj/bQ3BfEAJzVmCsc2mLa8=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=dSGcJcm/x4+7pk9k/njNWfFqfTs3sJQYHaaHTcs9nF01VcvMhmc2Z8mxhXUiIlTDrsyVe+RgLYQP9q82BjOdTW9sfHySRWMETw/ttSmqo1ICIUYcGSbJhu9jewdp8bocIBdUFd12tC4eWQ8rVTFn2xt3T1hDnwaMR2xLJesomyXNhsQ7KHs7cGw3gTYUvpeeg9V9Rfkx4cr20cs2fIckEx6S0teR+kRp7DQCLI00YP84NzLhykW5IOqUl/4l8ioynQA1EaazrgHuKck4h33QrX3D898iW1uGSTdsi5JT5RddvBbGvENEdgY2Kr3tg0O0ofnzwZV4iCHQyLXFQCH/ag== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Peter Maydell , Roman Bolshakov , Manos Pitsidianakis , Alexander Graf , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , Mohamed Mediouni , Mads Ynddal Subject: [PATCH v19 06/13] hvf: only call hvf_sync_vtimer() when running without the platform vGIC Date: Sat, 7 Mar 2026 19:03:23 +0100 Message-ID: <20260307180330.75168-7-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260307180330.75168-1-mohamed@unpredictable.fr> References: <20260307180330.75168-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: vH-WGnR56IlYme3c1XS7J_5Zx0HHURwK X-Proofpoint-ORIG-GUID: vH-WGnR56IlYme3c1XS7J_5Zx0HHURwK X-Authority-Info-Out: v=2.4 cv=d5f4CBjE c=1 sm=1 tr=0 ts=69ac6886 cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=PzQS8Z__MZ2uSZov3vkA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA3MDE3MSBTYWx0ZWRfX7YLhoFBVjbM2 H3VTVXTqq9R3jNBPVVgleKwp3JA66saBPyc21edqDnUlncacRUXlv/1id0U8haiPlpyJ8RZwpJ2 r/gdBAkx1vgaNUGkE+51OXIbU3MfbZQcCT0s7P20BqwCYkDJyKqaEXXgG9T1tB9GaNO8/dIdz0J kvmhYDBcJMPOfUou9oiMt4wQsb1YwWKA/JfTj/I3RbgqnqQjfbYCmfee/zIILrnlVBtkMzkiASq V86adecmgrUOzj6+zN/QWobk0h45CyBt+nlJKDb/Lijoq2A/tKFWt29NyI15ZsHRyRoIEKuJJZ9 O8u80TxUins1mIwmVq4kxkP88/V00QMHhKf7TweIICuQ2wyKvRX/KEUx2P9op4= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-07_06,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 adultscore=0 spamscore=0 mlxlogscore=896 phishscore=0 clxscore=1030 lowpriorityscore=0 mlxscore=0 malwarescore=0 suspectscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603070171 X-JNJ: AAAAAAABc9ztQRpcF0BI6+elZxBVCP7PzFlHkjtNhXI/0/zeSmAENh6bbhxZET106ghnxLDgq+DpjXvpl0mVzQXGTwZQY9i3Z+ZRkquM/I91sYH/8ZPgKXahboCqE5y7mdIPPErVgVbHEgLmxHWBr5cBhdDbOy79DMjKMRfqJ6FRy1nh7d/LwXBGtkTFJGfVLyEfQdYkNhSURNRJsCV0TzQ3FgdskH518xmjmFNJw/EmmCWF8Jc0wvIgGdApl+yTObqJdrobF+YqspzohIMmTGH2u9MXS4pIV52pkuOTBKpahSqEdPCSuY8dLfKEVFJMNyA5a+8DPiv0ZFsSTlZ6ulJ2REXM9yee+aU0kUGW42J2ZQddq29eZdd/QXx1SC7sQL4RsoP+vaZxR/V1aAGuUJ9zBA20A9GFM6wDKspsMvt5RKYQNj3SKirQca7AEg3PoDJ05vAnXuE6GXmOsgp5VBYJ7WpYVn53BjRUdCziCU++o5WQsjh5CWmra8gAVAiVlVGXfnzXeu5Fyd94THM2OVUUjDXNRygfwN+4tLdf1yG46W88m/seZVrmIgnYhlrvxYgtOAs4a994EaZUHO7wugMlUCc5Xl6KS2Q678sRLLPMU5wfygJBSXPNYl3tMcs48jG37tSx+5AAMwCRAPkzAScP0BOcXSmCmbMiZhlNelBDCe2hVDrEqZwCSlTWKGDOlKMhV6k5lHapKhIdx0A+pIu4KI6t3NSLmDjCscbaOUH2jvarcbrMf8Ptl14mfbS7EVbcuRa9oQ== Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.69.157; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -3 X-Spam_score: -0.4 X-Spam_bar: / X-Spam_report: (-0.4 / 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_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @unpredictable.fr) X-ZM-MESSAGEID: 1772906744629158500 When running with the Apple vGIC, the EL1 vtimer is handled by the platform. Signed-off-by: Mohamed Mediouni Reviewed-by: Mads Ynddal Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- target/arm/hvf/hvf.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index d6ef4488fa..04c4106a3e 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -2368,7 +2368,9 @@ static int hvf_handle_vmexit(CPUState *cpu, hv_vcpu_e= xit_t *exit) =20 switch (exit->reason) { case HV_EXIT_REASON_EXCEPTION: - hvf_sync_vtimer(cpu); + if (!hvf_irqchip_in_kernel()) { + hvf_sync_vtimer(cpu); + } ret =3D hvf_handle_exception(cpu, &exit->exception); break; case HV_EXIT_REASON_VTIMER_ACTIVATED: --=20 2.50.1 (Apple Git-155) From nobody Mon Apr 13 08:43:36 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=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1772906732; cv=none; d=zohomail.com; s=zohoarc; b=ZTdl7H28jEQXWsRHiw9BkfOlhtXTse0/8JzVDGGjSF+TNPKesnRWZ+yu7qYfpMkNU25dExJ7Z8eQfjLcJDyL+og99C5Mb1iLLc72pjY3WH+VAMEmEcOT5h4NyRCPJGZsUqlvn+lnFn7STjISIsGXn4DziHAb54QcDZND/jT0HtU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772906732; 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=E/LouNoMQ4W/aKzwh/YIr4xZ/85njeY6sAjm9F1tdWU=; b=Chw9Ew2yam5NgRjQnk+7pkYmho0TqA2ZiLoM5ijwH8UbStqi9S0bFDvQbePBN0cdbYqxBOOA1CEoZjYALxrISj7XNf4IAXnEPmQqQ+bMK9zrZ4rQcmAMVozWkPs9sV+9edp2lu15LJWikHsi8beaLqhAJLRS346TlyY9y9NSyJo= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1772906732048246.493843621334; Sat, 7 Mar 2026 10:05:32 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vyw0O-0001nF-TH; Sat, 07 Mar 2026 13:04:00 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyw0L-0001mG-W1 for qemu-devel@nongnu.org; Sat, 07 Mar 2026 13:03:58 -0500 Received: from p-west2-cluster4-host11-snip4-3.eps.apple.com ([57.103.69.134] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyw0K-0003WC-JC for qemu-devel@nongnu.org; Sat, 07 Mar 2026 13:03:57 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-5 (Postfix) with ESMTPS id AA1451800E3E; Sat, 7 Mar 2026 18:03:52 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-5 (Postfix) with ESMTPSA id 2151E1800639; Sat, 7 Mar 2026 18:03:49 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772906635; x=1775498635; bh=E/LouNoMQ4W/aKzwh/YIr4xZ/85njeY6sAjm9F1tdWU=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=RDbQn1fDsoJHaLu8XPoV1R3aeQmiwTDdaMGILXJC9q2NamDDHVN7mibJYpO/stqSARhF2+7XFlrClsXiIJV5pe38/YfJ3GD3seyi3BGP+Wp/nJjjpn8N/4yj19E5irfKLmXpdwdrhxZgfmawm1mAH8W9gfo0vNVAZTITYI4pI4RHzcYgSVMlvso+plmYb/HJVE7jqDzbVDLyeNActfPd2CS4c6bP0Nqff08TTaOZY0yjwNlCKH+y0fNiqApvdSWopW2tv/t2TCUcP9oVuy4TbvKUohUHEvh9GxJCbdS1Dw7HxAM4HtQniztTw+KiGzTN8L2U345UNpXtkIisctc5rA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Peter Maydell , Roman Bolshakov , Manos Pitsidianakis , Alexander Graf , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , Mohamed Mediouni Subject: [PATCH v19 07/13] hvf: gate ARM_FEATURE_PMU register emulation behind not being at EL2 Date: Sat, 7 Mar 2026 19:03:24 +0100 Message-ID: <20260307180330.75168-8-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260307180330.75168-1-mohamed@unpredictable.fr> References: <20260307180330.75168-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: Xm0Rik_RCqAQMHwrYnGyZxarCwAj5m-V X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA3MDE3MSBTYWx0ZWRfXwDtZD6IDS1X1 nJSmFkGPrRvwqkyFlJxTihBuOX+koSFaQAnk40gS8tkJqqHfYPWxr7t3R/fRiwGPma8VwSG9fXz nQQhDNCjHVEaZCBqGeDiyMZGwSFNDKsXvLG2GDAQ4DgPqQKY5fnq4fkXQZyMw9him6SbW9hbUxS sVdc2SlUOp8o0G1SXvq3CMaLEpHTgjrk3gyBkWtSOI0Xvw2vzHnZipF13xohM807elNx8nnzQb2 LGo/vFJ374nrVXOSOid16BkmJNLrUDV4L5/jU7CBfaXcH7JEEMBKUqE4U1uYvdU7sXxh+EFHgVG 1Ihiw/yT2CIrC3AZsOj/tRsV1Vvi3xutAtpvAH6gw8Lql4ioo9DuWgd0IIh+Po= X-Proofpoint-GUID: Xm0Rik_RCqAQMHwrYnGyZxarCwAj5m-V X-Authority-Info-Out: v=2.4 cv=TambdBQh c=1 sm=1 tr=0 ts=69ac6889 cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=lOv7bB1OiAV5i3s2B4UA:9 a=NqO74GWdXPXpGKcKHaDJD/ajO6k=:19 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-07_06,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=683 suspectscore=0 mlxscore=0 adultscore=0 lowpriorityscore=0 clxscore=1030 malwarescore=0 phishscore=0 bulkscore=0 spamscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603070171 X-JNJ: AAAAAAABMBhqfGElKlshvKNEXR31Oj5LbT08yftQpLav6awwMcZO/0h/sO0WJ6InH7Os7VAiTeMRKRZptie9I5j/j1leahbYYpGRHUKzMaDQF15iYHsvpZoDd2oS8mueAH3ud1HGnaQftMj8RzM7cgxZfzQKmoCbtWTblARtbQEkZFAJJaVfnfXSATg9AaH9tPW29EeRUXG7wBHlvckmLrI14uMlhU/c+kkdyOT2Bf8MyR8STtrev445RbOG+aUJqledrviA64CGaUq7/znPqI1VPogSvFRqHHFzxkCpaN/wGQ6qUuxmOu978zac5vLWzuDJhMdPTFm8RuyJF8SG3WGkTAqg+lFqQoODqIhqcHl41IJwf/YagIMjeO5RKzE5YBolaRyTlV2zRQFkkLDBa/GDoAuBjuZjJghFhuhxJ1HBZGff4W4RDcI/WRY38K68dRt7CR4TpQL6U9Q0A0oiCBO2RgGEhKeYK/6x4QY2nkQVxt9pyZjgwJ7Q0sLuVBd4hkVtzy4EgCgMnr+FZEKj5tca6p6n3vHLbGpvjZP8T9m9dCYVPlcemjqCs00mztDEqBE/cUUbGKGjK8W4z0U+ClyEnBa9NA0tuxDHbgcccO2BdHv4qHPb8orWF5WHM2KxozdZVWdplxeIddga+8MqaMnp8nh1YP2nqpw5UeZFQvJNpRbL5hKgfbepzdNM68pgKoHgim9FwcMJvdHVeAuSmX0CpWnDePevwpqhvQnODWAU94cfI5S0uPTMiX8= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.69.134; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -3 X-Spam_score: -0.4 X-Spam_bar: / X-Spam_report: (-0.4 / 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_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @unpredictable.fr) X-ZM-MESSAGEID: 1772906734960158500 From Apple documentation: > When EL2 is disabled, PMU register accesses trigger "Trapped MSR, MRS, or > System Instruction" exceptions. When this happens, hv_vcpu_run()=E2=80=AF= returns, and the > =E2=80=AFhv_vcpu_exit_t=E2=80=AFobject contains the information about thi= s exception. > When EL2 is enabled, the handling of PMU register accesses is determined = by the PMUVer > field of ID_AA64DFR0_EL1=E2=80=AFregister. > If the PMUVer=E2=80=AFfield value is zero or is invalid, PMU register acc= esses generate "Undefined" > exceptions, which are sent to the guest. > If the PMUVer=E2=80=AFfield value is non-zero and valid, PMU register acc= esses are emulated by the framework. > The ID_AA64DFR0_EL1=E2=80=AFregister can be modified via hv_vcpu_set_sys_= reg=E2=80=AFAPI. Signed-off-by: Mohamed Mediouni Reviewed-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Philippe Mathieu-Daud=C3=A9 --- target/arm/hvf/hvf.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index 04c4106a3e..14c0c7f540 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -1601,7 +1601,7 @@ static int hvf_sysreg_read(CPUState *cpu, uint32_t re= g, uint64_t *val) ARMCPU *arm_cpu =3D ARM_CPU(cpu); CPUARMState *env =3D &arm_cpu->env; =20 - if (arm_feature(env, ARM_FEATURE_PMU)) { + if (!hvf_nested_virt_enabled() && arm_feature(env, ARM_FEATURE_PMU)) { switch (reg) { case SYSREG_PMCR_EL0: *val =3D env->cp15.c9_pmcr; @@ -1862,7 +1862,7 @@ static int hvf_sysreg_write(CPUState *cpu, uint32_t r= eg, uint64_t val) SYSREG_OP2(reg), val); =20 - if (arm_feature(env, ARM_FEATURE_PMU)) { + if (!hvf_nested_virt_enabled() && arm_feature(env, ARM_FEATURE_PMU)) { switch (reg) { case SYSREG_PMCCNTR_EL0: pmu_op_start(env); --=20 2.50.1 (Apple Git-155) From nobody Mon Apr 13 08:43:36 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=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1772906749; cv=none; d=zohomail.com; s=zohoarc; b=cHAAzbnU/jWhdMFy0Vb2OQA/4TSuhGK2aZ0A8Z7Scb9kxoB4H8aNL3A4rCUhHwusI3vpO9FD2EChhRPlk9X0g7Vif0BjkXxam1g0gPt9cE/qF+3WwcqVqCplcd0qMRJiI1kHurPFaYX+XoI1jsuZySsyGKt2RcoecheNxNhBp30= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772906749; 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=CFkZ1ydlJzWs77CaHK66tAU5BFl4876/9Mp4Lq9BU3s=; b=HsYkG7CB5Tjtu05RJ0t7+mHMMtABna+xAGkdpSlhTF1uMuJAG4mqO0ncQAwQ6cT7Moqgg+agFABozJ3Qk6lAyQwoQVLi1pVTyKRFhPjEJ4Mvg0HLnwGoPqRy95Qm9FasJIfkr0XQJr1+DxUe3e0i/b68YjpBvtaXEFR1Nm5xiEI= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 177290674939138.39195269854724; Sat, 7 Mar 2026 10:05:49 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vyw0Q-0001t1-Ke; Sat, 07 Mar 2026 13:04:02 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyw0N-0001mn-45 for qemu-devel@nongnu.org; Sat, 07 Mar 2026 13:03:59 -0500 Received: from p-west2-cluster4-host8-snip4-8.eps.apple.com ([57.103.69.229] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyw0L-0003WR-5X for qemu-devel@nongnu.org; Sat, 07 Mar 2026 13:03:58 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-5 (Postfix) with ESMTPS id BD593180013A; Sat, 7 Mar 2026 18:03:54 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-5 (Postfix) with ESMTPSA id 72CB2180062B; Sat, 7 Mar 2026 18:03:52 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772906636; x=1775498636; bh=CFkZ1ydlJzWs77CaHK66tAU5BFl4876/9Mp4Lq9BU3s=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=XvzUNXUFOiA9P9fpbGu5ETVuPVd1ZsrgXdjz99Irr4wUmmV+sb3ea85xophR6owqnmoLXrfjRSJ3R8LIO20Z9lfGcbFsui+g3O2gwi48CujtcRgDyXE7MXE1RjasHlx8dQ3fgXmVLJEkiczxmvzDEY9Vh6+N+coiKBXZNGPyXunZeCGHWiernh1kdyeRmrh8OZ8Y7w7C/qIp3/3ID6LpsvtFQdNwTfXYiKBWjrllohAL6LkHlIFKcgqOOfkj9ctD7wbiTvFR+MuwInJIvl0QziuoVO9FSsS0+mDK5SZ0WERzbAhR5oHCSuHHDH2mhgJ6o3qzjMqIqj7OL8VNXaNSGA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Peter Maydell , Roman Bolshakov , Manos Pitsidianakis , Alexander Graf , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , Mohamed Mediouni Subject: [PATCH v19 08/13] hvf: arm: allow exposing minimal PMU when running with nested virt on Date: Sat, 7 Mar 2026 19:03:25 +0100 Message-ID: <20260307180330.75168-9-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260307180330.75168-1-mohamed@unpredictable.fr> References: <20260307180330.75168-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Authority-Info-Out: v=2.4 cv=AZa83nXG c=1 sm=1 tr=0 ts=69ac688b cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=DEZpVyLLCdwXg5o-P5sA:9 a=NqO74GWdXPXpGKcKHaDJD/ajO6k=:19 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: RkI_bluFi3O-vC_S7DyXI00d0PwkR5ik X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA3MDE3MSBTYWx0ZWRfX0T1PB2QeVIta tuImiv751yLkdDin7XOOIFtZMCHOU6B0Wvep3WSi8LsuB2tQKEt9KTr6LBO5eN/+Jny/pNIxsGA HQvDL2qVX7C3BlEoN/cvfI287wATAu64Rcn1UNxQmBOW0jzBFRkwKTNz3CmDtZUeSqYY5ThQv/T y9fkECbc3vNxU0h0VbGwKl5g7NI1rrtt0FJ6x4yQQDuFtkty4nxlDqNJSszFBFpS9rKBx/+VbE0 uwf9OxKdv/EGwQtvhh/CN8mHw8RJGH/poWSI1GZlTH0JJ3bjQFcpRzH5/tm0AlYLk7ROf6DEUj6 9tyyoYRDXsRXEcRmhUaxHWgZNvI/1vpVLT6GkhM6qQMwzb52cBEZ2vJvAK+nYk= X-Proofpoint-GUID: RkI_bluFi3O-vC_S7DyXI00d0PwkR5ik X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-07_06,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 adultscore=0 spamscore=0 mlxlogscore=582 lowpriorityscore=0 bulkscore=0 mlxscore=0 clxscore=1030 malwarescore=0 suspectscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603070171 X-JNJ: AAAAAAABbuTxJycPRYtXRtUhjB7MxEUXS0zGl5CzYvH5SqFhiHHHhW3yVRxryu+xq6QMrI4md2aoS1TlKUBYxiIDehcaNTv+8IyK3QTlEwqGs9QPsSMELuP4HrvB5uAcR8BeHyYgtxprDQPBiZPLxJB1SDAx85UUTEeatzBiSmq+Zrlsgu28dgWw08Pt5iMeDrcGdF28/peN/9MIEXGcZPgE4NSp2k5z7cYZF5PwT78FGpZ8mFXxkLgJcrDEBMgpSZfXebPNhxV5mXWvOmHlgaHggaCn/6aVe9NX+Hp7At1SJkrE/F2YfiOpQKHPcmRFtHLuwyAIiConGVEh8xJrZprsuQCcR5N2wmkh9+4I3KFXVFtA0Hrm3wedx24NvKoN771ZBiDDykxB8Z2ppbCw5sZsIFExiVtTUCnYEkQrTatdTizR/j32IkO5CIPDFM0s2V+T0iOBgLzAur6mDQxWeK1FWWUwh/Rat23JxoYF10L6mYejonTE9G5I4icrRBEMIZYOtdPxkiqx42iNjDeFQpl5v6zLou176rYAwH2pJd4XjiVurkZwPxnZC2XjfDpLDAVFXxABndDjJHk3ExhuPqZ5h7qI0rwMLIf8D8AzEXi+VXHkmzjnneQEXK4/Z5s0V437OHJx6TSyw+AcNc4x7glHNbhxgCcfdHCnHSpWVxnsOVVx++a0oZyhXr/4JV/MBrPez/As5GUe3ssVTI1x4FkY0P1HkGSLVj280E8QZ+V5GT35fNJXE9sYcV098IRppBd32/Ex Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.69.229; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -3 X-Spam_score: -0.4 X-Spam_bar: / X-Spam_report: (-0.4 / 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_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @unpredictable.fr) X-ZM-MESSAGEID: 1772906751857154100 When running with nested virt on, a minimum PMU is exposed by Hypervisor.fr= amework if a valid PMUVer register value is set. That PMU isn't exposed otherwise. Signed-off-by: Mohamed Mediouni Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- target/arm/hvf/hvf.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index 14c0c7f540..8c568d60bd 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -1145,6 +1145,10 @@ static bool hvf_arm_get_host_cpu_features(ARMHostCPU= Features *ahcf) =20 clamp_id_aa64mmfr0_parange_to_ipa_size(&host_isar); =20 + if (hvf_nested_virt_enabled()) { + FIELD_DP64_IDREG(&host_isar, ID_AA64DFR0, PMUVER, 0x1); + } + ahcf->isar =3D host_isar; =20 /* --=20 2.50.1 (Apple Git-155) From nobody Mon Apr 13 08:43:36 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=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1772906705; cv=none; d=zohomail.com; s=zohoarc; b=K8+M4+eD/dEd2CyCeT9IaNpPNEBKcZNIJE6sih3scSszIPctX0WjVOKr5aDsog/j6HB70W35MvnyKtFinJeOwZ6fzZ/iqdWJP56/UUscgytECFu9wyDwoHp7U8NnGAdLcZVRUfxlqQE2vd+4HJ5vKKtG4JH9Hwt4cNmtGHze5mQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772906705; 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=sRTxu5Fw8UCuti2v1JoZDXJD4wZeEKjL5lX/8pIOKiM=; b=ciVTMNyzsJEERS9SjdODtyqzPen7LCqXoGNX4kQAtb22xXB2WbxduA4hjMEzfHAto4LkjZYzheE4I40E3LJHKzQxVFJKK6a028tKQTnhSY5HMqhb89o9qloS9tBFGqqxDzESkMIr2VOAZyMeVS9PLq3PBN2EU/P+aKRZ+7k/s6s= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1772906705513900.0141498365299; Sat, 7 Mar 2026 10:05:05 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vyw0R-00022L-RY; Sat, 07 Mar 2026 13:04:03 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyw0O-0001nG-BY for qemu-devel@nongnu.org; Sat, 07 Mar 2026 13:04:00 -0500 Received: from p-west2-cluster4-host6-snip4-3.eps.apple.com ([57.103.69.164] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyw0M-0003Wt-Uz for qemu-devel@nongnu.org; Sat, 07 Mar 2026 13:04:00 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-5 (Postfix) with ESMTPS id 03220180062A; Sat, 7 Mar 2026 18:03:56 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-5 (Postfix) with ESMTPSA id 8D2A91800E33; Sat, 7 Mar 2026 18:03:54 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772906638; x=1775498638; bh=sRTxu5Fw8UCuti2v1JoZDXJD4wZeEKjL5lX/8pIOKiM=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=cLDq2l7Npq9QBqV9W+fC7RFWrfizqKKDBOv9g1n0/+YGyR0EwSfaDU1UrIUmUd3dF/RasfHA5DZXgD9PErkAUbFwY2p/ijlalVwnWG+vjOeZ4+HmLf5RG9MlI7fhY5otDfb2PeL+5HJCG7dIDV4Hi+Ci7UnQLVqcqivcHRaBrxl1RmcFjeSSqJE7ucawNZoz4szlGqCX5CtVAcHEz0iWBAG5ZKXAwgHf9EriDFYiJuswD7j/WX/L3jtH52NPhyvFAx2n9oHRIhIB9Lnnvp1Dlo/BmepuC1IQvhhgJAmRQD3qPRP6HuvsbbDT/1DGzPZenRVvnLDetWx8Wy0Q0NYVxA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Peter Maydell , Roman Bolshakov , Manos Pitsidianakis , Alexander Graf , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , Mohamed Mediouni , Mads Ynddal Subject: [PATCH v19 09/13] target/arm: hvf: add asserts for code paths not leveraged when using the vGIC Date: Sat, 7 Mar 2026 19:03:26 +0100 Message-ID: <20260307180330.75168-10-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260307180330.75168-1-mohamed@unpredictable.fr> References: <20260307180330.75168-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: 0ai9M95ufBgUv7l8GQp2MEgzdqj8eXyq X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA3MDE3MSBTYWx0ZWRfX5OPBgFaXZ/D6 C/cQRJwkDs/dry+BlbsRORqy5CNxcLPwaPLJBGdvt+R1Y5Y3JdW3V87tCqWexaAvv/z28CnYk8A Mgm38+7jmY8vgCNHdZxIJBAd0fQAEUTWw9tOKk1S1rF/73IHU8+rA/fh+JLoyZJNTg4t2wqBXfr KdqwEr+0QsSBdOqVJA9Rn+VMH15hwwK29/A870HRHjhdXQDFJJW4LsVJswUAxMAz1527blUYz3w u9wPaTf9i75bs1/ITK17bnFKSlIvDOTJMZs4MjEl/+F+kLmzc0OLqURPjrehU5VY36945bAjXB4 xRmbJ5RfCKWAEmBMs1ajtDOqbBDgLOHB78iKscsTrGLbRaD+ghCcRzcEegFWbk= X-Authority-Info-Out: v=2.4 cv=FcI6BZ+6 c=1 sm=1 tr=0 ts=69ac688d cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=vbFX7M0ab_H1AmF9bzsA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: 0ai9M95ufBgUv7l8GQp2MEgzdqj8eXyq X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-07_06,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 spamscore=0 adultscore=0 suspectscore=0 clxscore=1030 phishscore=0 bulkscore=0 mlxlogscore=526 lowpriorityscore=0 mlxscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603070171 X-JNJ: AAAAAAABnsai4jptEjuLRcAf8V8YqNyfQAUnY0FbuuEyUxIe5vmCRhg+typbrJk7gSJJxzrkPfzjHc4uwdY8Bm9Yie1QAfqxkG7hl0vTXs2WgdVZFrT23a4wYMZPPDVhCWa6zqHNq2Ns74F9/y+ZFxUYYVW+LDxRnDfgGt6hdQx8QmrAWKgPgKVXKAEdV4GWNw+p8fv+DZzN+v1ydSBXrJuwPHXbHCu+pwkR1tcLwbsvD/UBf2rrxQENoWq6iXOEavUMoTIiMGE4eLwenN3bRtG/1+TnscdufjHfclBi0xGJ0upHDq1lvT0dM9GtaUrVUT1V015s/Dgv3kcsAldtFIyphdEb3tBLqO+gJLnD6d1T7gt1hivPunqm5tlgQEVQ7vxS/h+KvUThsegDwHP4S/47ODaunXxfDUEEemo5/eUD+5fsMjieW9gGxopR7tQWbnKA5uRU1y3hOPkLTj5qT2dNSMC0stNEcmZF1vv9wkRAQefbWxeEWey12nH+wB+Tq8tUspOuRQH7xZPxj3V6sjekllw+K+znylSbQf26OGwSFlkGfCV5e5ALpchdDHfRsPssdt8qlQQvY+yS2Djb4FNaK3UcF6mrS+E5h3LakR9YJbIDr5Afx3TMjUMAuELs24rIwzUfB+wdwank5j+y/4pdAIi/d2DbBBR3EJPT7G8W2hSh+C2+OjgwbzGh7Ua0MjvaUcg3HKqMgMAJAbEpI5APaMlwBQb/ZUm3CHILXtThKB1IQYisWJDgTb6U4XDV Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.69.164; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -3 X-Spam_score: -0.4 X-Spam_bar: / X-Spam_report: (-0.4 / 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_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @unpredictable.fr) X-ZM-MESSAGEID: 1772906707606154100 When using the vGIC, timers are directly handled by the platform. No vmexits ought to happen in that case. Abort if reaching those code paths. Signed-off-by: Mohamed Mediouni Reviewed-by: Mads Ynddal Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- target/arm/hvf/hvf.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index 8c568d60bd..fe5a376aee 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -1681,6 +1681,7 @@ static int hvf_sysreg_read(CPUState *cpu, uint32_t re= g, uint64_t *val) case SYSREG_ICC_SGI1R_EL1: case SYSREG_ICC_SRE_EL1: case SYSREG_ICC_CTLR_EL1: + assert(!hvf_irqchip_in_kernel()); /* Call the TCG sysreg handler. This is only safe for GICv3 regs. = */ if (hvf_sysreg_read_cp(cpu, "GICv3", reg, val)) { return 0; @@ -1971,6 +1972,7 @@ static int hvf_sysreg_write(CPUState *cpu, uint32_t r= eg, uint64_t val) case SYSREG_ICC_SGI0R_EL1: case SYSREG_ICC_SGI1R_EL1: case SYSREG_ICC_SRE_EL1: + assert(!hvf_irqchip_in_kernel()); /* Call the TCG sysreg handler. This is only safe for GICv3 regs. = */ if (hvf_sysreg_write_cp(cpu, "GICv3", reg, val)) { return 0; @@ -2378,6 +2380,7 @@ static int hvf_handle_vmexit(CPUState *cpu, hv_vcpu_e= xit_t *exit) ret =3D hvf_handle_exception(cpu, &exit->exception); break; case HV_EXIT_REASON_VTIMER_ACTIVATED: + assert(!hvf_irqchip_in_kernel()); qemu_set_irq(arm_cpu->gt_timer_outputs[GTIMER_VIRT], 1); cpu->accel->vtimer_masked =3D true; break; --=20 2.50.1 (Apple Git-155) From nobody Mon Apr 13 08:43:36 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=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1772906738; cv=none; d=zohomail.com; s=zohoarc; b=g0SarUoERbAsVVhEL58qnVn4JhVkYb7zoTgPBOa/eLzlgenYAvQ2HFHOz+Rc+xXlfDuqtJ6r6mHTbtNu5hm8TInVC67ImeSMX3VH1ZhL1t+cHINskYPRh9qmmQx8u+P4aJyUKhNKO5wiqUbbn0dK+owOvhX9QE2el90DS2oSdow= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772906738; 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=uHfFt+7Y5pEp5yNQYQRZwenKqH4IGsno35LUKL7QdGg=; b=ZAS+OH2xq3wQTZK3IOyli1Q4TrZy7quvnFsnzGIIm+u6D6gZ8O2iwwm66kH4PDSpcSDklDeqEa7UknML3gJHy2wGfNk8dS/D7Cn2r2/lSIiQnH2BHkoOIQ0L/wplOvonFUTme/PNY1Y1J3rfk4PRTGzqYzyLrNzYHxYDmr8k5O8= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1772906738011299.3996872224644; Sat, 7 Mar 2026 10:05:38 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vyw0U-00023i-UB; Sat, 07 Mar 2026 13:04:06 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyw0S-000231-3d for qemu-devel@nongnu.org; Sat, 07 Mar 2026 13:04:04 -0500 Received: from p-west2-cluster4-host6-snip4-2.eps.apple.com ([57.103.69.163] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyw0Q-0003XQ-64 for qemu-devel@nongnu.org; Sat, 07 Mar 2026 13:04:03 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-5 (Postfix) with ESMTPS id 9963818001B3; Sat, 7 Mar 2026 18:03:59 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-5 (Postfix) with ESMTPSA id 2BADB1801275; Sat, 7 Mar 2026 18:03:57 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772906641; x=1775498641; bh=uHfFt+7Y5pEp5yNQYQRZwenKqH4IGsno35LUKL7QdGg=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=Qszq7nWsUh5YRsFCPqRuNg9J+wH4bY0pzPOUIa/ombAONLeaaomIRVwzO+FGufSI5NAui0NUb9T/uAtlnvnbcrAO0CmqmQQkoExXHxr9mf+esHkiGyv2MooefLr5Wl5EkpZlYsXe+QLjDdhnOs0Zk14W9kFV8AHa5sgDHe30Gkwn/k0VH60JtBOoGiWgKHTEj6grdDHBgGn6ugL7I3z7qDsPefYRyQ15ZKQnJPgjgZXNHiruFixNH0Stpvs/Z9XvO7b9vRCRtsVikdYPVjo6V8oJNwmWA25bSxMXOxO1iLy20PxwxmIPvRxzVKuVJFlZB6rfDZN++FfAbLS/na0OKg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Peter Maydell , Roman Bolshakov , Manos Pitsidianakis , Alexander Graf , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , Mohamed Mediouni Subject: [PATCH v19 10/13] hvf: sync registers used at EL2 Date: Sat, 7 Mar 2026 19:03:27 +0100 Message-ID: <20260307180330.75168-11-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260307180330.75168-1-mohamed@unpredictable.fr> References: <20260307180330.75168-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA3MDE3MSBTYWx0ZWRfX21IpS3CDZse2 gysUD5K/AsyU+CITuGpjD8ZmyK+F0sPIYkYywkYp7zi1eSH4hsq/jNDLs0CZr/gBn0BqNU1Pp40 ywCXVxNKtVnre0SqWfLLs+Igx42r17HZ2zYL/U7DIG1DuR43lnYszG7x339L67NcePs6dDsPaIS UL5UGS3ZqkDZwLzRTTKvGIV9rAVfbl1z+c4cB+mxoJoeEGhVfKSabVyFYrmhD1CcF/3oqZckpIO Y8Ukx0GSd/OaGhMA7R4a5x2JACEni4DY1rHnJxxbvERi+So6NyO7NWuHHoMuJ0H4s6CjRorhujc +7L5XWSFoFChaCR28jOstLp1/FIgGSkntrDvqk60Av8DuBO+BTohwnQs5+MHa4= X-Proofpoint-GUID: WDWJFEj0jN42I4wwNVWqeKbggn9E28Tk X-Authority-Info-Out: v=2.4 cv=EJcLElZC c=1 sm=1 tr=0 ts=69ac6890 cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=Ml6fgdKjPmdD6r9HfocA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: WDWJFEj0jN42I4wwNVWqeKbggn9E28Tk X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-07_06,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 malwarescore=0 clxscore=1030 mlxlogscore=999 bulkscore=0 adultscore=0 lowpriorityscore=0 mlxscore=0 phishscore=0 suspectscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603070171 X-JNJ: AAAAAAABPppf5rnnwTs89WzHiDrfCJkxEQ3Sa7MEnbrbT13IhEctnIkqQJesv4mBnexlMKAUZ1SiMTgKKEMjrK6eOM9FO9NwzVvtvFkZeYRHRSz7cxnmd+rfgg6VMbT7VIVAyDTFtxcxMMnZKbuJbVGj5sszIna6YljID4MJZcK7RxJxOjmQck4PUO/TxgjgV4JphXp+ERnYRSQc97qDI+4sKgN40l3uA6woqgSiRC3FjfYZBPxebvY1haZxLRY58kUgVDMGem1znKmBeB0vLI7Kut2ksIt4gnCTKPxLiL58rbOR+SeH3H7q9bBqKbacd0m5rMeZHb5JhV1SKOYyTaeJYOC7v5+P8hjAZhUBFqiirwAObQ9geqB8SGBnl3XodryCg1EYjHmU5/1nLg8emtScCxuLCdvwoXK6sKk8St6kwhvs4gZ1Ro1paJrrFzpaTx5y5ms1RoXwOINNkdrU8Kh0hgGfghkwwOSCSs/rV5yFqGlbZycaFUeeNCYUYZj9x3ZhrA18vDsMiy8T3fKa8fxN4Q16YtQXSzM9O1rnHUEHaaHskQU/QYBQTFIA1FGE/xaBVSKL1to0wMghwXL+OEvW0TQaRQ68zXmOt7g/Q+IHPPzITpbX0o0bOrMH8PCq/5l/OxNRJApC8lD+RySBFd2zUAPuD7Yv4I8TFuHGJXG/Zg5YEnm0blVWhxQRSbshlNSj3WEE+1B8pYkXLmlm1CBkBxLphsWxbED8TZa9 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.69.163; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -3 X-Spam_score: -0.4 X-Spam_bar: / X-Spam_report: (-0.4 / 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_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @unpredictable.fr) X-ZM-MESSAGEID: 1772906740142154100 When starting up the VM at EL2, more sysregs are available. Sync the state = of those. In addition, sync the state of the EL1 physical timer when the vGIC is used= , even if running at EL1. However, no OS running at EL1 is expected to use those r= egisters. Signed-off-by: Mohamed Mediouni Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- target/arm/hvf/hvf.c | 61 +++++++++++++++++++++++++++++++++---- target/arm/hvf/sysreg.c.inc | 44 ++++++++++++++++++++++++++ 2 files changed, 99 insertions(+), 6 deletions(-) diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index fe5a376aee..f6385532f3 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -467,37 +467,75 @@ static const struct hvf_reg_match hvf_sme2_preg_match= [] =3D { * * SME2 registers are guarded by a runtime availability attribute instead = of a * compile-time def, so verify those at runtime in hvf_arch_init_vcpu() be= low. + * + * Nested virt registers are handled via a runtime check, so override the = guarded + * availability check done by Clang. */ =20 +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunguarded-availability" + #define DEF_SYSREG(HVF_ID, ...) \ QEMU_BUILD_BUG_ON(HVF_ID !=3D KVMID_TO_HVF(KVMID_AA64_SYS_REG64(__VA_ARG= S__))); #define DEF_SYSREG_15_02(...) =20 +#define DEF_SYSREG_EL2(HVF_ID, ...) \ + QEMU_BUILD_BUG_ON(HVF_ID !=3D KVMID_TO_HVF(KVMID_AA64_SYS_REG64(__VA_ARG= S__))); + +#define DEF_SYSREG_VGIC(HVF_ID, ...) \ + QEMU_BUILD_BUG_ON(HVF_ID !=3D KVMID_TO_HVF(KVMID_AA64_SYS_REG64(__VA_ARG= S__))); + +#define DEF_SYSREG_VGIC_EL2(HVF_ID, ...) \ + QEMU_BUILD_BUG_ON(HVF_ID !=3D KVMID_TO_HVF(KVMID_AA64_SYS_REG64(__VA_ARG= S__))); + #include "sysreg.c.inc" =20 #undef DEF_SYSREG #undef DEF_SYSREG_15_02 +#undef DEF_SYSREG_EL2 +#undef DEF_SYSREG_VGIC +#undef DEF_SYSREG_VGIC_EL2 =20 -#define DEF_SYSREG(HVF_ID, op0, op1, crn, crm, op2) HVF_ID, +#define DEF_SYSREG(HVF_ID, op0, op1, crn, crm, op2) {HVF_ID}, #define DEF_SYSREG_15_02(...) +#define DEF_SYSREG_EL2(HVF_ID, op0, op1, crn, crm, op2) {HVF_ID, .el2 =3D= true}, +#define DEF_SYSREG_VGIC(HVF_ID, op0, op1, crn, crm, op2) {HVF_ID, .vgic = =3D true}, +#define DEF_SYSREG_VGIC_EL2(HVF_ID, op0, op1, crn, crm, op2) {HVF_ID, tru= e, true}, + +struct hvf_sreg { + hv_sys_reg_t sreg; + bool vgic; + bool el2; +}; =20 -static const hv_sys_reg_t hvf_sreg_list[] =3D { +static struct hvf_sreg hvf_sreg_list[] =3D { #include "sysreg.c.inc" }; =20 #undef DEF_SYSREG #undef DEF_SYSREG_15_02 +#undef DEF_SYSREG_EL2 +#undef DEF_SYSREG_VGIC +#undef DEF_SYSREG_VGIC_EL2 + +#pragma clang diagnostic pop =20 #define DEF_SYSREG(...) -#define DEF_SYSREG_15_02(HVF_ID, op0, op1, crn, crm, op2) HVF_ID, +#define DEF_SYSREG_15_02(HVF_ID, op0, op1, crn, crm, op2) {HVF_ID}, +#define DEF_SYSREG_EL2(...) +#define DEF_SYSREG_VGIC(...) +#define DEF_SYSREG_VGIC_EL2(...) =20 API_AVAILABLE(macos(15.2)) -static const hv_sys_reg_t hvf_sreg_list_sme2[] =3D { +static struct hvf_sreg hvf_sreg_list_sme2[] =3D { #include "sysreg.c.inc" }; =20 #undef DEF_SYSREG #undef DEF_SYSREG_15_02 +#undef DEF_SYSREG_EL2 +#undef DEF_SYSREG_VGIC +#undef DEF_SYSREG_VGIC_EL2 =20 /* * For FEAT_SME2 migration, we need to store PSTATE.{SM,ZA} bits which are @@ -1320,6 +1358,9 @@ int hvf_arch_init_vcpu(CPUState *cpu) #define DEF_SYSREG_15_02(HVF_ID, ...) \ g_assert(HVF_ID =3D=3D KVMID_TO_HVF(KVMID_AA64_SYS_REG64(__VA_ARGS= __))); #define DEF_SYSREG(...) +#define DEF_SYSREG_EL2(...) +#define DEF_SYSREG_VGIC(...) +#define DEF_SYSREG_VGIC_EL2(...) =20 #include "sysreg.c.inc" =20 @@ -1347,11 +1388,19 @@ int hvf_arch_init_vcpu(CPUState *cpu) =20 /* Populate cp list for all known sysregs */ for (i =3D 0; i < ARRAY_SIZE(hvf_sreg_list); i++) { - hv_sys_reg_t hvf_id =3D hvf_sreg_list[i]; + hv_sys_reg_t hvf_id =3D hvf_sreg_list[i].sreg; uint64_t kvm_id =3D HVF_TO_KVMID(hvf_id); uint32_t key =3D kvm_to_cpreg_id(kvm_id); const ARMCPRegInfo *ri =3D get_arm_cp_reginfo(arm_cpu->cp_regs, ke= y); =20 + if (hvf_sreg_list[i].vgic && !hvf_irqchip_in_kernel()) { + continue; + } + + if (hvf_sreg_list[i].el2 && !hvf_nested_virt_enabled()) { + continue; + } + if (ri) { assert(!(ri->type & ARM_CP_NO_RAW)); arm_cpu->cpreg_indexes[sregs_cnt++] =3D kvm_id; @@ -1360,7 +1409,7 @@ int hvf_arch_init_vcpu(CPUState *cpu) if (__builtin_available(macOS 15.2, *)) { if (hvf_arm_sme2_supported()) { for (i =3D 0; i < ARRAY_SIZE(hvf_sreg_list_sme2); i++) { - hv_sys_reg_t hvf_id =3D hvf_sreg_list_sme2[i]; + hv_sys_reg_t hvf_id =3D hvf_sreg_list_sme2[i].sreg; uint64_t kvm_id =3D HVF_TO_KVMID(hvf_id); uint32_t key =3D kvm_to_cpreg_id(kvm_id); const ARMCPRegInfo *ri =3D get_arm_cp_reginfo(arm_cpu->cp_= regs, key); diff --git a/target/arm/hvf/sysreg.c.inc b/target/arm/hvf/sysreg.c.inc index 7a2f880f78..c11dbf274e 100644 --- a/target/arm/hvf/sysreg.c.inc +++ b/target/arm/hvf/sysreg.c.inc @@ -153,3 +153,47 @@ DEF_SYSREG_15_02(HV_SYS_REG_ID_AA64ZFR0_EL1, 3, 0, 0, = 4, 4) DEF_SYSREG_15_02(HV_SYS_REG_ID_AA64SMFR0_EL1, 3, 0, 0, 4, 5) DEF_SYSREG_15_02(HV_SYS_REG_SMPRI_EL1, 3, 0, 1, 2, 4) DEF_SYSREG_15_02(HV_SYS_REG_SMCR_EL1, 3, 0, 1, 2, 6) +/* + * Block these because of the same issue as virtual counters in + * that caused the revert in 28b0ed32b32c7e5094cf2f1ec9c0645c65fad2aa + * + * DEF_SYSREG_VGIC(HV_SYS_REG_CNTP_CTL_EL0, 3, 3, 14, 2, 1) + * DEF_SYSREG_VGIC(HV_SYS_REG_CNTP_CVAL_EL0, 3, 3, 14, 2, 2) + */ +#ifdef SYNC_NO_RAW_REGS +DEF_SYSREG_VGIC(HV_SYS_REG_CNTP_TVAL_EL0, 3, 3, 14, 2, 0) +#endif + +/* + * Also block these because of the same issue as virtual counters in + * that caused the revert in 28b0ed32b32c7e5094cf2f1ec9c0645c65fad2aa + * + * DEF_SYSREG_VGIC_EL2(HV_SYS_REG_CNTHP_CVAL_EL2, 3, 4, 14, 2, 2) + * DEF_SYSREG_VGIC_EL2(HV_SYS_REG_CNTHP_CTL_EL2, 3, 4, 14, 2, 1) + */ +DEF_SYSREG_VGIC_EL2(HV_SYS_REG_CNTHCTL_EL2, 3, 4, 14, 1, 0) +#ifdef SYNC_NO_RAW_REGS +DEF_SYSREG_VGIC_EL2(HV_SYS_REG_CNTHP_TVAL_EL2, 3, 4, 14, 2, 0) +#endif +DEF_SYSREG_VGIC_EL2(HV_SYS_REG_CNTVOFF_EL2, 3, 4, 14, 0, 3) + +DEF_SYSREG_EL2(HV_SYS_REG_CPTR_EL2, 3, 4, 1, 1, 2) +DEF_SYSREG_EL2(HV_SYS_REG_ELR_EL2, 3, 4, 4, 0, 1) +DEF_SYSREG_EL2(HV_SYS_REG_ESR_EL2, 3, 4, 5, 2, 0) +DEF_SYSREG_EL2(HV_SYS_REG_FAR_EL2, 3, 4, 6, 0, 0) +DEF_SYSREG_EL2(HV_SYS_REG_HCR_EL2, 3, 4, 1, 1, 0) +DEF_SYSREG_EL2(HV_SYS_REG_HPFAR_EL2, 3, 4, 6, 0, 4) +DEF_SYSREG_EL2(HV_SYS_REG_MAIR_EL2, 3, 4, 10, 2, 0) +DEF_SYSREG_EL2(HV_SYS_REG_MDCR_EL2, 3, 4, 1, 1, 1) +DEF_SYSREG_EL2(HV_SYS_REG_SCTLR_EL2, 3, 4, 1, 0, 0) +DEF_SYSREG_EL2(HV_SYS_REG_SPSR_EL2, 3, 4, 4, 0, 0) +DEF_SYSREG_EL2(HV_SYS_REG_SP_EL2, 3, 6, 4, 1, 0) +DEF_SYSREG_EL2(HV_SYS_REG_TCR_EL2, 3, 4, 2, 0, 2) +DEF_SYSREG_EL2(HV_SYS_REG_TPIDR_EL2, 3, 4, 13, 0, 2) +DEF_SYSREG_EL2(HV_SYS_REG_TTBR0_EL2, 3, 4, 2, 0, 0) +DEF_SYSREG_EL2(HV_SYS_REG_TTBR1_EL2, 3, 4, 2, 0, 1) +DEF_SYSREG_EL2(HV_SYS_REG_VBAR_EL2, 3, 4, 12, 0, 0) +DEF_SYSREG_EL2(HV_SYS_REG_VMPIDR_EL2, 3, 4, 0, 0, 5) +DEF_SYSREG_EL2(HV_SYS_REG_VPIDR_EL2, 3, 4, 0, 0, 0) +DEF_SYSREG_EL2(HV_SYS_REG_VTCR_EL2, 3, 4, 2, 1, 2) +DEF_SYSREG_EL2(HV_SYS_REG_VTTBR_EL2, 3, 4, 2, 1, 0) --=20 2.50.1 (Apple Git-155) From nobody Mon Apr 13 08:43:36 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=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1772906740; cv=none; d=zohomail.com; s=zohoarc; b=aIq1CXa3HZsrTfdBwd/HT4hcflsEMmU70vF9IrMSzXoE0tqI7P26cpEtXykwGWqKFHrsYKx0aje6veG7kmc04lsyo2Nl9TTMryNWEkVh4Z6tYev1qh7wu5pMBZmrxsWM+GH0eqVgSU+I6ppV/prDKODveuSDTmR4syF13w+Abgo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772906740; 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=qk5kNnRc/8ofMH+hHbzmjYvw1FzBv77gS+l8F0NuDbQ=; b=O/5AJttZHi5y3Rfyqc/vLec01Pz+Q/VKpG7KKOWl3ttuc02i3qacN6WnVLdOhqifIAODCV8kdVOuAWMkANV9xE0xFQrzdOwtgTH/7XChyFCWMx6cIJ/hHvYqrfH4FOfVL0AwdL2KsPGsURrI12Q5474QetCGrW2ozhMju6c9DsI= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1772906740852767.3844845197191; Sat, 7 Mar 2026 10:05:40 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vyw0W-00024x-Qj; Sat, 07 Mar 2026 13:04:08 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyw0U-00023b-DZ for qemu-devel@nongnu.org; Sat, 07 Mar 2026 13:04:06 -0500 Received: from p-west2-cluster4-host1-snip4-6.eps.apple.com ([57.103.69.197] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyw0S-0003Xd-Q5 for qemu-devel@nongnu.org; Sat, 07 Mar 2026 13:04:06 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-5 (Postfix) with ESMTPS id CE2901801271; Sat, 7 Mar 2026 18:04:01 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-5 (Postfix) with ESMTPSA id 67CED180126E; Sat, 7 Mar 2026 18:03:59 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772906643; x=1775498643; bh=qk5kNnRc/8ofMH+hHbzmjYvw1FzBv77gS+l8F0NuDbQ=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=W+mdJJY58rBofdaSiaVkj+ahTF72wrpHCWVRXJ0vxg3xCsfcg86ew8SNWmd6xy5a/RJQbK7KWrFZkp1jaP9uRsMkQD6CCc/ESH7rktAt+SczGsZ+mIPdYZo7r88BAmtqX8lS/Y/hzE+LhfrZ8Hl/bZzMWpoxM9QkOrWrMWcy3fBiPMuVmT+n4ch2W6a75fqjhK4nsX/55U/5kh3QxXcWo0yFCBorbA/H/hrXN/MUk3DiGhBAQ7Vd4VKoIsZtff7eupARUCELhJlZ0lpdAHpiHl/A1CAAKvEjToH9B9f1L76Y3OUofJHFLHWdYFzt8sWykB37uYziEw+AYHxus1S3NQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Peter Maydell , Roman Bolshakov , Manos Pitsidianakis , Alexander Graf , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , Mohamed Mediouni Subject: [PATCH v19 11/13] target/arm: hvf: pass through CNTHCTL_EL2 and MDCCINT_EL1 Date: Sat, 7 Mar 2026 19:03:28 +0100 Message-ID: <20260307180330.75168-12-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260307180330.75168-1-mohamed@unpredictable.fr> References: <20260307180330.75168-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA3MDE3MSBTYWx0ZWRfX4DH9kSKqITn6 npQ+ZHWq1pWzs0ZSTbg8nVoXool3UTmw6XfPFvOrOo1S77Rp5TjOSlvQraPyyInUGI3VGJPFPHF ENyLfhpnAB+esq5n1xQsufBSnP/8KQdVW+j844Wqj/9ffCU5o6YdP/QTnUXth9ABupam2bjfmZO pHYpIB6bM8s8BYY0dhUBKLZP9bTHe4TRK8kvsFZYieJMsURbDNN+Jr6b9YHkbeqMle4TY2WePa2 KLm4rnYHdejPjURjDmbMfGFqgN8SEaKk+DMuEB0nDsuMJfJyiLdjMTONLKEIuVwW+DEsE7HDcev GwAR0PoNVnP247+xzUGHOLdXdP2bXg7j4A7UrdFH1uGnXgFjrkoptmq1cbo2xI= X-Proofpoint-GUID: sTPdbL_SEmm0cmavCQcpEH9oxfRjYg02 X-Proofpoint-ORIG-GUID: sTPdbL_SEmm0cmavCQcpEH9oxfRjYg02 X-Authority-Info-Out: v=2.4 cv=QstTHFyd c=1 sm=1 tr=0 ts=69ac6892 cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=L1bH-B2CdzmaWMF7168A:9 a=NqO74GWdXPXpGKcKHaDJD/ajO6k=:19 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-07_06,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 clxscore=1030 spamscore=0 adultscore=0 phishscore=0 mlxscore=0 bulkscore=0 mlxlogscore=578 suspectscore=0 lowpriorityscore=0 malwarescore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603070171 X-JNJ: AAAAAAABXQ93YIyfRvaFHCz3ptW30WhyyHio8u5N+6kdSkI/9eS2MuGZF7QIvQJeE0ZguzTyLRHHozZWzKFptUg+41EjSWbZhEOhU8chPl5OrH/MfkmITsyHVKi/bnbjrqhBBKl09vQYy8MbZj3ss+6wjxtSOvKb1PMfaFTmFgHqHZsPQwNVlbTx0iiNAI3tsL3pmQdcHsqaqGoauXpYBtoaMaM5rQPRTPEuK0q9CAw/TN5IMf1gK9diUIxeJoeJDs08loPDki/BLU1n3+RiiKeqdyQyIBbGaOFqau4wDjQp4oVhU5XEWUBdjnSF6++hUOdmwPI57gARPeeetWSjSm90wpm3OBdsEoolYnHZu1kn2D1fahQ9yeQpF1M3h5WdcnrEf+NHTGjzKPaZI5/SrtqiYtnMbdAsVPylcDIBQzfPeOaHF6vFYrccktTVNhrHL2+uiq3tolQ59k8lkkKXQbKpJgsFU7UVvV/V3NfC4Crux5tZ7U5YiRMheDEjHsu0wdFyte/hjli8CX4ooL5c5frq1EO4xtjfgBRhYddO2dB3F8zE0dRoDXlPaulXEY3afruphoSYqrNk1WWbt1njihHB7U9054srVl5CWFKtqPNTPd1m58Z9sk4alMrchywtln1p/v5udaKzIF3aE9IPnjOh6vJvjmQIUO5P5eS8S/9GcSDatun8XcEY+8LXcBtw7kY5kEbNisLeh64GufuDAxhsNGEOA6nCHWUiCuH0SRofGyJONO+bUNfG6DVO Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.69.197; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -3 X-Spam_score: -0.4 X-Spam_bar: / X-Spam_report: (-0.4 / 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_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @unpredictable.fr) X-ZM-MESSAGEID: 1772906741831154100 HVF traps accesses to CNTHCTL_EL2. For nested guests, HVF traps accesses to= MDCCINT_EL1. Pass through those accesses to the Hypervisor.framework library. Signed-off-by: Mohamed Mediouni Reviewed-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Philippe Mathieu-Daud=C3=A9 --- target/arm/hvf/hvf.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index f6385532f3..03b174a8d4 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -296,6 +296,10 @@ void hvf_arm_init_debug(void) #define SYSREG_DBGWVR15_EL1 SYSREG(2, 0, 0, 15, 6) #define SYSREG_DBGWCR15_EL1 SYSREG(2, 0, 0, 15, 7) =20 +/* EL2 registers */ +#define SYSREG_CNTHCTL_EL2 SYSREG(3, 4, 14, 1, 0) +#define SYSREG_MDCCINT_EL1 SYSREG(2, 0, 0, 2, 0) + #define WFX_IS_WFE (1 << 0) =20 #define TMR_CTL_ENABLE (1 << 0) @@ -1704,6 +1708,14 @@ static int hvf_sysreg_read(CPUState *cpu, uint32_t r= eg, uint64_t *val) case SYSREG_OSDLR_EL1: /* Dummy register */ return 0; + case SYSREG_CNTHCTL_EL2: + if (__builtin_available(macOS 15.0, *)) { + assert_hvf_ok(hv_vcpu_get_sys_reg(cpu->accel->fd, HV_SYS_REG_C= NTHCTL_EL2, val)); + } + return 0; + case SYSREG_MDCCINT_EL1: + assert_hvf_ok(hv_vcpu_get_sys_reg(cpu->accel->fd, HV_SYS_REG_MDCCI= NT_EL1, val)); + return 0; case SYSREG_ICC_AP0R0_EL1: case SYSREG_ICC_AP0R1_EL1: case SYSREG_ICC_AP0R2_EL1: @@ -1992,6 +2004,14 @@ static int hvf_sysreg_write(CPUState *cpu, uint32_t = reg, uint64_t val) case SYSREG_OSDLR_EL1: /* Dummy register */ return 0; + case SYSREG_CNTHCTL_EL2: + if (__builtin_available(macOS 15.0, *)) { + assert_hvf_ok(hv_vcpu_set_sys_reg(cpu->accel->fd, HV_SYS_REG_C= NTHCTL_EL2, val)); + } + return 0; + case SYSREG_MDCCINT_EL1: + assert_hvf_ok(hv_vcpu_set_sys_reg(cpu->accel->fd, HV_SYS_REG_MDCCI= NT_EL1, val)); + return 0; case SYSREG_LORC_EL1: /* Dummy register */ return 0; --=20 2.50.1 (Apple Git-155) From nobody Mon Apr 13 08:43:36 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=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1772906781; cv=none; d=zohomail.com; s=zohoarc; b=WMHSLGiqeLSdbS3DZHE1cePKSFAdA5pfWfiRGmxH2AxCTWnXdkMufY0JjKyzGh+SWa8fKnXdcSzzPGLYBA6LmmxJeWkgYzC1Vj68V6HxaGo4enlYY7HsWFjA4ERNA8kSbx4OTqEOTV5kVA+1j7CDM7V4itISiI38PDWLzs6xtVs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772906781; 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=3yh5HIrcULHJxYVQbGGuriOXIl6oe39CV995zPmVByw=; b=FAg+dfo0EOXKaBXqxYcE+OqkYmlvCfwKZHfuQVMCj8+xiisQ89cf0/HgCidMz+Q0k38OIZnsr4BXJVzX4X/pgLadpQuy7CvF4RO5s/XrdP5bsMpA8e1s4i9JUdFYMIGX+nUF2ANjoTesrIDwEccAAyCF//0xXq5ZDlw5JqC5pAA= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1772906781698533.8564286548639; Sat, 7 Mar 2026 10:06:21 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vyw0a-00025Y-9N; Sat, 07 Mar 2026 13:04:12 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyw0W-00024U-Da for qemu-devel@nongnu.org; Sat, 07 Mar 2026 13:04:08 -0500 Received: from p-west2-cluster4-host9-snip4-10.eps.apple.com ([57.103.69.181] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyw0U-0003Y4-Hy for qemu-devel@nongnu.org; Sat, 07 Mar 2026 13:04:08 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-5 (Postfix) with ESMTPS id 145A51800132; Sat, 7 Mar 2026 18:04:03 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-5 (Postfix) with ESMTPSA id A3D811801265; Sat, 7 Mar 2026 18:04:01 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772906645; x=1775498645; bh=3yh5HIrcULHJxYVQbGGuriOXIl6oe39CV995zPmVByw=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=BVyI896X7/325u6n8a1h8c78Bm+Cs4a2bRDoAxIbvuVnRy5UVDYZLubEs74Lqb185YHfSFkcOQJgulN/XxFtTW/reU+QzDlBwxjV4pT7AVnUpw5UDPG9HQsj4gdcKpEaO0uNEkOV/ozQQv+HAgisi6+95E8UrXLnpJKFd3ud60RIJcOtFfgZqQ0NuAIL6fG8rE8qv7w6GhksOs8VnZJzDCnsGuuobsTdoUV+//WCXk+uaxRDPPukIcuWBsCrsnNUdrFvpKA7IGLumWTULu414QOvamaBZ1rwzQVJS+lfoEimpAlzYueetq+SmJ9KCi81oqZQ5xcx8+fTps9UrX/M+w== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Peter Maydell , Roman Bolshakov , Manos Pitsidianakis , Alexander Graf , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , Mohamed Mediouni Subject: [PATCH v19 12/13] hvf: arm: disable SME when nested virt is active Date: Sat, 7 Mar 2026 19:03:29 +0100 Message-ID: <20260307180330.75168-13-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260307180330.75168-1-mohamed@unpredictable.fr> References: <20260307180330.75168-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Authority-Info-Out: v=2.4 cv=AZa83nXG c=1 sm=1 tr=0 ts=69ac6894 cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=Nb5tGvShBxYZWtT_8e0A:9 a=NqO74GWdXPXpGKcKHaDJD/ajO6k=:19 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: m6PeLdvbBt8iA2-8st7p0y3MwLkL5oNZ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA3MDE3MSBTYWx0ZWRfX8ewVzoD7Q7KT ibMC4g7whjQFB7Zib/we3bPoGov8SyM55uWb6hdRAsWLOPT+ACnGaYxMmLC0dlDxHnLZ9tqcBua xsTxhBURSKcqB81Uvnx9PNtFxsloW1XQ0AFkdOo56rb3L1YWREbXIKqVjrJP8XkT1D2xgdv9lfq QfOm/0LYdqIzduT/kUCiRcsUNfLYNjp8SFAQRdWvvTTI5vyM2udA+svsjQV98HKyd07UzPMT0cu RpiuTWMxO+pw4DdNp4iVIDs4ZedYq9wkwHO7aLrO0prBU1ZwEpmnU/oh8OwDpcyMkxA/i9pfpPF Rt8MTpkCUmtiw2YtSAf0VnVfTqjoYWvuvToTxSk6v/8o3BqYLbl0kJPWIv7IF0= X-Proofpoint-GUID: m6PeLdvbBt8iA2-8st7p0y3MwLkL5oNZ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-07_06,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 adultscore=0 spamscore=0 mlxlogscore=753 lowpriorityscore=0 bulkscore=0 mlxscore=0 clxscore=1030 malwarescore=0 suspectscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603070171 X-JNJ: AAAAAAABINOfCSBaUSxuMmtektptAqdO7K0yhXP6D4oUkdEmjTaJglavXXxzNZRV8zSlzbYu4J3jEeeHSBogkYI4pby8hG5A90COYVWtvjWSxqcBltUPgggBldjktUbC4KbtuKi0mwEu+y8vZs1R2S8VIRcubj6sbBudcPVuzpEk9G3zgXY1IYcJ8TE6MIVtuJEz2SrgVSmNSfUVIHEp5aqwAtDa/CNWCSjIWgfODOcNbGmVp01vybDpWo7m5KnIoy7qRCRLwGxg0hvszrYPEXqUS7ty/0NHKQ4l35jkydswKTA2c2cSTdKqNitYFG1K9IGv/BO2dl5fA14hWB3RaCF3H1dcZjL1hNe8TVMRKgdruz+1qqTGusUNhkFd28gPc17+jKjU356FW2SLtRk07Z402n6G7F6JzKAXrWEHN/pf5yBw1CSg1O6PlueAigadeH7lxCpoIkm/rr0EU7SabY6CYYGKNbgI0NQQ5rlLHmd8q3ennD/VV1UT3v+eUJlXspmcfiBH9JUVvs+h5YeKopJDZLbFKzwGSN+7M4mugkq29su0MmfdxJbbskMNx2+laM0zFDiRxTXhMLSsG/zQGm/WXQKqXPqzl9Q69ZMtqLf8/VGQhk/YoT9y21ECt3rjs0KfhyN6n4tGlq23kb/b4W01SnfF4HWmVh/fm6q6eSgE7RXQgQiVU7q4J3tqX5zsTLPheYKO9hvUhTUVYlf6bYBFS53swUJ/F0C8rvXvY6ZuBWBegDI5+A== Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.69.181; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.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_LOW=-0.7, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @unpredictable.fr) X-ZM-MESSAGEID: 1772906782338154100 Currently, Apple doesn't support the nested virtualisation + SME combinatio= n. Signed-off-by: Mohamed Mediouni Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- target/arm/hvf/hvf.c | 2 ++ target/arm/hvf_arm.h | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index 03b174a8d4..8aa59a1f77 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -1189,6 +1189,8 @@ static bool hvf_arm_get_host_cpu_features(ARMHostCPUF= eatures *ahcf) =20 if (hvf_nested_virt_enabled()) { FIELD_DP64_IDREG(&host_isar, ID_AA64DFR0, PMUVER, 0x1); + /* SME is not implemented with nested virt on the Apple side */ + FIELD_DP64_IDREG(&host_isar, ID_AA64PFR1, SME, 0); } =20 ahcf->isar =3D host_isar; diff --git a/target/arm/hvf_arm.h b/target/arm/hvf_arm.h index 6b1c3b9792..9cb58ad9ab 100644 --- a/target/arm/hvf_arm.h +++ b/target/arm/hvf_arm.h @@ -11,6 +11,7 @@ #ifndef QEMU_HVF_ARM_H #define QEMU_HVF_ARM_H =20 +#include "system/hvf.h" #include "target/arm/cpu-qom.h" =20 /** @@ -35,6 +36,10 @@ void hvf_arm_set_cpu_features_from_host(ARMCPU *cpu); if (__builtin_available(macOS 15.2, *)) { size_t svl_bytes; hv_return_t result =3D hv_sme_config_get_max_svl_bytes(&svl_by= tes); + /* Nested virt not supported together with SME right now. */ + if (hvf_nested_virt_enabled()) { + return false; + } if (result =3D=3D HV_UNSUPPORTED) { return false; } --=20 2.50.1 (Apple Git-155) From nobody Mon Apr 13 08:43:36 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=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1772906782; cv=none; d=zohomail.com; s=zohoarc; b=hrl1bIvV0FgldcDOrvNEfxJpyBTf7HkMYSB2Wdx5Cse0QFXSD36atQzvltXVRQHLi7FuBbn8TuB99+N7CDkz5c0lq6vRqLzFnZ8kXSz9HcBbsxSkgjQR4QfMlft1cbezll98OiJ+jEpG+BhVuWgbAnhxu9rdXfCtwqWXNp3Jcn8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772906782; 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=ijV/TFHDkMx/sDtjnbI4Tcf5/3qsWHHZ7tvtB+wJk+k=; b=CthBN/6Mt6FBoFx9aM2Z4LecdBPnhKqs+qH47N7C53djYnw04IvIVLkkKSaSkAwA3lBRdWcuDGRVf2Gpt74Dp92fDmpW4tJDZ1zN0Ec7Hr/D2b9fP4XGhcw5+qj4sOgUtLN3Fnk5HJOrbCUrC+dO4jmV4DWNJelMQ81ik9hPcuU= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1772906782357132.8738772585126; Sat, 7 Mar 2026 10:06:22 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vyw0a-00026A-Hm; Sat, 07 Mar 2026 13:04:12 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyw0X-000259-Qb for qemu-devel@nongnu.org; Sat, 07 Mar 2026 13:04:10 -0500 Received: from p-west2-cluster2-host9-snip4-8.eps.apple.com ([57.103.68.171] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyw0W-0003YZ-Ah for qemu-devel@nongnu.org; Sat, 07 Mar 2026 13:04:09 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-5 (Postfix) with ESMTPS id 39AE91800610; Sat, 7 Mar 2026 18:04:06 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-5 (Postfix) with ESMTPSA id E12101800E3D; Sat, 7 Mar 2026 18:04:03 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772906647; x=1775498647; bh=ijV/TFHDkMx/sDtjnbI4Tcf5/3qsWHHZ7tvtB+wJk+k=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=cS9wpwexRd2DmDCDCCBDPdx6xA8D729/dZiZ0LAPW9YAq4RJeOUR3WQawp/5TQyvTAJmN6pABVxx2V4mU6yRO5DPm9NtzlTmDxeB4RwWKk6r+nCvww1T+HeGyRjAv5rPAqZw0bcqtvNNUjzBvuKu98Z5yolg/huX9ssFsNZvftNTt7es6+HffgTNcikbIwUJ61YAZAtRueTBooCHbNe83E7xLeuz0LpZjdNAJWn4/gL2MAOQ5+i52DiKXD+KN8jE+k7D85FdTw3dHFtrkzAK6rtrBYFk2KyoWeLGIgzyIkS2U5EJK9A92Cd+r92xv99VRFZPuRTOkmsZgz451a3YnQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Peter Maydell , Roman Bolshakov , Manos Pitsidianakis , Alexander Graf , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , Mohamed Mediouni Subject: [PATCH v19 13/13] hvf: enable nested virtualisation support Date: Sat, 7 Mar 2026 19:03:30 +0100 Message-ID: <20260307180330.75168-14-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260307180330.75168-1-mohamed@unpredictable.fr> References: <20260307180330.75168-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Authority-Info-Out: v=2.4 cv=ULnQ3Sfy c=1 sm=1 tr=0 ts=69ac6896 cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=5Chse3eIq3h0lgOaJ4gA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: 3NZ3uJsnvmkrXTPepIezxGsVkDRv9ynS X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA3MDE3MSBTYWx0ZWRfXwsFgiMLeBTvn I9Hw4Myg8ZI98fGqsqTPA3Ojc8fArN832NVQiXruXgHBUzHC9GYr2bIH55L1yENpTHF9euLZWXc bdqkQB8kOEmCycGLK4LZonzrVsYOurv3x6OJRstPDoSy2qPkbjR9yj5S8im5J89p3mDygwBkri4 m3YN6NlMGmdbySoMK/C9Kw9ReAEykD7viLYdxyfDTx8Vojm33CyGCcVmG/+HiN6VtKMXtsacxDm GkQZT8u6ifpdSMXinYiZbVVmD4RZOAwpylSGbIpYCEnvhGRGpMZmFFAP0bsO+zs9LuIzCqX5+r4 ipV4ANj84lz5V+oJgpvednyLnMcnnjTfROS54RO7g7Lbnebr884FbSLs0o1Jco= X-Proofpoint-GUID: 3NZ3uJsnvmkrXTPepIezxGsVkDRv9ynS X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-07_06,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 clxscore=1030 bulkscore=0 malwarescore=0 adultscore=0 lowpriorityscore=0 mlxlogscore=916 suspectscore=0 spamscore=0 mlxscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603070171 X-JNJ: AAAAAAABf8E5S53Yuh0Q9EC+aukOzswYyYa1Xu2RrCebRg2+5u3DfsUkbAu2Um6UfRnpfZuMeODCHynqCqcqWexKjAg+Up0c/lufcsV1c6r/1+ULyzNP+NgeXZgrdUbkX0scTkFb5rqyftfxYZJD6aFhi9x/C6rhu8bxuYD6I+onUqeRxl2BdqieAHaX/4uSgUz7QGuYNkuYwdIsFluje40wAz9dbegTu+x4wD5V/WB3Yezoc0yV5DYw3L+1Vcqq4O8zjRRo/WerAIps4eZns2maxH/6tFoU8DGqaN711/m2WaQ7S0PLUCsYAH/JrSIL5pkaF23ZRgQ1vMc79ZLRBWXc7CKh/J0yL9Jm0Q8iOoRHrRD5hp0VZL2yDQDY7I054Srqjogj2RdYj7vyWm4ur2J2sJPUgEu6L9gjuBKHbyVszHqzGSnauGwAbKM8+pcL5dwAsalKTTZWt9XxHXyac2ZRh/I0YS4ePoqYYMEnOqdiAQRVHgETncRymoshH/ZKbxR0Nyzny1QdkXEVFXx7Q5yfufjCcjcor75dLn7nkzyjIO+Um5CwzCd81DDB49rM8ymu1n3Wbe+M9OCNXjjI/mhWub6bPFYNs1tih95Wbc4JMkxwi1MZ14GWkqPnwd28v0E/TVdsQvr9EAnz3kQbYsCCzyVB2OUjhfB5sggpFUJaRi/LzURQytURHU9H0gOn8+wJzh1lvFo4XkXFTSmUKUv+G+VySlCBG86gmJUGChwYoW7waQ== Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.68.171; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -3 X-Spam_score: -0.4 X-Spam_bar: / X-Spam_report: (-0.4 / 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_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @unpredictable.fr) X-ZM-MESSAGEID: 1772906784690158500 Signed-off-by: Mohamed Mediouni Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/arm/virt.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 90769936d0..bced9f67f4 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -2393,13 +2393,20 @@ static void machvirt_init(MachineState *machine) exit(1); } =20 - if (vms->virt && !kvm_enabled() && !tcg_enabled() && !qtest_enabled())= { + if (vms->virt && !kvm_enabled() && !tcg_enabled() + && !hvf_enabled() && !qtest_enabled()) { error_report("mach-virt: %s does not support providing " "Virtualization extensions to the guest CPU", current_accel_name()); exit(1); } =20 + if (vms->virt && hvf_enabled() && !hvf_irqchip_in_kernel()) { + error_report("mach-virt: For HVF and Virtualization extensions " + "only kernel-irqchip=3Don is currently supported"); + exit(1); + } + if (vms->mte && hvf_enabled()) { error_report("mach-virt: %s does not support providing " "MTE to the guest CPU", --=20 2.50.1 (Apple Git-155)