From nobody Tue Dec 16 05:36:39 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1751624426; cv=none; d=zohomail.com; s=zohoarc; b=UbMGwbWi/6o3VQP+wtfVyxGE5/r5Almuy2hLD1pldgvUU2QUehmq81XkDq/z36kcqgtxIi/PGjY11263ydTxcdVoPv3Ps8vddioftXQx4JOwSApcXFHkxDVmV6s3cu3SoMXYn243qrALq8ayEJa2Wy6syriz3dBL1UHZuiD00tw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751624426; h=Content-Type:Content-Transfer-Encoding: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:Cc; bh=p7fZaNjQsotgFZjH3a21SFT+U7+4VJCz66hjOxfj1Ts=; b=QTPHJpKOPVeTj7PIM1ucmD03DkF/VuqVm6yNDc3Aa4Yyla49eHZpVT94REsupeYQTzUgbKAlhe/zK3zr/j26u4uI+3hXVn5CEDTxNAoF3YshNThP4kZjgoOV7C1UZFQ0gS2k/SbCW8r9uCO8OENwTWliIc9IM2PRdEoq7SCCix0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1751624425991488.2672234046322; Fri, 4 Jul 2025 03:20:25 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXdSx-0007xZ-DE; Fri, 04 Jul 2025 06:16:24 -0400 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 1uXdSs-0007nW-1w for qemu-devel@nongnu.org; Fri, 04 Jul 2025 06:16:18 -0400 Received: from mail-wr1-x42d.google.com ([2a00:1450:4864:20::42d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXdSp-0006vO-QU for qemu-devel@nongnu.org; Fri, 04 Jul 2025 06:16:17 -0400 Received: by mail-wr1-x42d.google.com with SMTP id ffacd0b85a97d-3a6d1369d4eso389469f8f.2 for ; Fri, 04 Jul 2025 03:16:14 -0700 (PDT) Received: from localhost.localdomain (88-187-86-199.subs.proxad.net. [88.187.86.199]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b470caa1a2sm2074747f8f.42.2025.07.04.03.16.12 for (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Fri, 04 Jul 2025 03:16:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751624173; x=1752228973; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=p7fZaNjQsotgFZjH3a21SFT+U7+4VJCz66hjOxfj1Ts=; b=kmKAemJszfRUeI8QTICIPb4jmDbTTcbxIBPaFWoGwgrfjO0mDxz7RjWtTJYm43y/ne 6xHfoj2vlN4H4yVL2E9S3IHaOPA7V4X1/quVdktSODsO/SaE0DiWWRQjjUFDFgXNnipG Nvd4L78CtoVi6C6weGYykdY4I2CfSyKj8CZc6jUDU2hPro9ldoYtji8HJI0QmS7RcQMN jltH1ahKyP+3Kyrivx+lZIRBoNH6w1jHOj2y33cIVQXhy0fVD8xJtZkLLf4lPZRmHJxy wbghYOJgHoRhsR3qvd+TGqHH/do8Wz60CZOXI9lmcZjbVYgrs/gP5FZIg0aEV1deXjHL 5CRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751624173; x=1752228973; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=p7fZaNjQsotgFZjH3a21SFT+U7+4VJCz66hjOxfj1Ts=; b=ic6pWt4wtywAtfaZKq/up0urO47hCGR0tt7moqJinaq9RnBneNsB89pKFp4wA2FG9m /cwcKFZOMPWp0sjKXilm+hxOnd/HDcbG9c/oskQvt4JmW/f20VNtmKgVtPCMkc/TJn2n gbGAdZLQ0CwDxxLSpaEsoMnH5om6eel61ps89XiNYxYbJ/xyq49mGkqNfBWoOaPjXKoO J8DCrZidGIlfDPsFBp1gtDyDxtw+iUIaGORuPdK00BAToV2mYv+IeaNqwcP6E4NgdrVc Fx8YiPE5isZGN+1nifPTUBjcnbOQM0qCj9siL96i/bq9qI662N4wbzbqQlPVDoSXtPrF Gbtg== X-Gm-Message-State: AOJu0YyM3SmH53fF5hxSERm1xbjfOwQCrm7i2ZtUw28urLbjyp4HVA9y O76VKGKZOVU0PahXWXBaKsy4xi+Mv+bcnFxX0zcXPvOWAzEMJYmzykQMdQTZDzQ6Deuer2tI4tW pZTQnTUY= X-Gm-Gg: ASbGncsA2Q/kHRbBnn9ukaAzn8aPG8gGyGvscXZ2Ao6qwBWIWAJjQMERJiA4/fbXfJu CjWs24VFkANl32Ec/U0r8CqtTZ9n9C/ukYiTXnGsZad50IXHvzKlHCPFJT2AoR5pCXZ1zuILy9y IHRyC7dxGbepDEU37zuDHz7cNFvf//tpP5Zx9jqoH82csJJH7B6Zw9MFLI1DbK8Smvt/QCavKGO G26fhznZuZhd/qVNtXc+KYldyEur81Nduy/oU6gxlTSMAEVjRf7aWXSfn6aiNap6CR1YtUSO8Rb 6AGmegyCNLw4P/9cN0+6ry9GV8s4F6gvnpzi9VP70q6HA18+GWFFmbVxzB3E+IbVMcIEqc77GCc DYtLtX57ktancRLx6TJlD/KENfskB1Y/BeOpL X-Google-Smtp-Source: AGHT+IGYRpo+eZ4WcLWHHZmcPhuk2LH5kNcw/4pLT/n+iGmv40DdPIWKA+KRNunx8y3+4m4dr1FSew== X-Received: by 2002:a05:6000:2289:b0:3a5:8a68:b815 with SMTP id ffacd0b85a97d-3b4965ff60cmr1500033f8f.46.1751624173099; Fri, 04 Jul 2025 03:16:13 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Subject: [PULL 21/31] accel: Expose and register generic_handle_interrupt() Date: Fri, 4 Jul 2025 12:14:22 +0200 Message-ID: <20250704101433.8813-22-philmd@linaro.org> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250704101433.8813-1-philmd@linaro.org> References: <20250704101433.8813-1-philmd@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::42d; envelope-from=philmd@linaro.org; helo=mail-wr1-x42d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1751624428251116600 In order to dispatch over AccelOpsClass::handle_interrupt(), we need it always defined, not calling a hidden handler under the hood. Make AccelOpsClass::handle_interrupt() mandatory. Expose generic_handle_interrupt() prototype and register it for each accelerator. Suggested-by: Richard Henderson Signed-off-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Pierrick Bouvier Reviewed-by: Zhao Liu Reviewed-by: Richard Henderson Reviewed-by: Xiaoyao Li Message-Id: <20250703173248.44995-29-philmd@linaro.org> --- include/system/accel-ops.h | 3 +++ accel/hvf/hvf-accel-ops.c | 1 + accel/kvm/kvm-accel-ops.c | 1 + accel/qtest/qtest.c | 1 + accel/xen/xen-all.c | 1 + system/cpus.c | 10 ++++------ target/i386/nvmm/nvmm-accel-ops.c | 1 + target/i386/whpx/whpx-accel-ops.c | 1 + 8 files changed, 13 insertions(+), 6 deletions(-) diff --git a/include/system/accel-ops.h b/include/system/accel-ops.h index a4e706b49c9..e775ecc348c 100644 --- a/include/system/accel-ops.h +++ b/include/system/accel-ops.h @@ -62,6 +62,7 @@ struct AccelOpsClass { void (*synchronize_pre_loadvm)(CPUState *cpu); void (*synchronize_pre_resume)(bool step_pending); =20 + /* handle_interrupt is mandatory. */ void (*handle_interrupt)(CPUState *cpu, int mask); =20 /** @@ -86,4 +87,6 @@ struct AccelOpsClass { void (*remove_all_breakpoints)(CPUState *cpu); }; =20 +void generic_handle_interrupt(CPUState *cpu, int mask); + #endif /* ACCEL_OPS_H */ diff --git a/accel/hvf/hvf-accel-ops.c b/accel/hvf/hvf-accel-ops.c index 395b5a8e1c0..be8724ac896 100644 --- a/accel/hvf/hvf-accel-ops.c +++ b/accel/hvf/hvf-accel-ops.c @@ -353,6 +353,7 @@ static void hvf_accel_ops_class_init(ObjectClass *oc, c= onst void *data) =20 ops->create_vcpu_thread =3D hvf_start_vcpu_thread; ops->kick_vcpu_thread =3D hvf_kick_vcpu_thread; + ops->handle_interrupt =3D generic_handle_interrupt; =20 ops->synchronize_post_reset =3D hvf_cpu_synchronize_post_reset; ops->synchronize_post_init =3D hvf_cpu_synchronize_post_init; diff --git a/accel/kvm/kvm-accel-ops.c b/accel/kvm/kvm-accel-ops.c index e5c15449aa6..0eafc902c3f 100644 --- a/accel/kvm/kvm-accel-ops.c +++ b/accel/kvm/kvm-accel-ops.c @@ -101,6 +101,7 @@ static void kvm_accel_ops_class_init(ObjectClass *oc, c= onst void *data) ops->synchronize_post_init =3D kvm_cpu_synchronize_post_init; ops->synchronize_state =3D kvm_cpu_synchronize_state; ops->synchronize_pre_loadvm =3D kvm_cpu_synchronize_pre_loadvm; + ops->handle_interrupt =3D generic_handle_interrupt; =20 #ifdef TARGET_KVM_HAVE_GUEST_DEBUG ops->update_guest_debug =3D kvm_update_guest_debug_ops; diff --git a/accel/qtest/qtest.c b/accel/qtest/qtest.c index 612cede160b..5474ce73135 100644 --- a/accel/qtest/qtest.c +++ b/accel/qtest/qtest.c @@ -67,6 +67,7 @@ static void qtest_accel_ops_class_init(ObjectClass *oc, c= onst void *data) ops->create_vcpu_thread =3D dummy_start_vcpu_thread; ops->get_virtual_clock =3D qtest_get_virtual_clock; ops->set_virtual_clock =3D qtest_set_virtual_clock; + ops->handle_interrupt =3D generic_handle_interrupt; }; =20 static const TypeInfo qtest_accel_ops_type =3D { diff --git a/accel/xen/xen-all.c b/accel/xen/xen-all.c index c150dd43cab..c12c22de785 100644 --- a/accel/xen/xen-all.c +++ b/accel/xen/xen-all.c @@ -153,6 +153,7 @@ static void xen_accel_ops_class_init(ObjectClass *oc, c= onst void *data) AccelOpsClass *ops =3D ACCEL_OPS_CLASS(oc); =20 ops->create_vcpu_thread =3D dummy_start_vcpu_thread; + ops->handle_interrupt =3D generic_handle_interrupt; } =20 static const TypeInfo xen_accel_ops_type =3D { diff --git a/system/cpus.c b/system/cpus.c index a43e0e4e796..0d0eec82a2f 100644 --- a/system/cpus.c +++ b/system/cpus.c @@ -254,7 +254,7 @@ int64_t cpus_get_elapsed_ticks(void) return cpu_get_ticks(); } =20 -static void generic_handle_interrupt(CPUState *cpu, int mask) +void generic_handle_interrupt(CPUState *cpu, int mask) { cpu->interrupt_request |=3D mask; =20 @@ -267,11 +267,7 @@ void cpu_interrupt(CPUState *cpu, int mask) { g_assert(bql_locked()); =20 - if (cpus_accel->handle_interrupt) { - cpus_accel->handle_interrupt(cpu, mask); - } else { - generic_handle_interrupt(cpu, mask); - } + cpus_accel->handle_interrupt(cpu, mask); } =20 /* @@ -680,6 +676,8 @@ void cpus_register_accel(const AccelOpsClass *ops) { assert(ops !=3D NULL); assert(ops->create_vcpu_thread !=3D NULL); /* mandatory */ + assert(ops->handle_interrupt); + cpus_accel =3D ops; } =20 diff --git a/target/i386/nvmm/nvmm-accel-ops.c b/target/i386/nvmm/nvmm-acce= l-ops.c index 21443078b72..a5517b0abf3 100644 --- a/target/i386/nvmm/nvmm-accel-ops.c +++ b/target/i386/nvmm/nvmm-accel-ops.c @@ -87,6 +87,7 @@ static void nvmm_accel_ops_class_init(ObjectClass *oc, co= nst void *data) =20 ops->create_vcpu_thread =3D nvmm_start_vcpu_thread; ops->kick_vcpu_thread =3D nvmm_kick_vcpu_thread; + ops->handle_interrupt =3D generic_handle_interrupt; =20 ops->synchronize_post_reset =3D nvmm_cpu_synchronize_post_reset; ops->synchronize_post_init =3D nvmm_cpu_synchronize_post_init; diff --git a/target/i386/whpx/whpx-accel-ops.c b/target/i386/whpx/whpx-acce= l-ops.c index b8bebe403c9..31cf15f0045 100644 --- a/target/i386/whpx/whpx-accel-ops.c +++ b/target/i386/whpx/whpx-accel-ops.c @@ -90,6 +90,7 @@ static void whpx_accel_ops_class_init(ObjectClass *oc, co= nst void *data) ops->create_vcpu_thread =3D whpx_start_vcpu_thread; ops->kick_vcpu_thread =3D whpx_kick_vcpu_thread; ops->cpu_thread_is_idle =3D whpx_vcpu_thread_is_idle; + ops->handle_interrupt =3D generic_handle_interrupt; =20 ops->synchronize_post_reset =3D whpx_cpu_synchronize_post_reset; ops->synchronize_post_init =3D whpx_cpu_synchronize_post_init; --=20 2.49.0