summaryrefslogtreecommitdiff
path: root/arch/x86/kernel/cpu/mshyperv.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kernel/cpu/mshyperv.c')
-rw-r--r--arch/x86/kernel/cpu/mshyperv.c25
1 files changed, 19 insertions, 6 deletions
diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c
index 185d4f677ec0..b4af7c0a70ac 100644
--- a/arch/x86/kernel/cpu/mshyperv.c
+++ b/arch/x86/kernel/cpu/mshyperv.c
@@ -502,17 +502,32 @@ static void hv_reserve_irq_vectors(void)
#define HYPERV_DBG_ASSERT_VECTOR 0x2C
#define HYPERV_DBG_SERVICE_VECTOR 0x2D
+ /*
+ * The hypervisor delivers these three to the NT HAL and refuses to
+ * map a device interrupt to any of them.
+ *
+ * The hypervisor will provide a hint in the future when these
+ * vectors become available to use.
+ */
+ #define HAL_NT_APC_VECTOR 0x1F
+ #define HAL_NT_DPC_VECTOR 0x2F
+ #define HAL_NT_CLOCK_IPI_VECTOR 0xD2
+
if (cpu_feature_enabled(X86_FEATURE_FRED))
return;
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))
+ test_and_set_bit(HYPERV_DBG_FASTFAIL_VECTOR, system_vectors) ||
+ test_and_set_bit(HAL_NT_APC_VECTOR, system_vectors) ||
+ test_and_set_bit(HAL_NT_DPC_VECTOR, system_vectors) ||
+ test_and_set_bit(HAL_NT_CLOCK_IPI_VECTOR, system_vectors))
BUG();
- pr_info("Hyper-V: reserve vectors: 0x%x 0x%x 0x%x\n",
+ pr_info("Hyper-V: reserve vectors: 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n",
HYPERV_DBG_ASSERT_VECTOR, HYPERV_DBG_SERVICE_VECTOR,
- HYPERV_DBG_FASTFAIL_VECTOR);
+ HYPERV_DBG_FASTFAIL_VECTOR, HAL_NT_APC_VECTOR,
+ HAL_NT_DPC_VECTOR, HAL_NT_CLOCK_IPI_VECTOR);
}
static void __init ms_hyperv_init_platform(void)
@@ -716,9 +731,7 @@ static void __init ms_hyperv_init_platform(void)
}
/* Install system interrupt handler for stimer0 */
- if (ms_hyperv.misc_features & HV_STIMER_DIRECT_MODE_AVAILABLE) {
- sysvec_install(HYPERV_STIMER0_VECTOR, sysvec_hyperv_stimer0);
- }
+ sysvec_install(HYPERV_STIMER0_VECTOR, sysvec_hyperv_stimer0);
# ifdef CONFIG_SMP
smp_ops.smp_prepare_boot_cpu = hv_smp_prepare_boot_cpu;