From nobody Sat Feb 7 04:47:24 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=1769539719; cv=none; d=zohomail.com; s=zohoarc; b=FALAUHwyX2j/RuUR9mRY750QA5eW/9oXTEgBEtn8UfZL55Vy5NeTJOzRf+WGVJIIuZS6KzmehEOvGqAF+wbRFwJZjX5VkHRQORXGftQXqny9yw9nc8GrltP0EJ8rVo1+QQIYWgmpQcNdFWlaLckKAME4n5Y9U5K53XYUKM/51+E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769539719; 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=6AbFosTeO+22W6pzp7NhrRLKcRCIno0EsBShVb2QtOo=; b=fitb8rLUuCKga5Yh1futiaoVfEGx1GBOEk7zsZ7LB+nLvKJg987ZPATgDyQspfeIdcOVKF7EI20S7K3rt6IMkLhbNiiabc/ODESgC7k0dFyfku0CeLLTJy4Cq3lQ6UywX3Amcg/vdPiy7mQkiTx2LuTSaglRjYewZ/fd7VVJbpM= 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 1769539719966331.7764811098407; Tue, 27 Jan 2026 10:48:39 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vko4y-0000u6-HA; Tue, 27 Jan 2026 13:46:20 -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 1vko4W-0000OX-6l for qemu-devel@nongnu.org; Tue, 27 Jan 2026 13:45:54 -0500 Received: from p-east2-cluster6-host12-snip4-10.eps.apple.com ([57.103.76.251] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vko4G-0007bj-U1 for qemu-devel@nongnu.org; Tue, 27 Jan 2026 13:45:43 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id 56BAB1800668; Tue, 27 Jan 2026 18:45:29 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id 4995F1800139; Tue, 27 Jan 2026 18:45:27 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1769539533; x=1772131533; bh=6AbFosTeO+22W6pzp7NhrRLKcRCIno0EsBShVb2QtOo=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=W3vNEKu4WQl7FfONcAOYBm9SXEn/R6c44M/v86LaFKyxqwW1V9gjsIeBpSCc3zKfhyx9xDuyxP2/Fc4F9hpZ1v4xo4N26rQ1HP/mZltXM43GZ0ufLIA6FFHlBKpHs8aX6bcX1mxbO8Z6m5ZcAIgesGQGefaPgtV04Z1f7RDOkZLbDXQvH2+LkTwDxtee8XpzxBwBHcIEhUJ930lAC3NDTNCXff+AWp68PVtDLZL8/3seuz8jyG1xv/s6G4QOpMoFnwqkMUNPq41ntqcSbp7egaCqhWqjv6TOyDl5XfLkr4oHoJw3enJn4+EOZMmlH664jnlMYm/Auu6BqtBjBXSqPg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Peter Maydell , Alexander Graf , Paolo Bonzini , qemu-arm@nongnu.org, Roman Bolshakov , Mads Ynddal , Phil Dennis-Jordan , Cameron Esfahani , Mohamed Mediouni Subject: [PATCH v9 01/12] hw/intc: Add hvf vGIC interrupt controller support Date: Tue, 27 Jan 2026 19:45:12 +0100 Message-ID: <20260127184523.5357-2-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260127184523.5357-1-mohamed@unpredictable.fr> References: <20260127184523.5357-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: 3LJX_UVGqHPskUtek-Hp21ahvFQH1fAK X-Proofpoint-ORIG-GUID: 3LJX_UVGqHPskUtek-Hp21ahvFQH1fAK X-Authority-Info-Out: v=2.4 cv=CYEFJbrl c=1 sm=1 tr=0 ts=697907ca cx=c_apl:c_apl_out:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=D2JAlcJVxmvnjXxMMLIA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTI3MDE1MyBTYWx0ZWRfX+MV9kfzfyZGk UpOjbPpxwV3JcQgSbd5zSAej0s7CP8xrmtaowWPnrvkQ0hinJA5EIpZm9pS8yZmsFLed2R9J4cw t1M6zl/aUFJ5KXPJWq7dRJsXk4zK5+R84ZVBch5VRwwCrkQ8H23usDjDHQpOUNb5bZDQO+aIxy0 47Qty656cDlkTKWMgxKExm/Ixg0mfJNSGsUQF9jRjkbFHehN9n3WPYXAqQkWoiAOVoEk7U3magC gUnUBQAPpT//MDVAPxDVTptrulsT9FtpkHYxPP805llFzYR/ThqpoSw/QT0kJJ6A49JD6D17Thd rpkcAF3Jx4plrt/AnJd6FNYYeVok9dQfHznyylLMzDbGpKG/yD0/Tf9naVuFjY= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-01-27_04,2026-01-27_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 suspectscore=0 malwarescore=0 mlxlogscore=999 spamscore=0 adultscore=0 lowpriorityscore=0 bulkscore=0 clxscore=1030 mlxscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2601270153 X-JNJ: AAAAAAABw1QUTVD1dGhpSKuYyk9MjUbKyfVCAlCycr//Za7CJ+bPaFfShQNOsauJsDzqiM0SqPjaxBcrTRf+6QU6V32ePWn6hcBBGVGn2g3KGYxOspYfDUttVwcmDTyW3MCiIaSJ0/STxV19VyLvcBsDEX96b4kC5vXmsBsZSunBVRFoCHH6ffJb9lXmXQ/gbX4KlBcVnWRqFMOXbI3YTeAY7eP0+k++2sAu4JFOv5qoht97lJIbv/YyaHgvNZ5bx7nmCxqFSxwvJZ2/Hf8rXi+5w9LGDquCS1Hs+lGMSlGUJkKzgVX3Iltxp4Refc/JtoMsrnl+14ZrCWhzJIRILE9EpB3N4tHLnCke9+4IDm2RBlqGd0EctJ5dwZDNfut9XsglhFoAHuFuHnjewelBYvvnAvuty6sytk2/cfz7W9sbRXsknd/jLqkjpTXhLTEb/mRpGT3lcJp5Kisn23XVtLUK3BnB5jR8vqa8CSxJrLdQ2oulPONoM4OJ7CFkiYcDnKfwBnWsAU0bSE+V4iRVrBloR9GNHf5xqdG322zmUDtW5L+jg/XIMKXko155yn8DYPheEgS+zIGlv2iGHcKooR25xEUxZ3npybWbcu/lNHyVSD8Nc3DGjXa0kJ0GTjvxkKJciwR3hjaBo8X5JtVF/IE8jDfFAFN3d3IgrI1kulEDOpJUjsmWYIr88hPLkD286hgB1F2bVBhVV0vLhCFqoOQ5yzn06qR4X2+Mq5/rBuej0nc= 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.76.251; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1769539722768154100 Content-Type: text/plain; charset="utf-8" This opens up the door to nested virtualisation support. Signed-off-by: Mohamed Mediouni --- hw/intc/arm_gicv3_hvf.c | 735 +++++++++++++++++++++++++++++ hw/intc/meson.build | 1 + include/hw/intc/arm_gicv3_common.h | 1 + 3 files changed, 737 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..d6a46b7d53 --- /dev/null +++ b/hw/intc/arm_gicv3_hvf.c @@ -0,0 +1,735 @@ +/* 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 + +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) 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 Sat Feb 7 04:47:24 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=1769539589; cv=none; d=zohomail.com; s=zohoarc; b=RpDwcu2VepzhLJlcJJ9jCa9NaGoHsQdNGvZPcg9A5ACNcdcGM1TbX58/sSM8WDpgU9wnYvvarWnpcni9Gul1UuRqzwV3LpXQCYOJemjnDeC3GEHwfG7k0J1vbEWGBbKnLjX6k6teJdZP+zRJSM1OjcSgW4yLqXBlkSmJ+a7YE60= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769539589; 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=oatTtAt4teOQxb6j4BZyrH73W+FjN+jfcjbUb60eS04=; b=V2CKjMt/51abHku4AK+ESTMY+JgfYhxaUQw1X9gkNp5JyLrMtNpzDq308ap3Hb+8hxf/ccQio5fdBOwZBVhXwSQcNhqL3KYD0FDmYplA1/FzCPQSaFNAdv6/CDvsGrwcjpDITIPDUt/MbA3zZ5kbQfbeHe8bWDy4pJlXcaAg8rE= 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 1769539589096116.32946447576899; Tue, 27 Jan 2026 10:46:29 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vko4o-0000Ww-35; Tue, 27 Jan 2026 13:46:11 -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 1vko4H-0000Jf-1f for qemu-devel@nongnu.org; Tue, 27 Jan 2026 13:45:40 -0500 Received: from p-east2-cluster6-host6-snip4-10.eps.apple.com ([57.103.76.231] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vko4C-0007az-A0 for qemu-devel@nongnu.org; Tue, 27 Jan 2026 13:45:34 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id 8F21118000AE; Tue, 27 Jan 2026 18:45:30 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id E861B180066A; Tue, 27 Jan 2026 18:45:28 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1769539531; x=1772131531; bh=oatTtAt4teOQxb6j4BZyrH73W+FjN+jfcjbUb60eS04=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=ChXoPGAk1rQEL5NWKIHRTFx+uKHdgTETB7TjeEk8VZvbOGbI/2LqCIK7RAoPrDU32r62Q/JQfT77QZ84ULvht8gHaX+FVy9FywUZqLQef/CcNlS26csjMtSke3a2iCWLFNoNFy+nlmC9YhZl3zyXfhqTayCEMNC2vawgiK/yRVcBXsShXrlRkAZztmKKLm0WgbA9G7XyFDvEFmX/QCog1+N+8l/8pjLBI2TQW1PwmvXXlNk2a1Ci4MjPRlJn4ErVuQMFb2Mm3moi53QCeh3iZDKsn55C/8H+d8aZOR84FV1MWLPymNOFcf+jSCXti8lBM7q8dWUDlB0+QWD0op5kwQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Peter Maydell , Alexander Graf , Paolo Bonzini , qemu-arm@nongnu.org, Roman Bolshakov , Mads Ynddal , Phil Dennis-Jordan , Cameron Esfahani , Mohamed Mediouni Subject: [PATCH v9 02/12] accel, hw/arm, include/system/hvf: infrastructure changes for HVF vGIC Date: Tue, 27 Jan 2026 19:45:13 +0100 Message-ID: <20260127184523.5357-3-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260127184523.5357-1-mohamed@unpredictable.fr> References: <20260127184523.5357-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info-Out: v=2.4 cv=LNdrgZW9 c=1 sm=1 tr=0 ts=697907cb cx=c_apl:c_apl_out:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=n4FVybPFTm1vobq06wUA:9 X-Proofpoint-ORIG-GUID: KnBOPV2HsgAfnLe6ohU7GbhbW7pgWKcI X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTI3MDE1MyBTYWx0ZWRfX5L15n8e+VpwV ycAH9h/BRHWxzcgAMeMpLbs1p2m6OiR9wfLBb/5Za1N6S/6aIkr9Syyo5DL793+C0X/x9YVO5E2 D6rg4volxyPmkfE/mDzLx6zUMtXQDXFCtNPjvEVa3OQCxxDnYY1hSPSLmKpQRWC47olvL02x+Vo 6q8gzAhjaumBhVxOEpT7ULQ8AXkInieIhoF8vvcyLHAVtPT4wd/rcFk9RTuB8yNa1bPhOZw2qbg v3z0Xh1Os9K39Gztch1O+imQOE1Yp8DCS/KDs2f3dsRedGNQraBZh7MoSw94w8bEFwowh/1v4Cb e2X0M8gkdqc2/09K7RJ X-Proofpoint-GUID: KnBOPV2HsgAfnLe6ohU7GbhbW7pgWKcI X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-01-27_04,2026-01-27_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 spamscore=0 bulkscore=0 mlxlogscore=999 phishscore=0 suspectscore=0 clxscore=1030 adultscore=0 malwarescore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601270153 X-JNJ: AAAAAAABZQh2E1/X5TFLZW3alVTp6r6Khy1v4gSxGuIQf8YpHJIXCVB7BlpX1Nq/d6FBhJn5ylx2VMVibMSoNXdyGe4bOxo3ggB0gBSJjL+u/POnx5CKsNuR9fOIi5EKkqq7zjzJk8d2hZsbpzN5snlgv8iQmvwfxHozBYSjWDI5qngP2LHVG8qa/El6lKBASu7XDi2lvOaCaYx60NmOQPCKTQk9vaRDco//h4CUUbNBsJpSrGT5kxPBnztT5NDe05SKMbCFHemPN/t9Hk22EXaGU77blSxOBH0LFxS6B9trHEyxsl454B8kFI1I6eoO/u5qsvwN/CGSjup3U6J0XP/3+7FSiFQnq9yJ8B8tOAdmxg3rGG4tI9pYm4Epue4NQdBGo5WZVpR9QTuo0We8AwhA9+4ZrtlG8rtUtXiStjZ6A4kQOpdObcA8XR7quOThckb1ypGv4ZMLKKEriflSxRdeXBEkWlfrwfv1RPb/5+VthhXPS6Y3RVRqJ+dd0Lb6IRjKU93ND+N3+sTeMNL1NM0pDXpp96vP+QzTACnm/2whQGLrlYYmi4SFnqOj6OBYUAGialbxjfOXRGwAg5WoN3Mu14GFsDAlCZGl/H3lb3mOj9rJC60ss8eBVZIhaMz9sN0GmLDKFvQCrASijjwAvEirbqfbBQcCKiY0rjWNXD1IuXFpmC9ZXN9B74ZbUsMxGn0zwtU9VUtEfVGu/F1X8H+YuxSIYTnzVsjuM/W4Dy9asNWitqpxOFooMA== 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.76.231; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1769539590844154100 Content-Type: text/plain; charset="utf-8" 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 --- accel/hvf/hvf-all.c | 50 ++++++++++++++++++++++++++++++++++++++ accel/stubs/hvf-stub.c | 1 + hw/arm/virt.c | 24 +++++++++++++++--- hw/intc/arm_gicv3_common.c | 3 +++ include/system/hvf.h | 3 +++ system/vl.c | 2 ++ 6 files changed, 79 insertions(+), 4 deletions(-) diff --git a/accel/hvf/hvf-all.c b/accel/hvf/hvf-all.c index 033c677b6f..929f53fd37 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" @@ -22,6 +24,7 @@ #include "trace.h" =20 bool hvf_allowed; +bool hvf_kernel_irqchip; =20 const char *hvf_return_string(hv_return_t ret) { @@ -217,6 +220,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); @@ -224,6 +264,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 fd9a3ed480..d82fe10934 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -838,7 +838,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 @@ -861,7 +861,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); @@ -872,7 +873,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); } @@ -2114,7 +2115,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; @@ -2150,6 +2159,9 @@ static void finalize_msi_controller(VirtMachineState = *vms) if (whpx_enabled() && whpx_irqchip_in_kernel()) { vms->msi_controller =3D VIRT_MSI_CTRL_GICV2M; } + if (hvf_enabled() && hvf_irqchip_in_kernel()) { + vms->msi_controller =3D VIRT_MSI_CTRL_GICV2M; + } if (vms->gic_version =3D=3D VIRT_GIC_VERSION_2) { vms->msi_controller =3D VIRT_MSI_CTRL_GICV2M; } @@ -2168,6 +2180,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 9054143ea7..d98f95be00 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) @@ -666,6 +667,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 aa9a155041..d3f311eff8 100644 --- a/system/vl.c +++ b/system/vl.c @@ -1778,6 +1778,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 Sat Feb 7 04:47:24 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=1769539587; cv=none; d=zohomail.com; s=zohoarc; b=b5JTWfus8iyhoa/fUMnAvmHdtmXsoRI4mkzQtAAvx/1eTMx0FMHrghFE+Zly+OaxGnxAqlbiSgMIHktAgGA6U/3G+PIQ6BAU2GAA9nrylh+pNlIQKEhJbkgHMbsZ1kLDY/5T4A+LuuzBiaA00qm0vKYvX55HHRHeEg8zATmC6C4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769539587; 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=92tMQEO+Nusd8p2euFUQP0+NnAb+pyxEihNPlH8e/TY=; b=XPedMxvfVE8xq4w2Ub/bLsJEaku737iNLMlxsWlEMcVkqyH3Pht0yY0rBAg60w8iPelXfPrm/vyu2D5RV+c3he1P3JBGJhxzZ4DO+wrl25QCFl19VPou6ud/ypqb/n2DzZDtDaNy1dk8xkhTzgLeP7V9RokTQxIgsDaI8X1R0vI= 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 1769539587594851.6421228408493; Tue, 27 Jan 2026 10:46:27 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vko4p-0000XN-Rq; Tue, 27 Jan 2026 13:46:11 -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 1vko4R-0000M9-2W for qemu-devel@nongnu.org; Tue, 27 Jan 2026 13:45:51 -0500 Received: from p-east2-cluster6-host1-snip4-3.eps.apple.com ([57.103.76.174] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vko4E-0007bI-U6 for qemu-devel@nongnu.org; Tue, 27 Jan 2026 13:45:37 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id 471C718012C4; Tue, 27 Jan 2026 18:45:32 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id 9C2911800675; Tue, 27 Jan 2026 18:45:30 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1769539532; x=1772131532; bh=92tMQEO+Nusd8p2euFUQP0+NnAb+pyxEihNPlH8e/TY=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=AjJexl1FF9Hu4TfjGvcCbsEYsZnbTBo2CT+bT8Ej+6t1ouz+MgnRCJqYjTTAYuy7Kx6WF8d/rNG6OvOEb0cHhD9y2bnA44QbkM/QUnAqYll9PSPKskYPWcCH+c1uWRhHZwjik8I6GgRRpEm4IgFvTPMV3kEE/DZ5D1iGa3WdnXn9wQri+kKzZ0+AI80hQHpD5WPGXaijsD72aA1kRZQ6hHfBgbU8U7hETwbtbhQnoRYfd+ZjS5Zi3cK/uVbHkNLY1y5pZRzgEou5dHsYvAjaBUOHzjDz19oiQtc/H2iPuSwilmSAhMhhSSbHapdVg2gz716DsRW3OrMVxICcQjMqXQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Peter Maydell , Alexander Graf , Paolo Bonzini , qemu-arm@nongnu.org, Roman Bolshakov , Mads Ynddal , Phil Dennis-Jordan , Cameron Esfahani , Mohamed Mediouni Subject: [PATCH v9 03/12] target/arm: hvf: instantiate GIC early Date: Tue, 27 Jan 2026 19:45:14 +0100 Message-ID: <20260127184523.5357-4-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260127184523.5357-1-mohamed@unpredictable.fr> References: <20260127184523.5357-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: _yij1Sco5CFxIymCt6TobVxmnjwC34Z0 X-Proofpoint-GUID: _yij1Sco5CFxIymCt6TobVxmnjwC34Z0 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTI3MDE1MyBTYWx0ZWRfX7vYgfzdiqwmK FaJMJWwCC4PWM0IuUHO2Khf8FdrhL0N3D8zFX8g51BK4yWyo6Y88X7tJ1BqzjITDMHJyZ9DmheG nxMHKCLd4QzwE99UdBczSw1FBm0T+MtcrsqTZT+6psRB/XnxRy5aDpPNizZxpIkxBfRn9X2gVil b3EYV9vsp+dHGbaLCbiY8QrKtnB/+/H79OwGNy0CmciNrKRy05hemZzgig2oKaVORoBg9LDh3nI MhqHkeBZti8mgaFC8jz8/LcuuYp4S9Zt2DTLLCvpnTgNFQKHK5Lddt36jT2XyJytoS4HBM4UEEK +qX/Q9dmYMvKHziidNL X-Authority-Info-Out: v=2.4 cv=Zq/g6t7G c=1 sm=1 tr=0 ts=697907cc cx=c_apl:c_apl_out:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=iW0rYzIOeSeTUJq9hTUA:9 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-01-27_04,2026-01-27_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 adultscore=0 malwarescore=0 mlxscore=0 mlxlogscore=698 spamscore=0 bulkscore=0 clxscore=1030 suspectscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601270153 X-JNJ: AAAAAAAB1+yNv8F0WnX0tupHFwAzBYlJs5+kMZhsxtOWw6/iaWuhWAU0NnWks+zogVO8A42NOyLHKTOW4N3Gr3478UD4AS0k91penZdbWG98M0zPbEBQM2AOwk8qJETtkt3aRBqdgHOzS8978oLE2jmn80mKRs6BWKtepjJY/5v89/E1/xZ+IFxcUCIM/pASOB8LqdSlYD05WI4S0MdsjTy63jCoBm3nVO2h5cMFau20PMOlopCxzdSLiJsXpJngv3JAvRIpEFNtUCAN8516u60tEswy0vFSiH9x6SufcKdATxSVgBclMEZKC9ufJYRUqjj0mjgTa9/RyBN9XrlAYhjqT6n0j7id3NcsR0lvt+yxKnaRi+THkCeXtwaHhsKHCZHmjN6sLWNgf7+8r7h0BpwXOzDB43ELHex0iRQ6vZP7Ud9k3y2WZ9ewh38KHbaxitSGiSKfjr0h+p4NoS/JYTLRGm0CcpPLajpTWaRh8O+4Kb9XvCvYBIMLBUVqkiiTSfpOFNMyWikA51hqRUIHitueXnxpwVZD+FsW6I9vPCMPHnlLnNL60OnF5iCdMxQ45ktewpWWRflL1HZ8ht143psLAczzw1hH9Y2H+jc+i7UgX+2OFSOumBUawqTdkd0rXDfuT2cPiZHGSeEaJFrtq0vkB3MYWwx/bwv/J7+JAilQ6R9fNoNdQD86KNz2OiTqhClknh8LHE8myxg= 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.76.174; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1769539589173154100 Content-Type: text/plain; charset="utf-8" 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 --- target/arm/hvf/hvf.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index 74b6f5e7db..77ab56778d 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -890,6 +890,22 @@ hv_return_t hvf_arch_vm_create(MachineState *ms, uint3= 2_t pa_range) chosen_ipa_bit_size =3D pa_range; =20 ret =3D hv_vm_create(config); + if (hvf_irqchip_in_kernel()) { + /* + * 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); + hv_return_t err =3D hv_gic_create(cfg); + if (err !=3D HV_SUCCESS) { + error_report("error creating platform VGIC"); + goto cleanup; + } + os_release(cfg); + } =20 cleanup: os_release(config); --=20 2.50.1 (Apple Git-155) From nobody Sat Feb 7 04:47:24 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=1769539587; cv=none; d=zohomail.com; s=zohoarc; b=l7M+4sAEOnzyOYpVgvui+OxnHR370gWGEt9ih3BUzYbHQR1OKGxIA1/gy2PNOysjaV1mkJNi1skutjgowznnQSDQvUDgPLGdX9fz7tgzQ8/0kAHxkyXN9Oxmrwes+gJNZdFtWq+dleR6k/WzgEyLj11itq/+E9JqS+ByWffgSPQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769539587; 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=6kh/bj0nHhgErGSCM1HUbgyZJ3F/fBPgM0DxR9gPyCU=; b=n5Fer4C4hc4QUZKMfZ6Mdm2JN7B72w0KAqYTh1Ks6s2wPW9C5ufrR/SCCrhWfMoH4rM778PZZe0q+eDf4wFdILAsFyXZSZD3xxMG6o31iJ1zL2Au1RsyRhq5clGKTRXcR6gMib4kif63ZJhn/AdRgrHtobg32iURoWPyVt8TKTs= 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 1769539587808870.2642532799275; Tue, 27 Jan 2026 10:46:27 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vko4x-0000sZ-1s; Tue, 27 Jan 2026 13:46:19 -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 1vko4W-0000OW-6H for qemu-devel@nongnu.org; Tue, 27 Jan 2026 13:45:54 -0500 Received: from p-east2-cluster6-host4-snip4-3.eps.apple.com ([57.103.76.144] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vko4G-0007c6-UU for qemu-devel@nongnu.org; Tue, 27 Jan 2026 13:45:40 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id EF69F180065F; Tue, 27 Jan 2026 18:45:33 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id 4EA9518012C1; Tue, 27 Jan 2026 18:45:32 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1769539534; x=1772131534; bh=6kh/bj0nHhgErGSCM1HUbgyZJ3F/fBPgM0DxR9gPyCU=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=bBj6PyVNwYQBUw5b3kLNTEuoEhcqko5ge7codE8hFpY4oDOwQN6wGlFnzeSJjoqfwG4G9Yl+RHiB+IxsamYEfkvQGv32IjjYDX2TppFrSuyB8KaoSfrB+cZxvT5Mofk2qqXfSKA7IOqAoJ84xvmpHQ7Z2BIt052Ucj85Cti1EV+hhmZjSghGQD9uXJbW7t8xo/xyiz4aa0GETJgUF9xDYDtkndQD2ATmNN9de1RTPDt2AfPrX7QliGmr9hvJKfhl+CCxnphLZsNl6q4hBNPmgdKsLzgYHXLGRQSDnOGTY1558mxjPGk3fchamU/+b2LNuLMezGwJX/B2qxa7l62fJg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Peter Maydell , Alexander Graf , Paolo Bonzini , qemu-arm@nongnu.org, Roman Bolshakov , Mads Ynddal , Phil Dennis-Jordan , Cameron Esfahani , Mohamed Mediouni Subject: [PATCH v9 04/12] hvf: save/restore Apple GIC state Date: Tue, 27 Jan 2026 19:45:15 +0100 Message-ID: <20260127184523.5357-5-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260127184523.5357-1-mohamed@unpredictable.fr> References: <20260127184523.5357-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: QnztviPCG2Hvyjt8kwVfxqN_bzSHWRFl X-Proofpoint-GUID: QnztviPCG2Hvyjt8kwVfxqN_bzSHWRFl X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTI3MDE1MyBTYWx0ZWRfX75Owt6R+xChk pDR8Fqqeeny2BqsRrG0+33yEqXwW2bNJX4a3xcRJY4hWjxg6j0n/39sNF4ReFK2pqmo8fPixuEN ZIVAXnrlAIf09f+EkOum4nyY5zG9BJktoqE3sHkzs+eDYqlJrcSMcyWx1VperptsFUrI/8WlV8n RbrvbrAe9HYUhLrnoVwqm3x8UteqxbrQXB3zWJrGm5vVj0rVJThX2qQnlSIe5kh8Gzb3SzPrM+W NyW1w4t3KclYbeEdw4kAtf+SFu+LCyjjneTR44WLny5ZRY+FscZvurxJJOUNJIhvXCVDFMWWBi4 Ur0ENg7QOLIJ2lMR9di X-Authority-Info-Out: v=2.4 cv=Zq/g6t7G c=1 sm=1 tr=0 ts=697907ce cx=c_apl:c_apl_out:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=x93Mgmjee4_3HhNPHesA:9 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-01-27_04,2026-01-27_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 adultscore=0 malwarescore=0 mlxscore=0 mlxlogscore=790 spamscore=0 bulkscore=0 clxscore=1030 suspectscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601270153 X-JNJ: AAAAAAABpvTbOTKlBNeymIDVsbNfqtgkwJXltHUlRwzi9IiieK9cHw2FBHVpGVEw9FDRcQltwLZHgE/9p7Gy421XMKumdHQKzIKBPx4BK9f6ubSX0H0JTuO9IMZvnLvS2w19ACKASjDWpEwIe4UvN0Ts/cXhaWjj6UwN5mGnmDgtcTbY+506apNqkfL+TbVZ9pHOoJvNNDd12jJOgcB0ZKzYqXoxn9zoLtuZ/713/TWt1AwJK3/HpgdJmQ6SjvWJO1vXdBgnKStAFaQ9zExghyVynbMNVqJKJoJtOWU08IYpd0J0w1CKqvs24k8reWAuZjjFmgVZXkE+ibgbknXoDTPmTtX3cbDfonVL7pNwwYAhpRp5cradtVW5B3rxQBJu6oPwUGs7XAAd0SWpB2WvM9GCgV+2TIgyRpHi0QwLZgWInrXT56hWlVGeoxUWTTD1fqD2sW3TpMLWPXw6tDYulOMhV91dEZeR2BLYNojUYwG42Sc+vfmk5ZAWXezgM8Tg8x0J1qE6lBXdiB+oWVAAVeJ3Ytctx8eNaLi5QFvim5jAMCfGq3ikLpOeMq66vK/3p1odZaxCeGJb4eZdvMC8dL/9yCr/tvVIjsjDl8BWUaDBZIQtRCgNQ1BqH0wmda25wIgTwSbe6nR9J3sCNBWnPFxp8P3CfDfw0qec7tjfky1AATfJ7djCEbgIqM7mwYH9f2uhSgWlfA5v0+WeslhgVZ4YmtSs61tl3hMfcqWwjZcErkyhu/iN 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.76.144; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1769539590717154100 Content-Type: text/plain; charset="utf-8" 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. Signed-off-by: Mohamed Mediouni --- target/arm/hvf/hvf.c | 72 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index 77ab56778d..55c21aa740 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -2085,15 +2085,83 @@ static const VMStateDescription vmstate_hvf_vtimer = =3D { }, }; =20 +/* Apple specific opaque state for the vGIC */ + +typedef struct HVGICState { + void *state; + uint32_t size; +} HVGICState; + +static HVGICState gic; + +static int hvf_gic_opaque_state_get(void) +{ + 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."); + return 1; + } + gic.state =3D 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."); + return 1; + } + return 0; +} + +static int hvf_gic_opaque_state_set(void) +{ + 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; +} + +static const VMStateDescription vmstate_hvf_gic =3D { + .name =3D "hvf-gic", + .version_id =3D 1, + .minimum_version_id =3D 1, + .fields =3D (const VMStateField[]) { + VMSTATE_UINT32(size, HVGICState), + VMSTATE_VBUFFER_UINT32(state, + HVGICState, 0, 0, + size), + VMSTATE_END_OF_LIST() + }, +}; + static void hvf_vm_state_change(void *opaque, bool running, RunState state) { HVFVTimer *s =3D opaque; =20 if (running) { + if (hvf_irqchip_in_kernel()) { + hvf_gic_opaque_state_set(); + } /* Update vtimer offset on all CPUs */ hvf_state->vtimer_offset =3D mach_absolute_time() - s->vtimer_val; cpu_synchronize_all_states(); } else { + if (hvf_irqchip_in_kernel()) { + hvf_gic_opaque_state_get(); + } /* Remember vtimer value on every pause */ s->vtimer_val =3D hvf_vtimer_val_raw(); } @@ -2103,6 +2171,10 @@ int hvf_arch_init(void) { hvf_state->vtimer_offset =3D mach_absolute_time(); vmstate_register(NULL, 0, &vmstate_hvf_vtimer, &vtimer); + if (hvf_irqchip_in_kernel()) { + gic.size =3D 0; + vmstate_register(NULL, 0, &vmstate_hvf_gic, &gic); + } qemu_add_vm_change_state_handler(hvf_vm_state_change, &vtimer); =20 hvf_arm_init_debug(); --=20 2.50.1 (Apple Git-155) From nobody Sat Feb 7 04:47:24 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=1769539587; cv=none; d=zohomail.com; s=zohoarc; b=KkceM5X3sCXrrS6HCmMC/WKFq4lJ6877yFKhdlfG3P4BLnWdRojtSmAJ0OrKrNwJdooM8zpWkXnrYBE/UtpIlAm3K2rPJNy1oor73XirfE9C1PYc45bimJww+aLYrhIxewP8Bu9R+WJ82AeI3OB///3ObXv40QV2Kv9S31RIT2E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769539587; 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=0UYhPe2L2E2DORUUl57pMd+m3j/x5QVXXdWm9uEXuTA=; b=g11DgvD02msVSbZuLVLZG707cKtxzIi/67pnVilp3/G/RhCtGj5IhbnbwdguZG1iglcMYC/XABdhwJXwPvWUEKcam+Wk7I+Fhb+29PmG9bve/G/VrdTtZEwo7KVEXO9/02ZOqLiwS7U1HO2DWIq+RDCgfiTz/PViLIk5Ei4ZwB8= 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 1769539587253221.95777880476862; Tue, 27 Jan 2026 10:46:27 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vko4w-0000pJ-DT; Tue, 27 Jan 2026 13:46:18 -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 1vko4f-0000TW-5X for qemu-devel@nongnu.org; Tue, 27 Jan 2026 13:46:02 -0500 Received: from p-east2-cluster6-host7-snip4-10.eps.apple.com ([57.103.76.161] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vko4X-0007cl-6K for qemu-devel@nongnu.org; Tue, 27 Jan 2026 13:45:54 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id 51285180013D; Tue, 27 Jan 2026 18:45:36 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id 0316E1800675; Tue, 27 Jan 2026 18:45:33 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1769539539; x=1772131539; bh=0UYhPe2L2E2DORUUl57pMd+m3j/x5QVXXdWm9uEXuTA=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=HKFrCDOn2ojsPWAqoJycC5IAOl7vWC7z5rrBaieKQGzxCfSpQhjuPUyMo7WTW5/fnOAvpl3bwO808z/92PRUYaRt2DdBqingbBK4IXjOMYTqmgAkc1OfYgWfm0yMgS5M0XtCNkr4I/noDaZ0JkYumeZAtbKhKJlMc3hmkdN2TiTO26h1RN6oOUbBdIDMFCSHNyWrWrTEvWJgl/sl4KHtUAHk3RvOLVCePzVY2qwKjRKwvCrp1DyffxQW4ustH2jdetX7syK8YE2IW3XyQn8KfVjpLRXLCoY2VHlLQFMEVsep1DsFn6P1xYHmPEi8lEO/WdrQOjCnIEypqpgtYvfQAg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Peter Maydell , Alexander Graf , Paolo Bonzini , qemu-arm@nongnu.org, Roman Bolshakov , Mads Ynddal , Phil Dennis-Jordan , Cameron Esfahani , Mohamed Mediouni Subject: [PATCH v9 05/12] hw/arm, target/arm: nested virtualisation on HVF Date: Tue, 27 Jan 2026 19:45:16 +0100 Message-ID: <20260127184523.5357-6-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260127184523.5357-1-mohamed@unpredictable.fr> References: <20260127184523.5357-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: WRJzNoRtOWvh5fuPJH336cSPQKLP1tCl X-Proofpoint-GUID: WRJzNoRtOWvh5fuPJH336cSPQKLP1tCl X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTI3MDE1MyBTYWx0ZWRfXzCVDh2ouQ5MR xVOxc6Sm7cllvRGlF37zldG1UnuKWCVuZ1hnDQR5epUHp5zffW9GL6Ppt4kCDXuFOYogBwjppFG +noBRG6/5vxlJwIB7AQEuDPTqAX7Ohk+Cg+DNxvOU01LUv8G5EvJCQX2wNyhvf2FwRUtvAk4W+P gbRMI5DY3jyXV+/tuT8cFkO4MXm353C3/Z5cI7faJxzTcqMMXxfahZgurmkkSOQZon+EleFjeCb CEJGXpCwLf5iQigE6v0U2Chn4uElIMEVUyeqKAJBDAK+j0Y/tyCWAjt/PAPHDDJXoS15l3cmMB3 QIJ2wyydxld+sLdUcPMtdM5HZOHl5GWatVmWyv2REB8aCSYba22cRBEarb+JYU= X-Authority-Info-Out: v=2.4 cv=ZYoQ98VA c=1 sm=1 tr=0 ts=697907d1 cx=c_apl:c_apl_out:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=YLAFOksV-_wk3IE7wuMA:9 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-01-27_04,2026-01-27_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 malwarescore=0 lowpriorityscore=0 mlxscore=0 suspectscore=0 clxscore=1030 bulkscore=0 mlxlogscore=851 adultscore=0 phishscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2601270153 X-JNJ: AAAAAAABeQrysiMOb00CoyfEPSbiAEMxtEe4a0wykkz73fCNOHfdnVzj2hkp60OXJnGzgbe5d2whKn/LR2McjEpP3BGFNtQ7+luZ4ZKR9vCFYT/DtYQtkiALiZKVXv/x7OemgNp49GX9Jd8pxE+x1DgQQPXGQwlYLf3wpcrDi1oODrp1Eo5m7++HPsahElNGsV0pGcEpylgzrdqffcCAeq/NVFIf9e+Nm98Yr6DsE0Of7rMDEkRV/fKHVirtTsU11VtPlrxdbTBWpPunCSxVZWXKTqNzRgaDkArf3JR5okv7jlNyF4+Z2rq40a0I6jo7+Vkx7ENYQ63KWrsMdC2aNzNIDPYfz/eYN+8ESfd+R//MdqcL4Bn2Yeth+RqhqeqZMxh5RHzyzfKes/43LnLRWyMKcSnJ1tAxavo+YpE2OUXy1OWgFcpQBA4nrXQZ7JPOVaKJ0YR4rHXrOrMSIY0wT/ik9X0SQoTYJqyJ96gvv3geeAk2dLbVB7yKD8ZF59TeLUplCgzj+zRsYCns88D+5sJo9EsarZVidntx5HGeQOVxKqhqT5HTlD5/mqoiH5vnvgndx1FWyQ6Te+UV6dZLLZBGBpYTjlzoOHeqWnVdCZXrPRta0BpkOVxDFRaFHBnNDOvU7m9L7/LV8Fw6UaNZl85n7S10kHaXfXceuRGwqTxBEFWGtpBbPtuM5YUUhoK0Q4WVyC61WRJvtwX4 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.76.161; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1769539589157154100 Content-Type: text/plain; charset="utf-8" Signed-off-by: Mohamed Mediouni --- accel/hvf/hvf-all.c | 1 + accel/stubs/hvf-stub.c | 1 + hw/arm/virt.c | 5 +++++ include/system/hvf.h | 5 +++++ target/arm/hvf/hvf.c | 36 ++++++++++++++++++++++++++++++++++-- 5 files changed, 46 insertions(+), 2 deletions(-) diff --git a/accel/hvf/hvf-all.c b/accel/hvf/hvf-all.c index 929f53fd37..88f6d5accb 100644 --- a/accel/hvf/hvf-all.c +++ b/accel/hvf/hvf-all.c @@ -25,6 +25,7 @@ =20 bool hvf_allowed; bool hvf_kernel_irqchip; +bool hvf_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..cec1cbb056 100644 --- a/accel/stubs/hvf-stub.c +++ b/accel/stubs/hvf-stub.c @@ -11,3 +11,4 @@ =20 bool hvf_allowed; bool hvf_kernel_irqchip; +bool hvf_nested_virt; diff --git a/hw/arm/virt.c b/hw/arm/virt.c index d82fe10934..6ba7d6a6ef 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -2651,6 +2651,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..0f0632f7ae 100644 --- a/include/system/hvf.h +++ b/include/system/hvf.h @@ -28,9 +28,14 @@ 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) +#define hvf_nested_virt_enable(enable) hvf_nested_virt =3D enable #else /* !CONFIG_HVF_IS_POSSIBLE */ #define hvf_enabled() 0 #define hvf_irqchip_in_kernel() 0 +#define hvf_nested_virt_enabled() 0 +#define hvf_nested_virt_enable(enable) 0 #endif /* !CONFIG_HVF_IS_POSSIBLE */ =20 #define TYPE_HVF_ACCEL ACCEL_CLASS_NAME("hvf") diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index 55c21aa740..e239f47e15 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" @@ -771,6 +772,10 @@ static bool hvf_arm_get_host_cpu_features(ARMHostCPUFe= atures *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]); @@ -878,6 +883,15 @@ void hvf_arch_vcpu_destroy(CPUState *cpu) assert_hvf_ok(ret); } =20 +static bool hvf_arm_el2_supported(void) +{ + bool is_nested_virt_supported; + hv_return_t ret =3D hv_vm_config_get_el2_supported(&is_nested_virt_sup= ported); + assert_hvf_ok(ret); + return is_nested_virt_supported; +} + + hv_return_t hvf_arch_vm_create(MachineState *ms, uint32_t pa_range) { hv_return_t ret; @@ -889,6 +903,18 @@ hv_return_t hvf_arch_vm_create(MachineState *ms, uint3= 2_t pa_range) } chosen_ipa_bit_size =3D pa_range; =20 + if (hvf_nested_virt_enabled()) { + if (!hvf_arm_el2_supported()) { + error_report("Nested virtualization not supported on this syst= em."); + 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()) { /* @@ -1039,6 +1065,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. * @@ -1060,7 +1093,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], @@ -1114,7 +1146,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 Sat Feb 7 04:47:24 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=1769539719; cv=none; d=zohomail.com; s=zohoarc; b=BgtgIf2y0ewvhYowpkeeYqyrziIvsebKQCwsj1ny/CrT3lug7cF6Nb2hbMs8h0CysbN5PEiCynsUvho5D/ZsE+47iOyDYx7MPLwffxDhxyG4k6NuzXuwZ64SLBVKQ1Kd2qXfDL2ZaDCSAeV9eNQzweP3GwWJcHgwkoygKzghDWs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769539719; 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=bTIsRao3N9RI3/RDN6YvSt0GamrXJ2tFOWzM4Mi+H8s=; b=aWcuGL2EIJZlsq4xgvu1m2CuUdfPCwamcWVasBa8mzXJCYdZP2R2fapJEuJTcXXF/BHgAR+M4AdQPUgQwhYzInXI8k4ufuyvfQZAlZq8h6e9Gs4WUCfxb8tgWyefFJ120Igc9kK4LvnFHEfqMv5hYJT6Wc2blPE52oej3kA85BM= 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 176953971919597.65970748396194; Tue, 27 Jan 2026 10:48:39 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vko4y-0000tt-9i; Tue, 27 Jan 2026 13:46:20 -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 1vko4i-0000WP-Go for qemu-devel@nongnu.org; Tue, 27 Jan 2026 13:46:08 -0500 Received: from p-east2-cluster6-host8-snip4-7.eps.apple.com ([57.103.76.168] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vko4e-0007dE-TZ for qemu-devel@nongnu.org; Tue, 27 Jan 2026 13:46:03 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id E390E180066A; Tue, 27 Jan 2026 18:45:37 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id A9E10180012D; Tue, 27 Jan 2026 18:45:35 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1769539542; x=1772131542; bh=bTIsRao3N9RI3/RDN6YvSt0GamrXJ2tFOWzM4Mi+H8s=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=LvnkMQt4j9TRtQUqBplPrECFzvKkhs9gjJADD+BcPfz12z3j89taKclMxi36xIPMp8FKCI9tBUHe/vxG41m+Dlwezyp18jhVi7rwL5Rd/VQtdyWzD9mCXk9fr2NECwdWjXBbZROYvPJTuGmxXmAErISKxW/pkSzkLjXTbA4XQLXX9vwZIIU5ttHhNuNvEpqzmGQmSYIzcfptoJH+14eMSxT+dC5jWHbMlQ4uAcxpFAmDPBgdOWEkltRaYSQRNhbf7W04KJTRRbRcQkvqq4zlKKOMN2AkuZaYlo4DVfh9sEyZjQM0fQY8hymNUhb5kkrzwUCmx7iz0CHG7x/d7BsyYg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Peter Maydell , Alexander Graf , Paolo Bonzini , qemu-arm@nongnu.org, Roman Bolshakov , Mads Ynddal , Phil Dennis-Jordan , Cameron Esfahani , Mohamed Mediouni Subject: [PATCH v9 06/12] hvf: only call hvf_sync_vtimer() when running without the platform vGIC Date: Tue, 27 Jan 2026 19:45:17 +0100 Message-ID: <20260127184523.5357-7-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260127184523.5357-1-mohamed@unpredictable.fr> References: <20260127184523.5357-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: UyzNVOiijmdfsq49cgyhYgTMe4Eyi-7k X-Proofpoint-GUID: UyzNVOiijmdfsq49cgyhYgTMe4Eyi-7k X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTI3MDE1MyBTYWx0ZWRfX6wHLVDoWKEjr OXdzMKDZg0bYKxtUkBLas3rbAlvgK2FiwBi+3qnbDed0D6ImdbZ77dZGvvK/AVUNLTnQCzbg8Re JFVTQhqCsOpZeLcd7NOgVcR2FP6Zqd/v301TucVU3cuPfOiH38LxrWXPzmW1pm3w7qDzrWEi4Rh oGOKPYPdUeUnauPg/UJTeEwWyP99dWkYJ3WE2AMi7+rjzjGw1VWDubGfavL/1WVFvQS6P/APDXE tN4ivLnms9B+oBFY/DCK8FzNy89A/DVUf/gEygAFJUoHM2ZooQtObBPANmpoZ8LFPxMfNQ1Tyit soXiwuUaZnwELjslvyleEXtWbggLNe5X4fDGZM+T7IUKrWwlLJbl75q5IS6ByY= X-Authority-Info-Out: v=2.4 cv=ZYoQ98VA c=1 sm=1 tr=0 ts=697907d4 cx=c_apl:c_apl_out:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=PzQS8Z__MZ2uSZov3vkA:9 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-01-27_04,2026-01-27_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 malwarescore=0 lowpriorityscore=0 mlxscore=0 suspectscore=0 clxscore=1030 bulkscore=0 mlxlogscore=892 adultscore=0 phishscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2601270153 X-JNJ: AAAAAAABdYwbd4l//7jUjjIljZ48CqjpN5v2KIxfV/4vF9JU75jL7sEFmqcI8Wqi91YEi3+w5G0gAkA2h6Yn/GRZoRhx3r+eFAV1QabqJ0SlyIuU5IZfV717605HiYp6/d78ZV1KdvwzZegUrBfmC4qC1ncut8IyCq6n1K7Grw7XoNqVRnZkzyho0AnmSwCbjfCGrxok313AkFvgzzRH6V0fEnhlmOCVeSAiTyH4FAGSzQ8XS/pNJAWRmH4mcOB3/bq11bT1XZjC3j3HfKIWi+/Yt2FBjYrclePga+s9zGbwF2urbhC99d9OxX5I8+n4QLq12XExHh8HXRvdBhjyVfGBnBa3Bb5vfoVImz50snNIsQcEgeM96RxAVzJ/zpQoPqQLw5/Ixzue2aBBR1AXlazlIlOdQZVR/VQcRyLtUd87zKW6ryZPEZzKWDov7K6NgWycU1oLw4/Ss0j4hZxhE30NJrHyc1H5+Ld0ydYMgA28fckgJRLCboxCl25dNVOc9QCuqNT1XKEHDKiHcfhIfQ8B3seLej315+gWXlUWDICAZ9jEg9Z0KXs4TCqFxBClVV0uPYekMGRarVjMMGGxIjP4/luW79iHmYFf7WaWKic1MhJAVy4rfQErb9Jbx10j9ipo8O8XM/e26mZLbghP9Ma82m/jqkb1XIsU4DQlAP7log76nqQ3jkwQmgD9PQdnZT4dHb/ih6DJlQ1Sr5VL69NrVSUR8YO1 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.76.168; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1769539720690154100 Content-Type: text/plain; charset="utf-8" When running with the Apple vGIC, the EL1 vtimer is handled by the platform. Signed-off-by: Mohamed Mediouni Reviewed-by: Mads Ynddal --- 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 e239f47e15..9dcdff685b 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -2052,7 +2052,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 Sat Feb 7 04:47:24 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=1769539720; cv=none; d=zohomail.com; s=zohoarc; b=FgK/V5nSAS+0WFdcfEUte3KpvAlU68cBEE3PbEb2LfDku+y20KBf8J8M2dBtldLNEtWWGs60J1QSH7SywaLXP8MkDLZQtMbo2mQ61nLU9HkaKYd7fnMb7QOxZHI+NBkb+E445R7t3kQmSwGlUwpfJMWFjFtZbE0j1e/2ltE7yZ8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769539720; 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=b7kCF0v73NAIBglHez4ObmnFhfyHMQtRmfY1TpbGWrE=; b=AGhtbhM8CVKJj+mSlJ/l/npfiLYZCFyrCmdpCr1IbOKyncqGRGAQv7oJ7khGwB1jcq3cTrbFGpugTdSSQKnZlDmP3G0f8vtY/qhDkULA8gkkqwDep2Nl9JAsKayHn44E7LpS64Ej8LZFv5/r6vbGf3w6A9PIX7YkQPl+k9IFteY= 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 1769539720051359.7018724554139; Tue, 27 Jan 2026 10:48:40 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vko50-00010g-7K; Tue, 27 Jan 2026 13:46:22 -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 1vko4f-0000Tc-Cq for qemu-devel@nongnu.org; Tue, 27 Jan 2026 13:46:02 -0500 Received: from p-east2-cluster6-host11-snip4-10.eps.apple.com ([57.103.76.241] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vko4X-0007ck-7O for qemu-devel@nongnu.org; Tue, 27 Jan 2026 13:46:00 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id F24B01800646; Tue, 27 Jan 2026 18:45:38 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id 3A8AC1800648; Tue, 27 Jan 2026 18:45:37 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1769539539; x=1772131539; bh=b7kCF0v73NAIBglHez4ObmnFhfyHMQtRmfY1TpbGWrE=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=IRuG0I13SedHu40kU8+mRoxwnVtSeU+Ijfd+lcpfImohNxlGqKBTSzLV+9o0I9bZpVnr6iK/BoXCCdY+LM+pZvNWTP6pqOi3iRgb3+wJgM9P//r1dwF5HMkbdZlTymPbxsPu14QWGpE3a7rB0QnHJbjpWVWq6wLYfIyO+C7o4ebT0HUYrCux74rvbKlvNCJwPBwI4OmousV5GdrLAqQVPGH6cbiDB+vs4Jv1Jibg0Fu316zI680icI2bSW+mHp0/01mZlw+y8TVD5er7ydZVs9+cp7C/3P7x3Jja2me1Humm1X++fR1E0bNenrOGtVPgAKxVzt7/5bbdwPlJ9FdS4Q== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Peter Maydell , Alexander Graf , Paolo Bonzini , qemu-arm@nongnu.org, Roman Bolshakov , Mads Ynddal , Phil Dennis-Jordan , Cameron Esfahani , Mohamed Mediouni , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v9 07/12] hvf: gate ARM_FEATURE_PMU register emulation behind not being at EL2 Date: Tue, 27 Jan 2026 19:45:18 +0100 Message-ID: <20260127184523.5357-8-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260127184523.5357-1-mohamed@unpredictable.fr> References: <20260127184523.5357-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=R+cO2NRX c=1 sm=1 tr=0 ts=697907d3 cx=c_apl:c_apl_out:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA: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-ORIG-GUID: U4sAfxjMsPg4J0DxfeoxLypA4j6Ez3YJ X-Proofpoint-GUID: U4sAfxjMsPg4J0DxfeoxLypA4j6Ez3YJ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTI3MDE1MyBTYWx0ZWRfXyuJ3t02g57RG /OlEr0Vv4BVAXxnWIbwT6MKLK5SXyrvmSpC0ksWHBbWBZDo8Poq6ZdnuA21dUuokIJ28RANr24p Z1lGW4nlZRp56kJcxf20zjS3QYw7tb/PSXrIPOC6UoyjCA73p7/rVOUnXV3ckrW03oMvMyjrYZY o3Q6l1Lti6xQMilcGM9CumOzZmmJbqclQwmWc2D1JpL3V9T35jEgnmuWzxAhKfWEg+5xusZxPOe IjalrdNz+Wr4oYXeSn9hWzvTOPGTUshKj4ffNGJVIlcbSyn5mlW3jejdTEpiUxvCrQKHcEMfcnn DK8P8AkA12SgkWII073VWSdiZhQuP8HoXNReqpNdF8AapR5B60L3GGuyfQoUEs= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-01-27_04,2026-01-27_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 malwarescore=0 bulkscore=0 clxscore=1030 spamscore=0 adultscore=0 lowpriorityscore=0 mlxscore=0 mlxlogscore=806 phishscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2601270153 X-JNJ: AAAAAAABx0dvoA78dwsfAVnlORw0cofbsJJGDUqSIkUoZQ475y21Z3TRtJqAIYiNgwUurfQT3W/DlJl/3HV+M+bmxZT8eP/5L/7oaV0cccEyDuwmxZbTmxYwel7UN1wAicyqRaMsfAvlDAC6BrM9st7oRjBSLFR9ctUXVrc1tJpOlP4dTa8cBzLYprzSlQHCYYoyZ5qU+1J2JaFPhJAMJvytnuOkB6HPnoKDyep6I7EqfyiIFRoHGUSFmY+WWBPsLnPVuOvtyfybLpf3VjJeo5BgqSkkTTYpmYXXCq+Us+8ntJVAzd2SlVVPV2Y+M8G81D97X2x53SZMfjHM8SstgVmM9F8lhVnRxMgG3QHGOcn9ULNtAsZ4x6VKu+W1qCHPPSrGwDHS9IcPQrkTI+brUimh8OPCC3yrwjZw51VPNUm8orypWFnGvOQqQGHhwxJH42pHxa1tcrBZMOacUkw7PYQPCK542+ZvGwkO2MJECxU9D6NmCBJeJ6EQhyJTmOmoct1mE/fQ1L2CsgRWdIP3JL+VDhHa1C8Iehsl5tijyEENtzf2wKN/jVDZpY7y1rwBDQiOhYdXMuIehBG65VmxHKRvOyjnk7RHjx9ygQ/1ZB2qB27QnPHA7KsuaHeJjDo9hwLYXv4oK/RgYXri+mVSXJAHe8V4FjdA+91klo5YiIqfYAYACKlBaAvjxqlrv9GTFo6yuIwiCrLxDxKU1WHjLdvDnurqDLLYgvTok68= 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.76.241; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1769539720838158500 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 9dcdff685b..9cf979d402 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -1254,7 +1254,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; @@ -1546,7 +1546,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 Sat Feb 7 04:47:24 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=1769539727; cv=none; d=zohomail.com; s=zohoarc; b=M0xdLpbfY3O/wG0vMyJ/lez6B3PO/x5RflgusQ4faDkCnXLnU7ndnESQPM2xvE9zlFRF+ItoXI8s+SNx+hBkwQZ39oFER9Uz7BkuXJlm+hybzkyIGQUXUrvUcaRZfeT5CApUVAIPixAoIMp3xBWpfAJxWtOnruDAk2eBJJxcy+M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769539727; 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=P41uTtz3LduPGS25KkekeKbSnm6eE4vUspp/Ai5+3DY=; b=aAfehkut6U+0wXErY517qViXM2mjkIyBNcb5J5OSItogc/rj1JVgLrVlOXbFCilaLPavrrNBvPJeJmqpTam6n60kZa0GPaBl/r33LDtVmhcJr2bmHiJsSljg3VMkKbjIOdAlvhPUWWcG+GLvPkUpX7p4IAi5JnbxQpSg+PCvT+U= 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 1769539727470618.1030372655008; Tue, 27 Jan 2026 10:48:47 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vko51-00013q-Jo; Tue, 27 Jan 2026 13:46:23 -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 1vko4i-0000WQ-Hd for qemu-devel@nongnu.org; Tue, 27 Jan 2026 13:46:08 -0500 Received: from p-east2-cluster6-host6-snip4-5.eps.apple.com ([57.103.76.226] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vko4e-0007db-UA for qemu-devel@nongnu.org; Tue, 27 Jan 2026 13:46:04 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id 552A71800662; Tue, 27 Jan 2026 18:45:41 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id 07C0C18012C1; Tue, 27 Jan 2026 18:45:38 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1769539544; x=1772131544; bh=P41uTtz3LduPGS25KkekeKbSnm6eE4vUspp/Ai5+3DY=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=LlkjvKF6KQ2gkOvJbq5ZwgT7nTPmZ/UJaRZ1EBpAee4vAt0RoQVlNlxDLmlrPxjoE7c/H0Ssc+l8FKbOg1hvcmyq8jpmcDlasQSlOXJNdr7fLnIiCCtV1l/zcFRhcDSjNxQwFi0yOB8IfShnhMrGXcj2UsJ1PjD1Kh2k2qDGUwr7lO5chnlnu3vrXCD2jyUpucJ2tMpvXlyOXhfswcmEe7XlROG3BKKka9pvmE2v2R2biuDSoyBp0Yiu6NIlNhR9TK/gZkBwjmre2O/NMurO9/4pdrhWyOgqGGGEioYljR5RAh8y2hg7QxRy0pkGOLYK/0L2ufhUYSi+Z9fBf19+Sg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Peter Maydell , Alexander Graf , Paolo Bonzini , qemu-arm@nongnu.org, Roman Bolshakov , Mads Ynddal , Phil Dennis-Jordan , Cameron Esfahani , Mohamed Mediouni Subject: [PATCH v9 08/12] hvf: arm: allow exposing minimal PMU when running with nested virt on Date: Tue, 27 Jan 2026 19:45:19 +0100 Message-ID: <20260127184523.5357-9-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260127184523.5357-1-mohamed@unpredictable.fr> References: <20260127184523.5357-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: Jp6dSiMzh7a-M8bPkFDmE2p5iiY_e5kw X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTI3MDE1MyBTYWx0ZWRfX0qQDemtyMzqK 2Rfjv3hsseSPHTAuF5xmaZA73zTujdMh1NsaaHpTZV3DFKlkkh8eIFK645dqLgw5BMCTn3wlijU o6aBxT+j2E5VCCDnG0BIPI3BSN3OXENXrIyH0Vvc0B7S/yYVZpIUadGxgoxKo/QLJqJUnpf68Zl r8imh7nLgXo4UaI8Q8K8QuO8HdI0fTT/jjAn34jgP/4i9sQXxHsRo2PDzS0m3Ek5Rg5MRCyfqWv cuTCIhog5/UyFfQjvaM8a6PgCNsmsAGAtSK/aXxZ8+y0vbWV1m2W/trI2riOdQXqbVdDvU0hvOA RajGlAXa+jBSb1RnXlHxFqmg4hNsYP9KhKDINg2vViG57qt26VAXYEKiPGmyJA= X-Authority-Info-Out: v=2.4 cv=R4kO2NRX c=1 sm=1 tr=0 ts=697907d6 cx=c_apl:c_apl_out:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=pMrQYBbJY-ED6Z46rXwA:9 a=NqO74GWdXPXpGKcKHaDJD/ajO6k=:19 X-Proofpoint-ORIG-GUID: Jp6dSiMzh7a-M8bPkFDmE2p5iiY_e5kw X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-01-27_04,2026-01-27_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=678 suspectscore=0 mlxscore=0 bulkscore=0 adultscore=0 clxscore=1030 malwarescore=0 spamscore=0 phishscore=0 lowpriorityscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2601270153 X-JNJ: AAAAAAABnlGCVJqckcaISO3p7Au+SAgS3yu19YIsIJlJ5VvYfa+ExnW3cas5dx5DqIvTfIM635IP9X1dhAUt/iDoSuofODZ2rqnNQsQ+6gVNHicKIsZsaUwVnACIQm7B+iqNUHsR/nB6c8gpICZfImizSz0Oy8Ssy5eFbChXU869UWx6p0XxH2XSbsD6Eg/GFdWR2f7XoKlE/ZIhRctVX0UeYpd6BpWPglYMUqhVUxEYWEdnxO8d5ynFZv+sF+8SCzNRJsMdGjXzFE9+9XWF3NdmYl90pP3ObaKb5neiPfHGbZCIzPYTZ41f1PYlTyNbych+A7jSdwZY6wHnDqE5FStF3LzzfO/6B0DBB1SOhs39fb6NarIS1SDqqEEUX6vXJsROX8+kjdirhA9jxaztkujm8QgGb6dwspbqv/XYj6z4v6dP2G/oxCNv5G37pG2d8/vLGSKPJl1WFOlCG+pAn2qJlAkUkK3wKMnGnRAz9jsOapg8DSMqpGCgHsrvSIL/ird4yUZ/TSgzRRP1uBTUFSS67qXP2U35sRJ01pYCkYKhRQ86sg6uhZUPe17ts+9Y6M3TU8gqKnohz6vKA0011h0ZkhzAJgnuCJg2aHk5o5jbtT58IxiFrKE1Nn5tGZmvth0GrSicARh+yq2mdbpGy45EpICdpOBPrIdFuS1HjD0c2pDVTrgJLLvTAdhOwdrV1M2HJblQolJ+7t2FmTrjbr6oexcXvWxB 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.76.226; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1769539728750154100 Content-Type: text/plain; charset="utf-8" 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 --- 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 9cf979d402..7701d250fa 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -808,6 +808,10 @@ static bool hvf_arm_get_host_cpu_features(ARMHostCPUFe= atures *ahcf) SET_IDREG(&host_isar, ID_AA64PFR1, GET_IDREG(&host_isar, ID_AA64PFR1) & ~R_ID_AA64PFR1_SME_MASK= ); =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 Sat Feb 7 04:47:24 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=1769539629; cv=none; d=zohomail.com; s=zohoarc; b=Y6MX+uAW0lsdmKwlxNwsO2BnwpmU2MVYN+plJ3ZaDP5G+iLc4iHlohiywCt5WLDBm3FZprpcCn1Zmp0/pgSkJ9FDDzuXINSFppOkMYQOMGAx6QiPLouwGHmXWAu8Gjb5jOg9Y4CO4QfU7EinudBXlJ152l4CPi7VF7NPuThKttM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769539629; 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=AgHjuAWT24LVcmNDUBGquSAcsj+ZgzEt7b/O22tXZvg=; b=EtPB9tVnlYN5KjWGn4I1As+EW3M2jow4J9SHToWzuCQ92A3N38DnfGYRNEr8XGsMMCak+Q12/V62d+TjieW6Vtv14UzVYFUDnkWYoMBang8/xaI7TCY5Xymnmr1eLN8LyMbCBQD8biOGxbEiJ8I0cxjvl++fnqFYvKD0Ii1Jmqg= 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 1769539629475243.58128144186742; Tue, 27 Jan 2026 10:47:09 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vko4x-0000ss-Fr; Tue, 27 Jan 2026 13:46:19 -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 1vko4f-0000TY-B7 for qemu-devel@nongnu.org; Tue, 27 Jan 2026 13:46:02 -0500 Received: from p-east2-cluster6-host12-snip4-10.eps.apple.com ([57.103.76.251] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vko4X-0007dq-6i for qemu-devel@nongnu.org; Tue, 27 Jan 2026 13:45:56 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id 0CA3618012CD; Tue, 27 Jan 2026 18:45:42 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id AD54918000BF; Tue, 27 Jan 2026 18:45:40 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1769539546; x=1772131546; bh=AgHjuAWT24LVcmNDUBGquSAcsj+ZgzEt7b/O22tXZvg=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=Hy6Q37i6dtklSBEu9eNISTf2o92ctSOmk8yB8/xdm3wLciZdSUAzYGe5YpKZpiSsW5g+du2m+UEVFCWx2YWfWGIeB3M2BR0CekhXi8GRqqFx8ZjUspesMBlxwzt1wXU7dgVofEj6qoPS6idq2aY7oynC7tHtTU4yT1tevvgQKu7G80I8mHNOOWqwTnCmxIVJHfrCGGvkFGY94MeieTDI4TuekQw69x/NnvENRVAn/qhJ2EI1g6k+a6HPg0tJhzQK3ScpC0b4NvJtScgTrMuKs2LCTGbwbXH/tnGuUbLWvyudR6z1CFiHmzY/oS7pT1FY35g/dA3zQPhHr+gfkxtqOw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Peter Maydell , Alexander Graf , Paolo Bonzini , qemu-arm@nongnu.org, Roman Bolshakov , Mads Ynddal , Phil Dennis-Jordan , Cameron Esfahani , Mohamed Mediouni Subject: [PATCH v9 09/12] target/arm: hvf: add asserts for code paths not leveraged when using the vGIC Date: Tue, 27 Jan 2026 19:45:20 +0100 Message-ID: <20260127184523.5357-10-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260127184523.5357-1-mohamed@unpredictable.fr> References: <20260127184523.5357-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTI3MDE1MyBTYWx0ZWRfX8OErG9yO0ZZm k+yzGNVzs5p7RawkdM4xvo8+F3o/UBkurIJyXVInBow2QZoEQIRmBF/mTA0+Y+P1xarpbZz1u2Y NJoqz2YsqZscVcMnvIjp+nLQncR9sItPvx+wJgRG0RQuW/8gx39Zom0550emAVZqMWyrD7F6lMp VHVLrm+2eqvovdQLwYUWoEkcai10FI+1c7x7pxYu+2NcjcqHuelw3opftLAu+QiuP0BwEKOs/yN IYtWNLr0iffhcBmkLqCxFREuA1Ub4j8CpHU7zw7cnvUcSO9fjrE/EErC1jHiauI+oUmyZlaZ7VC 4RoWNLUlAc4gXFcJRGHymwmafIqdmf9SJMGH12KWCHSrCFMFZ/jeBjggOPdBLs= X-Proofpoint-GUID: MtgpCHzZHzvcC3eJ0wAIEooo8GHBJuTf X-Authority-Info-Out: v=2.4 cv=R8kO2NRX c=1 sm=1 tr=0 ts=697907d8 cx=c_apl:c_apl_out:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=vbFX7M0ab_H1AmF9bzsA:9 X-Proofpoint-ORIG-GUID: MtgpCHzZHzvcC3eJ0wAIEooo8GHBJuTf X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-01-27_04,2026-01-27_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 lowpriorityscore=0 mlxscore=0 malwarescore=0 clxscore=1030 mlxlogscore=520 suspectscore=0 spamscore=0 bulkscore=0 adultscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2601270153 X-JNJ: AAAAAAAB7m/x1x/7lUgL0TA1+6+/Sz3fmBgCvyu7mtWkjY5GKBu9Ei9VgZpDgUi17G/BcbA++aj1C8KrppdcnWMRwWJA2TLO8g6TjFLfsi2x/M5JV+gyFOBwdjIuZW89L49hVqmh4eFCoWseHb54Q9Po16XyIUTnsOmkVoFSbnP/+yYu0zNe1i/N3oY7QqC/XnVRFqRMcTU1VOKV90Nz1g9cHhtoOcWsHKETrFfM+SWHB6PTNxXKd4Vi7jWLd9ijgIc6sMppHjOrTZkaVjYgpjUs4zzhVl8ZdibtA5WBPnSO58Pm9/OHJferyEtfLAliVIwpr6cdqjqzZRkUxXRSZw7kgCYmNUimGge6gpfuAOjkgvzrseaDY+NORg78M0uDMLwvd7DcBmkvKx3Xk4AMyetbo8rqr3TTdziJX5mIemyg1joCQujoSHeZSOLP4SyWN9Ra/ioKY+em/5UTDskgJEmFJMhkHB5jajY87RfXtVnO2zFNdKYM0CRxy842SAwtYOxIJ35yjhUezUriauGd5i3+vjjlTuxzvZnxtDoxyr9OpDFztHtDHDSZoeMiarGmdFIJcHrFBP0/At86O6M0gn47dqEf6EBoVkGdp6h4JS21hWxRMjxLNB8iigU5knm70W5TWtggYgRALrEa79ttthrLMsB5ttYACZrtDyw7KykxDM1NPGOxhypTp5DsJOEFnbypDdkxDjsfIe+iUxj3XkpwGg== 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.76.251; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1769539630664158501 Content-Type: text/plain; charset="utf-8" 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 --- 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 7701d250fa..4ecd8907df 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -1334,6 +1334,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; @@ -1655,6 +1656,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; @@ -2062,6 +2064,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 Sat Feb 7 04:47:24 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=1769539610; cv=none; d=zohomail.com; s=zohoarc; b=IDPveitur+bmmzokrTR7EPwofZg1FuR9iRSVbD9hdgUeOvuOIpwvTc+zrsvmfQLtLb+bEYX6jIfE8WvcdG0jOmveKgdikE1m3PhAbBbRphlNj/SpheN1cIbM3HO9JcnMb+52Dig6CdOa7x+sLPETgEFrVWrVlc23T2qfiaUF+8E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769539610; 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=rpSFCI+QqGb3ohC4QQ6TECC81hIdPFiycu6b4PZtmG4=; b=RN91WzKzw52r+IDr/wPV1fdHT9O6L9Lmms497fmq8eVtPS/Ysoajc92mSAd7r/UJD6bqdokCYLEzc7x+jvuHwSrjZEzGLxJIp1aEBAGr6ntteCNdl8cNeWOlGWdIyqOb4o/guZbWYuK19PEpyl6xqDswm5NA+XFG5pvmlK3PcrA= 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 1769539610509353.25238075480854; Tue, 27 Jan 2026 10:46:50 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vko52-00018D-SO; Tue, 27 Jan 2026 13:46:24 -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 1vko4j-0000WX-O2 for qemu-devel@nongnu.org; Tue, 27 Jan 2026 13:46:08 -0500 Received: from p-east2-cluster6-host3-snip4-10.eps.apple.com ([57.103.76.141] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vko4e-0007dv-W4 for qemu-devel@nongnu.org; Tue, 27 Jan 2026 13:46:05 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id 874D8180012E; Tue, 27 Jan 2026 18:45:44 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id 6068518021D5; Tue, 27 Jan 2026 18:45:42 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1769539547; x=1772131547; bh=rpSFCI+QqGb3ohC4QQ6TECC81hIdPFiycu6b4PZtmG4=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=XQb9CVZA3RmkxkIlJ1nsPdvQ651FdepLaJKI0vntPBkW8APOjjr/tdvCxRsjRTUDZhk6K8BCmpDWS6eB9MiHLIhnOWajhzLcn53x0OzB51MsemIslOmPozn95KqwDsi1TxVRci+FkPN1K3ICKLObQzTXtWfQKNIAugk5O4PpOJCl7Og7xYHQKJq2svzxZ+AgVfH4KD7zPlTgvRGMbvII9kUwrUJTCzCC/JcLWrwW647yJE6v1XVCCNChC6dl+rA2GERRiPAF67IQAEePmAMiAjHQZkb4UAK7fJrDM8LUFD78N+bb6l5sK30/3b9x3n9Kx2AE/mvoxI7HdtNdEL0rZg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Peter Maydell , Alexander Graf , Paolo Bonzini , qemu-arm@nongnu.org, Roman Bolshakov , Mads Ynddal , Phil Dennis-Jordan , Cameron Esfahani , Mohamed Mediouni Subject: [PATCH v9 10/12] hvf: sync registers used at EL2 Date: Tue, 27 Jan 2026 19:45:21 +0100 Message-ID: <20260127184523.5357-11-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260127184523.5357-1-mohamed@unpredictable.fr> References: <20260127184523.5357-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTI3MDE1MyBTYWx0ZWRfX+Svg/7iuHIsw /Bg00bdUGOCGCf5T8Nre3Qky96sbtt0QajYK+M5e9lz/x77XHGxQbZx/9Wh+nK7B1m58vmW8f7r YytxskKSO0Jz7dhn36iLUjljs/uM0Gx0NChIJbFbTIo0rarmGWxapOcdbYiz2mI1MXBYEgwmB9J TE4N1Td9up0U/2ja6Lkq2vt8H+hzwmvEPCZTYmprKN9R3lIV+Kk2gYQO1cxHZvTM/fUBjJ/NAyt 8E3mFVkkbHpVJF5YVopcjEO3LP8TSXdvFtyJNYf1Z77m5je9rSS+8c9uQn4zzkyfdy8eCBOC8TP PikID1+kmVqOxMu6gmxB+dUYyyiub9j/Zx8IpTqYcMzUGUX6LqVuUEFL3ACJYI= X-Proofpoint-ORIG-GUID: oW307sW_2BDCkgXGabMADBVQCOwWu52Y X-Authority-Info-Out: v=2.4 cv=a+I9NESF c=1 sm=1 tr=0 ts=697907d9 cx=c_apl:c_apl_out:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=7gx8ALrZTGDtSAp3wEYA:9 X-Proofpoint-GUID: oW307sW_2BDCkgXGabMADBVQCOwWu52Y X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-01-27_04,2026-01-27_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 lowpriorityscore=0 mlxscore=0 mlxlogscore=893 clxscore=1030 bulkscore=0 spamscore=0 adultscore=0 malwarescore=0 phishscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2601270153 X-JNJ: AAAAAAABJ9rUaE9a/3mh4Bs0+y9NjBSrUMyRoQ43dL2A78AMTMpy6/BkNtMFqXf8dkj6BDeoW2zO3jXtN/F8XaMlP4PuiyOFlc3+pkHUuknU+iQ5TbXeuE1Q3ErWT+JpC/P3h0+wZx8/mTr+MU54XkcRadIKWJPxQSt30aPupdghs8ZBeIkTEUYS+OfgGxWLbItrtJRoLzS/EjZYjjfOFsHT62wR3QOVEQtd13B5Vp6oaaA3zo4HFjAmoK6HnmxRJIT8LNBqUGdkTpsxkP8Ssh/k4Bk8UtQm819BhWKU/sCr4tdvy15BeTf/HqXdp4Av5x5OZiCbeC9pFN2fPsX2QfT4xzjoQezon6jZPUiIP1oLFND9o+q94eTAZbCHS3urUzOtxSLcDAhH6s31oP5JqpwqglBDwXLwcI8rYE5a5Hy5XJe2QsyVQTRBHNIYJ3Kc/pkg7ZmlZFbVRidEnO9WN8cTErGXFTapXKLZD3w8zYQYYIYG7EpJYULttJv+zDT+ePRhFIqyKiSro64F6M6cIpo7GyPD4dQLFAZeSjgxRJh0vCvFSzPH3ubvCGfcJUSnQmih9ndxJZxOMeT+Kptdkotu+Rw3nR/ZUlVDv7y88z+QIqhZ+l31Tw+XE6843Gk48AP7JJVwzjNHeDRgYUQrIJ2VY15gV98o7Lkwz/W8Dtfhv+GOXnC3OljXZnN0jIODZTZTvkjdDGXwN/uY 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.76.141; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1769539612647158500 Content-Type: text/plain; charset="utf-8" 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 --- target/arm/hvf/hvf.c | 37 +++++++++++++++++++++++++++++++++---- target/arm/hvf/sysreg.c.inc | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 4 deletions(-) diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index 4ecd8907df..39a8b08c9e 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -412,13 +412,34 @@ static const struct hvf_reg_match hvf_fpreg_match[] = =3D { #define DEF_SYSREG(HVF_ID, ...) \ QEMU_BUILD_BUG_ON(HVF_ID !=3D KVMID_TO_HVF(KVMID_AA64_SYS_REG64(__VA_ARG= S__))); =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_EL2 +#undef DEF_SYSREG_VGIC +#undef DEF_SYSREG_VGIC_EL2 + +#define DEF_SYSREG(HVF_ID, op0, op1, crn, crm, op2) {HVF_ID}, +#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 -#define DEF_SYSREG(HVF_ID, op0, op1, crn, crm, op2) HVF_ID, - -static const hv_sys_reg_t hvf_sreg_list[] =3D { +static struct hvf_sreg hvf_sreg_list[] =3D { #include "sysreg.c.inc" }; =20 @@ -981,11 +1002,19 @@ int hvf_arch_init_vcpu(CPUState *cpu) =20 /* Populate cp list for all known sysregs */ for (i =3D 0; i < sregs_match_len; 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; diff --git a/target/arm/hvf/sysreg.c.inc b/target/arm/hvf/sysreg.c.inc index 067a8603fa..ce4a4fdc68 100644 --- a/target/arm/hvf/sysreg.c.inc +++ b/target/arm/hvf/sysreg.c.inc @@ -145,3 +145,38 @@ DEF_SYSREG(HV_SYS_REG_TPIDRRO_EL0, 3, 3, 13, 0, 3) DEF_SYSREG(HV_SYS_REG_CNTV_CTL_EL0, 3, 3, 14, 3, 1) DEF_SYSREG(HV_SYS_REG_CNTV_CVAL_EL0, 3, 3, 14, 3, 2) DEF_SYSREG(HV_SYS_REG_SP_EL1, 3, 4, 4, 1, 0) + +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 + +DEF_SYSREG_VGIC_EL2(HV_SYS_REG_CNTHCTL_EL2, 3, 4, 14, 1, 0) +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) +#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 Sat Feb 7 04:47:24 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=1769539687; cv=none; d=zohomail.com; s=zohoarc; b=fB03gqndIu5I5lkuelIzor9NFu9+RtE/8Kap1c9LEyH2ohBa9Q9E4RQFFzld1yOWd7r11pQoS5sTk5J98mQX4wvnwtxXzIGEdJk4Nhjp+wb0QT+wh7qGhD09EdHZ5bMw37d1LxwAzdJnQSlmDD7t+pSlaDkDu00nGTlM0YM99RQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769539687; 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=+CrvNyqLNT5lQ9RKEp5z/1duGYq7rWnoBtjWjWsbGfo=; b=mLyLFr5YjshecrfKW64r1vFIzlisRz9UY/acobwWkyG/ohE0S90OHvroU+8hesMwEG0P86D1CaLEp5WncFn7/L9wrWJTyCYMOCa86pRD6wU7ReE9fb2thmuXH20uo18+FHoCk4AyZReDdnDl2ZcIFFBVR/BDqdNwgMtfQcWflHA= 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 1769539687174725.7049143857123; Tue, 27 Jan 2026 10:48:07 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vko4w-0000p3-Cz; Tue, 27 Jan 2026 13:46:18 -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 1vko4f-0000Ta-BT for qemu-devel@nongnu.org; Tue, 27 Jan 2026 13:46:02 -0500 Received: from p-east2-cluster6-host10-snip4-10.eps.apple.com ([57.103.76.211] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vko4X-0007fC-7L for qemu-devel@nongnu.org; Tue, 27 Jan 2026 13:46:00 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id 57B3D180012D; Tue, 27 Jan 2026 18:45:46 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id 0CAB81800675; Tue, 27 Jan 2026 18:45:43 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1769539549; x=1772131549; bh=+CrvNyqLNT5lQ9RKEp5z/1duGYq7rWnoBtjWjWsbGfo=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=Mu2uji5M83l32J0GdKDbuU2sux8acntq7GP25NSMH5I0atFqZ1UnkUTr+Jm+yCh0b2V6NjtObaZPZzCn9/po9oy3CDzlM++Xtb/MkFPKbApzZ3IWoVU1VdstuxukEneafa1R2jgJRR2lOrnwBCtjn2YUm6Tz0Nz63YppRjnZLiFZKAC3xdyaU0j0/lpBhK+b4dk7ai9ERHTG6ENL1BMUtVtZ9HSWBCBXsv6Wq6sjTs10M54TNyoE9GUTZSGWRazn35Iu4Dl5atci5tKkYyTGwkr8ELvZhzCgbUyUiN4FM5PQubze8UPkwyZ/roNZF91Tt8GjlfYFN+OBSx0C55DYdg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Peter Maydell , Alexander Graf , Paolo Bonzini , qemu-arm@nongnu.org, Roman Bolshakov , Mads Ynddal , Phil Dennis-Jordan , Cameron Esfahani , Mohamed Mediouni , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v9 11/12] target/arm: hvf: pass through CNTHCTL_EL2 and MDCCINT_EL1 Date: Tue, 27 Jan 2026 19:45:22 +0100 Message-ID: <20260127184523.5357-12-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260127184523.5357-1-mohamed@unpredictable.fr> References: <20260127184523.5357-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: kcw73PcSu-XXvcCz9XMafPGI0oMzjX_T X-Proofpoint-ORIG-GUID: kcw73PcSu-XXvcCz9XMafPGI0oMzjX_T X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTI3MDE1MyBTYWx0ZWRfX8oCMt7N1R/ax tFRmnz8QUNmKz2/Uo3mb7eUzNqFIa5s8lW35tGw49VzNDxlK+fPJAIQoxGKcZ+o7y4xzdkPlc4l eMhOFa3XKXQr28LwXrndgrTGtK7Ej1XdpFpiWHDnNr+VhwChpTaIRUqW0JNYSppwhZ+i+ePWfLc G3V5Fpjz3V3y/vDu/ig12p/bka1vVpS8BRtg/mCt+aoAgUxAZKr6abG0vzApMveYgcBBbNt6qAY /h7kbPv/Hn4SwyRgo4QILGhDlHzd/wR6cNqdDkYnCIknAJYqFBOfMwdORK+2KfYlnoq0BEx5aYS t/OW31J0a8BG5WIMg8WX9tMy2SEi3BF4iFrvPhPmKQv3pGn7BhuXMHud62Z3/Y= X-Authority-Info-Out: v=2.4 cv=Q4ffIo2a c=1 sm=1 tr=0 ts=697907db cx=c_apl:c_apl_out:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA: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.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-01-27_04,2026-01-27_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 mlxscore=0 malwarescore=0 adultscore=0 phishscore=0 lowpriorityscore=0 clxscore=1030 mlxlogscore=696 spamscore=0 bulkscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2601270153 X-JNJ: AAAAAAABbpOVaYC+g+UNdiWxbTmLB5UyzP+v1iXYOE1THuGyuDtpddHoI0qVOqmjmc+TvcN+l5dPmYUXVc6fSAEUtyHIkxPS764cC6UDeBTudotsHqVxW50q6D9UbOnIsjhhLg0iC6Xc0/zRYuF3rC9aV7P6C4PX/VsscZU7kRUPjEzeoQ2OzYESKo9Y7NLAdYlMqMWFJ32IYIsf5Hu0jUPgLaooXW8QIXobkCX3rgMXmm7X+D/ow9hdNjcqKoB7lb8LUJYai9oUqCMOCy/GeyYvd+PItlieFjI1nRUXVZxFoTkgjGjdNs3Qj8oJbZCvIsqg+re2rawy4rSyiJo4GeYAM9V8yk6FSNl7Q+uiZ9nrBoKVY/+0WoIIq4PWJPzH/7uxi6rhzW3PHUC1SaW0lfzBu0xyvgUrdkNaAnz7E6l3bpfd/V8lHHflMGHokjmc5hjPrht0+yWAhx8ClBG04kYmBseEtWWJn6PJJYaZHCy3OoVfY1tH/EOd9LcVu1ZSmGupafX6eSXL3rDZX+lCNJJ/uJoS3If1k2dBDjymJn8QGF6OaBHKMLGSJp6JgpvztO9uppCzNwFLSmfDHWMC1Cqs8RKSDgq87PwDaviGd+uhUtmSlSY3i5dpyFRorWhms6P46tD4BBRF6lN/Rj6wWtRltrCERwxYnXwpF5l0IG9sRBbtDglZySYLds4fEAnh138J2+T1iCb8TFpwEoIpr/8fxTumOGsb7dZPiP1UhO9n9004 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.76.211; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1769539688961158500 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 39a8b08c9e..2ed48a2eb4 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) @@ -1337,6 +1341,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: @@ -1656,6 +1668,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 Sat Feb 7 04:47:24 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=1769539677; cv=none; d=zohomail.com; s=zohoarc; b=meHZ7D4xdCFSMU8iAsHPQVqtW+7w1T/cmpTstxbFzItRMesLT2mxEH9go21HKqts9UxsomrQqRdGcET82jfdoP8/I22blfeL9H3H+UIYKyNvS7i57Fs15O4tbincbwmNDY4LiwJ37P8QkQkSGaHlaQKNK1u8CgUrZSeuUX4+Opk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769539677; 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=ANEd5ApEEDeGsnYek9oXj3jAXvhp0RKscjMa/tquPUU=; b=VaZQJZMtQ2PlcQVSgLBydfvNEzq6deq01S8En/pkQLFTJxfkxCg4+Er+PY9/c8ExQClVhXfz02h1Ybn/sCzRktp9lAHMTVnkqODSVGjVyeOY1TMkw1WCcV9iAYIvOoXIIUW/gIPeY1dHpqq5EDHk8JnzfzutwYsQ+pP84ZrtbdE= 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 1769539677312690.9847312498645; Tue, 27 Jan 2026 10:47:57 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vko5Q-0001QP-PE; Tue, 27 Jan 2026 13:46:48 -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 1vko4i-0000WR-HX for qemu-devel@nongnu.org; Tue, 27 Jan 2026 13:46:08 -0500 Received: from p-east2-cluster6-host2-snip4-10.eps.apple.com ([57.103.76.191] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vko4e-0007fE-VQ for qemu-devel@nongnu.org; Tue, 27 Jan 2026 13:46:04 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id 372891800641; Tue, 27 Jan 2026 18:45:47 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id D38B918021E0; Tue, 27 Jan 2026 18:45:45 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1769539551; x=1772131551; bh=ANEd5ApEEDeGsnYek9oXj3jAXvhp0RKscjMa/tquPUU=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=VckSKkYcDNVdTaQ+3JXLiHIQdtxheZcoHoeGnpTWVPFbpf5rN6iNSHckhKg748x0ktVENa8WLAD+z/QPnnhdHxiH/emcTxsfDS2k18OHQ2pveLz0991qPamizPftVcc0gibMjp3QjK8ZvCRwuTQrbN3sLrjAUrdoSjfcYtQGw3nlrzlm81TutrdniQzx9YwMDW+tIyKph2MWgEeduqzpM7enRhhkulbjERO321GgWh6ooCxp/4io2ExAJEHGEkens/DjsPd4zH4ni6kPyVK8RVRUtxPhn6DDWegsq/OQVQYDYUgb265HhQOc2W9uCasFsZFFan+/VBymRGCn367z+Q== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Peter Maydell , Alexander Graf , Paolo Bonzini , qemu-arm@nongnu.org, Roman Bolshakov , Mads Ynddal , Phil Dennis-Jordan , Cameron Esfahani , Mohamed Mediouni Subject: [PATCH v9 12/12] hvf: enable nested virtualisation support Date: Tue, 27 Jan 2026 19:45:23 +0100 Message-ID: <20260127184523.5357-13-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260127184523.5357-1-mohamed@unpredictable.fr> References: <20260127184523.5357-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: tiNOxKbh-dz8StGsefLLxhfh8aparo0s X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTI3MDE1MyBTYWx0ZWRfX0k8O2BPElM8X 5lZHs4Ok1i8B/S1S8bGHSD9NBtDEboPZcYrRLKCeZdzToHvZ4QOyC8KiDJXO0EB1izKUtuhhjWs T+fI9zxbl+UAdEZwfOB/PPJAcI4r43RxdP2S1v+IJjz72+VfoyMvFbb03SXIewDTGBV8mwLgAMo 3fg5PGaz2CO5kGD8qhVqCRWXInm2dR9bcCaHyUxTYsN4mKguVzahtJXzb+IQ06LjQ5ki60l65y9 4sNTZrCGzgNsvMVpzr1XpA88bRPzreXkO696AGkMWURf8SCXT4KmxPC7Vyu1Tad+9hzZzLNwlht ZtdaE8l7gqSGWOsFhvuvo8MT/wUePCZLJL0HJUL2WQ1YyLPGwm80aS6T8O4tfM= X-Authority-Info-Out: v=2.4 cv=ZeUQ98VA c=1 sm=1 tr=0 ts=697907dd cx=c_apl:c_apl_out:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=gc5wapfoLYamzdkEL9IA:9 X-Proofpoint-GUID: tiNOxKbh-dz8StGsefLLxhfh8aparo0s X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-01-27_04,2026-01-27_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 spamscore=0 mlxlogscore=917 clxscore=1030 mlxscore=0 bulkscore=0 adultscore=0 lowpriorityscore=0 malwarescore=0 suspectscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2601270153 X-JNJ: AAAAAAABvN4cqWEVRQAsN7SyHNPB9EUrtm0pdHIRphtVWzIDaMP7udvoC9W6DCXWWjC+sycaXBoyakFg4JAVqTHqZDmkGYnTqAGexynTiC6PYbh/vdFbKh8BUHmWLWuB6PdeAegWx7sFeobY7xI+tw1KqK2gngaumH1dOl8mDZ7CGCpApmXvZVMcIFtCpjuUxnj0xSP/dbAFnRH4uKy4XW0vIerAAoB5A9KqzcBLB24pMxrzCiE1A/lRQNE1oTQ5sTSkqK2etItBYQ+cxVLKZsjT4zj8/BuKRplXkESE5Khohsa3xRofaTgo4vX76oC22bL3PecCfxG942rzRl4xKksNhLNMz4cwi+u1oILWlmSIowTOwJKepYnonktFZ0ZYdKL9nJhsTj776OHtVN4g1DamcR4p+nTcyGbRpotk54l+AIf2cm92NVwc1OvHdUyVFx+VeihgjupPZOfPexOeLDYXU89rV82VBfIcjqsa7Rs+zajZUMxW2SGkAg8vbyPu8LtCcVEd2k33Ap9F3W/VYlZSwltaGkbWUfNDYySekCdFxZ5+lMwIhSFX/+2gmBXSWhUDYMBwDElxPwagtKEV9f8WuCGYx2qYcm9oR6jSwFaW48BZA2x+ncv9o0prdPD1SReQ1WEABIEyMtF3YQU4Qthrvs5hoIdr7HDpMW/c8UucW8r9onE3pbxeTSus4YpaROFQ2sN7CsQKlxlm3/rrKxM1JHxyUA== 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.76.191; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1769539680411154100 Content-Type: text/plain; charset="utf-8" Signed-off-by: Mohamed Mediouni --- hw/arm/virt.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 6ba7d6a6ef..0f4537dae4 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -2383,7 +2383,8 @@ 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()); --=20 2.50.1 (Apple Git-155)