public inbox for linux-hyperv@vger.kernel.org
 help / color / mirror / Atom feed
From: Mukesh R <mrathor@linux.microsoft.com>
To: Wei Liu <wei.liu@kernel.org>
Cc: linux-hyperv@vger.kernel.org, linux-kernel@vger.kernel.org,
	kys@microsoft.com, haiyangz@microsoft.com, decui@microsoft.com,
	longli@microsoft.com, tglx@linutronix.de, mingo@redhat.com,
	bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org,
	hpa@zytor.com
Subject: Re: [PATCH v1] x86/hyperv: Reserve 3 interrupt vectors used exclusively by mshv
Date: Thu, 15 Jan 2026 10:16:53 -0800	[thread overview]
Message-ID: <e4a513dc-57e9-288d-6929-c1ab1a084388@linux.microsoft.com> (raw)
In-Reply-To: <20260115072509.GF3557088@liuwe-devbox-debian-v2.local>

On 1/14/26 23:25, Wei Liu wrote:
> On Fri, Jan 02, 2026 at 02:02:08PM -0800, Mukesh Rathor wrote:
>> MSVC compiler, used to compile the Microsoft Hyper-V hypervisor currently,
>> has an assert intrinsic that uses interrupt vector 0x29 to create an
>> exception. This will cause hypervisor to then crash and collect core. As
>> such, if this interrupt number is assigned to a device by linux and the
>> device generates it, hypervisor will crash. There are two other such
>> vectors hard coded in the hypervisor, 0x2C and 0x2D for debug purposes.
>> Fortunately, the three vectors are part of the kernel driver space and
>> that makes it feasible to reserve them early so they are not assigned
>> later.
>>
>> Signed-off-by: Mukesh Rathor <mrathor@linux.microsoft.com>
>> ---
>>
>> v1: Add ifndef CONFIG_X86_FRED (thanks hpa)
>>
>>   arch/x86/kernel/cpu/mshyperv.c | 26 ++++++++++++++++++++++++++
>>   1 file changed, 26 insertions(+)
>>
>> diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c
>> index 579fb2c64cfd..8ef4ca6733ac 100644
>> --- a/arch/x86/kernel/cpu/mshyperv.c
>> +++ b/arch/x86/kernel/cpu/mshyperv.c
>> @@ -478,6 +478,27 @@ int hv_get_hypervisor_version(union hv_hypervisor_version_info *info)
>>   }
>>   EXPORT_SYMBOL_GPL(hv_get_hypervisor_version);
>>   
>> +#ifndef CONFIG_X86_FRED
> 
> I briefly looked up FRED and checked the code. I understand that once it
> is enabled, Linux kernel doesn't setup the IDT anymore (code in
> arch/x86/kernel/traps.c).
> 
> My question is, do we need to do anything when FRED is enabled?

Yeah, at first glance my thought was it probably has greater
implications (in terms of double checking exceptions), and so
when time allows do deeper investigation and perhaps run it by
the hypervisor team to see if there is any other work we need to
do.

Thanks,
-Mukesh


> Wei
> 
>> +/*
>> + * Reserve vectors hard coded in the hypervisor. If used outside, the hypervisor
>> + * will crash or hang or break into debugger.
>> + */
>> +static void hv_reserve_irq_vectors(void)
>> +{
>> +	#define HYPERV_DBG_FASTFAIL_VECTOR	0x29
>> +	#define HYPERV_DBG_ASSERT_VECTOR	0x2C
>> +	#define HYPERV_DBG_SERVICE_VECTOR	0x2D
>> +
>> +	if (test_and_set_bit(HYPERV_DBG_ASSERT_VECTOR, system_vectors) ||
>> +	    test_and_set_bit(HYPERV_DBG_SERVICE_VECTOR, system_vectors) ||
>> +	    test_and_set_bit(HYPERV_DBG_FASTFAIL_VECTOR, system_vectors))
>> +		BUG();
>> +
>> +	pr_info("Hyper-V:reserve vectors: %d %d %d\n", HYPERV_DBG_ASSERT_VECTOR,
>> +		HYPERV_DBG_SERVICE_VECTOR, HYPERV_DBG_FASTFAIL_VECTOR);
>> +}
>> +#endif          /* CONFIG_X86_FRED */
>> +
>>   static void __init ms_hyperv_init_platform(void)
>>   {
>>   	int hv_max_functions_eax, eax;
>> @@ -510,6 +531,11 @@ static void __init ms_hyperv_init_platform(void)
>>   
>>   	hv_identify_partition_type();
>>   
>> +#ifndef CONFIG_X86_FRED
>> +	if (hv_root_partition())
>> +		hv_reserve_irq_vectors();
>> +#endif  /* CONFIG_X86_FRED */
>> +
>>   	if (cc_platform_has(CC_ATTR_SNP_SECURE_AVIC))
>>   		ms_hyperv.hints |= HV_DEPRECATING_AEOI_RECOMMENDED;
>>   
>> -- 
>> 2.51.2.vfs.0.1
>>


  reply	other threads:[~2026-01-15 18:16 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-01-02 22:02 [PATCH v1] x86/hyperv: Reserve 3 interrupt vectors used exclusively by mshv Mukesh Rathor
2026-01-15  7:25 ` Wei Liu
2026-01-15 18:16   ` Mukesh R [this message]
2026-02-10 19:41   ` H. Peter Anvin
2026-02-10 19:12 ` Mukesh R
2026-02-10 20:33 ` H. Peter Anvin
2026-02-10 21:23 ` Thomas Gleixner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=e4a513dc-57e9-288d-6929-c1ab1a084388@linux.microsoft.com \
    --to=mrathor@linux.microsoft.com \
    --cc=bp@alien8.de \
    --cc=dave.hansen@linux.intel.com \
    --cc=decui@microsoft.com \
    --cc=haiyangz@microsoft.com \
    --cc=hpa@zytor.com \
    --cc=kys@microsoft.com \
    --cc=linux-hyperv@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=longli@microsoft.com \
    --cc=mingo@redhat.com \
    --cc=tglx@linutronix.de \
    --cc=wei.liu@kernel.org \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox