From nobody Mon Apr 13 10:39:31 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=1772897673; cv=none; d=zohomail.com; s=zohoarc; b=Jh3Dc+0PXRBEG+i5LzWPDmWQuyddsl8ThkE2DfkEaHfj88QjOdMvl2l2yHEIleuAsYyMOeiT9meN1Jtb4uur8Ke5v9j7Ie3hdqBP7zkG4/ES/+YHRfHwQsv8WfOXIioSpuWFERXzyAuynxPTgAbuDq8DylzQpUFz8zRimruTCLc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772897673; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=fZA8/l25pege+AA3tp9V2oguHyeiwhKKjkx8GHgz6Co=; b=XGvF25mrSdG+LhUcqEkBqYZ1scskmX9iAJYw6LHHMGndVsHfL3ukfU4E4Qj1H6Ysijc5Xy1fCHB2DIBF2MTi3dIcVaocIocMMsH8q0R+HsJ7n0su8PfY1JzVgLFgebfpoVbgdHtTb0FXTCApj3Tygujf3c13MXfPP8U8SP2fh9Y= 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 1772897673548715.1625384714187; Sat, 7 Mar 2026 07:34:33 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vytdM-000174-Uk; Sat, 07 Mar 2026 10:32:05 -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 1vytdH-00013k-W2 for qemu-devel@nongnu.org; Sat, 07 Mar 2026 10:32:00 -0500 Received: from p-west2-cluster5-host5-snip4-10.eps.apple.com ([57.103.71.53] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vytdE-0000MN-O6 for qemu-devel@nongnu.org; Sat, 07 Mar 2026 10:31:59 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-2 (Postfix) with ESMTPS id AA1E81800872; Sat, 7 Mar 2026 15:31:51 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-2 (Postfix) with ESMTPSA id 31A5B18000B8; Sat, 7 Mar 2026 15:31:49 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772897513; x=1775489513; bh=fZA8/l25pege+AA3tp9V2oguHyeiwhKKjkx8GHgz6Co=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=GhPTTAdjmA4hvAGGhooTjA9q8EB+1SqnNqm8S85M5F8yqbLBZtMM5J15ENnkBTij99nexnTCteK5pssZHYOnEJ7J/fQdlDnzCUWqNtC4bv9sjlfzGZM3+C0/bb8C8O9OL+ZSUX0FCqHblAa2BWrX4HQ3OyCx9FU6UPHKeCL1PS8HT3nMrkY+E0htWLMtmCgLphjGhaV1AstHDILAxNqhez8pYKzx0lawCr7VCSp30FWxPC/OUMmkcC8pozfTj67ZiFT5V7awo224S0TXZWdaSq6BMlqjuYDbgP2E6CFelR+yoarDhbUHfBO0mfF7i9KAv2hz/+1n59sWi1KuFO7DEg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Phil Dennis-Jordan , Manos Pitsidianakis , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , Roman Bolshakov , Peter Maydell , qemu-arm@nongnu.org, Alexander Graf , Mohamed Mediouni Subject: [PATCH v18 01/13] hw/intc: Add hvf vGIC interrupt controller support Date: Sat, 7 Mar 2026 16:31:31 +0100 Message-ID: <20260307153143.76893-2-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260307153143.76893-1-mohamed@unpredictable.fr> References: <20260307153143.76893-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=CcYFJbrl c=1 sm=1 tr=0 ts=69ac44e8 cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=D2JAlcJVxmvnjXxMMLIA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: 55B-4DkZx9lp7pms_AFuy5UNsI96oECK X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA3MDE0NyBTYWx0ZWRfX0xY8jG1OItqO 8xKoViLEEHmFxaSoI9f/sfDm+MauHnKra89IYTZODwA/M0irmpy0lpVNtynrv4ipX0oJ9vqQ7GM 7R6ZagCQc4kL/YuDhdLDcRzQ/avVdAEyaV3gx6HAP4jJ/eehuYRYU3yc/7U4w/GKnshbdiCqHpp xa0QkljVm3KGC0VkI0EfBZoLiJG/zwrrzhgbbaZENPC8Nt4qAXgiUQhtQKfHd/xRk2D4/+G0q+k tpbSB+gtUEXFnX2ClcKZNCZ5vpAyEFXIT14vQuWrRdD2V9XTKmrA28B6/dBZa2WBg3NfK0/H3Wf P7ZxZaoCm/zu2zuiESvv5PNL1/gupeGsEbRjh97EctY65NxpucSJ0hD90iV2pI= X-Proofpoint-ORIG-GUID: 55B-4DkZx9lp7pms_AFuy5UNsI96oECK X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-07_05,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 clxscore=1030 lowpriorityscore=0 spamscore=0 bulkscore=0 mlxscore=0 phishscore=0 suspectscore=0 mlxlogscore=999 adultscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603070147 X-JNJ: AAAAAAABqxg3Slv5IVvZnK4JCJtkhvKaYAJo2b2wbphza24NJXPR/V/ELLyjiZ4P0aQsN6nS+Gu+Y30tPRih+qFCj0CqGSvOq/8zmhQ4jY0dG792jrmPQZZJf3Zzhy0MTaf9LP9M15yUDXOE1H9HawfBYZiDU2B8UzbK9gODrSu5/hiQxuML+tpxv6FzWdQq9V8/ssHqeqlQN9Zv6WMPrDwUiAOrZgOlZ08nwTLMHUDnoGTV7a22G0Fd46/BQbrXgvzBBE+pInzPC1X7MR7g72Onu0zS+RDetfCBbT5kIdbAIPzw/K6Nk9o+qDa1Rasq42HmPgDV60zPTM2h6hFVKcW2h2JIBblWyNGl4nIBIpyaZLUD/7FxLsbIXDx5Uk7dFtYMEyzaRqHEQrFaKmqSRGtaUaMV7FE3ensRG1JfyTeMu3Usv7SnpbJl72p85mVigwaOB97AbLmpMZeIDPBKOBYgSMBBWJQLDLlGSxC7C4/aK6p+vjZLFQ1tev3jM0x8n7yoFqoUD7d88k5p2g+TYj9j2aJJdcVQB9ie0r5BWJfQWdRy9L3J1NPkLjZo3WWl2U/eB5DwH5S79xMcajlCjAksogNf4/NOx8O1lprxjJAby7aGGPlp020XDyLDBl6CSVnON/iB16XGVOMI/m12c8hZSKU8oafbDWqsXvVuTE3RTPV4EC5fcA31i/MYQCPIEKsU+7/NaE6JEJ3iiJ7j95g4I6G49fZbHGQmA6N9nmVQttYeS7/YMM1ry9jZndOHwONfiXJHKw== 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.71.53; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1772897674738158500 This opens up the door to nested virtualisation support. Signed-off-by: Mohamed Mediouni Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/intc/arm_gicv3_hvf.c | 741 +++++++++++++++++++++++++++++ hw/intc/meson.build | 1 + include/hw/intc/arm_gicv3_common.h | 1 + 3 files changed, 743 insertions(+) create mode 100644 hw/intc/arm_gicv3_hvf.c diff --git a/hw/intc/arm_gicv3_hvf.c b/hw/intc/arm_gicv3_hvf.c new file mode 100644 index 0000000000..55171a796b --- /dev/null +++ b/hw/intc/arm_gicv3_hvf.c @@ -0,0 +1,741 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * ARM Generic Interrupt Controller using HVF platform support + * + * Copyright (c) 2025 Mohamed Mediouni + * Based on vGICv3 KVM code by Pavel Fedin + * + */ + +#include "qemu/osdep.h" +#include "qapi/error.h" +#include "hw/intc/arm_gicv3_common.h" +#include "qemu/error-report.h" +#include "qemu/module.h" +#include "system/runstate.h" +#include "system/hvf.h" +#include "system/hvf_int.h" +#include "hvf_arm.h" +#include "gicv3_internal.h" +#include "vgic_common.h" +#include "qom/object.h" +#include "target/arm/cpregs.h" +#include + +/* For the GIC, override the check outright, as availability is checked el= sewhere. */ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunguarded-availability" + +struct HVFARMGICv3Class { + ARMGICv3CommonClass parent_class; + DeviceRealize parent_realize; + ResettablePhases parent_phases; +}; + +typedef struct HVFARMGICv3Class HVFARMGICv3Class; + +/* This is reusing the GICv3State typedef from ARM_GICV3_ITS_COMMON */ +DECLARE_OBJ_CHECKERS(GICv3State, HVFARMGICv3Class, + HVF_GICV3, TYPE_HVF_GICV3); + +/* + * Loop through each distributor IRQ related register; since bits + * corresponding to SPIs and PPIs are RAZ/WI when affinity routing + * is enabled, we skip those. + */ +#define for_each_dist_irq_reg(_irq, _max, _field_width) \ + for (_irq =3D GIC_INTERNAL; _irq < _max; _irq +=3D (32 / _field_width)) + +/* + * Wrap calls to the vGIC APIs to assert_hvf_ok() + * as a macro to keep the code clean. + */ +#define hv_gic_get_distributor_reg(offset, reg) \ + assert_hvf_ok(hv_gic_get_distributor_reg(offset, reg)) + +#define hv_gic_set_distributor_reg(offset, reg) \ + assert_hvf_ok(hv_gic_set_distributor_reg(offset, reg)) + +#define hv_gic_get_redistributor_reg(vcpu, reg, value) \ + assert_hvf_ok(hv_gic_get_redistributor_reg(vcpu, reg, value)) + +#define hv_gic_set_redistributor_reg(vcpu, reg, value) \ + assert_hvf_ok(hv_gic_set_redistributor_reg(vcpu, reg, value)) + +#define hv_gic_get_icc_reg(vcpu, reg, value) \ + assert_hvf_ok(hv_gic_get_icc_reg(vcpu, reg, value)) + +#define hv_gic_set_icc_reg(vcpu, reg, value) \ + assert_hvf_ok(hv_gic_set_icc_reg(vcpu, reg, value)) + +#define hv_gic_get_ich_reg(vcpu, reg, value) \ + assert_hvf_ok(hv_gic_get_ich_reg(vcpu, reg, value)) + +#define hv_gic_set_ich_reg(vcpu, reg, value) \ + assert_hvf_ok(hv_gic_set_ich_reg(vcpu, reg, value)) + +static void hvf_dist_get_priority(GICv3State *s, hv_gic_distributor_reg_t = offset + , uint8_t *bmp) +{ + uint64_t reg; + uint32_t *field; + int irq; + field =3D (uint32_t *)(bmp); + + for_each_dist_irq_reg(irq, s->num_irq, 8) { + hv_gic_get_distributor_reg(offset, ®); + *field =3D reg; + offset +=3D 4; + field++; + } +} + +static void hvf_dist_put_priority(GICv3State *s, hv_gic_distributor_reg_t = offset + , uint8_t *bmp) +{ + uint32_t reg, *field; + int irq; + field =3D (uint32_t *)(bmp); + + for_each_dist_irq_reg(irq, s->num_irq, 8) { + reg =3D *field; + hv_gic_set_distributor_reg(offset, reg); + offset +=3D 4; + field++; + } +} + +static void hvf_dist_get_edge_trigger(GICv3State *s, hv_gic_distributor_re= g_t offset, + uint32_t *bmp) +{ + uint64_t reg; + int irq; + + for_each_dist_irq_reg(irq, s->num_irq, 2) { + hv_gic_get_distributor_reg(offset, ®); + reg =3D half_unshuffle32(reg >> 1); + if (irq % 32 !=3D 0) { + reg =3D (reg << 16); + } + *gic_bmp_ptr32(bmp, irq) |=3D reg; + offset +=3D 4; + } +} + +static void hvf_dist_put_edge_trigger(GICv3State *s, hv_gic_distributor_re= g_t offset, + uint32_t *bmp) +{ + uint32_t reg; + int irq; + + for_each_dist_irq_reg(irq, s->num_irq, 2) { + reg =3D *gic_bmp_ptr32(bmp, irq); + if (irq % 32 !=3D 0) { + reg =3D (reg & 0xffff0000) >> 16; + } else { + reg =3D reg & 0xffff; + } + reg =3D half_shuffle32(reg) << 1; + hv_gic_set_distributor_reg(offset, reg); + offset +=3D 4; + } +} + +/* Read a bitmap register group from the kernel VGIC. */ +static void hvf_dist_getbmp(GICv3State *s, hv_gic_distributor_reg_t offset= , uint32_t *bmp) +{ + uint64_t reg; + int irq; + + for_each_dist_irq_reg(irq, s->num_irq, 1) { + + hv_gic_get_distributor_reg(offset, ®); + *gic_bmp_ptr32(bmp, irq) =3D reg; + offset +=3D 4; + } +} + +static void hvf_dist_putbmp(GICv3State *s, hv_gic_distributor_reg_t offset, + hv_gic_distributor_reg_t clroffset, uint32_t *= bmp) +{ + uint32_t reg; + int irq; + + for_each_dist_irq_reg(irq, s->num_irq, 1) { + /* + * If this bitmap is a set/clear register pair, first write to the + * clear-reg to clear all bits before using the set-reg to write + * the 1 bits. + */ + if (clroffset !=3D 0) { + reg =3D 0; + hv_gic_set_distributor_reg(clroffset, reg); + clroffset +=3D 4; + } + reg =3D *gic_bmp_ptr32(bmp, irq); + hv_gic_set_distributor_reg(offset, reg); + offset +=3D 4; + } +} + +static void hvf_gicv3_check(GICv3State *s) +{ + uint64_t reg; + uint32_t num_irq; + + /* Sanity checking s->num_irq */ + hv_gic_get_distributor_reg(HV_GIC_DISTRIBUTOR_REG_GICD_TYPER, ®); + num_irq =3D ((reg & 0x1f) + 1) * 32; + + if (num_irq < s->num_irq) { + error_report("Model requests %u IRQs, but HVF supports max %u", + s->num_irq, num_irq); + abort(); + } +} + +static void hvf_gicv3_put_cpu_el2(CPUState *cpu_state, run_on_cpu_data arg) +{ + int num_pri_bits; + + /* Redistributor state */ + GICv3CPUState *c =3D arg.host_ptr; + hv_vcpu_t vcpu =3D c->cpu->accel->fd; + + hv_gic_set_ich_reg(vcpu, HV_GIC_ICH_REG_VMCR_EL2, c->ich_vmcr_el2); + hv_gic_set_ich_reg(vcpu, HV_GIC_ICH_REG_HCR_EL2, c->ich_hcr_el2); + + for (int i =3D 0; i < GICV3_LR_MAX; i++) { + hv_gic_set_ich_reg(vcpu, HV_GIC_ICH_REG_LR0_EL2, c->ich_lr_el2[i]); + } + + num_pri_bits =3D c->vpribits; + + switch (num_pri_bits) { + case 7: + hv_gic_set_ich_reg(vcpu, HV_GIC_ICH_REG_AP0R0_EL2 + 3, + c->ich_apr[GICV3_G0][3]); + hv_gic_set_ich_reg(vcpu, HV_GIC_ICH_REG_AP0R0_EL2 + 2, + c->ich_apr[GICV3_G0][2]); + /* fall through */ + case 6: + hv_gic_set_ich_reg(vcpu, HV_GIC_ICH_REG_AP0R0_EL2 + 1, + c->ich_apr[GICV3_G0][1]); + /* fall through */ + default: + hv_gic_set_ich_reg(vcpu, HV_GIC_ICH_REG_AP0R0_EL2, + c->ich_apr[GICV3_G0][0]); + } + + switch (num_pri_bits) { + case 7: + hv_gic_set_ich_reg(vcpu, HV_GIC_ICH_REG_AP1R0_EL2 + 3, + c->ich_apr[GICV3_G1NS][3]); + hv_gic_set_ich_reg(vcpu, HV_GIC_ICH_REG_AP1R0_EL2 + 2, + c->ich_apr[GICV3_G1NS][2]); + /* fall through */ + case 6: + hv_gic_set_ich_reg(vcpu, HV_GIC_ICH_REG_AP1R0_EL2 + 1, + c->ich_apr[GICV3_G1NS][1]); + /* fall through */ + default: + hv_gic_set_ich_reg(vcpu, HV_GIC_ICH_REG_AP1R0_EL2, + c->ich_apr[GICV3_G1NS][0]); + } +} + +static void hvf_gicv3_put_cpu(CPUState *cpu_state, run_on_cpu_data arg) +{ + uint32_t reg; + uint64_t reg64; + int i, num_pri_bits; + + /* Redistributor state */ + GICv3CPUState *c =3D arg.host_ptr; + hv_vcpu_t vcpu =3D c->cpu->accel->fd; + + reg =3D c->gicr_waker; + hv_gic_set_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_IGROU= PR0, reg); + + reg =3D c->gicr_igroupr0; + hv_gic_set_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_IGROU= PR0, reg); + + reg =3D ~0; + hv_gic_set_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_ICENA= BLER0, reg); + reg =3D c->gicr_ienabler0; + hv_gic_set_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_ISENA= BLER0, reg); + + /* Restore config before pending so we treat level/edge correctly */ + reg =3D half_shuffle32(c->edge_trigger >> 16) << 1; + hv_gic_set_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_ICFGR= 1, reg); + + reg =3D ~0; + hv_gic_set_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_ICPEN= DR0, reg); + reg =3D c->gicr_ipendr0; + hv_gic_set_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_ISPEN= DR0, reg); + + reg =3D ~0; + hv_gic_set_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_ICACT= IVER0, reg); + reg =3D c->gicr_iactiver0; + hv_gic_set_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_ISACT= IVER0, reg); + + for (i =3D 0; i < GIC_INTERNAL; i +=3D 4) { + reg =3D c->gicr_ipriorityr[i] | + (c->gicr_ipriorityr[i + 1] << 8) | + (c->gicr_ipriorityr[i + 2] << 16) | + (c->gicr_ipriorityr[i + 3] << 24); + hv_gic_set_redistributor_reg(vcpu, + HV_GIC_REDISTRIBUTOR_REG_GICR_IPRIORITYR0 + i, reg); + } + + /* CPU interface state */ + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_SRE_EL1, c->icc_sre_el1); + + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_CTLR_EL1, + c->icc_ctlr_el1[GICV3_NS]); + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_IGRPEN0_EL1, + c->icc_igrpen[GICV3_G0]); + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_IGRPEN1_EL1, + c->icc_igrpen[GICV3_G1NS]); + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_PMR_EL1, c->icc_pmr_el1); + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_BPR0_EL1, c->icc_bpr[GICV3_G0]= ); + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_BPR1_EL1, c->icc_bpr[GICV3_G1N= S]); + + num_pri_bits =3D ((c->icc_ctlr_el1[GICV3_NS] & + ICC_CTLR_EL1_PRIBITS_MASK) >> + ICC_CTLR_EL1_PRIBITS_SHIFT) + 1; + + switch (num_pri_bits) { + case 7: + reg64 =3D c->icc_apr[GICV3_G0][3]; + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_AP0R0_EL1 + 3, reg64); + reg64 =3D c->icc_apr[GICV3_G0][2]; + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_AP0R0_EL1 + 2, reg64); + /* fall through */ + case 6: + reg64 =3D c->icc_apr[GICV3_G0][1]; + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_AP0R0_EL1 + 1, reg64); + /* fall through */ + default: + reg64 =3D c->icc_apr[GICV3_G0][0]; + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_AP0R0_EL1, reg64); + } + + switch (num_pri_bits) { + case 7: + reg64 =3D c->icc_apr[GICV3_G1NS][3]; + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_AP1R0_EL1 + 3, reg64); + reg64 =3D c->icc_apr[GICV3_G1NS][2]; + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_AP1R0_EL1 + 2, reg64); + /* fall through */ + case 6: + reg64 =3D c->icc_apr[GICV3_G1NS][1]; + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_AP1R0_EL1 + 1, reg64); + /* fall through */ + default: + reg64 =3D c->icc_apr[GICV3_G1NS][0]; + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_AP1R0_EL1, reg64); + } + + /* Registers beyond this point are with nested virt only */ + if (c->gic->maint_irq) { + hvf_gicv3_put_cpu_el2(cpu_state, arg); + } +} + +static void hvf_gicv3_put(GICv3State *s) +{ + uint32_t reg; + int ncpu, i; + + hvf_gicv3_check(s); + + reg =3D s->gicd_ctlr; + hv_gic_set_distributor_reg(HV_GIC_DISTRIBUTOR_REG_GICD_CTLR, reg); + + /* per-CPU state */ + + for (ncpu =3D 0; ncpu < s->num_cpu; ncpu++) { + run_on_cpu_data data; + data.host_ptr =3D &s->cpu[ncpu]; + run_on_cpu(s->cpu[ncpu].cpu, hvf_gicv3_put_cpu, data); + } + + /* s->enable bitmap -> GICD_ISENABLERn */ + hvf_dist_putbmp(s, HV_GIC_DISTRIBUTOR_REG_GICD_ISENABLER0 + , HV_GIC_DISTRIBUTOR_REG_GICD_ICENABLER0, s->enabled); + + /* s->group bitmap -> GICD_IGROUPRn */ + hvf_dist_putbmp(s, HV_GIC_DISTRIBUTOR_REG_GICD_IGROUPR0 + , 0, s->group); + + /* Restore targets before pending to ensure the pending state is set on + * the appropriate CPU interfaces in the kernel + */ + + /* s->gicd_irouter[irq] -> GICD_IROUTERn */ + for (i =3D GIC_INTERNAL; i < s->num_irq; i++) { + uint32_t offset =3D HV_GIC_DISTRIBUTOR_REG_GICD_IROUTER32 + (8 * i) + - (8 * GIC_INTERNAL); + hv_gic_set_distributor_reg(offset, s->gicd_irouter[i]); + } + + /* + * s->trigger bitmap -> GICD_ICFGRn + * (restore configuration registers before pending IRQs so we treat + * level/edge correctly) + */ + hvf_dist_put_edge_trigger(s, HV_GIC_DISTRIBUTOR_REG_GICD_ICFGR0, s->ed= ge_trigger); + + /* s->pending bitmap -> GICD_ISPENDRn */ + hvf_dist_putbmp(s, HV_GIC_DISTRIBUTOR_REG_GICD_ISPENDR0, + HV_GIC_DISTRIBUTOR_REG_GICD_ICPENDR0, s->pending); + + /* s->active bitmap -> GICD_ISACTIVERn */ + hvf_dist_putbmp(s, HV_GIC_DISTRIBUTOR_REG_GICD_ISACTIVER0, + HV_GIC_DISTRIBUTOR_REG_GICD_ICACTIVER0, s->active); + + /* s->gicd_ipriority[] -> GICD_IPRIORITYRn */ + hvf_dist_put_priority(s, HV_GIC_DISTRIBUTOR_REG_GICD_IPRIORITYR0, s->g= icd_ipriority); +} + +static void hvf_gicv3_get_cpu_el2(CPUState *cpu_state, run_on_cpu_data arg) +{ + int num_pri_bits; + + /* Redistributor state */ + GICv3CPUState *c =3D arg.host_ptr; + hv_vcpu_t vcpu =3D c->cpu->accel->fd; + + hv_gic_get_ich_reg(vcpu, HV_GIC_ICH_REG_VMCR_EL2, &c->ich_vmcr_el2); + hv_gic_get_ich_reg(vcpu, HV_GIC_ICH_REG_HCR_EL2, &c->ich_hcr_el2); + + for (int i =3D 0; i < GICV3_LR_MAX; i++) { + hv_gic_get_ich_reg(vcpu, HV_GIC_ICH_REG_LR0_EL2, &c->ich_lr_el2[i]= ); + } + + num_pri_bits =3D c->vpribits; + + switch (num_pri_bits) { + case 7: + hv_gic_get_ich_reg(vcpu, HV_GIC_ICH_REG_AP0R0_EL2 + 3, + &c->ich_apr[GICV3_G0][3]); + hv_gic_get_ich_reg(vcpu, HV_GIC_ICH_REG_AP0R0_EL2 + 2, + &c->ich_apr[GICV3_G0][2]); + /* fall through */ + case 6: + hv_gic_get_ich_reg(vcpu, HV_GIC_ICH_REG_AP0R0_EL2 + 1, + &c->ich_apr[GICV3_G0][1]); + /* fall through */ + default: + hv_gic_get_ich_reg(vcpu, HV_GIC_ICH_REG_AP0R0_EL2, + &c->ich_apr[GICV3_G0][0]); + } + + switch (num_pri_bits) { + case 7: + hv_gic_get_ich_reg(vcpu, HV_GIC_ICH_REG_AP1R0_EL2 + 3, + &c->ich_apr[GICV3_G1NS][3]); + hv_gic_get_ich_reg(vcpu, HV_GIC_ICH_REG_AP1R0_EL2 + 2, + &c->ich_apr[GICV3_G1NS][2]); + /* fall through */ + case 6: + hv_gic_get_ich_reg(vcpu, HV_GIC_ICH_REG_AP1R0_EL2 + 1, + &c->ich_apr[GICV3_G1NS][1]); + /* fall through */ + default: + hv_gic_get_ich_reg(vcpu, HV_GIC_ICH_REG_AP1R0_EL2, + &c->ich_apr[GICV3_G1NS][0]); + } +} + +static void hvf_gicv3_get_cpu(CPUState *cpu_state, run_on_cpu_data arg) +{ + uint64_t reg; + int i, num_pri_bits; + + /* Redistributor state */ + GICv3CPUState *c =3D arg.host_ptr; + hv_vcpu_t vcpu =3D c->cpu->accel->fd; + + hv_gic_get_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_IGROU= PR0, + ®); + c->gicr_igroupr0 =3D reg; + hv_gic_get_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_ISENA= BLER0, + ®); + c->gicr_ienabler0 =3D reg; + hv_gic_get_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_ICFGR= 1, + ®); + c->edge_trigger =3D half_unshuffle32(reg >> 1) << 16; + hv_gic_get_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_ISPEN= DR0, + ®); + c->gicr_ipendr0 =3D reg; + hv_gic_get_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_ISACT= IVER0, + ®); + c->gicr_iactiver0 =3D reg; + + for (i =3D 0; i < GIC_INTERNAL; i +=3D 4) { + hv_gic_get_redistributor_reg( + vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_IPRIORITYR0 + i, ®); + c->gicr_ipriorityr[i] =3D extract32(reg, 0, 8); + c->gicr_ipriorityr[i + 1] =3D extract32(reg, 8, 8); + c->gicr_ipriorityr[i + 2] =3D extract32(reg, 16, 8); + c->gicr_ipriorityr[i + 3] =3D extract32(reg, 24, 8); + } + + /* CPU interface */ + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_SRE_EL1, &c->icc_sre_el1); + + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_CTLR_EL1, + &c->icc_ctlr_el1[GICV3_NS]); + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_IGRPEN0_EL1, + &c->icc_igrpen[GICV3_G0]); + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_IGRPEN1_EL1, + &c->icc_igrpen[GICV3_G1NS]); + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_PMR_EL1, &c->icc_pmr_el1); + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_BPR0_EL1, &c->icc_bpr[GICV3_G0= ]); + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_BPR1_EL1, &c->icc_bpr[GICV3_G1= NS]); + num_pri_bits =3D ((c->icc_ctlr_el1[GICV3_NS] & ICC_CTLR_EL1_PRIBITS_MA= SK) >> + ICC_CTLR_EL1_PRIBITS_SHIFT) + + 1; + + switch (num_pri_bits) { + case 7: + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_AP0R0_EL1 + 3, + &c->icc_apr[GICV3_G0][3]); + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_AP0R0_EL1 + 2, + &c->icc_apr[GICV3_G0][2]); + /* fall through */ + case 6: + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_AP0R0_EL1 + 1, + &c->icc_apr[GICV3_G0][1]); + /* fall through */ + default: + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_AP0R0_EL1, + &c->icc_apr[GICV3_G0][0]); + } + + switch (num_pri_bits) { + case 7: + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_AP1R0_EL1 + 3, + &c->icc_apr[GICV3_G1NS][3]); + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_AP1R0_EL1 + 2, + &c->icc_apr[GICV3_G1NS][2]); + /* fall through */ + case 6: + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_AP1R0_EL1 + 1, + &c->icc_apr[GICV3_G1NS][1]); + /* fall through */ + default: + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_AP1R0_EL1, + &c->icc_apr[GICV3_G1NS][0]); + } + + /* Registers beyond this point are with nested virt only */ + if (c->gic->maint_irq) { + hvf_gicv3_get_cpu_el2(cpu_state, arg); + } +} + +static void hvf_gicv3_get(GICv3State *s) +{ + uint64_t reg; + int ncpu, i; + + hvf_gicv3_check(s); + + hv_gic_get_distributor_reg(HV_GIC_DISTRIBUTOR_REG_GICD_CTLR, ®); + s->gicd_ctlr =3D reg; + + /* Redistributor state (one per CPU) */ + + for (ncpu =3D 0; ncpu < s->num_cpu; ncpu++) { + run_on_cpu_data data; + data.host_ptr =3D &s->cpu[ncpu]; + run_on_cpu(s->cpu[ncpu].cpu, hvf_gicv3_get_cpu, data); + } + + /* GICD_IGROUPRn -> s->group bitmap */ + hvf_dist_getbmp(s, HV_GIC_DISTRIBUTOR_REG_GICD_IGROUPR0, s->group); + + /* GICD_ISENABLERn -> s->enabled bitmap */ + hvf_dist_getbmp(s, HV_GIC_DISTRIBUTOR_REG_GICD_ISENABLER0, s->enabled); + + /* GICD_ISPENDRn -> s->pending bitmap */ + hvf_dist_getbmp(s, HV_GIC_DISTRIBUTOR_REG_GICD_ISPENDR0, s->pending); + + /* GICD_ISACTIVERn -> s->active bitmap */ + hvf_dist_getbmp(s, HV_GIC_DISTRIBUTOR_REG_GICD_ISACTIVER0, s->active); + + /* GICD_ICFGRn -> s->trigger bitmap */ + hvf_dist_get_edge_trigger(s, HV_GIC_DISTRIBUTOR_REG_GICD_ICFGR0 + , s->edge_trigger); + + /* GICD_IPRIORITYRn -> s->gicd_ipriority[] */ + hvf_dist_get_priority(s, HV_GIC_DISTRIBUTOR_REG_GICD_IPRIORITYR0 + , s->gicd_ipriority); + + /* GICD_IROUTERn -> s->gicd_irouter[irq] */ + for (i =3D GIC_INTERNAL; i < s->num_irq; i++) { + uint32_t offset =3D HV_GIC_DISTRIBUTOR_REG_GICD_IROUTER32 + + (8 * i) - (8 * GIC_INTERNAL); + hv_gic_get_distributor_reg(offset, &s->gicd_irouter[i]); + } +} + +static void hvf_gicv3_set_irq(void *opaque, int irq, int level) +{ + GICv3State *s =3D opaque; + if (irq > s->num_irq) { + return; + } + hv_gic_set_spi(GIC_INTERNAL + irq, !!level); +} + +static void hvf_gicv3_icc_reset(CPUARMState *env, const ARMCPRegInfo *ri) +{ + GICv3CPUState *c; + + c =3D env->gicv3state; + c->icc_pmr_el1 =3D 0; + /* + * Architecturally the reset value of the ICC_BPR registers + * is UNKNOWN. We set them all to 0 here; when the kernel + * uses these values to program the ICH_VMCR_EL2 fields that + * determine the guest-visible ICC_BPR register values, the + * hardware's "writing a value less than the minimum sets + * the field to the minimum value" behaviour will result in + * them effectively resetting to the correct minimum value + * for the host GIC. + */ + c->icc_bpr[GICV3_G0] =3D 0; + c->icc_bpr[GICV3_G1] =3D 0; + c->icc_bpr[GICV3_G1NS] =3D 0; + + c->icc_sre_el1 =3D 0x7; + memset(c->icc_apr, 0, sizeof(c->icc_apr)); + memset(c->icc_igrpen, 0, sizeof(c->icc_igrpen)); +} + +static void hvf_gicv3_reset_hold(Object *obj, ResetType type) +{ + GICv3State *s =3D ARM_GICV3_COMMON(obj); + HVFARMGICv3Class *kgc =3D HVF_GICV3_GET_CLASS(s); + + if (kgc->parent_phases.hold) { + kgc->parent_phases.hold(obj, type); + } + + hvf_gicv3_put(s); +} + + +/* + * CPU interface registers of GIC needs to be reset on CPU reset. + * For the calling arm_gicv3_icc_reset() on CPU reset, we register + * below ARMCPRegInfo. As we reset the whole cpu interface under single + * register reset, we define only one register of CPU interface instead + * of defining all the registers. + */ +static const ARMCPRegInfo gicv3_cpuif_reginfo[] =3D { + { .name =3D "ICC_CTLR_EL1", .state =3D ARM_CP_STATE_BOTH, + .opc0 =3D 3, .opc1 =3D 0, .crn =3D 12, .crm =3D 12, .opc2 =3D 4, + /* + * If ARM_CP_NOP is used, resetfn is not called, + * So ARM_CP_NO_RAW is appropriate type. + */ + .type =3D ARM_CP_NO_RAW, + .access =3D PL1_RW, + .readfn =3D arm_cp_read_zero, + .writefn =3D arm_cp_write_ignore, + /* + * We hang the whole cpu interface reset routine off here + * rather than parcelling it out into one little function + * per register + */ + .resetfn =3D hvf_gicv3_icc_reset, + }, +}; + +static void hvf_gicv3_realize(DeviceState *dev, Error **errp) +{ + ERRP_GUARD(); + GICv3State *s =3D HVF_GICV3(dev); + HVFARMGICv3Class *kgc =3D HVF_GICV3_GET_CLASS(s); + int i; + + kgc->parent_realize(dev, errp); + if (*errp) { + return; + } + + if (s->revision !=3D 3) { + error_setg(errp, "unsupported GIC revision %d for platform GIC", + s->revision); + } + + if (s->security_extn) { + error_setg(errp, "the platform vGICv3 does not implement the " + "security extensions"); + return; + } + + if (s->nmi_support) { + error_setg(errp, "NMI is not supported with the platform GIC"); + return; + } + + if (s->nb_redist_regions > 1) { + error_setg(errp, "Multiple VGICv3 redistributor regions are not " + "supported by HVF"); + error_append_hint(errp, "A maximum of %d VCPUs can be used", + s->redist_region_count[0]); + return; + } + + gicv3_init_irqs_and_mmio(s, hvf_gicv3_set_irq, NULL); + + for (i =3D 0; i < s->num_cpu; i++) { + ARMCPU *cpu =3D ARM_CPU(qemu_get_cpu(i)); + + define_arm_cp_regs(cpu, gicv3_cpuif_reginfo); + } + + if (s->maint_irq && s->maint_irq !=3D HV_GIC_INT_MAINTENANCE) { + error_setg(errp, "vGIC maintenance IRQ mismatch with the hardcoded= one in HVF."); + return; + } +} + +static void hvf_gicv3_class_init(ObjectClass *klass, const void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + ResettableClass *rc =3D RESETTABLE_CLASS(klass); + ARMGICv3CommonClass *agcc =3D ARM_GICV3_COMMON_CLASS(klass); + HVFARMGICv3Class *kgc =3D HVF_GICV3_CLASS(klass); + + agcc->pre_save =3D hvf_gicv3_get; + agcc->post_load =3D hvf_gicv3_put; + + device_class_set_parent_realize(dc, hvf_gicv3_realize, + &kgc->parent_realize); + resettable_class_set_parent_phases(rc, NULL, hvf_gicv3_reset_hold, NUL= L, + &kgc->parent_phases); +} + +static const TypeInfo hvf_arm_gicv3_info =3D { + .name =3D TYPE_HVF_GICV3, + .parent =3D TYPE_ARM_GICV3_COMMON, + .instance_size =3D sizeof(GICv3State), + .class_init =3D hvf_gicv3_class_init, + .class_size =3D sizeof(HVFARMGICv3Class), +}; + +static void hvf_gicv3_register_types(void) +{ + type_register_static(&hvf_arm_gicv3_info); +} + +type_init(hvf_gicv3_register_types) + +#pragma clang diagnostic pop diff --git a/hw/intc/meson.build b/hw/intc/meson.build index 96742df090..b7baf8a0f6 100644 --- a/hw/intc/meson.build +++ b/hw/intc/meson.build @@ -42,6 +42,7 @@ arm_common_ss.add(when: 'CONFIG_ARM_GIC', if_true: files(= 'arm_gicv3_cpuif_common arm_common_ss.add(when: 'CONFIG_ARM_GICV3', if_true: files('arm_gicv3_cpui= f.c')) specific_ss.add(when: 'CONFIG_ARM_GIC_KVM', if_true: files('arm_gic_kvm.c'= )) specific_ss.add(when: ['CONFIG_WHPX', 'TARGET_AARCH64'], if_true: files('a= rm_gicv3_whpx.c')) +specific_ss.add(when: ['CONFIG_HVF', 'CONFIG_ARM_GICV3'], if_true: files('= arm_gicv3_hvf.c')) specific_ss.add(when: ['CONFIG_ARM_GIC_KVM', 'TARGET_AARCH64'], if_true: f= iles('arm_gicv3_kvm.c', 'arm_gicv3_its_kvm.c')) arm_common_ss.add(when: 'CONFIG_ARM_V7M', if_true: files('armv7m_nvic.c')) specific_ss.add(when: 'CONFIG_GRLIB', if_true: files('grlib_irqmp.c')) diff --git a/include/hw/intc/arm_gicv3_common.h b/include/hw/intc/arm_gicv3= _common.h index c55cf18120..9adcab0a0c 100644 --- a/include/hw/intc/arm_gicv3_common.h +++ b/include/hw/intc/arm_gicv3_common.h @@ -315,6 +315,7 @@ DECLARE_OBJ_CHECKERS(GICv3State, ARMGICv3CommonClass, =20 /* Types for GICv3 kernel-irqchip */ #define TYPE_WHPX_GICV3 "whpx-arm-gicv3" +#define TYPE_HVF_GICV3 "hvf-arm-gicv3" =20 struct ARMGICv3CommonClass { /*< private >*/ --=20 2.50.1 (Apple Git-155) From nobody Mon Apr 13 10:39:31 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=1772897682; cv=none; d=zohomail.com; s=zohoarc; b=FaenLZzdmIg5KqEWH6s5WHCfZ1r5UrqqiXkcR4IwYk3xTJBweF7crVlN7MerXg3hGc8rsJnzH5n5IYp7jZ1fNqijFDto2YPVrFvcfPR4VuYy+teKdYOYgLnCMfMADCJ3Dn7tPg4VFsvyYe8xjoO63jbXeZgyPIR2+IpO8am0k2M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772897682; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=1RV2oa9C2DaRGIF3rfTp8Tdv8xxfIYsPZWi/MFo/wCM=; b=NO93NEsBe5c772tm/94ND/0B6T2Rw8myEel1+2mD8AxKlBDpbkvWSk0itBLM16o9SiQON3Bkn1SdNDIEJlsRjf8kpbxQFGfkNLSS4qSVfdtEz27B6YUhnD00Y80mu0Kk3tYU4wEXz1D5LYumdwI9GO97iphLTFUtBu8KniDsPic= 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 1772897682530768.3499268665713; Sat, 7 Mar 2026 07:34:42 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vytdL-00015K-55; Sat, 07 Mar 2026 10:32:03 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vytdI-000145-Hx for qemu-devel@nongnu.org; Sat, 07 Mar 2026 10:32:00 -0500 Received: from p-west2-cluster5-host12-snip4-8.eps.apple.com ([57.103.71.21] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vytdE-0000MW-N7 for qemu-devel@nongnu.org; Sat, 07 Mar 2026 10:32:00 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-2 (Postfix) with ESMTPS id 127CA1800162; Sat, 7 Mar 2026 15:31:53 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-2 (Postfix) with ESMTPSA id 7830D180009A; Sat, 7 Mar 2026 15:31:51 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772897515; x=1775489515; bh=1RV2oa9C2DaRGIF3rfTp8Tdv8xxfIYsPZWi/MFo/wCM=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=STOB/c35JmT9QI036yLwQI2Z1Azk7gUkuLN4qklyj8kUfARy+47HUmXCCFc9Pe247ohTk+nszAf4iL7QDpa+kCjZswXiEIHo9UcYkcGn/UJIlRSusJGoV1AmLVAdprTDRm07VpcYlVydz1VGsq4X8W5z0Z9+thKA8ZHzTDrt2/4V5nIIrYkiaAfGeN32VgqVh8G3DLUxdEoulPQZgYyavJH72cnJmJ4gMZBkCL1VBAaPKUoysipMMHROt4B44MOKYVeoks1EfcVesOhncV/bnr/MsyMR1Q7BeVxh4sZbTODwLQGAirw3+bVXHpsGDUXN08B0naqdAKcHGCKzloraXA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Phil Dennis-Jordan , Manos Pitsidianakis , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , Roman Bolshakov , Peter Maydell , qemu-arm@nongnu.org, Alexander Graf , Mohamed Mediouni Subject: [PATCH v18 02/13] hw/intc: arm_gicv3_hvf: save/restore Apple GIC state Date: Sat, 7 Mar 2026 16:31:32 +0100 Message-ID: <20260307153143.76893-3-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260307153143.76893-1-mohamed@unpredictable.fr> References: <20260307153143.76893-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: -roV3A7mTYg_WNqNpt_VRM-sA5XYaxwO X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA3MDE0NyBTYWx0ZWRfX65yJxmYoCtP0 YNCijGGpfx2SVVQHeIUoWd8IbBX8LLuVQ1Jx/emAQarOO0b0nsJBAZGTElnxgHBmK4ugA2FtPMW KqmpymtVLBu/N22UnNZpZKs8YZXeDQ/95df9QK12DoQ5su0RjeHu0MbViXhDZG1OgZ8P6GO+oqc omGxRU5HxAJHzcgqf+Nzr8WzEzcyD/hjSkd+sgdnryBLudYwyoYUUR+KjjbmGmhu0Qtb7PpQHSm Uzt1tVfpIB8vHSzhPnT6n//q5WxiwTvS3MQXFykzpqoUsTxM/0jCQK/L/jEXXfrMKcnkW1YLwHu hxWbuBePUucogFF9ZEGtfnkyTjbgcEbSpK5YFxhYCGSmZCO2Ave8PbGhy/Hr3E= X-Authority-Info-Out: v=2.4 cv=KNtXzVFo c=1 sm=1 tr=0 ts=69ac44eb cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=kNOF8fv34t_zTB2Y_VIA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: -roV3A7mTYg_WNqNpt_VRM-sA5XYaxwO X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-07_05,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 malwarescore=0 bulkscore=0 mlxlogscore=978 suspectscore=0 clxscore=1030 phishscore=0 mlxscore=0 lowpriorityscore=0 spamscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603070147 X-JNJ: AAAAAAABQ3bMiDi+3RyI6W2nOEcx+9MV2t1ZOn1+hmduPk3i2NgGBTNQipasIfHDF9ncC8MtmTA//o8dCPOsyX9VX1clWn6vcky1mIOhjmS4VS051nMInGrkBPCHw9Kq8+C4sXy0P2bDmpbnINZRlmeMnAa8120eIFMoqB4p9z8XlAKFcDvk5ItG5pUvP3MSJtk8LCh/EfHeWnn2hSr3u7ZvjbFuOJcwXHIeKacIsBpf0LAVx7D44AkaQZaAwZIk1aPlqqw48GmbfNXsNrp9fyW3gQ1wkm+m5wi+cUJqPM6i74ew9ESK5tMpAA1DYIJEwfjsbBoKeBFJKac25WxGAPxc2FtdNoNUoVPxS6YS0likTsGl9XmanEFZj7HtzpOknCb+kxD3c4ejVvFGjvYN8JFd0MWbKb0VZ4QhyAotOV+fNjZhM912EZYiAibL/luMxt2d06AKx6xEeHXPITVSmXDua+EL62pNQ8x3WnNttH0L0tltQRGtclxKtlbdEjIZkOXypjUuDquW+pgG0VXMeaq1VYmD3A88Asar4YCwCOYOdWytg3yP3eVMQiy4CxSaVyk7ItifsAR4yOICN65vjjVuAYsx3bN4wUAb1CkCjV1j6RG73l62b2sOhxsARjh7hUfwVXLgOzZ3sDRlvuDCX2BCPuwxmXih7o9Xux1hMyvsQCNt1Cj6yogdUmRnglYo71xXpUfeR+uDeNNyYEkrlw1aaoxJEkKKO77j6cqJi0EN1aIOAGYxqIgOZGU8QX+550Y4rkM480xMZt1Xizd86+duXi/rMiLMAOHfw0NXcGHO9ANMHmzh 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.71.21; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -3 X-Spam_score: -0.4 X-Spam_bar: / X-Spam_report: (-0.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1772897684719154100 On HVF, some of the GIC state is in an opaque Apple-provided structure. Save/restore that state to be able to save/restore VMs that use the hardwar= e GIC. Signed-off-by: Mohamed Mediouni Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/intc/arm_gicv3_common.c | 1 + hw/intc/arm_gicv3_hvf.c | 95 ++++++++++++++++++++++++++++-- hw/intc/arm_gicv3_hvf_stub.c | 25 ++++++++ hw/intc/meson.build | 1 + include/hw/intc/arm_gicv3_common.h | 3 + 5 files changed, 121 insertions(+), 4 deletions(-) create mode 100644 hw/intc/arm_gicv3_hvf_stub.c diff --git a/hw/intc/arm_gicv3_common.c b/hw/intc/arm_gicv3_common.c index 9200671c7a..9c3fb2f4bf 100644 --- a/hw/intc/arm_gicv3_common.c +++ b/hw/intc/arm_gicv3_common.c @@ -305,6 +305,7 @@ static const VMStateDescription vmstate_gicv3 =3D { .subsections =3D (const VMStateDescription * const []) { &vmstate_gicv3_gicd_no_migration_shift_bug, &vmstate_gicv3_gicd_nmi, + &vmstate_gicv3_hvf, NULL } }; diff --git a/hw/intc/arm_gicv3_hvf.c b/hw/intc/arm_gicv3_hvf.c index 55171a796b..18e5b3fe68 100644 --- a/hw/intc/arm_gicv3_hvf.c +++ b/hw/intc/arm_gicv3_hvf.c @@ -13,6 +13,7 @@ #include "qemu/error-report.h" #include "qemu/module.h" #include "system/runstate.h" +#include "migration/vmstate.h" #include "system/hvf.h" #include "system/hvf_int.h" #include "hvf_arm.h" @@ -34,8 +35,13 @@ struct HVFARMGICv3Class { =20 typedef struct HVFARMGICv3Class HVFARMGICv3Class; =20 -/* This is reusing the GICv3State typedef from ARM_GICV3_ITS_COMMON */ -DECLARE_OBJ_CHECKERS(GICv3State, HVFARMGICv3Class, +typedef struct HVFGICv3State { + GICv3State gicv3_state; + uint32_t size; + void *state; +} HVFGICv3State; + +DECLARE_OBJ_CHECKERS(HVFGICv3State, HVFARMGICv3Class, HVF_GICV3, TYPE_HVF_GICV3); =20 /* @@ -660,7 +666,7 @@ static const ARMCPRegInfo gicv3_cpuif_reginfo[] =3D { static void hvf_gicv3_realize(DeviceState *dev, Error **errp) { ERRP_GUARD(); - GICv3State *s =3D HVF_GICV3(dev); + GICv3State *s =3D (GICv3State *)HVF_GICV3(dev); HVFARMGICv3Class *kgc =3D HVF_GICV3_GET_CLASS(s); int i; =20 @@ -707,6 +713,87 @@ static void hvf_gicv3_realize(DeviceState *dev, Error = **errp) } } =20 +/* + * HVF doesn't have a way to save the RDIST pending tables + * to guest memory, only to an opaque data structure. + */ +static bool gicv3_is_hvf(void *opaque) +{ + return hvf_enabled() && hvf_irqchip_in_kernel(); +} + +static int hvf_gic_opaque_state_save(void *opaque) +{ + HVFGICv3State *gic =3D opaque; + hv_gic_state_t gic_state; + hv_return_t err; + size_t size; + + gic_state =3D hv_gic_state_create(); + if (gic_state =3D=3D NULL) { + error_report("hvf: vgic: failed to create hv_gic_state_create."); + return 1; + } + err =3D hv_gic_state_get_size(gic_state, &size); + gic->size =3D size; + if (err !=3D HV_SUCCESS) { + error_report("hvf: vgic: failed to get GIC state size."); + os_release(gic_state); + return 1; + } + gic->state =3D g_malloc(gic->size); + err =3D hv_gic_state_get_data(gic_state, gic->state); + if (err !=3D HV_SUCCESS) { + error_report("hvf: vgic: failed to get GIC state."); + os_release(gic_state); + return 1; + } + + os_release(gic_state); + return 0; +} + +static int hvf_gic_opaque_state_free(void *opaque) +{ + HVFGICv3State *gic =3D opaque; + free(gic->state); + return 0; +} + +static int hvf_gic_opaque_state_restore(void *opaque, int version_id) +{ + HVFGICv3State *gic =3D opaque; + hv_return_t err; + if (!gic->size) { + return 0; + } + err =3D hv_gic_set_state(gic->state, gic->size); + if (err !=3D HV_SUCCESS) { + error_report("hvf: vgic: failed to restore GIC state."); + return 1; + } + return 0; +} + +const VMStateDescription vmstate_gicv3_hvf =3D { + .name =3D "arm_gicv3/hvf_gic_state", + .version_id =3D 1, + .minimum_version_id =3D 1, + .needed =3D gicv3_is_hvf, + .pre_save =3D hvf_gic_opaque_state_save, + .post_save =3D hvf_gic_opaque_state_free, + .post_load =3D hvf_gic_opaque_state_restore, + .version_id =3D 1, + .minimum_version_id =3D 1, + .fields =3D (const VMStateField[]) { + VMSTATE_UINT32(size, HVFGICv3State), + VMSTATE_VBUFFER_ALLOC_UINT32(state, + HVFGICv3State, 0, 0, + size), + VMSTATE_END_OF_LIST() + }, +}; + static void hvf_gicv3_class_init(ObjectClass *klass, const void *data) { DeviceClass *dc =3D DEVICE_CLASS(klass); @@ -726,7 +813,7 @@ static void hvf_gicv3_class_init(ObjectClass *klass, co= nst void *data) static const TypeInfo hvf_arm_gicv3_info =3D { .name =3D TYPE_HVF_GICV3, .parent =3D TYPE_ARM_GICV3_COMMON, - .instance_size =3D sizeof(GICv3State), + .instance_size =3D sizeof(HVFGICv3State), .class_init =3D hvf_gicv3_class_init, .class_size =3D sizeof(HVFARMGICv3Class), }; diff --git a/hw/intc/arm_gicv3_hvf_stub.c b/hw/intc/arm_gicv3_hvf_stub.c new file mode 100644 index 0000000000..a587332c7c --- /dev/null +++ b/hw/intc/arm_gicv3_hvf_stub.c @@ -0,0 +1,25 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * ARM Generic Interrupt Controller using HVF platform support stub + * + * Copyright (c) 2026 Mohamed Mediouni + * + */ +#include "qemu/osdep.h" +#include "hw/intc/arm_gicv3_common.h" +#include "migration/vmstate.h" +#include "qemu/typedefs.h" + +static bool needed_never(void *opaque) +{ + return false; +} + +const VMStateDescription vmstate_gicv3_hvf =3D { + .name =3D "arm_gicv3/hvf_gic_state", + .version_id =3D 1, + .minimum_version_id =3D 1, + .needed =3D needed_never, + .version_id =3D 1, + .minimum_version_id =3D 1, +}; diff --git a/hw/intc/meson.build b/hw/intc/meson.build index b7baf8a0f6..c6de2d9d00 100644 --- a/hw/intc/meson.build +++ b/hw/intc/meson.build @@ -43,6 +43,7 @@ arm_common_ss.add(when: 'CONFIG_ARM_GICV3', if_true: file= s('arm_gicv3_cpuif.c')) specific_ss.add(when: 'CONFIG_ARM_GIC_KVM', if_true: files('arm_gic_kvm.c'= )) specific_ss.add(when: ['CONFIG_WHPX', 'TARGET_AARCH64'], if_true: files('a= rm_gicv3_whpx.c')) specific_ss.add(when: ['CONFIG_HVF', 'CONFIG_ARM_GICV3'], if_true: files('= arm_gicv3_hvf.c')) +specific_ss.add(when: ['CONFIG_HVF', 'CONFIG_ARM_GICV3'], if_false: files(= 'arm_gicv3_hvf_stub.c')) specific_ss.add(when: ['CONFIG_ARM_GIC_KVM', 'TARGET_AARCH64'], if_true: f= iles('arm_gicv3_kvm.c', 'arm_gicv3_its_kvm.c')) arm_common_ss.add(when: 'CONFIG_ARM_V7M', if_true: files('armv7m_nvic.c')) specific_ss.add(when: 'CONFIG_GRLIB', if_true: files('grlib_irqmp.c')) diff --git a/include/hw/intc/arm_gicv3_common.h b/include/hw/intc/arm_gicv3= _common.h index 9adcab0a0c..03ab3e8f2f 100644 --- a/include/hw/intc/arm_gicv3_common.h +++ b/include/hw/intc/arm_gicv3_common.h @@ -339,4 +339,7 @@ void gicv3_init_irqs_and_mmio(GICv3State *s, qemu_irq_h= andler handler, */ const char *gicv3_class_name(void); =20 +/* HVF vGIC-specific state: stubbed out on a build with HVF disabled */ +extern const VMStateDescription vmstate_gicv3_hvf; + #endif --=20 2.50.1 (Apple Git-155) From nobody Mon Apr 13 10:39:31 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=1772897626; cv=none; d=zohomail.com; s=zohoarc; b=mnbyGdNIhl+EmLMAvJEXpSCWDbyn0AdZmA5iILsGYR+dr30HC28GrZJKqhb8N5mzsRaA2t0skNQHjQxT0LT3fCZSmx3QRef/CHvsi5jJwozzwe/IuX4ZoGpk5IiozmOh/ZMZwbZbZERK1nbuksZivU/ALOfV/sSMOr+CXY/M//I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772897626; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=MVkulPZG/P32eig2T0uS/HmO19+ssM94R08S2oM1hno=; b=X4tNDsxcFF2SyaX3dmVtBD5Orp8i5k3XpRNAGWqs3UA9gOb4rlIQoKV+KFTR9KjiIhSlzlqSdfEHeKw3sEYRYmEhbdSicYd8/IeSNvnwySQEHN482x/Rf0kFZjhhIO1AbUBvB33VB6E3LkWVydnRXkXdbF83Sxchs37dvb8TT1o= 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 1772897626162332.4830588929933; Sat, 7 Mar 2026 07:33:46 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vytdL-000167-PR; Sat, 07 Mar 2026 10:32:03 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vytdJ-00014b-E4 for qemu-devel@nongnu.org; Sat, 07 Mar 2026 10:32:02 -0500 Received: from p-west2-cluster5-host11-snip4-2.eps.apple.com ([57.103.71.5] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vytdG-0000Mm-Cr for qemu-devel@nongnu.org; Sat, 07 Mar 2026 10:32:01 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-2 (Postfix) with ESMTPS id 3C06F1800140; Sat, 7 Mar 2026 15:31:56 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-2 (Postfix) with ESMTPSA id BCE07180087C; Sat, 7 Mar 2026 15:31:53 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772897517; x=1775489517; bh=MVkulPZG/P32eig2T0uS/HmO19+ssM94R08S2oM1hno=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=cO2I/Fz6IcWTh8tO/W9PJgk/X1EBZMf97VhnUaKHXmJM+yEF5iApD/EFOEytkBCpOU050KpljER7mX9yicH0a1t+juX+xXCApLL9PeW0aVDzV0nf7CGQHR08eA5x3WzZy/Ft+oWVkpu0MiP9LiREgxEr2xqaOMjAYzCChK/uP2fyOqahGgiSE/Z/DBdi8HNO2y9tGg29pcw0RIZjnis9FLt0pzV6Uvp6yOAzSyvnBnyueknBSJXi0nvcAUDpbG9Qwo4ptJU5yDn5ZnrqdaIbWkBFkShc3DOiHSm5U66LVm/WZwg9+Iu88sGn20qQAn1I/7cX/o8TWZfpyghA1tGJ7w== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Phil Dennis-Jordan , Manos Pitsidianakis , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , Roman Bolshakov , Peter Maydell , qemu-arm@nongnu.org, Alexander Graf , Mohamed Mediouni Subject: [PATCH v18 03/13] accel, hw/arm, include/system/hvf: infrastructure changes for HVF vGIC Date: Sat, 7 Mar 2026 16:31:33 +0100 Message-ID: <20260307153143.76893-4-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260307153143.76893-1-mohamed@unpredictable.fr> References: <20260307153143.76893-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: hEpOlZb1lSPuJ0UjE9XgM0-yqgB1_jbC X-Proofpoint-ORIG-GUID: hEpOlZb1lSPuJ0UjE9XgM0-yqgB1_jbC X-Authority-Info-Out: v=2.4 cv=TZObdBQh c=1 sm=1 tr=0 ts=69ac44ed cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=n4FVybPFTm1vobq06wUA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA3MDE0NyBTYWx0ZWRfX1x2kFtg+92ca 8LLrQ99v6Im2ju8kb/bd9/Sdu1oOt32S0fh+90ascqF/714dUkyl2PQ/arpawt/chLgHhCtj1NI BHK/XB+dIr6hI2Wy9k6AvfWVA4Nmt+ULMzKcHWF+IGY9mIKZLr3cf3abUrUzL8Fpb4xU86FERgD /1zrvwI5SPAMIxicGTITU2iSd3HaDMUYaddUASejb6Wf6C1M0jfKlSa/a4rGE1hSFIbUkEaOrVf wXlR/CP+pjC+84Rh26eQ8l2sPSM3YQR85gp1vGpp308kVPb62dG0zCf4UZ3HBiCJc79hJZixOnQ om8Kwi5iJPMd3HNXVlkfvaMTJV+CaE034lWEceGea5i+KPT8bXKXGzF1efn56k= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-07_05,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 clxscore=1030 mlxscore=0 bulkscore=0 phishscore=0 spamscore=0 suspectscore=0 malwarescore=0 lowpriorityscore=0 adultscore=0 mlxlogscore=999 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603070147 X-JNJ: AAAAAAABA2noczgFuzTtSf6/0OI7Le0rpHJehe3wWdxJ8L4IG1Nu0Pf85MooNiQoqeSvVw555RLWPn4lrv95klDPOigcMmTNW8o34xzCAyBYuhbFeKWhZzSPFqHd5P0L7UIZvfmlCmlmMjlUZqvryjYxxIlz23P0mnGGRRf8rC4aPyOwoLRRH0L09Le9UMFkELvNkHK2BVdpd4altlhr4f9TmjxZFMiMWY56ye5Nf9+OKWQ7aOtmvFE8Z43t29kHUYkjYJzm0gcFq0N8Tz40rfU43tHHHoYTg3WG2D/PROLa8x93+UqvM+0KJOIAzjhx4SRPACGjmyf8Lvb/otCuIxIk2kAk/8g/1aW1U17k1Q3aDOA30eg2gtV4DhNgH/WfV6NTPuzdSaHr6r+x/sScgELhbnqYIsFNhl0m20HVLhVRlPd2A0z3gKz783CmuvWhZ5kPttwdUbUIGhNFXQdyKCniUawu8dWA1EnenPc2V1/mAutLuEhXnm+4xtuoJpiPikmX285kQc8f35RIzQy6TFyNseuNrHOtyzB5v90KL5HXrrhlVD/bXEAutIxwy4ZBZtBaFj24ZU7sFJ1OqpNjH1TCeYmGVTcKg5yCRN/jotqajM4johjeCNSiRKYVMVe/aylconqnt1UhTnasAGPi2n5uNqML/cHvXxhsQkFJnSSXe1HVMg9SbKj69cF47KcGVz4Nn4756BE5uncAtJAF89iDkFFFIiTLgw+51v9J57wUafAFP6jaFHrH+yB4JAaDU1Axymc= 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.71.5; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -3 X-Spam_score: -0.4 X-Spam_bar: / X-Spam_report: (-0.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1772897627840154100 Misc changes needed for HVF vGIC enablement. Note: x86_64 macOS exposes interrupt controller virtualisation since macOS = 12. Keeping an #ifdef here in case we end up supporting that... However, given that x86_64 macOS is on its way out, it'll probably (?) not = be supported in Qemu. Signed-off-by: Mohamed Mediouni Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- accel/hvf/hvf-all.c | 50 ++++++++++++++++++++++++++++++++++++++ accel/stubs/hvf-stub.c | 1 + hw/arm/virt.c | 23 +++++++++++++++--- hw/intc/arm_gicv3_common.c | 3 +++ include/system/hvf.h | 3 +++ system/vl.c | 2 ++ 6 files changed, 78 insertions(+), 4 deletions(-) diff --git a/accel/hvf/hvf-all.c b/accel/hvf/hvf-all.c index 5f357c6d19..a296b108bc 100644 --- a/accel/hvf/hvf-all.c +++ b/accel/hvf/hvf-all.c @@ -10,6 +10,8 @@ =20 #include "qemu/osdep.h" #include "qemu/error-report.h" +#include "qapi/error.h" +#include "qapi/qapi-visit-common.h" #include "accel/accel-ops.h" #include "exec/cpu-common.h" #include "system/address-spaces.h" @@ -21,6 +23,7 @@ #include "trace.h" =20 bool hvf_allowed; +bool hvf_kernel_irqchip; =20 const char *hvf_return_string(hv_return_t ret) { @@ -216,6 +219,43 @@ static int hvf_gdbstub_sstep_flags(AccelState *as) return SSTEP_ENABLE | SSTEP_NOIRQ; } =20 +static void hvf_set_kernel_irqchip(Object *obj, Visitor *v, + const char *name, void *opaque, + Error **errp) +{ + OnOffSplit mode; + if (!visit_type_OnOffSplit(v, name, &mode, errp)) { + return; + } + + switch (mode) { + case ON_OFF_SPLIT_ON: +#ifdef HOST_X86_64 + /* macOS 12 onwards exposes an HVF virtual APIC. */ + error_setg(errp, "HVF: kernel irqchip is not currently implemented= for x86."); + break; +#else + hvf_kernel_irqchip =3D true; + break; +#endif + + case ON_OFF_SPLIT_OFF: + hvf_kernel_irqchip =3D false; + break; + + case ON_OFF_SPLIT_SPLIT: + error_setg(errp, "HVF: split irqchip is not supported on HVF."); + break; + + default: + /* + * The value was checked in visit_type_OnOffSplit() above. If + * we get here, then something is wrong in QEMU. + */ + abort(); + } +} + static void hvf_accel_class_init(ObjectClass *oc, const void *data) { AccelClass *ac =3D ACCEL_CLASS(oc); @@ -223,6 +263,16 @@ static void hvf_accel_class_init(ObjectClass *oc, cons= t void *data) ac->init_machine =3D hvf_accel_init; ac->allowed =3D &hvf_allowed; ac->gdbstub_supported_sstep_flags =3D hvf_gdbstub_sstep_flags; +#ifdef HOST_X86_64 + hvf_kernel_irqchip =3D false; +#else + hvf_kernel_irqchip =3D true; +#endif + object_class_property_add(oc, "kernel-irqchip", "on|off|split", + NULL, hvf_set_kernel_irqchip, + NULL, NULL); + object_class_property_set_description(oc, "kernel-irqchip", + "Configure HVF irqchip"); } =20 static const TypeInfo hvf_accel_type =3D { diff --git a/accel/stubs/hvf-stub.c b/accel/stubs/hvf-stub.c index 42eadc5ca9..6bd08759ba 100644 --- a/accel/stubs/hvf-stub.c +++ b/accel/stubs/hvf-stub.c @@ -10,3 +10,4 @@ #include "system/hvf.h" =20 bool hvf_allowed; +bool hvf_kernel_irqchip; diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 7456614d05..7a6fad1094 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -837,7 +837,7 @@ static void create_gic(VirtMachineState *vms, MemoryReg= ion *mem) * interrupts; there are always 32 of the former (mandated by GIC spec= ). */ qdev_prop_set_uint32(vms->gic, "num-irq", NUM_IRQS + 32); - if (!kvm_irqchip_in_kernel()) { + if (!kvm_irqchip_in_kernel() && !hvf_irqchip_in_kernel()) { qdev_prop_set_bit(vms->gic, "has-security-extensions", vms->secure= ); } =20 @@ -860,7 +860,8 @@ static void create_gic(VirtMachineState *vms, MemoryReg= ion *mem) qdev_prop_set_array(vms->gic, "redist-region-count", redist_region_count); =20 - if (!kvm_irqchip_in_kernel()) { + if (!kvm_irqchip_in_kernel() && + !(hvf_enabled() && hvf_irqchip_in_kernel())) { if (vms->tcg_its) { object_property_set_link(OBJECT(vms->gic), "sysmem", OBJECT(mem), &error_fatal); @@ -871,7 +872,7 @@ static void create_gic(VirtMachineState *vms, MemoryReg= ion *mem) ARCH_GIC_MAINT_IRQ); } } else { - if (!kvm_irqchip_in_kernel()) { + if (!kvm_irqchip_in_kernel() && !hvf_irqchip_in_kernel()) { qdev_prop_set_bit(vms->gic, "has-virtualization-extensions", vms->virt); } @@ -2118,7 +2119,15 @@ static void finalize_gic_version(VirtMachineState *v= ms) accel_name =3D "KVM with kernel-irqchip=3Doff"; } else if (whpx_enabled()) { gics_supported |=3D VIRT_GIC_VERSION_3_MASK; - } else if (tcg_enabled() || hvf_enabled() || qtest_enabled()) { + } else if (hvf_enabled()) { + if (!hvf_irqchip_in_kernel()) { + gics_supported |=3D VIRT_GIC_VERSION_2_MASK; + } + /* Hypervisor.framework doesn't expose EL2<->1 transition notifier= s */ + if (!(!hvf_irqchip_in_kernel() && vms->virt)) { + gics_supported |=3D VIRT_GIC_VERSION_3_MASK; + } + } else if (tcg_enabled() || qtest_enabled()) { gics_supported |=3D VIRT_GIC_VERSION_2_MASK; if (module_object_class_by_name("arm-gicv3")) { gics_supported |=3D VIRT_GIC_VERSION_3_MASK; @@ -2160,6 +2169,8 @@ static void finalize_msi_controller(VirtMachineState = *vms) vms->msi_controller =3D VIRT_MSI_CTRL_GICV2M; } else if (whpx_enabled()) { vms->msi_controller =3D VIRT_MSI_CTRL_GICV2M; + } else if (hvf_enabled() && hvf_irqchip_in_kernel()) { + vms->msi_controller =3D VIRT_MSI_CTRL_GICV2M; } else { vms->msi_controller =3D VIRT_MSI_CTRL_ITS; } @@ -2179,6 +2190,10 @@ static void finalize_msi_controller(VirtMachineState= *vms) error_report("ITS not supported on WHPX."); exit(1); } + if (hvf_enabled() && hvf_irqchip_in_kernel()) { + error_report("ITS not supported on HVF when using the hardware= vGIC."); + exit(1); + } } =20 assert(vms->msi_controller !=3D VIRT_MSI_CTRL_AUTO); diff --git a/hw/intc/arm_gicv3_common.c b/hw/intc/arm_gicv3_common.c index 9c3fb2f4bf..f7ba74e6d5 100644 --- a/hw/intc/arm_gicv3_common.c +++ b/hw/intc/arm_gicv3_common.c @@ -33,6 +33,7 @@ #include "hw/arm/linux-boot-if.h" #include "system/kvm.h" #include "system/whpx.h" +#include "system/hvf.h" =20 =20 static void gicv3_gicd_no_migration_shift_bug_post_load(GICv3State *cs) @@ -659,6 +660,8 @@ const char *gicv3_class_name(void) return "kvm-arm-gicv3"; } else if (whpx_enabled()) { return TYPE_WHPX_GICV3; + } else if (hvf_enabled() && hvf_irqchip_in_kernel()) { + return TYPE_HVF_GICV3; } else { if (kvm_enabled()) { error_report("Userspace GICv3 is not supported with KVM"); diff --git a/include/system/hvf.h b/include/system/hvf.h index d3dcf088b3..dc8da85979 100644 --- a/include/system/hvf.h +++ b/include/system/hvf.h @@ -26,8 +26,11 @@ #ifdef CONFIG_HVF_IS_POSSIBLE extern bool hvf_allowed; #define hvf_enabled() (hvf_allowed) +extern bool hvf_kernel_irqchip; +#define hvf_irqchip_in_kernel() (hvf_kernel_irqchip) #else /* !CONFIG_HVF_IS_POSSIBLE */ #define hvf_enabled() 0 +#define hvf_irqchip_in_kernel() 0 #endif /* !CONFIG_HVF_IS_POSSIBLE */ =20 #define TYPE_HVF_ACCEL ACCEL_CLASS_NAME("hvf") diff --git a/system/vl.c b/system/vl.c index 38d7b849e0..871799a2ae 100644 --- a/system/vl.c +++ b/system/vl.c @@ -1780,6 +1780,8 @@ static void qemu_apply_legacy_machine_options(QDict *= qdict) false); object_register_sugar_prop(ACCEL_CLASS_NAME("whpx"), "kernel-irqch= ip", value, false); + object_register_sugar_prop(ACCEL_CLASS_NAME("hvf"), "kernel-irqchi= p", value, + false); qdict_del(qdict, "kernel-irqchip"); } =20 --=20 2.50.1 (Apple Git-155) From nobody Mon Apr 13 10:39:31 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=1772897682; cv=none; d=zohomail.com; s=zohoarc; b=jv7GRbnWT0nAXfyv9zdF0DczdtkJte5CuofsgaxIGVGma3xHSkb1W9t74uIJEWTm2PNTpBk68J5LQ99lvp4t/yjwkuDLBNHDN/L/3C5H3AQaXcJMlp6sGq5RQWMRew54W3NcVYUNab4lNNUimy2FIuU+ySDMHHW6u0VOVbbm5Dg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772897682; 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=eYeB014LhZHAV9CwpOPxRgAEb60+L8+Y/QgrP5UgqAk=; b=AgF3rngHfLPVCXUhulL8BfzZPZv2llwxkawnXaRy40NFcj579yF2dYoLYGbrxy8RL3BUY09jDsdh58DzGemcWF2YZsLDV6Bih+YGtKChvtcDzdoTPMby51jikPGHqo1JQYieXf/Xh6eyCqcaUCRJftGWBA2YHQae9JXs3EhTjFk= 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 1772897682024457.8659870918385; Sat, 7 Mar 2026 07:34:42 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vytdM-00016X-KH; Sat, 07 Mar 2026 10:32:04 -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 1vytdL-00015d-C0 for qemu-devel@nongnu.org; Sat, 07 Mar 2026 10:32:03 -0500 Received: from p-west2-cluster5-host6-snip4-1.eps.apple.com ([57.103.71.54] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vytdJ-0000NS-Tb for qemu-devel@nongnu.org; Sat, 07 Mar 2026 10:32:03 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-2 (Postfix) with ESMTPS id 9A585180017D; Sat, 7 Mar 2026 15:31:58 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-2 (Postfix) with ESMTPSA id 0C52E1800855; Sat, 7 Mar 2026 15:31:55 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772897520; x=1775489520; bh=eYeB014LhZHAV9CwpOPxRgAEb60+L8+Y/QgrP5UgqAk=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=VbJJXP0xqLo/DzfWT+7Qa4caSLUkoNpuEaKbvJt6XliMxPd9Un9NQObT0+645UGcNt1TKtqXoFUKO/gkd9j2l7LJA6gAPjoFQg6CXlWQsIDQ/9MhAdnhcrK2/bTsQeLYUb+wuJ7Fpx3Fg3BkLpbeBV/5vsc83Y3lPTSl4w5BkcMZEue0fA+6Rq6U9XNc2XtPyJUL5iLUSNJaLvbkBrU9m4tiZmR8ozR1DARQVnEdqGnlNNNlKG0S2HM/4gW5Vhedh8zB4gxN59yZdwllQJCPK5JIF87I/tXL50H+EEeWLD6gyluDF7FR8Dv3r40nnEmXVuJfGaNv7utvJl7Vjk3M/w== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Phil Dennis-Jordan , Manos Pitsidianakis , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , Roman Bolshakov , Peter Maydell , qemu-arm@nongnu.org, Alexander Graf , Mohamed Mediouni Subject: [PATCH v18 04/13] target/arm: hvf: instantiate GIC early Date: Sat, 7 Mar 2026 16:31:34 +0100 Message-ID: <20260307153143.76893-5-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260307153143.76893-1-mohamed@unpredictable.fr> References: <20260307153143.76893-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: fi91gC0J7W60CZfoSgIU_SP4IcQS399q X-Proofpoint-ORIG-GUID: fi91gC0J7W60CZfoSgIU_SP4IcQS399q X-Authority-Info-Out: v=2.4 cv=TZObdBQh c=1 sm=1 tr=0 ts=69ac44ef cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=gV1jYa02L3q0mTRDDQ4A:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA3MDE0NyBTYWx0ZWRfXzSe6DOpxGgtY 6R6Xaihat+qzSVjm3hsvPiZOox07jjPVDhV8ebiCs7Yzf5LNQR0iioILjuQ8GLWeOrpDJrC1Nzk 7o1/VAh7F2toUn5n4PWGr3VNFx7B4kiyI7oMyxnA0ZEYE7u1FQRCNITjzfab/Y88QoyDMY8aTPJ m6eOXNvdLT9Q5nN853cT6myPtPAmfUr6rTVQHILEy50ri8CIigOfQhmFw2WDiD1nXKjFCViDc3+ a1sSntRbX2Gow1YZc9x7Si2xLAqC+ux0qA05L0pKA9VIpX2dKg6Gz5JLxy5Yat5Yptd60zVdLA0 SiLXfH7UV8+mKiKtrzV9PCfR9PHBlcXPMgCjvxPK4Zgbz33Mr5DnFQILJazza4= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-07_05,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 clxscore=1030 mlxscore=0 bulkscore=0 phishscore=0 spamscore=0 suspectscore=0 malwarescore=0 lowpriorityscore=0 adultscore=0 mlxlogscore=554 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603070147 X-JNJ: AAAAAAAB9USg/DPU08XFK4vDO20BEL27hof51FWhDDuADiwapgFuMIMxd1FztpPW8EzR6srRNPoj6zKa0cppLHxRN6mHovXxSx6LpEADXXd+nhLqFjahRwBLB82tNgbsZf3lQ6pUrHyAh6Q861sUtJuMyGFAq1V4dtTF5NpOIVZwKbGKos0b9slPYqggRdOd7ckb5Gh73InnWOzffyYOnGX3+vqlyqbGp4BS7tqGcIVJykiRTNwWwX7e0isPkHcMc06+B39fDQD70vnASd5RjM+RvJ1zxg6iy0zUej2u6il8BMbZ4K3ZE9o4tPsBSh9pTZYjJ6n+yhJSkMTTA3HtXjLPmikfdkRRtvcjHMJg6jHrQScDZaRU21msCFBGXy2kFSYwQvFYEZPMkxXvfCnobB1TmLNq7smYMsRcc32XTQK7wryPorEeRNqaxglzgkESIgZn/4NyGdJK+h7d1Vu0lZDj0vYr0rFRyiQLhdED/JQtE/V8cuk9QIMd8hHir2H/eeX7OJn59vAp3cRr6Cbm+NstS5G69qn9qeZ4lXw80kdGzSqQGud2IgwipqGC2++P64R5nULuEg6iy41oVDCl1VQ1v0CjASPK70ZETRzmR0WzPdS00Kuf2B56zsdAKbHj9zhcc3rN4BkrvL1XWW0gARjJ7elO2N2iyMwwwGiUw2CEv8cLQAu2XxOcrDEBdM53XE2EWCsBsfh2IBG9xevhqvCfQK+BS9XFS0n5Vw== 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.71.54; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -3 X-Spam_score: -0.4 X-Spam_bar: / X-Spam_report: (-0.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1772897684639154100 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 Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- target/arm/hvf/hvf.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index 5fc8f6bbbd..d431d96ba3 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -1230,6 +1230,28 @@ hv_return_t hvf_arch_vm_create(MachineState *ms, uin= t32_t pa_range) chosen_ipa_bit_size =3D pa_range; =20 ret =3D hv_vm_create(config); + if (hvf_irqchip_in_kernel()) { + if (__builtin_available(macOS 15.0, *)) { + /* + * Instantiate GIC. + * This must be done prior to the creation of any vCPU + * but past hv_vm_create() + */ + hv_gic_config_t cfg =3D hv_gic_config_create(); + hv_gic_config_set_distributor_base(cfg, 0x08000000); + hv_gic_config_set_redistributor_base(cfg, 0x080A0000); + ret =3D hv_gic_create(cfg); + if (ret !=3D HV_SUCCESS) { + error_report("error creating platform VGIC"); + goto cleanup; + } + os_release(cfg); + } else { + error_report("HVF: Unsupported OS for platform vGIC."); + ret =3D HV_UNSUPPORTED; + goto cleanup; + } + } =20 cleanup: os_release(config); --=20 2.50.1 (Apple Git-155) From nobody Mon Apr 13 10:39:31 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=1772897549; cv=none; d=zohomail.com; s=zohoarc; b=dnQWM8HQqrs1R7iHHcsWYFM1lS6RgLsVeIUgwuUDIiO/u4PxJPEOpO+ptNrJ2DhW5aPA92aIFHlqj93zEWDjb+qmFi4Xm+Hf0FeP9Q2xBbWzYtOIwp9DvzVOkazhOMICR4ISm2UUeAiBIwW6eH3Ce6M+l/Q5LIfTpE/cw79Z+no= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772897549; 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=HZmqQzxJCjBZQArI2piKO+ptXrnDlXDWh7opIfg+Rog=; b=CFQi1TOciFQMFbHrVYi+XjyYSQOgLMfQkiZyVlYM9jPPhP4oM5vy0qVquUgQSsCPYz/76LKeTlTdlOsWSPPKDJIoXSv5PnA8m0p7g/jAGXEFa11oNPB/njYnyOfimAwGWYF3DIwOV8OnwDsBSkzMpz/okB6SywwJLoxzHedPBYY= 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 1772897549287210.46559171086528; Sat, 7 Mar 2026 07:32:29 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vytdO-00018B-Hw; Sat, 07 Mar 2026 10:32:06 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vytdN-00017J-0A for qemu-devel@nongnu.org; Sat, 07 Mar 2026 10:32:05 -0500 Received: from p-west2-cluster5-host11-snip4-10.eps.apple.com ([57.103.71.13] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vytdL-0000OD-Cj for qemu-devel@nongnu.org; Sat, 07 Mar 2026 10:32:04 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-2 (Postfix) with ESMTPS id CDC4B180054B; Sat, 7 Mar 2026 15:32:00 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-2 (Postfix) with ESMTPSA id 500C11800175; Sat, 7 Mar 2026 15:31:58 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772897522; x=1775489522; bh=HZmqQzxJCjBZQArI2piKO+ptXrnDlXDWh7opIfg+Rog=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=X2HuxmqREBEL5B4ZoNAK5+yW8zwl7xnPGNe1gCspp0vYs9JPCDAq1y6wflKV0h3Sm4VC0wNIu9dpXvkhMex7KUh3i8OYo5xDzWO1/UVftvuqz1lpIne7QYR8EqlgdGu9LgLdRMUV7FpjAOHLJ4RF16vCZ945/HYmradWeSG1VbqJn4o/laY/yJCsgJ/ay142iKk80TUw54xXvTjqyKZkzS/1Qxc0b+LNy4AVy5Z21I16L0+PQTrPw4jH7+CdGYeq7Ds5KBOt58l3lsLJRdDKz0uKC5GT7Bn3uQOgIZJ8BB+1dNIMmopifArUB8V1y6bn907j4W/X42fEoYN1xOWMWw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Phil Dennis-Jordan , Manos Pitsidianakis , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , Roman Bolshakov , Peter Maydell , qemu-arm@nongnu.org, Alexander Graf , Mohamed Mediouni Subject: [PATCH v18 05/13] hw/arm, target/arm: nested virtualisation on HVF Date: Sat, 7 Mar 2026 16:31:35 +0100 Message-ID: <20260307153143.76893-6-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260307153143.76893-1-mohamed@unpredictable.fr> References: <20260307153143.76893-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info-Out: v=2.4 cv=AtjjHe9P c=1 sm=1 tr=0 ts=69ac44f1 cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=0QeE6rx795gg9bSW8oEA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA3MDE0NyBTYWx0ZWRfXw/njoMwdKNTi kSCJBA6UtF9sAMKev+NYx2BZ5QNkdc0Vz2+JnBPZpfR8oJDYolOczzaY5ffsAY8WiMzcmM+SYHb kDOItuqk8QhVYIjwLX3VspWUlwpot9Z6XKjYyC3Df7H/VlaXO1DL7KxkwOiCBPhaO4vgzrUuEG7 zHTnetCHfb82VLMIrv/dltxPiNCLPeF78lk1ECRKLPePdLJLkLeifI+t0ZV0eJygTQr0uRo/Hph 0KOiI7MDbwWWIW3P4POXtkGBw52gKWVnhLVt12rK7U7H/xh4qXxzOSXJ8IrzuubiSkwoFcen6Wj lrxZc+rCVuuCFH5/XcghD6h2R07bdYVsKPdrzYBhfgXlf6mOqIKrUw1O9NYV7Q= X-Proofpoint-GUID: nQkR7f3ULD9wOh59KsMqW56oKFmcnFaJ X-Proofpoint-ORIG-GUID: nQkR7f3ULD9wOh59KsMqW56oKFmcnFaJ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-07_05,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=795 mlxscore=0 spamscore=0 bulkscore=0 malwarescore=0 suspectscore=0 clxscore=1030 phishscore=0 adultscore=0 lowpriorityscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603070147 X-JNJ: AAAAAAABzJlcOI7Y2snltwlTxHeE9SxiUPPixCdp9cB9WfTIybYsgyji9DTZb2InhKU2AtyPXRR/9Qs0X9bem7XIrL0c0WEYMf/sePHWwsa7KyLzDCu8BMJGQZVyj2eLacvm6ITdJoK1mjYhvjh/smb3ayPbxPhovRsRUZXof3pcq1vOqjnQqYI50xdDetZzRBPH0DFda5l/TWnpBzWhdITrMOL0RPMXtMS6l6Re/YuPIyzGC1gUKnLmcJ4ZNtbP851mDHsK9I/+Yub3iM1jcQ07AtQZEpRk8psvuUet38A1aggZNrYUvS1g5uHfL1Dj49ZN/H9FFINj0HMFu/fs8i+YzPLb0WneY92wtYHZQWV1yZfJMLpqkKCJOILg+mQ7B2JbdW7A8iDHk4/7WrofRI9LlR4Lr8kpp48yP0MABE27auV7Ofy3pswLXPfrs5O0AaXZboxo2rD9YI7qgT2NMoEDoOJlCYt/JLmXeka50/qrpEdb44+QBp5/HMi0vvRdPRtLFIBu6Jjev7Qg42qwEUrFVI6czkpoDKonj5ZzZhXBJBOyh3l44xqQO7amxiEZeHJbpYDoAZBHSoEH1lTwezW2Nzjg3t7GidUaGP64Z9KvxG4i3J+AJUBormL3F42PvB0ogWGesbtNV7jvbYotXJPOC6U7OVFg5PpX3ozk901Og0WlVvNue2e6L/0WK207oAjJyd27f982znYrNseueYiILChr6yclHXryTnR2zBIsPw== 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.71.13; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1772897551131154100 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 | 42 ++++++++++++++++++++++++++++++++++++++++-- 5 files changed, 52 insertions(+), 2 deletions(-) diff --git a/accel/hvf/hvf-all.c b/accel/hvf/hvf-all.c index a296b108bc..1c1437b467 100644 --- a/accel/hvf/hvf-all.c +++ b/accel/hvf/hvf-all.c @@ -24,6 +24,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 7a6fad1094..90769936d0 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -2661,6 +2661,11 @@ static void virt_set_virt(Object *obj, bool value, E= rror **errp) VirtMachineState *vms =3D VIRT_MACHINE(obj); =20 vms->virt =3D value; + /* + * At this point, HVF is not initialised yet. + * However, it needs to know if nested virt is enabled at init time. + */ + hvf_nested_virt_enable(value); } =20 static bool virt_get_highmem(Object *obj, Error **errp) diff --git a/include/system/hvf.h b/include/system/hvf.h index dc8da85979..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 d431d96ba3..d6ef4488fa 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -27,6 +27,7 @@ #include "system/memory.h" #include "hw/core/boards.h" #include "hw/core/irq.h" +#include "hw/arm/virt.h" #include "qemu/main-loop.h" #include "system/cpus.h" #include "arm-powerctl.h" @@ -1103,6 +1104,10 @@ static bool hvf_arm_get_host_cpu_features(ARMHostCPU= Features *ahcf) (1ULL << ARM_FEATURE_PMU) | (1ULL << ARM_FEATURE_GENERIC_TIMER); =20 + if (hvf_nested_virt_enabled()) { + ahcf->features |=3D 1ULL << ARM_FEATURE_EL2; + } + for (i =3D 0; i < ARRAY_SIZE(regs); i++) { r |=3D hv_vcpu_config_get_feature_reg(config, regs[i].reg, &host_isar.idregs[regs[i].inde= x]); @@ -1218,6 +1223,19 @@ void hvf_arch_vcpu_destroy(CPUState *cpu) assert_hvf_ok(ret); } =20 +static bool hvf_arm_el2_supported(void) +{ + bool is_nested_virt_supported; + if (__builtin_available(macOS 15.0, *)) { + hv_return_t ret =3D hv_vm_config_get_el2_supported(&is_nested_virt= _supported); + assert_hvf_ok(ret); + } else { + return false; + } + return is_nested_virt_supported; +} + + hv_return_t hvf_arch_vm_create(MachineState *ms, uint32_t pa_range) { hv_return_t ret; @@ -1229,6 +1247,20 @@ hv_return_t hvf_arch_vm_create(MachineState *ms, uin= t32_t pa_range) } chosen_ipa_bit_size =3D pa_range; =20 + if (__builtin_available(macOS 15.0, *)) { + if (hvf_nested_virt_enabled()) { + if (!hvf_arm_el2_supported()) { + error_report("Nested virtualization not supported on this = system."); + goto cleanup; + } + ret =3D hv_vm_config_set_el2_enabled(config, true); + if (ret !=3D HV_SUCCESS) { + error_report("Failed to enable nested virtualization."); + goto cleanup; + } + } + } + ret =3D hv_vm_create(config); if (hvf_irqchip_in_kernel()) { if (__builtin_available(macOS 15.0, *)) { @@ -1420,6 +1452,13 @@ static void hvf_psci_cpu_off(ARMCPU *arm_cpu) assert(ret =3D=3D QEMU_ARM_POWERCTL_RET_SUCCESS); } =20 +static int hvf_psci_get_target_el(void) +{ + if (hvf_nested_virt_enabled()) { + return 2; + } + return 1; +} /* * Handle a PSCI call. * @@ -1441,7 +1480,6 @@ static bool hvf_handle_psci_call(CPUState *cpu, int *= excp_ret) CPUState *target_cpu_state; ARMCPU *target_cpu; target_ulong entry; - int target_el =3D 1; int32_t ret =3D 0; =20 trace_arm_psci_call(param[0], param[1], param[2], param[3], @@ -1495,7 +1533,7 @@ static bool hvf_handle_psci_call(CPUState *cpu, int *= excp_ret) entry =3D param[2]; context_id =3D param[3]; ret =3D arm_set_cpu_on(mpidr, entry, context_id, - target_el, target_aarch64); + hvf_psci_get_target_el(), target_aarch64); break; case QEMU_PSCI_0_1_FN_CPU_OFF: case QEMU_PSCI_0_2_FN_CPU_OFF: --=20 2.50.1 (Apple Git-155) From nobody Mon Apr 13 10:39:31 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=1772897604; cv=none; d=zohomail.com; s=zohoarc; b=kNQn6+CHKp69fDOwqn2qzFNOyfgiYzMmuN+phNasXvEXPH2+ngWkvEs0/Dp+9FtHLZBRlgNZ2GMdqPqFMtBiVQJqvefqAWMRsfuHqSYqEDEQ6UnANu3B3dGznD9jR8BozKqmHGXaZxIjz5d7pDx1PNPbM8X3bIphjDLQ6qcnrt8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772897604; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=eCZw8ecsKyAPOmb83e7ghwj/bQ3BfEAJzVmCsc2mLa8=; b=lJo8j267kQ3vlSvFDZhNFY9RLb2CdWocb+4inCSIExDQZP1coKk7bi6Gg61bLXF+CViv2L9VEmyeS92vmM+3Pixl1ykCMBkXkv2FTo2/q6rRiu8ITC3zA8nN4PTISmDzBRhh4V7OAo1bcy2bKAeSQZL7oyvjiQHCaRCw7qjjO3M= 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 1772897604634123.91593361160005; Sat, 7 Mar 2026 07:33:24 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vytdR-000195-8Y; Sat, 07 Mar 2026 10:32:09 -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 1vytdP-00018b-Ol for qemu-devel@nongnu.org; Sat, 07 Mar 2026 10:32:08 -0500 Received: from p-west2-cluster5-host11-snip4-1.eps.apple.com ([57.103.71.4] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vytdO-0000Or-Bp for qemu-devel@nongnu.org; Sat, 07 Mar 2026 10:32:07 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-2 (Postfix) with ESMTPS id 7F9A8180055A; Sat, 7 Mar 2026 15:32:03 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-2 (Postfix) with ESMTPSA id 96CD91800168; Sat, 7 Mar 2026 15:32:00 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772897525; x=1775489525; bh=eCZw8ecsKyAPOmb83e7ghwj/bQ3BfEAJzVmCsc2mLa8=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=QkQasoBLSFYehyj1DDK5ChLm23doHJfmBVTieh0bnec8qjdcX6xLNFTLATMMrqI5imLSZs8NdaTolMtC9TlaAVwiQDQGQRNsikfxy9jJND3IUPBb/Ss/Ie0NzfGiVgA0yfNL8+//ZSdFN6xnWPESBxCKFnPDpiJmft1zIHoGXirVWRPqGFNLVmjQbC/Ds8t5YDyn+pqMqR+neQAm7FoaKnd/VJAFuWrxKRR7TL9xNX9INc8x1/jE33GR6e9+k/ymR43lqa8R4OfxtlLHsT+FGIjGTJQw8jL2ox6Bl/EscNS88GAv1/B3Ca/7BoE085ooRgPUl3kNzvmAPrzOsBU40A== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Phil Dennis-Jordan , Manos Pitsidianakis , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , Roman Bolshakov , Peter Maydell , qemu-arm@nongnu.org, Alexander Graf , Mohamed Mediouni , Mads Ynddal Subject: [PATCH v18 06/13] hvf: only call hvf_sync_vtimer() when running without the platform vGIC Date: Sat, 7 Mar 2026 16:31:36 +0100 Message-ID: <20260307153143.76893-7-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260307153143.76893-1-mohamed@unpredictable.fr> References: <20260307153143.76893-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: gG0dO_id40BrLS-_rnOwFEZBcQqMsOnv X-Proofpoint-ORIG-GUID: gG0dO_id40BrLS-_rnOwFEZBcQqMsOnv X-Authority-Info-Out: v=2.4 cv=TZObdBQh c=1 sm=1 tr=0 ts=69ac44f4 cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=PzQS8Z__MZ2uSZov3vkA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA3MDE0NyBTYWx0ZWRfXy5RH3+Oujl6W mykAAZssZwif6XRLYUFOEIBWA6vkvWJrhj1nUyItE91HjcMBy3q6E7oRl/4ipnA4tjeEjG2yNOG 1DwwnyuOW8ifX/WO2clqEO/2eM+7oanTApBNgTkZ0RXrGphe4uFJBu0ZcfrU+rpaRHzn0I8c6Xf 24zDwCM2O52h2kZmJIb69w8gmX3XoaIrMWeGtkgy4MxamctHuSjqY7e/38Z/wVuUdYtUqFR9Qu3 rgWtj6lQKA1DRfuC6FNzRWg4RaCslepw5cq9G2mUDm6C6nlzpMZTPVV3gU3tQ7tav/+NJM0GtDT xq/6cqLlx2AZbg+lHwWeBE86d+Y1YWwgqwzuvok749iZLYmsCTBNIyfue5da98= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-07_05,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 clxscore=1030 mlxscore=0 bulkscore=0 phishscore=0 spamscore=0 suspectscore=0 malwarescore=0 lowpriorityscore=0 adultscore=0 mlxlogscore=896 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603070147 X-JNJ: AAAAAAABa9P6uPeuMHpTDEpgow8d8XuXoNP+FOfwC9yJ66P99LheH8rcGdL9gRCag2St5JvvqBOy3RjhzsR+E+w4z/k/8s25ILRydK8s9p8LuRwErizWSrQ7MAS/j1q5gO6GoLedemmL9Zt3dHCM1TksjoQWekFZgrm+fxsoTtV1ZyqUIAXMWZfYcjsFj9+MoQkAKJu8ZEdcXROAjsKaBCDx1mZiJfxQ1+EIoj4QYGpMAqaKE7YA2kK5CqBMLm/okDupmR31y6wXCU0uX85h6OzcEEaljhT7Ad+OWKJwjvnNhQNJFhA0KtwuvOOso9EfkQOVj/WENuHKMY/3ZfzFh+ruFC/qT2M8wzx4AgqHPOoqqIKmcPbcvg3gO8u/S7dSk0YUOj9yixu+RxrSV27nQSnsCyXV4MFK3cVUVz5FhA/vVmC9njAdr75uqD39wSkAVv71x6UBC890Qb9CwguDoP3EkcE9WEAXH7+RbvCJNPGkNygsUwtO6txVhtt8XFqkMC4nAF7ltUXmzw9W2ItXnP71vhcCfwpF4wNHvH1khaZ7gpwGR692qDLUK6eWJ3JoznDkAiS2WmGl+WHzFq+PGOvwpd5WlBOX49q1uJzsW0XgWAi2Z+eipVk5WoN2Y9cvnqOm8aOtRb8dxcXyPdkCmg8oHmIJR59Cx6ldVdIVNlT4HzyplWYiuBspVmsLZ05LFvvZgqZPbnY6XyZ1fRhxI2LSYgMtJ7nzWL9S11qgq/OJEiInvohVHAaL0DyuZ9dQkEWKpzxRBB18Aw== 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.71.4; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1772897607426154100 When running with the Apple vGIC, the EL1 vtimer is handled by the platform. Signed-off-by: Mohamed Mediouni Reviewed-by: Mads Ynddal Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- target/arm/hvf/hvf.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index d6ef4488fa..04c4106a3e 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -2368,7 +2368,9 @@ static int hvf_handle_vmexit(CPUState *cpu, hv_vcpu_e= xit_t *exit) =20 switch (exit->reason) { case HV_EXIT_REASON_EXCEPTION: - hvf_sync_vtimer(cpu); + if (!hvf_irqchip_in_kernel()) { + hvf_sync_vtimer(cpu); + } ret =3D hvf_handle_exception(cpu, &exit->exception); break; case HV_EXIT_REASON_VTIMER_ACTIVATED: --=20 2.50.1 (Apple Git-155) From nobody Mon Apr 13 10:39:31 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=1772897603; cv=none; d=zohomail.com; s=zohoarc; b=oCUjLVn/GOqYeb5nWvi2yTvZWytsVVFDE8OY4aw66BjyDV9FY056Wc5P37MG2XHgPhIU7NYasxrNHGT3theWjTyMhdJEMWmxXkYdJli3LlHoXqt4c2a05YWv1MRZNx2uV8jV3+fBKaNi5ElVybhsz7mhPUlgUIS7SBRYfnKssUE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772897603; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=E/LouNoMQ4W/aKzwh/YIr4xZ/85njeY6sAjm9F1tdWU=; b=QwQFJJd2IZhnv47tGHXcH2YrjdEU1r0UH0F09gg2tP7/PzAXx+OlXnl961HqYAY1HSUzeIoS8rO7KgCAZ0g94suNS0ZDgWX8rLgHSzAc2VpK6BrZH0lGPRyBcjJxVbLsw7j8zeci6GM7h7FNA8G/p8UmKxfCEaz5J2ba8sql2Jk= 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 1772897603876832.4716513769015; Sat, 7 Mar 2026 07:33:23 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vytdW-0001Bw-Cv; Sat, 07 Mar 2026 10:32:14 -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 1vytdS-00019Q-1U for qemu-devel@nongnu.org; Sat, 07 Mar 2026 10:32:10 -0500 Received: from p-west2-cluster5-host7-snip4-10.eps.apple.com ([57.103.71.73] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vytdQ-0000Oz-G9 for qemu-devel@nongnu.org; Sat, 07 Mar 2026 10:32:09 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-2 (Postfix) with ESMTPS id 82FC01800168; Sat, 7 Mar 2026 15:32:05 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-2 (Postfix) with ESMTPSA id 0F1C61800869; Sat, 7 Mar 2026 15:32:02 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772897526; x=1775489526; bh=E/LouNoMQ4W/aKzwh/YIr4xZ/85njeY6sAjm9F1tdWU=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=e3wRwCztfIimOEyU/6jNuMxrtvcz5+EKjSe61MhxQ7OzAty6W0tkmpAX6fuHl1lQRc1Q+NlTPA4sBLXgOVM46frIMBZCbdHsD+ECwFt3HSawueLZS2+7cE3Se/6NOuKTzlvWg+NhKXoy1xmqtkiS9X3bOc8nr06hpBOjJC1mMx8wnSCousohFrRN+RpkTi0PC2SALmJhaH5xIEAXDEKk+OUIwWE80WAQw5RbjVdzu+PThU7Ke7lkHIXxfiIj7v5yoQM9/YRP8cd+Os1hhapEc9xFAmkMYRViXL8vwTLGGGI71Q6gGUcYw7eZuz0u7dN9CTsJ69S9UHg9vP4wp+eMMg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Phil Dennis-Jordan , Manos Pitsidianakis , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , Roman Bolshakov , Peter Maydell , qemu-arm@nongnu.org, Alexander Graf , Mohamed Mediouni Subject: [PATCH v18 07/13] hvf: gate ARM_FEATURE_PMU register emulation behind not being at EL2 Date: Sat, 7 Mar 2026 16:31:37 +0100 Message-ID: <20260307153143.76893-8-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260307153143.76893-1-mohamed@unpredictable.fr> References: <20260307153143.76893-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: o605RbihFRAFabpCLfoQRDY8clryCpIf X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA3MDE0NyBTYWx0ZWRfX0JJTAfyX6lJW 57ZNVJozyrmOvzbx3EDTLxzUxcg8JOgdrtSrMSk7t8KAruB3A/UAd+yqkxwkwr/w5LZzb6ITsAO o6YXrqWndjVXI4GYEPFNhwANRk+QFNk/ibNPma+A8b5FHb55DkriUfkEGc6WiLh+oECERPiol+K pB0UmKqIKl9F/1rIGp/Zi4PXrta/8vpvnfzR+xRNvZQxLKFVOX2Amsr1LPQubooNYcaUFtfq3lg XhyMRPJqsNXfEPRxGUq6iP3rew+YdU2fufdME5++2+7rTJPCfaw6f7K5ode7qRWAw3cQkLmgvF7 p/AoaEhTW+y9vBGBXjhrXTcE+rqu5t8vu/X6RniTYC0r5tnUFlc5MPK0J+hgB4= X-Authority-Info-Out: v=2.4 cv=RKC+3oi+ c=1 sm=1 tr=0 ts=69ac44f6 cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=lOv7bB1OiAV5i3s2B4UA:9 a=NqO74GWdXPXpGKcKHaDJD/ajO6k=:19 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: o605RbihFRAFabpCLfoQRDY8clryCpIf X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-07_05,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 spamscore=0 phishscore=0 suspectscore=0 lowpriorityscore=0 mlxscore=0 mlxlogscore=683 bulkscore=0 adultscore=0 clxscore=1030 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603070147 X-JNJ: AAAAAAABlnILBYlXhJw6ayq2b2CufoOrh+kdUHyoAHrRB4kmCuLRH6XAl1/A7BYHCP+bkKCtWFxogCWcclA43V1qfsYNo8Pw4x4HMpkoSY77L4LqxhQqQnZq00dNMaY15ebrB/vaWjs3lL1Lt5dEBH2BUQMt9NADZWD2jYfxmZftyNeARs/nwABIqfw1k0Kdzm6rEeykalcyHuPy1c3KAwOq8xqeJvqXNDiAmHyPh7JGmlosmtcA+am22GsMQ2vXgPH4A+AtYUGWciqwgaZdtSom0FmABNX7J46QfW091p+10FE5VGOWVXrY8usBPOcQbk/ao5ITNdKs0Z7Q0s1mYlujII1ITsSstnfnvMdBuNhXP0kUJcN2y2f+e9ctYUbxFcMb8dlY2Ve533yR4KxR5diZg2D5dndSrIexcROAnfs3iJlx/yq0/kxe2V0VN9gNWiGUNVLNyt7sKSVBlabTd9BC3qRIVWT0MnSV/S84M2WEds7femHXOJKV1AaGY2yI/DNwBZMhlnZ34MbwbfN2aIA1OhQm3Qs1LezMjEANg9E7lH3+byllALDa4T49vXds9OyqMJK80MkoGVNwjQV+UIo2uBS5jctY0MQgViRVi+Gw+C1xIfJn0OBp3QEuSVAG+SQA48nEz1uEWYK/JSFSKoJ6gqBb65Eb8OIzgQs2GFTsBOpF7WHlYMVHFHPwzswazq8RdocDjKlEC8oesrZm2thYonokANN4kzdICLtgexun8AnxPWesOi+/hys= 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.71.73; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1772897606417154100 From Apple documentation: > When EL2 is disabled, PMU register accesses trigger "Trapped MSR, MRS, or > System Instruction" exceptions. When this happens, hv_vcpu_run()=E2=80=AF= returns, and the > =E2=80=AFhv_vcpu_exit_t=E2=80=AFobject contains the information about thi= s exception. > When EL2 is enabled, the handling of PMU register accesses is determined = by the PMUVer > field of ID_AA64DFR0_EL1=E2=80=AFregister. > If the PMUVer=E2=80=AFfield value is zero or is invalid, PMU register acc= esses generate "Undefined" > exceptions, which are sent to the guest. > If the PMUVer=E2=80=AFfield value is non-zero and valid, PMU register acc= esses are emulated by the framework. > The ID_AA64DFR0_EL1=E2=80=AFregister can be modified via hv_vcpu_set_sys_= reg=E2=80=AFAPI. Signed-off-by: Mohamed Mediouni Reviewed-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Philippe Mathieu-Daud=C3=A9 --- target/arm/hvf/hvf.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index 04c4106a3e..14c0c7f540 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -1601,7 +1601,7 @@ static int hvf_sysreg_read(CPUState *cpu, uint32_t re= g, uint64_t *val) ARMCPU *arm_cpu =3D ARM_CPU(cpu); CPUARMState *env =3D &arm_cpu->env; =20 - if (arm_feature(env, ARM_FEATURE_PMU)) { + if (!hvf_nested_virt_enabled() && arm_feature(env, ARM_FEATURE_PMU)) { switch (reg) { case SYSREG_PMCR_EL0: *val =3D env->cp15.c9_pmcr; @@ -1862,7 +1862,7 @@ static int hvf_sysreg_write(CPUState *cpu, uint32_t r= eg, uint64_t val) SYSREG_OP2(reg), val); =20 - if (arm_feature(env, ARM_FEATURE_PMU)) { + if (!hvf_nested_virt_enabled() && arm_feature(env, ARM_FEATURE_PMU)) { switch (reg) { case SYSREG_PMCCNTR_EL0: pmu_op_start(env); --=20 2.50.1 (Apple Git-155) From nobody Mon Apr 13 10:39:31 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=1772897558; cv=none; d=zohomail.com; s=zohoarc; b=Ulrj2GoGA+zy5NUqpMF3w9aoDcm41B2lJvNfWRJzNgE2AXqSE0cj/G54hENY9iKtfDDZFqW3zMuLhzsUi0XqORprZUYYKrx7pu2XLh48CnJjBHRV3RmR1bl/NIico6ZvxuewfU5juDvlUSgNzVCjNNwRepA1Z+pMzb7Q5raG2z8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772897558; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=CFkZ1ydlJzWs77CaHK66tAU5BFl4876/9Mp4Lq9BU3s=; b=YxaEJJE6suo6lLkcrugh4JHJpYYJRdoe3ZCekvzhFjMwpSJ0/Xgf2P4iGNIvJjXz2BLKBLZNdBCTjWCrRxk9MaoNC9UyfDwA8LpJaB7iR0rlM7SEWaV3KTsE+FyUhY4dpEY42vlKQnHWL7VDUwyPFdeWerhOCTh/8VMcqWRPyXM= 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 1772897558212435.09414601927415; Sat, 7 Mar 2026 07:32:38 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vytdl-0001Jf-MP; Sat, 07 Mar 2026 10:32:29 -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 1vytdT-0001AJ-C0 for qemu-devel@nongnu.org; Sat, 07 Mar 2026 10:32:11 -0500 Received: from p-west2-cluster5-host1-snip4-10.eps.apple.com ([57.103.71.113] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vytdR-0000PJ-VD for qemu-devel@nongnu.org; Sat, 07 Mar 2026 10:32:11 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-2 (Postfix) with ESMTPS id A04FD1800142; Sat, 7 Mar 2026 15:32:07 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-2 (Postfix) with ESMTPSA id 5352E18022C0; Sat, 7 Mar 2026 15:32:05 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772897529; x=1775489529; bh=CFkZ1ydlJzWs77CaHK66tAU5BFl4876/9Mp4Lq9BU3s=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=LX/Kl2gZNRAld8rE04YSjbRZGtCdkblRmvNZ3P+RW17Mwd9p0f76viaLNba0mNs7U7xj1ZI6nBJE8KS/nJkdSff/tSGJKIciWxia1laG/RYL94jhCjchsJgark2lqd0INWWbvrY4esDlHqzF3adqUN11cf0otJhXrCGsDYUxbrCYQ/lsSbpecyo1ecFYebHp/nwp9U4ta5AKQ/oJCbyLff/zKcAxtRtXeGIRP+a5RmQauAmPWHM2ybQl/dFv9HP+dokHuq6QdgmBrLJNZZS9+PwBjyiJqjXCDxyrelf06Zmf74qdDDdX4QfHvnLiEdt4+qXib95f1UbJZaaHAEio+Q== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Phil Dennis-Jordan , Manos Pitsidianakis , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , Roman Bolshakov , Peter Maydell , qemu-arm@nongnu.org, Alexander Graf , Mohamed Mediouni Subject: [PATCH v18 08/13] hvf: arm: allow exposing minimal PMU when running with nested virt on Date: Sat, 7 Mar 2026 16:31:38 +0100 Message-ID: <20260307153143.76893-9-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260307153143.76893-1-mohamed@unpredictable.fr> References: <20260307153143.76893-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: WYKqkAvIq6IM6i_9hjEAYO8g6tWXWXQX X-Proofpoint-GUID: WYKqkAvIq6IM6i_9hjEAYO8g6tWXWXQX X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA3MDE0NyBTYWx0ZWRfX6gv2IU+PGXwq gxyZNOBGqHRXo7Eno9Bf1qKPWGgJ/jTh+duGZuDyGmDn1dNcABDkD9zKnh65Cz8p7A9boytgigC /e6ERevL6/OUfTIjFBWowV4WUYohFE5evRqiZjwQACYZBiSGsTHFqs5HwAA3gFgWaHjyZoCWf4G LD5E5Fhzw9Rziw8UWPZd8VCRZMcZcAOim3kl1ppsimOqcM/q3AnuCunJqBJMrM/CIwEzllF2Jit KW+l8TET9hub/mz1ZTudWNKRHcmf2Bf6pvcRPBQu6TwRIRlAguB55Y3JqpaiN8OKEyH8C/17p4w mTyYtyrHWSFVfylfSaD3L0DfnfqB9GMSYaaXuHp2j3IuhslXYipogeS7gz+isM= X-Authority-Info-Out: v=2.4 cv=DMeCIiNb c=1 sm=1 tr=0 ts=69ac44f8 cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=DEZpVyLLCdwXg5o-P5sA:9 a=NqO74GWdXPXpGKcKHaDJD/ajO6k=:19 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-07_05,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 lowpriorityscore=0 suspectscore=0 mlxscore=0 malwarescore=0 adultscore=0 spamscore=0 mlxlogscore=582 phishscore=0 bulkscore=0 clxscore=1030 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603070147 X-JNJ: AAAAAAABucEE+bACwR72KPap5ZrhouyFJ9HiHJT65uohPgHZ3iZvxbp5o9+drvF/1nnMWxugOSHhWeOfah0keOhJi8NRSMNx+FwwK0Z0uJurHxCeThfNRYMPSn3+3Wjxq80pRHjod85MEqKT6wbP3lMD4xQsLyBZ/+3S0LSOIafmEzUen51Gws8hk94uF30XOD9b7FIQ+t99HK+vcdxayOhdtBgQpLspqy/tF6m22F4QUwhz+oiRBhBGAP3rNIiBhNGtGi9LWggDv9AM6VZk1eHnKnrZAvqTr3SKbuutMOL1R0ZU2YW+VNRyqWeA7hp7p9u39dQLKRBokf9m9dLn31bwaL1N6UWYX0rgnFu50EQ4P9HhII/G9JHMpqsX3V7LtcUXYCAnZMZ7zzqp8EqltM5w+RDTaKNJvam49NP0gz1lQJD3pSG05LLWZU+OzaK9eudC3+6bfkZk/M2MfshYKVNEwCXa+egP7ftuAIm6XLlP9BFknCIh5s0eZRd4sDH3rl2Ii2Jqv7Spb7gwkTpBX8YhQUcyJxk3o7mXPSRV4ZbYncAfA0yKQqeZnjT8JjHBYeWh5WZRhDcsc/QfrI4HBtgAjS7quzDTncqUyiPWCDxl3nVr3Y0slfTKDSBzQ/9YHVRckgLAjt3uhGcuiJTxCTC1XbY4ZWN+kzRGXP0a8U5BiDkk5ilNmnOoFRfrzKry/87SEXYB2MapLY9ZRnOOt0gAwdPVahi7yNGonnaHPxPdVfMdDHKFgKpoaQWn3g== 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.71.113; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1772897561095154100 When running with nested virt on, a minimum PMU is exposed by Hypervisor.fr= amework if a valid PMUVer register value is set. That PMU isn't exposed otherwise. Signed-off-by: Mohamed Mediouni Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- target/arm/hvf/hvf.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index 14c0c7f540..8c568d60bd 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -1145,6 +1145,10 @@ static bool hvf_arm_get_host_cpu_features(ARMHostCPU= Features *ahcf) =20 clamp_id_aa64mmfr0_parange_to_ipa_size(&host_isar); =20 + if (hvf_nested_virt_enabled()) { + FIELD_DP64_IDREG(&host_isar, ID_AA64DFR0, PMUVER, 0x1); + } + ahcf->isar =3D host_isar; =20 /* --=20 2.50.1 (Apple Git-155) From nobody Mon Apr 13 10:39:31 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=1772897622; cv=none; d=zohomail.com; s=zohoarc; b=Sq3nDtkA/qZGs6/R++h0p1YN3m7C06Ut1f9dhbDrz5mycCj6GNE4s4r1nLHCD1/GpANoN2STuR5lDHb8FtuDG98Fr37AANIHJPAqFHXIHqvj2IrZCVNzZB95/h1QJK0LFd4qJZrzrJWSKEJOfdk7uuLoElxuh/9gGzceEgD2WQM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772897622; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=sRTxu5Fw8UCuti2v1JoZDXJD4wZeEKjL5lX/8pIOKiM=; b=bODMrinG3LcrOFvUnsIFPQiG1+sd0nq51v/JqpcpbLCQ/eQTMMEZdc4sPL9OWn/rULk/djUqbt2fa/NE+W4EKbp9D0s8EO/hLiV4h764NRFCP8DBge5b11GNjJ/btLlqNokCVRg0yH2fJO3Rqx+9K5kmEqYanlj0izhBvgWkfKg= 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 1772897622975926.1729970192239; Sat, 7 Mar 2026 07:33:42 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vytdh-0001GY-Vm; Sat, 07 Mar 2026 10:32:28 -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 1vytdW-0001C5-7E for qemu-devel@nongnu.org; Sat, 07 Mar 2026 10:32:14 -0500 Received: from p-west2-cluster5-host4-snip4-6.eps.apple.com ([57.103.71.99] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vytdU-0000Pj-NA for qemu-devel@nongnu.org; Sat, 07 Mar 2026 10:32:13 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-2 (Postfix) with ESMTPS id 1DD611800878; Sat, 7 Mar 2026 15:32:09 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-2 (Postfix) with ESMTPSA id 713C71800865; Sat, 7 Mar 2026 15:32:07 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772897531; x=1775489531; bh=sRTxu5Fw8UCuti2v1JoZDXJD4wZeEKjL5lX/8pIOKiM=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=UwIpZWtKMCootBU62e8gsofC/NCDsr2EMnFLWxiwvC/jtQrNE3jMsHW+on/gW9Tb2nzCj9EXvM9FyGy8LvLlffOt26lBOfZk1iZ9R64OgbBHfCdOsQ6OSxi54FU0DPAT4HBeGx51IdjfOz6mqQNFDdmqwW+YdTYYgMCQTvtgOj+VbFk3Cr+8uMcr8boqEsbGGTG6AGlmhhkOqJuS38FXkeKVhKgkolUzZ7Ynw4m3jsyfT2C+g4sfERAR6icbO61sIAq2o0JiivYEMVoSq2MuIxlJWPrQ4kw+c1X+bq/57YOURosU+QtX9Ea9kh7fIzTh0/2NOpwcJ/gqa0ywjBbSEw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Phil Dennis-Jordan , Manos Pitsidianakis , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , Roman Bolshakov , Peter Maydell , qemu-arm@nongnu.org, Alexander Graf , Mohamed Mediouni , Mads Ynddal Subject: [PATCH v18 09/13] target/arm: hvf: add asserts for code paths not leveraged when using the vGIC Date: Sat, 7 Mar 2026 16:31:39 +0100 Message-ID: <20260307153143.76893-10-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260307153143.76893-1-mohamed@unpredictable.fr> References: <20260307153143.76893-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: Tv5aXZ9kopbgb10IljWS-YeLvAPgZcCJ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA3MDE0NyBTYWx0ZWRfX/ngHhqCxXQE4 jiwwQZDpc59cR7BqaBOWwzV9/56row3w/+KjmzyMZHJLwUaKNyW7Sb5DWBm6ysLfcywg2sVhAVb qQ6EfgysKQmimPUrKGQpqiuxUnDel6xVTyIyOb8lQZ2qvsxqEF4w8uAXi8XqmeuuItDtgiaaa0X enkAXc5F3wokYAj4kyavHBBTfF2KjQCsgUml1GrbovdyG0b6Lv/E6YGEq/wBsOSpI40SuX5X+aY 3pvAAjZYnHxop+K0E9IBckGzwNe6YPl5x5E4JPbRlpZF2PYZlHbR98ks3Mk/ysTsETjNRQ6U3g2 Igw8Jr84gW4o1oIq2/ixxGnBLRuEIdNAOQ6u3o6YUnkxXz/omhFpR+PHPFxjEw= X-Proofpoint-ORIG-GUID: Tv5aXZ9kopbgb10IljWS-YeLvAPgZcCJ X-Authority-Info-Out: v=2.4 cv=ArvjHe9P c=1 sm=1 tr=0 ts=69ac44fb cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=vbFX7M0ab_H1AmF9bzsA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-07_05,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 bulkscore=0 lowpriorityscore=0 mlxscore=0 mlxlogscore=526 spamscore=0 adultscore=0 suspectscore=0 phishscore=0 clxscore=1030 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603070147 X-JNJ: AAAAAAABiPqQBi3M7xzZTOHATh6gGizmQoj3fhOOOM+XPRrG+ROAOYAV4eHuUhEcLGZZ5T5ukIoGMz8yxItDH0CPl0W9U77C2rLAD3Z2gUge4NOXGHuzIf4JdNQ8S27sXPQ5Hncze6c70+83lwf636auj1G6NbNzZEavy1pXnvr7Y4gpBSYd5sdS+8qmDB877nGKGI+ru5lG3qHm9KqjmKfRYe+Nr5FhHxN3qALS2G1I+nrKuyHcf2cHmd6kbZ7nsZtdQe5d2pNPhQLLeinxgH7L+x7AKHqR5h4oUT5Dwr7dxiem+GFQTBa8A6hbkXe8hG+PYFtu41T5BqjxNJHiSMhjuaDHHtFaoSySaXW7mPVZe9EoFAai95ZUzo1tIlqwaQ0jHaFv7vTWOcUt0Cfejm0I6TDNTEOEZM8pmQOHxH+0ev3mFZIeHkRBPwWpDov23OFJ5GgBdchJdGLsS2iLSVM0J1Edl5BLlvx0Hj70nXbjNBNpdFz9OYSL542F/C5UAfNpi7OVqBo1A6LPq6pzrFLygQ+jB7j36s0OZCfOVIYQHgojsJVqdQDnUAarBqzTYGcGt+OEz/++/Fr8E6rLUd6k+RUrIa1QEOwCAjfFaYzc3tLRR/4JXR4fsPmolPsisNbWlyvlvPTOridgis8grALAtvd+sA4NhQ5QdpQnGt9tyx6IVjPErXzg37aHBt+rIL9+QBMmifNK8UpIvEGxyMnkt8TcsJLVyZBFCdixWk1GGQIi1scB09yI+lETIa+M0A== 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.71.99; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -3 X-Spam_score: -0.4 X-Spam_bar: / X-Spam_report: (-0.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1772897624006154100 When using the vGIC, timers are directly handled by the platform. No vmexits ought to happen in that case. Abort if reaching those code paths. Signed-off-by: Mohamed Mediouni Reviewed-by: Mads Ynddal Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- target/arm/hvf/hvf.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index 8c568d60bd..fe5a376aee 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -1681,6 +1681,7 @@ static int hvf_sysreg_read(CPUState *cpu, uint32_t re= g, uint64_t *val) case SYSREG_ICC_SGI1R_EL1: case SYSREG_ICC_SRE_EL1: case SYSREG_ICC_CTLR_EL1: + assert(!hvf_irqchip_in_kernel()); /* Call the TCG sysreg handler. This is only safe for GICv3 regs. = */ if (hvf_sysreg_read_cp(cpu, "GICv3", reg, val)) { return 0; @@ -1971,6 +1972,7 @@ static int hvf_sysreg_write(CPUState *cpu, uint32_t r= eg, uint64_t val) case SYSREG_ICC_SGI0R_EL1: case SYSREG_ICC_SGI1R_EL1: case SYSREG_ICC_SRE_EL1: + assert(!hvf_irqchip_in_kernel()); /* Call the TCG sysreg handler. This is only safe for GICv3 regs. = */ if (hvf_sysreg_write_cp(cpu, "GICv3", reg, val)) { return 0; @@ -2378,6 +2380,7 @@ static int hvf_handle_vmexit(CPUState *cpu, hv_vcpu_e= xit_t *exit) ret =3D hvf_handle_exception(cpu, &exit->exception); break; case HV_EXIT_REASON_VTIMER_ACTIVATED: + assert(!hvf_irqchip_in_kernel()); qemu_set_irq(arm_cpu->gt_timer_outputs[GTIMER_VIRT], 1); cpu->accel->vtimer_masked =3D true; break; --=20 2.50.1 (Apple Git-155) From nobody Mon Apr 13 10:39:31 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=1772897639; cv=none; d=zohomail.com; s=zohoarc; b=Ajy4cKdGA6HofUxCfK3d+050ZUqU1b0Mz6QWNrENWpwpnt1DJIZwMxzGI9Wc/kgXOHt2GmpyEqid4dwGz67U6FP4yZbxOg2wRhsIbQm/Ni3sCB9U0KbGsqWyqYRUjbU+EJj2sSgKJPChSC41vQ2WvGW/lr2OUIGnT8E0UuGCljE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772897639; 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=4ebztmRjMz4e1JVXn1HEjwaMwshFZTQq6Yb8Zxj4UiM=; b=jdWUXPMSuVqiih0IZ/lUQ1PN77UEbQLgMFGpxoT009BGW1gANnCyCi4y0wQNtIuw6bXimCuqXlmg3A3otZKUt7lt6VPBuPuy5vGUiCTYBNC1S3CQlh2OScDs0NvbO7WaaLBvepI2I4H2V5aeM8SdutElICDvPi8NeOz3WHF2Fz4= 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 1772897639853460.0119459905776; Sat, 7 Mar 2026 07:33:59 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vytdw-0001So-CN; Sat, 07 Mar 2026 10:32:40 -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 1vytdj-0001HE-GS for qemu-devel@nongnu.org; Sat, 07 Mar 2026 10:32:28 -0500 Received: from p-west2-cluster5-host4-snip4-7.eps.apple.com ([57.103.71.100] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vytdW-0000Pz-Oc for qemu-devel@nongnu.org; Sat, 07 Mar 2026 10:32:16 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-2 (Postfix) with ESMTPS id 639311800875; Sat, 7 Mar 2026 15:32:12 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-2 (Postfix) with ESMTPSA id DE51B1800855; Sat, 7 Mar 2026 15:32:09 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772897533; x=1775489533; bh=4ebztmRjMz4e1JVXn1HEjwaMwshFZTQq6Yb8Zxj4UiM=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=WcJirRP3LTKB7QhSefsJmZ/eGfjW07EUuposzkpg1RTFnkGGocuoyUfglMrMYNDlq/U6F5yLMX9EjMPeRdaTDpsiWE5ZtJn79VyvD8th9MCoIJ8qNCXGLX75JiR0CFyIWxTYqoGrhholR0+Dw2JXYUXP7S0FwqU3OiqGmCayv83bwzfaJLtPQrMAJ+wD/YsGaCahk4EB2sENL5bDgZ3plu0teCrSANEBa5hhP03c//q1UViBs5kCSmxMqiCvwtp4KX27V+LvTVbJ6kcFViGbMOw1XPoGgqmSU0agAWkJgHrNFeLdGjObSETawutNA0NhtcxeIJJPtWlC+7NArt+SBg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Phil Dennis-Jordan , Manos Pitsidianakis , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , Roman Bolshakov , Peter Maydell , qemu-arm@nongnu.org, Alexander Graf , Mohamed Mediouni Subject: [PATCH v18 10/13] hvf: sync registers used at EL2 Date: Sat, 7 Mar 2026 16:31:40 +0100 Message-ID: <20260307153143.76893-11-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260307153143.76893-1-mohamed@unpredictable.fr> References: <20260307153143.76893-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info-Out: v=2.4 cv=aua/yCZV c=1 sm=1 tr=0 ts=69ac44fd cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Ml6fgdKjPmdD6r9HfocA:9 X-Proofpoint-GUID: aicEKyzDXydhenVOcUhU4vVWolRTxg1a X-Proofpoint-ORIG-GUID: aicEKyzDXydhenVOcUhU4vVWolRTxg1a X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA3MDE0NyBTYWx0ZWRfX0bGOEM9lLBCa QEJlbiRKQ/E5l7IYR0rw3iuDza7MFSGJWbYg0KmHzUgf7YwyqOIb0KzoOowZ2i2jZooj710O1qb 2lk4ILzBvg8Hwt6y9UuB59qLPHsQCx+/NSMPNIX0pdS4XovM9uUf/6nwzROJIBBMCB/gVaiYbFH z+xWQ6wIHw8ZbOkhArkinOHpy3sTu1ZLP399QDj4tdZxHyQxSqR3nucUi1/djdBpH719P2Ejvh9 dkt2j5rB+05ZmFieJutalK/bcz9jvCM56OtTKgy4CF/7UZzqyM+vNpCjpTTPApsphKBVNUh3nno JSEPo710VjXYt0r7PhoSf/ctJc2ON6jMkks3ygl/jRgVu++YcsvaKfgY8+HcVY= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-07_05,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 lowpriorityscore=0 adultscore=0 phishscore=0 malwarescore=0 mlxscore=0 clxscore=1030 mlxlogscore=999 suspectscore=0 bulkscore=0 spamscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603070147 X-JNJ: AAAAAAABqz7c/dpQcuQCwsGuXeC+IpBYjwkhOqtzndlRHlsR3CoQzOFaB4JhIJF+ceCV8/L8KB9VGWSWJjv5GtAulJHfTvynpcRNPEnX5BwfSnwfJTbs3M4UzzFh2TX3bgjqkRzlcqy2YRqY5Br8LRX1kwXYUyuYz1YdM3iFf9R5dN72f6mttAmv1h0PEPDfBbcItvtvlyJ0YzHLdw9G55QEarGsgMNjZnbQi/C7K0mS22yAESHhE9pZN6G8kxanqVSlJS0LPNiEFzYVlIDsZGKdSVTsLmTVcosL5cz8TqnqaNSF2OavliANg3ImCTi84umboa4zPOAWvrH2ewi5fBSVUDumjxQohNGCjDcBZp/kYwSApb8xMaU7KVnubi0Sk4OMG9dbGhGHUDpIUxVCWri8sQ4FufbmlLbIMZ/fl/DaF5V8MbCTdw1umi12qtfezrFtsdizVSxiv0uIaD8pKIKpqnG9McfeSIK+5F69uU4x4pg+VJ4uBe7jw323Ri9ioQBdq9fZtEcrqmuhYLLwbdrf4oH+gr85bpZGHl4qjRZ6zftve2B6AlB/gmynrn1/gs6ii2QZfHnX4gDWCtLRTfEqd0BB9v5SMZ3IF5P2i8WgrqucwcOfEMWWvxaoWM/KOpZxr6lgVf6Fzg0haZapzO1RTu8O44JSEK7+l/tAZ4YVvX/Q1Wcak5ejtlcvWa5a/2oTAMLm1uI67V5N8wljGQQHavT+vAZ2TlJSZds= 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.71.100; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -3 X-Spam_score: -0.4 X-Spam_bar: / X-Spam_report: (-0.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1772897642243154100 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 Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- target/arm/hvf/hvf.c | 61 +++++++++++++++++++++++++++++++++---- target/arm/hvf/sysreg.c.inc | 44 ++++++++++++++++++++++++++ 2 files changed, 99 insertions(+), 6 deletions(-) diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index fe5a376aee..f6385532f3 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -467,37 +467,75 @@ static const struct hvf_reg_match hvf_sme2_preg_match= [] =3D { * * SME2 registers are guarded by a runtime availability attribute instead = of a * compile-time def, so verify those at runtime in hvf_arch_init_vcpu() be= low. + * + * Nested virt registers are handled via a runtime check, so override the = guarded + * availability check done by Clang. */ =20 +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunguarded-availability" + #define DEF_SYSREG(HVF_ID, ...) \ QEMU_BUILD_BUG_ON(HVF_ID !=3D KVMID_TO_HVF(KVMID_AA64_SYS_REG64(__VA_ARG= S__))); #define DEF_SYSREG_15_02(...) =20 +#define DEF_SYSREG_EL2(HVF_ID, ...) \ + QEMU_BUILD_BUG_ON(HVF_ID !=3D KVMID_TO_HVF(KVMID_AA64_SYS_REG64(__VA_ARG= S__))); + +#define DEF_SYSREG_VGIC(HVF_ID, ...) \ + QEMU_BUILD_BUG_ON(HVF_ID !=3D KVMID_TO_HVF(KVMID_AA64_SYS_REG64(__VA_ARG= S__))); + +#define DEF_SYSREG_VGIC_EL2(HVF_ID, ...) \ + QEMU_BUILD_BUG_ON(HVF_ID !=3D KVMID_TO_HVF(KVMID_AA64_SYS_REG64(__VA_ARG= S__))); + #include "sysreg.c.inc" =20 #undef DEF_SYSREG #undef DEF_SYSREG_15_02 +#undef DEF_SYSREG_EL2 +#undef DEF_SYSREG_VGIC +#undef DEF_SYSREG_VGIC_EL2 =20 -#define DEF_SYSREG(HVF_ID, op0, op1, crn, crm, op2) HVF_ID, +#define DEF_SYSREG(HVF_ID, op0, op1, crn, crm, op2) {HVF_ID}, #define DEF_SYSREG_15_02(...) +#define DEF_SYSREG_EL2(HVF_ID, op0, op1, crn, crm, op2) {HVF_ID, .el2 =3D= true}, +#define DEF_SYSREG_VGIC(HVF_ID, op0, op1, crn, crm, op2) {HVF_ID, .vgic = =3D true}, +#define DEF_SYSREG_VGIC_EL2(HVF_ID, op0, op1, crn, crm, op2) {HVF_ID, tru= e, true}, + +struct hvf_sreg { + hv_sys_reg_t sreg; + bool vgic; + bool el2; +}; =20 -static const hv_sys_reg_t hvf_sreg_list[] =3D { +static struct hvf_sreg hvf_sreg_list[] =3D { #include "sysreg.c.inc" }; =20 #undef DEF_SYSREG #undef DEF_SYSREG_15_02 +#undef DEF_SYSREG_EL2 +#undef DEF_SYSREG_VGIC +#undef DEF_SYSREG_VGIC_EL2 + +#pragma clang diagnostic pop =20 #define DEF_SYSREG(...) -#define DEF_SYSREG_15_02(HVF_ID, op0, op1, crn, crm, op2) HVF_ID, +#define DEF_SYSREG_15_02(HVF_ID, op0, op1, crn, crm, op2) {HVF_ID}, +#define DEF_SYSREG_EL2(...) +#define DEF_SYSREG_VGIC(...) +#define DEF_SYSREG_VGIC_EL2(...) =20 API_AVAILABLE(macos(15.2)) -static const hv_sys_reg_t hvf_sreg_list_sme2[] =3D { +static struct hvf_sreg hvf_sreg_list_sme2[] =3D { #include "sysreg.c.inc" }; =20 #undef DEF_SYSREG #undef DEF_SYSREG_15_02 +#undef DEF_SYSREG_EL2 +#undef DEF_SYSREG_VGIC +#undef DEF_SYSREG_VGIC_EL2 =20 /* * For FEAT_SME2 migration, we need to store PSTATE.{SM,ZA} bits which are @@ -1320,6 +1358,9 @@ int hvf_arch_init_vcpu(CPUState *cpu) #define DEF_SYSREG_15_02(HVF_ID, ...) \ g_assert(HVF_ID =3D=3D KVMID_TO_HVF(KVMID_AA64_SYS_REG64(__VA_ARGS= __))); #define DEF_SYSREG(...) +#define DEF_SYSREG_EL2(...) +#define DEF_SYSREG_VGIC(...) +#define DEF_SYSREG_VGIC_EL2(...) =20 #include "sysreg.c.inc" =20 @@ -1347,11 +1388,19 @@ int hvf_arch_init_vcpu(CPUState *cpu) =20 /* Populate cp list for all known sysregs */ for (i =3D 0; i < ARRAY_SIZE(hvf_sreg_list); i++) { - hv_sys_reg_t hvf_id =3D hvf_sreg_list[i]; + hv_sys_reg_t hvf_id =3D hvf_sreg_list[i].sreg; uint64_t kvm_id =3D HVF_TO_KVMID(hvf_id); uint32_t key =3D kvm_to_cpreg_id(kvm_id); const ARMCPRegInfo *ri =3D get_arm_cp_reginfo(arm_cpu->cp_regs, ke= y); =20 + if (hvf_sreg_list[i].vgic && !hvf_irqchip_in_kernel()) { + continue; + } + + if (hvf_sreg_list[i].el2 && !hvf_nested_virt_enabled()) { + continue; + } + if (ri) { assert(!(ri->type & ARM_CP_NO_RAW)); arm_cpu->cpreg_indexes[sregs_cnt++] =3D kvm_id; @@ -1360,7 +1409,7 @@ int hvf_arch_init_vcpu(CPUState *cpu) if (__builtin_available(macOS 15.2, *)) { if (hvf_arm_sme2_supported()) { for (i =3D 0; i < ARRAY_SIZE(hvf_sreg_list_sme2); i++) { - hv_sys_reg_t hvf_id =3D hvf_sreg_list_sme2[i]; + hv_sys_reg_t hvf_id =3D hvf_sreg_list_sme2[i].sreg; uint64_t kvm_id =3D HVF_TO_KVMID(hvf_id); uint32_t key =3D kvm_to_cpreg_id(kvm_id); const ARMCPRegInfo *ri =3D get_arm_cp_reginfo(arm_cpu->cp_= regs, key); diff --git a/target/arm/hvf/sysreg.c.inc b/target/arm/hvf/sysreg.c.inc index 7a2f880f78..c11dbf274e 100644 --- a/target/arm/hvf/sysreg.c.inc +++ b/target/arm/hvf/sysreg.c.inc @@ -153,3 +153,47 @@ DEF_SYSREG_15_02(HV_SYS_REG_ID_AA64ZFR0_EL1, 3, 0, 0, = 4, 4) DEF_SYSREG_15_02(HV_SYS_REG_ID_AA64SMFR0_EL1, 3, 0, 0, 4, 5) DEF_SYSREG_15_02(HV_SYS_REG_SMPRI_EL1, 3, 0, 1, 2, 4) DEF_SYSREG_15_02(HV_SYS_REG_SMCR_EL1, 3, 0, 1, 2, 6) +/* + * Block these because of the same issue as virtual counters in + * that caused the revert in 28b0ed32b32c7e5094cf2f1ec9c0645c65fad2aa + * + * DEF_SYSREG_VGIC(HV_SYS_REG_CNTP_CTL_EL0, 3, 3, 14, 2, 1) + * DEF_SYSREG_VGIC(HV_SYS_REG_CNTP_CVAL_EL0, 3, 3, 14, 2, 2) + */ +#ifdef SYNC_NO_RAW_REGS +DEF_SYSREG_VGIC(HV_SYS_REG_CNTP_TVAL_EL0, 3, 3, 14, 2, 0) +#endif + +/* + * Also block these because of the same issue as virtual counters in + * that caused the revert in 28b0ed32b32c7e5094cf2f1ec9c0645c65fad2aa + * + * DEF_SYSREG_VGIC_EL2(HV_SYS_REG_CNTHP_CVAL_EL2, 3, 4, 14, 2, 2) + * DEF_SYSREG_VGIC_EL2(HV_SYS_REG_CNTHP_CTL_EL2, 3, 4, 14, 2, 1) + */ +DEF_SYSREG_VGIC_EL2(HV_SYS_REG_CNTHCTL_EL2, 3, 4, 14, 1, 0) +#ifdef SYNC_NO_RAW_REGS +DEF_SYSREG_VGIC_EL2(HV_SYS_REG_CNTHP_TVAL_EL2, 3, 4, 14, 2, 0) +#endif +DEF_SYSREG_VGIC_EL2(HV_SYS_REG_CNTVOFF_EL2, 3, 4, 14, 0, 3) + +DEF_SYSREG_EL2(HV_SYS_REG_CPTR_EL2, 3, 4, 1, 1, 2) +DEF_SYSREG_EL2(HV_SYS_REG_ELR_EL2, 3, 4, 4, 0, 1) +DEF_SYSREG_EL2(HV_SYS_REG_ESR_EL2, 3, 4, 5, 2, 0) +DEF_SYSREG_EL2(HV_SYS_REG_FAR_EL2, 3, 4, 6, 0, 0) +DEF_SYSREG_EL2(HV_SYS_REG_HCR_EL2, 3, 4, 1, 1, 0) +DEF_SYSREG_EL2(HV_SYS_REG_HPFAR_EL2, 3, 4, 6, 0, 4) +DEF_SYSREG_EL2(HV_SYS_REG_MAIR_EL2, 3, 4, 10, 2, 0) +DEF_SYSREG_EL2(HV_SYS_REG_MDCR_EL2, 3, 4, 1, 1, 1) +DEF_SYSREG_EL2(HV_SYS_REG_SCTLR_EL2, 3, 4, 1, 0, 0) +DEF_SYSREG_EL2(HV_SYS_REG_SPSR_EL2, 3, 4, 4, 0, 0) +DEF_SYSREG_EL2(HV_SYS_REG_SP_EL2, 3, 6, 4, 1, 0) +DEF_SYSREG_EL2(HV_SYS_REG_TCR_EL2, 3, 4, 2, 0, 2) +DEF_SYSREG_EL2(HV_SYS_REG_TPIDR_EL2, 3, 4, 13, 0, 2) +DEF_SYSREG_EL2(HV_SYS_REG_TTBR0_EL2, 3, 4, 2, 0, 0) +DEF_SYSREG_EL2(HV_SYS_REG_TTBR1_EL2, 3, 4, 2, 0, 1) +DEF_SYSREG_EL2(HV_SYS_REG_VBAR_EL2, 3, 4, 12, 0, 0) +DEF_SYSREG_EL2(HV_SYS_REG_VMPIDR_EL2, 3, 4, 0, 0, 5) +DEF_SYSREG_EL2(HV_SYS_REG_VPIDR_EL2, 3, 4, 0, 0, 0) +DEF_SYSREG_EL2(HV_SYS_REG_VTCR_EL2, 3, 4, 2, 1, 2) +DEF_SYSREG_EL2(HV_SYS_REG_VTTBR_EL2, 3, 4, 2, 1, 0) --=20 2.50.1 (Apple Git-155) From nobody Mon Apr 13 10:39:31 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=1772897601; cv=none; d=zohomail.com; s=zohoarc; b=QjFqWHyk8gubXKHHhfySsOeC8i6z3qPALS4xy0Rp//mLnPqqTXkOOMxc4YnyZ2c39DPeTaYZfACWNfldI0uMp0RgvUHclcw5s7YVgJXmptcccs+O8AkocAGs8d2+RX9xC7CqxifJrkMClHkk71jq/OFWN3w55W6d/yuP6wnHGMA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772897601; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=qk5kNnRc/8ofMH+hHbzmjYvw1FzBv77gS+l8F0NuDbQ=; b=SyS1Jlvrlw2JzVZ4C/hn2hCx+yhE2rUyqqUz0bo8ZIvBjVhgwY1Nx3jMGubzId2Wgep9+06bY8Vb/RaVcilrbBM6+G9UTzNs64cW1Er7bqoakJWu7UFPqtcJdSsAhzW6ORfgRpECE6fcvaNZs40U0bpTh12i9Sl7THZK0KYOybA= 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 177289760150675.1000286216896; Sat, 7 Mar 2026 07:33:21 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vyte1-0001Ys-0Y; Sat, 07 Mar 2026 10:32:45 -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 1vytdp-0001Oz-1R for qemu-devel@nongnu.org; Sat, 07 Mar 2026 10:32:36 -0500 Received: from p-west2-cluster5-host3-snip4-8.eps.apple.com ([57.103.71.91] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vytdj-0000QS-Bd for qemu-devel@nongnu.org; Sat, 07 Mar 2026 10:32:31 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-2 (Postfix) with ESMTPS id B200B180013C; Sat, 7 Mar 2026 15:32:14 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-2 (Postfix) with ESMTPSA id 2E786180009A; Sat, 7 Mar 2026 15:32:12 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772897536; x=1775489536; bh=qk5kNnRc/8ofMH+hHbzmjYvw1FzBv77gS+l8F0NuDbQ=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=aTD+6C6tp9X9eZZAStMlFbjkFzOceEngqCALk4QfxM4YotcdWIEgdhrbsh7ntQ2Gu/xl9lDJZLbQr1WKYTDzsDzJzqtiAs84yV9jniIUpuMwDEkiRUv9qt67zdM3IIuUsJt1sY17bo0qXL3cEniru8bdOlU93xAOz/Jv2MfcAlmlijoj7NFnyvFVBJ57XJ/m9DR7DdvxDCF9N1LKI1Sp2jIle7bvgaV3HDDOvvnmjneiRi4pSCu4EYybQ3KUMRz3M3pfBjiqkWRk8WIXpR+6igyb0ZdyBpEXFnppycc3lduZi4tW+6QcRqErf2dz2PzZh6O0nXGA0/Bly9Jrmih/oA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Phil Dennis-Jordan , Manos Pitsidianakis , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , Roman Bolshakov , Peter Maydell , qemu-arm@nongnu.org, Alexander Graf , Mohamed Mediouni Subject: [PATCH v18 11/13] target/arm: hvf: pass through CNTHCTL_EL2 and MDCCINT_EL1 Date: Sat, 7 Mar 2026 16:31:41 +0100 Message-ID: <20260307153143.76893-12-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260307153143.76893-1-mohamed@unpredictable.fr> References: <20260307153143.76893-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: b3YGGUXZw5iHW2O_791YHL0JyrQNUdCV X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA3MDE0NyBTYWx0ZWRfXxDITBkFsvNq5 1XO17qxeic+Q/VS0UGGk3DK0e2iI9QcVrdyIy+7vOSH5tkD3H29MxTC/KZ69G0ldfEA2CSZzY2Y eNe/WC5ZWl94YccQUTMVbPDEi+Qxgle9ahOHB1Tla/oL8SwjPULCYeedGYN+eESrB3YMCT6bF6h PeGM2m8GrmPgB8Lrg+9N1mFkg81AG+DCIy91PhpJMlv93XYWKJ0+5RMSufgH3OLHXE3gptcwjiW d2pjhBzUfCKU4b6wLr1tRppHNqVS6EOAhrSuPDJrqpfWPHVeDch/hW7QC8CnqU2lAW16XxR5gI8 RbxoM8ArrZM1P+FR74d2v+2cODknmU0NnCPe0ozmjyE4oPBMpN1g+x72wtquu0= X-Authority-Info-Out: v=2.4 cv=KNtXzVFo c=1 sm=1 tr=0 ts=69ac44ff cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=L1bH-B2CdzmaWMF7168A:9 a=NqO74GWdXPXpGKcKHaDJD/ajO6k=:19 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: b3YGGUXZw5iHW2O_791YHL0JyrQNUdCV X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-07_05,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 malwarescore=0 bulkscore=0 mlxlogscore=578 suspectscore=0 clxscore=1030 phishscore=0 mlxscore=0 lowpriorityscore=0 spamscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603070147 X-JNJ: AAAAAAABFb9DsRDarQcWzsjiyNiMVxYMz//2CyvvxT8foLJgWyGHUeUhhkw0RnNqO/cdESWnLoo+orQtEeChqsyGzdJ8/oQKGJh1nIGUxQeo00H7mftNufSmjXaR+80/YQajK6aHVQoPdlUeUis45r9U3iNqoiFNhlTXqJtZoIEn50ts0bhEQk9nFAP3jSSICnT3LcM4gO6fpqmbNuZ8xjBPyLSbvVREBjsCetltGIlN3zd5+VdDiDfT2lCVUCU1YwVJtWpxaAR4F+iRNuFAL+yFxF9UC2hKJ00xOUUIrBTQdQf6VoubY9bxYJUSu390OLg1JDbdqHYqq4kzz4zsY9tC9sL0Nf0G1hz+xNgMsezAJJO3PK5mszm3/uIFFwK8GX/JhFFimbvNebkDdxLtXQ3rlVMkTrd8OJxOJKSTKJsz1DbgMtvgyT5H5Tv+H+eq9M2N+xHT/e3RahX5UD6xcJXJPn1vYGQBUGMG86k7GCTpLNkEv8Y3ToN11panf+8/EmjJ1J9gtk1a5N56KE4fH+XvqjyWJffdpgXSNSCvREarshXiVFWRtWbb3N0J2xNvt3gmqWBIKcHTA6BBwqOdZ3MLOLTaam3XCwWuj5D0UfaK1stUKB0rPwP/B9NjSugbSZusOu1VYrDAEa6HcjqdJmjO6B2lqgyLxnnT9/2scbpF2pLzwsaJIk+kVceitMWv+KQls5ZSzfI9B+Qe+mP4fNCbHdEFmBn0KNd+GrOXIWyJ4SqwFKpefnPTrk3C5w== 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.71.91; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -3 X-Spam_score: -0.4 X-Spam_bar: / X-Spam_report: (-0.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1772897604507158500 HVF traps accesses to CNTHCTL_EL2. For nested guests, HVF traps accesses to= MDCCINT_EL1. Pass through those accesses to the Hypervisor.framework library. Signed-off-by: Mohamed Mediouni Reviewed-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Philippe Mathieu-Daud=C3=A9 --- target/arm/hvf/hvf.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index f6385532f3..03b174a8d4 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -296,6 +296,10 @@ void hvf_arm_init_debug(void) #define SYSREG_DBGWVR15_EL1 SYSREG(2, 0, 0, 15, 6) #define SYSREG_DBGWCR15_EL1 SYSREG(2, 0, 0, 15, 7) =20 +/* EL2 registers */ +#define SYSREG_CNTHCTL_EL2 SYSREG(3, 4, 14, 1, 0) +#define SYSREG_MDCCINT_EL1 SYSREG(2, 0, 0, 2, 0) + #define WFX_IS_WFE (1 << 0) =20 #define TMR_CTL_ENABLE (1 << 0) @@ -1704,6 +1708,14 @@ static int hvf_sysreg_read(CPUState *cpu, uint32_t r= eg, uint64_t *val) case SYSREG_OSDLR_EL1: /* Dummy register */ return 0; + case SYSREG_CNTHCTL_EL2: + if (__builtin_available(macOS 15.0, *)) { + assert_hvf_ok(hv_vcpu_get_sys_reg(cpu->accel->fd, HV_SYS_REG_C= NTHCTL_EL2, val)); + } + return 0; + case SYSREG_MDCCINT_EL1: + assert_hvf_ok(hv_vcpu_get_sys_reg(cpu->accel->fd, HV_SYS_REG_MDCCI= NT_EL1, val)); + return 0; case SYSREG_ICC_AP0R0_EL1: case SYSREG_ICC_AP0R1_EL1: case SYSREG_ICC_AP0R2_EL1: @@ -1992,6 +2004,14 @@ static int hvf_sysreg_write(CPUState *cpu, uint32_t = reg, uint64_t val) case SYSREG_OSDLR_EL1: /* Dummy register */ return 0; + case SYSREG_CNTHCTL_EL2: + if (__builtin_available(macOS 15.0, *)) { + assert_hvf_ok(hv_vcpu_set_sys_reg(cpu->accel->fd, HV_SYS_REG_C= NTHCTL_EL2, val)); + } + return 0; + case SYSREG_MDCCINT_EL1: + assert_hvf_ok(hv_vcpu_set_sys_reg(cpu->accel->fd, HV_SYS_REG_MDCCI= NT_EL1, val)); + return 0; case SYSREG_LORC_EL1: /* Dummy register */ return 0; --=20 2.50.1 (Apple Git-155) From nobody Mon Apr 13 10:39:31 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=1772897625; cv=none; d=zohomail.com; s=zohoarc; b=eZZ4oWlJv1IxXLWH6mQGBdMmYA/vfZDqKS6hC++EUO5jI/+LMji0bEj3TBdTovWOqth+doNeiuMOgVakTy7d5/mNWTZPd43oUWLcZuMwq9h/4iOScVDtO5AXfRnmzRJVzyIreHnJS7lzpEt/ha26ZHRXk8Y309g/SNFgqgh96Os= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772897625; 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=gfksJpvAASccthB/ms7ldAjBWoy8cAlKd436IVgnRWI=; b=OJOtiIcDTF68XjV7EfaBfe/H5ryDDOon1I7omtvTfyQzGQ+piSrludUaTnEn5qaXUNvwSJOQ1dJ3ZSLnkAZM5LsWsobXzdXhGzFt3U599Y4W7SEvs71aP0hmYrXE1ctUEC09coyd6S+Ta2JOwzj7c8ZsK64i/+Guz/xB3oRHeng= 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 1772897624854815.8956028767763; Sat, 7 Mar 2026 07:33:44 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vytdw-0001T1-EG; Sat, 07 Mar 2026 10:32:40 -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 1vytdm-0001LR-BO for qemu-devel@nongnu.org; Sat, 07 Mar 2026 10:32:30 -0500 Received: from p-west2-cluster3-host4-snip4-10.eps.apple.com ([57.103.69.23] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vytdj-0000Ql-8l for qemu-devel@nongnu.org; Sat, 07 Mar 2026 10:32:30 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-2 (Postfix) with ESMTPS id EE91C180086F; Sat, 7 Mar 2026 15:32:16 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-2 (Postfix) with ESMTPSA id 71CEF18022C0; Sat, 7 Mar 2026 15:32:14 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772897538; x=1775489538; bh=gfksJpvAASccthB/ms7ldAjBWoy8cAlKd436IVgnRWI=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=AJAQyrqMPYJns5f/fatB5LNUKa7jn/G0KyaCX/hqMC+4K4Uw8f/AqCkIhb+yguuyrXVqnyNcluFrYE510HpsexWib55aW2aE/b298z5GkUr9UhHYAXD1YZNRM8HsJrlVSPZvJuc71MZqaVasVxBvuKE9yGZ+7q1ihwd+zRRZZBAlxPo3Q23yoQY4SN/XzT+sLVuiomkjJULuwZr9Ilhk8r5PQ8WQVol7y6L8BNny1I1UkMl16uzsyDItSkBJ1Xlfai8K7UWrA5Qdyb2cPZTbWe6tLXpBLkfpS/Qz4kdtBgsHgcHjzEeUczgm8Z7DKE60+xza84WnK1AtDR+isrgF3g== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Phil Dennis-Jordan , Manos Pitsidianakis , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , Roman Bolshakov , Peter Maydell , qemu-arm@nongnu.org, Alexander Graf , Mohamed Mediouni Subject: [PATCH v18 12/13] hvf: arm: disable SME when nested virt is active Date: Sat, 7 Mar 2026 16:31:42 +0100 Message-ID: <20260307153143.76893-13-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260307153143.76893-1-mohamed@unpredictable.fr> References: <20260307153143.76893-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: RY4o8SFFGHNqtPvcBJPDfdNmy4CJ1i0k X-Authority-Info-Out: v=2.4 cv=KaffcAYD c=1 sm=1 tr=0 ts=69ac4501 cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=h9724yil-ocX87RSi0QA:9 a=NqO74GWdXPXpGKcKHaDJD/ajO6k=:19 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA3MDE0NyBTYWx0ZWRfX4poVBfFDeNjE akLWK8VghB0U5JvNsznpioCjMLd+m6jZA0a/zT+AwbszXJGxUAeeni1HlzQImLwstYbePkJfyef +zW4eLe2QVxRglCK1WYVrS8rdx6QaHSDe7n2Q+765Y9p4OAxEK5dByby3IM4mSyglCQDnjD5OUw rVjb0iEtaERWALyPUfOyPCtRm2xi06EdLqE+Lb7oEsX9pKj0k9d9s+bkF46dJKO27sHT6F37FNd tSvnmQ8gFJdbt8b5l9mZV2CDlUNu9Lif8lZWvd5cQLwkBB3qOcollnWfGCmR+wVRhK7D96SizFq Pw2OtwgPynILnOFkB3Zkv65Z+9nEvqC9sjtS1ci02cvDlK1uw+hnY4iT6FvzBU= X-Proofpoint-ORIG-GUID: RY4o8SFFGHNqtPvcBJPDfdNmy4CJ1i0k X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-07_05,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=756 adultscore=0 phishscore=0 lowpriorityscore=0 clxscore=1030 mlxscore=0 bulkscore=0 malwarescore=0 spamscore=0 suspectscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603070147 X-JNJ: AAAAAAABTXaYoTlrNPf7G/RcUJsS1Joa8UGoA0q19ni3xFFa+DCvjQB8y+b4GwTZmGHGblMbsMudVKXLzx0Q9moc3pMdHsFNI3/WsaogTj8lAegjViYvO0Tvw/M60Z1KMI4ciQq1C7GXPNDRNCrF+bD8zPyLPy4KZQtlA5kzvjzXBQ0B531DoluPDx83QfPSHrPuz9m1PIQRQv2y8Pe7D7THhGvzkXwt4Oasqa8uDjtqF2PhS6RbMXnTP4pwnczYU9D2HB0SxoBAhNdrjzKmKBsagLFZAfd8P2Ab4gxj9ykXoqrBr4qPlMyl1CHNdkQwUEvD2J1+IV6u8gKXHRgswch3DUjlJNx0kZowszjjhx6mShbKOSbRxAkBz2Fbmyv9/9diibsKrKlANrEJ5ZKM0suY/rW4kWp1s5lAQsC88URDAC4KMJGk512es7UOEm5halOvF3rj9cPQ7miWwnEBHzaZb8jQknSt+U3TLTvM55z/fREHilK+/LUljvx5TIifRo0Sj3c5p/A5h5tCzT5U4XV7n9ilOLzf7CO/ltFbFNpyxDhyNdy+TGK0gTRveGcLbK8klPjxZK8SCxLTgFVV02aUgL8c+9Vm2Sn1vFW7E/mQGNLoEZUgatTWMK05JqAl3i2hvgHbrY8/HUWYEhfcVsXqcf+Eg1ClFs12ChUlCDosUk3hyWmzhq/8FFDUmYzMhuZVLIIOw+s5TuNJQXANVb+POZ61NSr9PUVCXATo2eskMS0= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.69.23; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1772897643164158500 Content-Type: text/plain; charset="utf-8" Currently, Apple doesn't support the nested virtualisation + SME combinatio= n. Signed-off-by: Mohamed Mediouni Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- target/arm/hvf/hvf.c | 2 ++ target/arm/hvf_arm.h | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index 03b174a8d4..8aa59a1f77 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -1189,6 +1189,8 @@ static bool hvf_arm_get_host_cpu_features(ARMHostCPUF= eatures *ahcf) =20 if (hvf_nested_virt_enabled()) { FIELD_DP64_IDREG(&host_isar, ID_AA64DFR0, PMUVER, 0x1); + /* SME is not implemented with nested virt on the Apple side */ + FIELD_DP64_IDREG(&host_isar, ID_AA64PFR1, SME, 0); } =20 ahcf->isar =3D host_isar; diff --git a/target/arm/hvf_arm.h b/target/arm/hvf_arm.h index 6b1c3b9792..9cb58ad9ab 100644 --- a/target/arm/hvf_arm.h +++ b/target/arm/hvf_arm.h @@ -11,6 +11,7 @@ #ifndef QEMU_HVF_ARM_H #define QEMU_HVF_ARM_H =20 +#include "system/hvf.h" #include "target/arm/cpu-qom.h" =20 /** @@ -35,6 +36,10 @@ void hvf_arm_set_cpu_features_from_host(ARMCPU *cpu); if (__builtin_available(macOS 15.2, *)) { size_t svl_bytes; hv_return_t result =3D hv_sme_config_get_max_svl_bytes(&svl_by= tes); + /* Nested virt not supported together with SME right now. */ + if (hvf_nested_virt_enabled()) { + return false; + } if (result =3D=3D HV_UNSUPPORTED) { return false; } --=20 2.50.1 (Apple Git-155) From nobody Mon Apr 13 10:39:31 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=1772897685; cv=none; d=zohomail.com; s=zohoarc; b=oDkW9SXDXEHf44a/HFnHNi7W4xFq5h5P5Z9fWrAGOjJ61eC4m9CfKTbiXbi9trnOMIP8RdTF9EYIJTpuvnCmSas26DecB16J+R2sD4ULxm5qiJ42MP/hTArij4r7fmu4WCMTd+BNfjqJhXvy4N/DhCQPk5oLOmxp3GntGAXdfuc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772897685; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ijV/TFHDkMx/sDtjnbI4Tcf5/3qsWHHZ7tvtB+wJk+k=; b=WGLppAEdbwJ691ocQmSez9fiWNZ/8UOsr/FD7lgtslzhtWudX6TQfrp5t4SLSLHXaiVPensE9zC6y2Z4RF+a855zrhrXiaKkccvZe1Zc3K17ZMEOd3+Ylje8Axnoy0Yd3DJW69NcYicLWXANBq71aLys28qTablK+M87l+tsUds= 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 177289768462245.24485817068671; Sat, 7 Mar 2026 07:34:44 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vyte6-0001cS-Jg; Sat, 07 Mar 2026 10:32:50 -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 1vytdp-0001Oy-0s for qemu-devel@nongnu.org; Sat, 07 Mar 2026 10:32:36 -0500 Received: from p-west2-cluster3-host4-snip4-10.eps.apple.com ([57.103.69.23] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vytdj-0000Qy-Dg for qemu-devel@nongnu.org; Sat, 07 Mar 2026 10:32:31 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-2 (Postfix) with ESMTPS id 5434D1800879; Sat, 7 Mar 2026 15:32:19 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-2 (Postfix) with ESMTPSA id C03081800866; Sat, 7 Mar 2026 15:32:16 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772897541; x=1775489541; bh=ijV/TFHDkMx/sDtjnbI4Tcf5/3qsWHHZ7tvtB+wJk+k=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=Du9FX1A1mPwzQR9Y97j5AUcNkTZUTgcsauBhE1N94oseNfDMiBcy0vn1wOpmqKc98LGKQ4WfMHGtoB5lRl1ruIvPivbJcWjiUv7xIcGtx88N8PEYPZ7UQm4OA3laSxMPw48h2TdyjqBu8KpjivraGC2Bcnewoya1wVMsSG4jQTPIcC2KepUTLOn6Y7HqASVtUeLnMOIYhXzmp6B5NLhgSyaKSX+0TKg2ck9VaV1oHAbfkq28D4JL6atNb+R3oNtM9xV78vKX+ooZW0eGN/DrnKMZ84RNWfPbyv/bzt6bv8JHQ+WzJNtojqvjfFEiOrSbP6CJI69odJlHzPHyzcnHfA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Phil Dennis-Jordan , Manos Pitsidianakis , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , Roman Bolshakov , Peter Maydell , qemu-arm@nongnu.org, Alexander Graf , Mohamed Mediouni Subject: [PATCH v18 13/13] hvf: enable nested virtualisation support Date: Sat, 7 Mar 2026 16:31:43 +0100 Message-ID: <20260307153143.76893-14-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260307153143.76893-1-mohamed@unpredictable.fr> References: <20260307153143.76893-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: BQBlXeDnY4DqFvBNYmKapHqKE9AfH5vi X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA3MDE0NyBTYWx0ZWRfXzpL5edynW+7I luxq0DNYtUKjueBqXBQgOcPn8MKi30Vg3w/ZkYdhzWi1qWgB6sjyKHgu8bRafuqdR23l3bUy7W4 gLDYE57AE8kxtXcyU5Mh82u3XZJ8kvsi6xuSKBPYYtIPnpm5Ha4RHb2Dvm/WW5G22orQ0+DEjZX hvLQvVvBFqb88vOOuIsfxWIgGnsImm8O0uD1gVOmiwSHDeStIpF/Khc+UsGkm2H0sN1JMSAhpqf YluQ2/AiN3RvbA3otwOaU/Ll5a8e0gQs+gbm3eL35DHW8h09LKnp3htDG9BH6O0sayYftiacHRx lQJUGyElbsQNaGPp1XCI2qAQRej3CVk29mJq69Ng8BCi4Ns6yJEyeki1lrhMok= X-Authority-Info-Out: v=2.4 cv=RKC+3oi+ c=1 sm=1 tr=0 ts=69ac4504 cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=5Chse3eIq3h0lgOaJ4gA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: BQBlXeDnY4DqFvBNYmKapHqKE9AfH5vi X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-07_05,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 spamscore=0 phishscore=0 suspectscore=0 lowpriorityscore=0 mlxscore=0 mlxlogscore=916 bulkscore=0 adultscore=0 clxscore=1030 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603070147 X-JNJ: AAAAAAABuiAwzxe2MqPD+spK9FWyYl2wZMzdUwc7jXe2d1TglTgN+m7XoiXwkm4ZStKUwrU3uAYVKI9vzJwfPUDxXOZnoS0RCUwUnYkvhWdLdyIU3dEi8RLWjoukjRAL7ajTUN0A9LJc5yTF4iZ1GMPEqX17G4yC5Zzz2dja30ks4lKUzeaQWlq24Pb8KX9x1UMFEEOHGmRp0V6Me1saNSAgPE1v8u2KMiFmG8OwyINNIuBqVhXyNNcv3miJ/RHg/LrNyOOXYMr34zE62byB2ZTPYqCV+RCZ9K+ysb6b4zLHY826DgrSWBQq0fechnbji4iKefv5ba7kfZkBhNFPo6eK9cJgYqNy7W8NwR3lNhZudt2M/4TFjbSUTVQPCKgdSCfbchvv1x5miqFVJic//ujCvpWzETADxq22hCZFXhQF63UarW1BQijkk4aK/JgXmfD1K943oX9+TwxaqwtoC1HYFWnxuPkUEJ64rXHF/SZ2hKG/3YiVSayi7UZbDMxwYfZyEbs5pdCaRkTvMtqku9XGOKH3yWb6jiQ79DnAbhRtgyvn2IRCvdzt1w1q+9MURuPTKZiLDgLpp/q5l4KFoQZtIWo3UjxOeCstX7PQgLfzjWbtIkZrSQejwevdApWFMBnobHOXIoRVHGVA94cYNUNuOLqGdCCazoq30Pevww+JT2GdqnTvVlL53VUkACEI0CVPaIGaEbOQP2VAfN3RcxEFeci5e/qQ6mOq4QxYXBa6saXA Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.69.23; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1772897686671158500 Signed-off-by: Mohamed Mediouni Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/arm/virt.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 90769936d0..bced9f67f4 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -2393,13 +2393,20 @@ static void machvirt_init(MachineState *machine) exit(1); } =20 - if (vms->virt && !kvm_enabled() && !tcg_enabled() && !qtest_enabled())= { + if (vms->virt && !kvm_enabled() && !tcg_enabled() + && !hvf_enabled() && !qtest_enabled()) { error_report("mach-virt: %s does not support providing " "Virtualization extensions to the guest CPU", current_accel_name()); exit(1); } =20 + if (vms->virt && hvf_enabled() && !hvf_irqchip_in_kernel()) { + error_report("mach-virt: For HVF and Virtualization extensions " + "only kernel-irqchip=3Don is currently supported"); + exit(1); + } + if (vms->mte && hvf_enabled()) { error_report("mach-virt: %s does not support providing " "MTE to the guest CPU", --=20 2.50.1 (Apple Git-155)