aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/hyperv/hv_apic.c
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2018-07-06 12:35:56 +0200
committerThomas Gleixner <tglx@linutronix.de>2018-07-06 12:35:56 +0200
commit8f63e9230decb06ea9068feaf0845c0eb39ab890 (patch)
treea45cee821404ab0c7f7164e20c2f40f5e34ac16b /arch/x86/hyperv/hv_apic.c
parentx86/hyper-v: Trace PV IPI send (diff)
parentx86/hyper-v: Fix the circular dependency in IPI enlightenment (diff)
downloadlinux-dev-8f63e9230decb06ea9068feaf0845c0eb39ab890.tar.xz
linux-dev-8f63e9230decb06ea9068feaf0845c0eb39ab890.zip
Merge branch 'x86/urgent' into x86/hyperv
Integrate the upstream bug fix to resolve the resulting conflict in __send_ipi_mask(). Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'arch/x86/hyperv/hv_apic.c')
-rw-r--r--arch/x86/hyperv/hv_apic.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/arch/x86/hyperv/hv_apic.c b/arch/x86/hyperv/hv_apic.c
index 657a2b8c738a..0c3c9f8fee77 100644
--- a/arch/x86/hyperv/hv_apic.c
+++ b/arch/x86/hyperv/hv_apic.c
@@ -119,6 +119,8 @@ static bool __send_ipi_mask_ex(const struct cpumask *mask, int vector)
ipi_arg->vp_set.format = HV_GENERIC_SET_SPARSE_4K;
nr_bank = cpumask_to_vpset(&(ipi_arg->vp_set), mask);
}
+ if (nr_bank < 0)
+ goto ipi_mask_ex_done;
if (!nr_bank)
ipi_arg->vp_set.format = HV_GENERIC_SET_ALL;
@@ -165,6 +167,9 @@ static bool __send_ipi_mask(const struct cpumask *mask, int vector)
for_each_cpu(cur_cpu, mask) {
vcpu = hv_cpu_number_to_vp_number(cur_cpu);
+ if (vcpu == VP_INVAL)
+ return true;
+
/*
* This particular version of the IPI hypercall can
* only target upto 64 CPUs.