Commit 032eb476 authored by Thomas Gleixner's avatar Thomas Gleixner Committed by Kelsey Skunberg

xen: Enable interrupts when calling _cond_resched()

BugLink: https://bugs.launchpad.net/bugs/1868627

commit 8645e56a upstream.

xen_maybe_preempt_hcall() is called from the exception entry point
xen_do_hypervisor_callback with interrupts disabled.

_cond_resched() evades the might_sleep() check in cond_resched() which
would have caught that and schedule_debug() unfortunately lacks a check
for irqs_disabled().

Enable interrupts around the call and use cond_resched() to catch future
issues.

Fixes: fdfd811d ("x86/xen: allow privcmd hypercalls to be preempted")
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/r/878skypjrh.fsf@nanos.tec.linutronix.deReviewed-by: default avatarJuergen Gross <jgross@suse.com>
Signed-off-by: default avatarBoris Ostrovsky <boris.ostrovsky@oracle.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: default avatarKhalid Elmously <khalid.elmously@canonical.com>
Signed-off-by: default avatarKelsey Skunberg <kelsey.skunberg@canonical.com>
parent f0e2249a
...@@ -37,7 +37,9 @@ asmlinkage __visible void xen_maybe_preempt_hcall(void) ...@@ -37,7 +37,9 @@ asmlinkage __visible void xen_maybe_preempt_hcall(void)
* cpu. * cpu.
*/ */
__this_cpu_write(xen_in_preemptible_hcall, false); __this_cpu_write(xen_in_preemptible_hcall, false);
_cond_resched(); local_irq_enable();
cond_resched();
local_irq_disable();
__this_cpu_write(xen_in_preemptible_hcall, true); __this_cpu_write(xen_in_preemptible_hcall, true);
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment