From nobody Mon Feb 9 07:06:21 2026 Received: from sender4-of-o52.zoho.com (sender4-of-o52.zoho.com [136.143.188.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AE6C83033C4; Wed, 28 Jan 2026 16:05:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.52 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769616324; cv=pass; b=lLUqTcMyggFUIKg5d+YOQDtqWIODUyH8/IstJKjFjW372nK+7QgMD9dP4p9txVKFjVdFgfiVkEutwNt1q1ORBX1JFrTDVddcJx/z9nCfVYdaGqspBe+ce8I9eQlGTkhE7U8kp50wlw701Hq2FvCf8HReKljMP+StLb5nVRrN8rk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769616324; c=relaxed/simple; bh=46MpuE7cj/nMDFCGc2gs3Dv76e31vD8Bg6S7WpievX4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Qd161BXL32e1EOPm6dX+/F26qRwu5q5+v/qPnmHKmYspKZKrxn+BvxP+6vMln8yS0c9gLCl19uBaof7f4/DZUd9CeVfhIhTKWQbtzfsIpWz1T9jGjjNQMHGHg1xYakK++WXJW3TTAYck4RCpLZscoITSWWbtVXPft5aBGFLofGM= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=anirudhrb.com; spf=pass smtp.mailfrom=anirudhrb.com; dkim=pass (1024-bit key) header.d=anirudhrb.com header.i=anirudh@anirudhrb.com header.b=HeqW7o97; arc=pass smtp.client-ip=136.143.188.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=anirudhrb.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=anirudhrb.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=anirudhrb.com header.i=anirudh@anirudhrb.com header.b="HeqW7o97" ARC-Seal: i=1; a=rsa-sha256; t=1769616316; cv=none; d=zohomail.com; s=zohoarc; b=gyxdnOx7JhI9IL4xls+06Wov7Mxp+jS9youn4JDiUqyBpiB5Wr1tnrYgmalAw3xhVv7Cvh6nymZ1zUgp7u42X/WN40Jrh5FlpNT9ZRsSdmdiG1pes+h4NcWmnXiPS+yOceuC13ciMFctO7L2zITfRnkobl/fppOVT0K7E4b9y0A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769616316; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=zJoSbIKZMgdEKdInpaUpwUo7fY/+kfv6C7aT5wuETMI=; b=RPLaBxc83L53aH7hSOCn0aQH8xp9g1n49bp43W34CgdnjkOVmMHmi2b53rTXU/1Kc5d/n5sKnoN+WSzIpVB+wns8gmFS6bNnMshfX+JsnKxwtJgJKn+N6UBodQI8A2+s67WV6qLgAXos3k0tUhi7h/ndKNZ4nQL31vUcqYNodDg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=anirudhrb.com; spf=pass smtp.mailfrom=anirudh@anirudhrb.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1769616316; s=zoho; d=anirudhrb.com; i=anirudh@anirudhrb.com; h=From:From:To:To:Cc:Cc:Subject:Subject:Date:Date:Message-Id:Message-Id:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding:Reply-To; bh=zJoSbIKZMgdEKdInpaUpwUo7fY/+kfv6C7aT5wuETMI=; b=HeqW7o97VW4vhZlwMH0HIs8TTujRpIqjV056XVWPfudQUnXlXxARkod3wTQA0ObQ ixi6k9lVZZR8a2Z2sMP8LpCDD0tabBx+GrmqPhG/fNMHnWS5FT3WcLcc0Rq/PuSkGv6 r3usnd6S22s63cHgWT1/1js53K0KUbD18m4SAVB4= Received: by mx.zohomail.com with SMTPS id 1769616314675624.4464552548868; Wed, 28 Jan 2026 08:05:14 -0800 (PST) From: Anirudh Rayabharam To: kys@microsoft.com, haiyangz@microsoft.com, wei.liu@kernel.org, decui@microsoft.com, longli@microsoft.com, linux-hyperv@vger.kernel.org, linux-kernel@vger.kernel.org Cc: anirudh@anirudhrb.com Subject: [PATCH 1/2] mshv: rename synic per-cpu init/cleanup functions Date: Wed, 28 Jan 2026 16:04:36 +0000 Message-Id: <20260128160437.3342167-2-anirudh@anirudhrb.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260128160437.3342167-1-anirudh@anirudhrb.com> References: <20260128160437.3342167-1-anirudh@anirudhrb.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMailClient: External Content-Type: text/plain; charset="utf-8" From: Anirudh Rayabharam (Microsoft) Rename mshv_synic_init() to mshv_synic_cpu_init() and mshv_synic_cleanup() to mshv_synic_cpu_exit() to better reflect that these functions handle per-cpu synic setup and teardown. This prepares for a future patch that will introduce mshv_synic_init() and mshv_synic_cleanup() for common, non per-cpu initialization. No functional change. Signed-off-by: Anirudh Rayabharam (Microsoft) --- drivers/hv/mshv_root.h | 4 ++-- drivers/hv/mshv_root_main.c | 4 ++-- drivers/hv/mshv_synic.c | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/hv/mshv_root.h b/drivers/hv/mshv_root.h index 3c1d88b36741..c02513f75429 100644 --- a/drivers/hv/mshv_root.h +++ b/drivers/hv/mshv_root.h @@ -242,8 +242,8 @@ int mshv_register_doorbell(u64 partition_id, doorbell_c= b_t doorbell_cb, void mshv_unregister_doorbell(u64 partition_id, int doorbell_portid); =20 void mshv_isr(void); -int mshv_synic_init(unsigned int cpu); -int mshv_synic_cleanup(unsigned int cpu); +int mshv_synic_cpu_init(unsigned int cpu); +int mshv_synic_cpu_exit(unsigned int cpu); =20 static inline bool mshv_partition_encrypted(struct mshv_partition *partiti= on) { diff --git a/drivers/hv/mshv_root_main.c b/drivers/hv/mshv_root_main.c index 681b58154d5e..abb34b37d552 100644 --- a/drivers/hv/mshv_root_main.c +++ b/drivers/hv/mshv_root_main.c @@ -2284,8 +2284,8 @@ static int __init mshv_parent_partition_init(void) } =20 ret =3D cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "mshv_synic", - mshv_synic_init, - mshv_synic_cleanup); + mshv_synic_cpu_init, + mshv_synic_cpu_exit); if (ret < 0) { dev_err(dev, "Failed to setup cpu hotplug state: %i\n", ret); goto free_synic_pages; diff --git a/drivers/hv/mshv_synic.c b/drivers/hv/mshv_synic.c index f8b0337cdc82..ba89655b0910 100644 --- a/drivers/hv/mshv_synic.c +++ b/drivers/hv/mshv_synic.c @@ -446,7 +446,7 @@ void mshv_isr(void) } } =20 -int mshv_synic_init(unsigned int cpu) +int mshv_synic_cpu_init(unsigned int cpu) { union hv_synic_simp simp; union hv_synic_siefp siefp; @@ -542,7 +542,7 @@ int mshv_synic_init(unsigned int cpu) return -EFAULT; } =20 -int mshv_synic_cleanup(unsigned int cpu) +int mshv_synic_cpu_exit(unsigned int cpu) { union hv_synic_sint sint; union hv_synic_simp simp; --=20 2.34.1 From nobody Mon Feb 9 07:06:21 2026 Received: from sender4-of-o52.zoho.com (sender4-of-o52.zoho.com [136.143.188.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6D4211E3DE5; Wed, 28 Jan 2026 16:05:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.52 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769616334; cv=pass; b=X5YJc5tC5FTfubgS0Wbl3NzkXGShFtYP1V9GhZeTF3a7MRyK15MQMjXrRwKMUD4xCS1l0ULnBN878evUDxUfsFeE5RW7E+A2a1ApQmyV9eiYVREr8NoWFAm2LzB9/mYEjuC0WGADCz7BCwF0XucRNgmzBGpAI2vkN2mMqSHT0CU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769616334; c=relaxed/simple; bh=/sfwojrOoFfEJRVha4+KADP3HLjRB7C+Y7xcqBurgV0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=l3gpieJkA8MQaqJ5N5/a7qnqmC6jNwVV9+vemofuncwjO4t/R6KL6ZMgWxm9sb2BvHHuhyJM3pegXjD/ZN+F2D758LqrhuxNZM11HK/Qm504FgtSosD5AECVUmFt5LfMCYUaN50p8jiBJfQC8vYeY6h/3J0w+kS7uzI2Dg9794w= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=anirudhrb.com; spf=pass smtp.mailfrom=anirudhrb.com; dkim=pass (1024-bit key) header.d=anirudhrb.com header.i=anirudh@anirudhrb.com header.b=XP06hXIw; arc=pass smtp.client-ip=136.143.188.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=anirudhrb.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=anirudhrb.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=anirudhrb.com header.i=anirudh@anirudhrb.com header.b="XP06hXIw" ARC-Seal: i=1; a=rsa-sha256; t=1769616324; cv=none; d=zohomail.com; s=zohoarc; b=dO5i+v7fbYgGGbrCydxcELUsd/j4YNv1GcFAD8MRwMw/wBHNdilTGVaLmlOUaZqR6Z4MfClrfVI/cvHwM/vuZzC9/Jt+iEIow0iigRuG8rPsWDg86In9sX04H5yCOckIjzuLoKIw00huN//FoiGFOFT5GO1+Qs5zoba00ZsZfiM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769616324; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=9t3pdRz3IVmcEKX0IUkvsHz8KlubOsLPttsCjfuOYx0=; b=g4Cm47qqelNBibqawqD0Eb8AqtFkrE/h1ynrwsp/ZpFVzynu0NTlSqkp723OMtrSUUk5WdV78iL7AkMHkCMXYez/okDtKUAVPIHJZ5EjoFluaNAmRkhkP5LHh5u8heVWQgHhcHlJLeU5NF0kyTJ9Zs256b55CnD7lix8XgQ8GvE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=anirudhrb.com; spf=pass smtp.mailfrom=anirudh@anirudhrb.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1769616324; s=zoho; d=anirudhrb.com; i=anirudh@anirudhrb.com; h=From:From:To:To:Cc:Cc:Subject:Subject:Date:Date:Message-Id:Message-Id:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding:Reply-To; bh=9t3pdRz3IVmcEKX0IUkvsHz8KlubOsLPttsCjfuOYx0=; b=XP06hXIwXQ270b37JhsJuKDXC6XFgYRknnmf6oqIN26VQjvi25+rECMlFKFkEfVH leWOH9V+FDWUXO0lNI/ViAkyOWZTDqCegs1Mk0cMki/cTp22tjY+aV1iHICdzd8xG1Y OA+FoNeJN2h7wSvNj2Q4ZilbhjDROJvsRbyk390Y= Received: by mx.zohomail.com with SMTPS id 1769616322010448.30614109620603; Wed, 28 Jan 2026 08:05:22 -0800 (PST) From: Anirudh Rayabharam To: kys@microsoft.com, haiyangz@microsoft.com, wei.liu@kernel.org, decui@microsoft.com, longli@microsoft.com, linux-hyperv@vger.kernel.org, linux-kernel@vger.kernel.org Cc: anirudh@anirudhrb.com Subject: [PATCH 2/2] mshv: add arm64 support for doorbell & intercept SINTs Date: Wed, 28 Jan 2026 16:04:37 +0000 Message-Id: <20260128160437.3342167-3-anirudh@anirudhrb.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260128160437.3342167-1-anirudh@anirudhrb.com> References: <20260128160437.3342167-1-anirudh@anirudhrb.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMailClient: External Content-Type: text/plain; charset="utf-8" From: Anirudh Rayabharam (Microsoft) On x86, the HYPERVISOR_CALLBACK_VECTOR is used to receive synthetic interrupts (SINTs) from the hypervisor for doorbells and intercepts. There is no such vector reserved for arm64. On arm64, the INTID for SINTs should be in the SGI or PPI range. The hypervisor exposes a virtual device in the ACPI that reserves a PPI for this use. Introduce a platform_driver that binds to this ACPI device and obtains the interrupt vector that can be used for SINTs. To better unify x86 and arm64 paths, introduce mshv_sint_irq_init() that either registers the platform_driver and obtains the INTID (arm64) or just uses HYPERVISOR_CALLBACK_VECTOR as the interrupt vector (x86). Signed-off-by: Anirudh Rayabharam (Microsoft) --- drivers/hv/mshv_root.h | 2 + drivers/hv/mshv_root_main.c | 11 ++- drivers/hv/mshv_synic.c | 152 ++++++++++++++++++++++++++++++++++-- 3 files changed, 158 insertions(+), 7 deletions(-) diff --git a/drivers/hv/mshv_root.h b/drivers/hv/mshv_root.h index c02513f75429..c2d1e8d7452c 100644 --- a/drivers/hv/mshv_root.h +++ b/drivers/hv/mshv_root.h @@ -332,5 +332,7 @@ int mshv_region_get(struct mshv_mem_region *region); bool mshv_region_handle_gfn_fault(struct mshv_mem_region *region, u64 gfn); void mshv_region_movable_fini(struct mshv_mem_region *region); bool mshv_region_movable_init(struct mshv_mem_region *region); +int mshv_synic_init(void); +void mshv_synic_cleanup(void); =20 #endif /* _MSHV_ROOT_H_ */ diff --git a/drivers/hv/mshv_root_main.c b/drivers/hv/mshv_root_main.c index abb34b37d552..6c2d4a80dbe3 100644 --- a/drivers/hv/mshv_root_main.c +++ b/drivers/hv/mshv_root_main.c @@ -2276,11 +2276,17 @@ static int __init mshv_parent_partition_init(void) MSHV_HV_MAX_VERSION); } =20 + ret =3D mshv_synic_init(); + if (ret) { + dev_err(dev, "Failed to initialize synic: %i\n", ret); + goto device_deregister; + } + mshv_root.synic_pages =3D alloc_percpu(struct hv_synic_pages); if (!mshv_root.synic_pages) { dev_err(dev, "Failed to allocate percpu synic page\n"); ret =3D -ENOMEM; - goto device_deregister; + goto synic_cleanup; } =20 ret =3D cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "mshv_synic", @@ -2322,6 +2328,8 @@ static int __init mshv_parent_partition_init(void) cpuhp_remove_state(mshv_cpuhp_online); free_synic_pages: free_percpu(mshv_root.synic_pages); +synic_cleanup: + mshv_synic_cleanup(); device_deregister: misc_deregister(&mshv_dev); return ret; @@ -2337,6 +2345,7 @@ static void __exit mshv_parent_partition_exit(void) mshv_root_partition_exit(); cpuhp_remove_state(mshv_cpuhp_online); free_percpu(mshv_root.synic_pages); + mshv_synic_cleanup(); } =20 module_init(mshv_parent_partition_init); diff --git a/drivers/hv/mshv_synic.c b/drivers/hv/mshv_synic.c index ba89655b0910..b7860a75b97e 100644 --- a/drivers/hv/mshv_synic.c +++ b/drivers/hv/mshv_synic.c @@ -10,13 +10,19 @@ #include #include #include +#include #include #include #include +#include +#include =20 #include "mshv_eventfd.h" #include "mshv.h" =20 +static int mshv_interrupt =3D -1; +static int mshv_irq =3D -1; + static u32 synic_event_ring_get_queued_port(u32 sint_index) { struct hv_synic_event_ring_page **event_ring_page; @@ -446,14 +452,144 @@ void mshv_isr(void) } } =20 +#ifndef HYPERVISOR_CALLBACK_VECTOR +#ifdef CONFIG_ACPI +static long __percpu *mshv_evt; + +static acpi_status mshv_walk_resources(struct acpi_resource *res, void *ct= x) +{ + struct resource r; + + switch (res->type) { + case ACPI_RESOURCE_TYPE_EXTENDED_IRQ: + if (!acpi_dev_resource_interrupt(res, 0, &r)) { + pr_err("Unable to parse MSHV ACPI interrupt\n"); + return AE_ERROR; + } + /* ARM64 INTID */ + mshv_interrupt =3D res->data.extended_irq.interrupts[0]; + /* Linux IRQ number */ + mshv_irq =3D r.start; + pr_info("MSHV SINT INTID %d, IRQ %d\n", + mshv_interrupt, mshv_irq); + return AE_OK; + default: + /* Unused resource type */ + return AE_OK; + } + + return AE_OK; +} + +static irqreturn_t mshv_percpu_isr(int irq, void *dev_id) +{ + mshv_isr(); + add_interrupt_randomness(irq); + return IRQ_HANDLED; +} + +static int mshv_sint_probe(struct platform_device *pdev) +{ + acpi_status result; + int ret =3D 0; + struct acpi_device *device =3D ACPI_COMPANION(&pdev->dev); + + result =3D acpi_walk_resources(device->handle, METHOD_NAME__CRS, + mshv_walk_resources, NULL); + + if (ACPI_FAILURE(result)) { + ret =3D -ENODEV; + goto out; + } + + mshv_evt =3D alloc_percpu(long); + if (!mshv_evt) { + ret =3D -ENOMEM; + goto out; + } + + ret =3D request_percpu_irq(mshv_irq, mshv_percpu_isr, "MSHV", mshv_evt); +out: + return ret; +} + +static void mshv_sint_remove(struct platform_device *pdev) +{ + free_percpu_irq(mshv_irq, mshv_evt); + free_percpu(mshv_evt); +} +#else +static int mshv_sint_probe(struct platform_device *pdev) +{ + return -ENODEV; +} + +static void mshv_sint_remove(struct platform_device *pdev) +{ + return; +} +#endif + + +static const __maybe_unused struct acpi_device_id mshv_sint_device_ids[] = =3D { + {"MSFT1003", 0}, + {"", 0}, +}; + +static struct platform_driver mshv_sint_drv =3D { + .probe =3D mshv_sint_probe, + .remove =3D mshv_sint_remove, + .driver =3D { + .name =3D "mshv_sint", + .acpi_match_table =3D ACPI_PTR(mshv_sint_device_ids), + .probe_type =3D PROBE_FORCE_SYNCHRONOUS, + }, +}; +#endif /* HYPERVISOR_CALLBACK_VECTOR */ + +int mshv_synic_init(void) +{ +#ifdef HYPERVISOR_CALLBACK_VECTOR + mshv_interrupt =3D HYPERVISOR_CALLBACK_VECTOR; + mshv_irq =3D -1; + return 0; +#else + int ret; + + if (acpi_disabled) + return -ENODEV; + + ret =3D platform_driver_register(&mshv_sint_drv); + if (ret) + return ret; + + if (mshv_interrupt =3D=3D -1 || mshv_irq =3D=3D -1) { + ret =3D -ENODEV; + goto out_unregister; + } + + return 0; + +out_unregister: + platform_driver_unregister(&mshv_sint_drv); + return ret; +#endif +} + +void mshv_synic_cleanup(void) +{ +#ifndef HYPERVISOR_CALLBACK_VECTOR + if (!acpi_disabled) + platform_driver_unregister(&mshv_sint_drv); +#endif +} + int mshv_synic_cpu_init(unsigned int cpu) { union hv_synic_simp simp; union hv_synic_siefp siefp; union hv_synic_sirbp sirbp; -#ifdef HYPERVISOR_CALLBACK_VECTOR union hv_synic_sint sint; -#endif union hv_synic_scontrol sctrl; struct hv_synic_pages *spages =3D this_cpu_ptr(mshv_root.synic_pages); struct hv_message_page **msg_page =3D &spages->hyp_synic_message_page; @@ -496,10 +632,12 @@ int mshv_synic_cpu_init(unsigned int cpu) =20 hv_set_non_nested_msr(HV_MSR_SIRBP, sirbp.as_uint64); =20 -#ifdef HYPERVISOR_CALLBACK_VECTOR + if (mshv_irq !=3D -1) + enable_percpu_irq(mshv_irq, 0); + /* Enable intercepts */ sint.as_uint64 =3D 0; - sint.vector =3D HYPERVISOR_CALLBACK_VECTOR; + sint.vector =3D mshv_interrupt; sint.masked =3D false; sint.auto_eoi =3D hv_recommend_using_aeoi(); hv_set_non_nested_msr(HV_MSR_SINT0 + HV_SYNIC_INTERCEPTION_SINT_INDEX, @@ -507,13 +645,12 @@ int mshv_synic_cpu_init(unsigned int cpu) =20 /* Doorbell SINT */ sint.as_uint64 =3D 0; - sint.vector =3D HYPERVISOR_CALLBACK_VECTOR; + sint.vector =3D mshv_interrupt; sint.masked =3D false; sint.as_intercept =3D 1; sint.auto_eoi =3D hv_recommend_using_aeoi(); hv_set_non_nested_msr(HV_MSR_SINT0 + HV_SYNIC_DOORBELL_SINT_INDEX, sint.as_uint64); -#endif =20 /* Enable global synic bit */ sctrl.as_uint64 =3D hv_get_non_nested_msr(HV_MSR_SCONTROL); @@ -568,6 +705,9 @@ int mshv_synic_cpu_exit(unsigned int cpu) hv_set_non_nested_msr(HV_MSR_SINT0 + HV_SYNIC_DOORBELL_SINT_INDEX, sint.as_uint64); =20 + if (mshv_irq !=3D -1) + disable_percpu_irq(mshv_irq); + /* Disable Synic's event ring page */ sirbp.as_uint64 =3D hv_get_non_nested_msr(HV_MSR_SIRBP); sirbp.sirbp_enabled =3D false; --=20 2.34.1