linux/include/xen
David Vrabel 54f642ea66 x86/xen: allow privcmd hypercalls to be preempted
[ Upstream commit db0e2aa47f0a45fc56592c25ad370f8836cbb128 ]

Hypercalls submitted by user space tools via the privcmd driver can
take a long time (potentially many 10s of seconds) if the hypercall
has many sub-operations.

A fully preemptible kernel may deschedule such as task in any upcall
called from a hypercall continuation.

However, in a kernel with voluntary or no preemption, hypercall
continuations in Xen allow event handlers to be run but the task
issuing the hypercall will not be descheduled until the hypercall is
complete and the ioctl returns to user space.  These long running
tasks may also trigger the kernel's soft lockup detection.

Add xen_preemptible_hcall_begin() and xen_preemptible_hcall_end() to
bracket hypercalls that may be preempted.  Use these in the privcmd
driver.

When returning from an upcall, call xen_maybe_preempt_hcall() which
adds a schedule point if if the current task was within a preemptible
hypercall.

Since _cond_resched() can move the task to a different CPU, clear and
set xen_in_preemptible_hcall around the call.

Signed-off-by: David Vrabel <david.vrabel@citrix.com>
Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Signed-off-by: Sasha Levin <sasha.levin@oracle.com>
History 2015-07-20 21:12:45 -04:00
..
interface xen: sync some headers with xen tree 2014-10-03 12:34:52 +01:00
acpi.h xen / ACPI: notify xen when reduced hardware sleep is available 2013-07-31 14:22:35 +02:00
balloon.h xen/balloon: set a mapping for ballooned out pages 2013-08-09 11:23:24 -04:00
events.h xen/events: don't bind non-percpu VIRQs with percpu chip 2015-06-09 13:43:54 -04:00
features.h xen: Core Xen implementation 2007-07-18 08:47:42 -07:00
grant_table.h x86/xen: safely map and unmap grant frames when in atomic context 2014-07-30 14:22:47 +01:00
hvc-console.h treewide: use __printf not __attribute__((format(printf,...))) 2011-10-31 17:30:54 -07:00
hvm.h xen: Convert printks to pr_<level> 2013-06-28 11:19:58 -04:00
page.h xen: allow balloon driver to use more than one memory region 2011-09-29 11:12:10 -04:00
platform_pci.h xen/pvhvm: Remove the xen_platform_pci int. 2014-01-03 14:54:53 -05:00
swiotlb-xen.h Merge remote-tracking branch 'stefano/swiotlb-xen-9.1' into stable/for-linus-3.13 2013-11-08 16:10:48 -05:00
tmem.h xen: tmem: enable Xen tmem shim to be built/loaded as a module 2013-04-30 17:04:01 -07:00
xen-ops.h x86/xen: allow privcmd hypercalls to be preempted 2015-07-20 21:12:45 -04:00
xen.h xen/pvh/x86: Define what an PVH guest is (v3). 2014-01-06 10:43:58 -05:00
xenbus.h xen: remove DEFINE_XENBUS_DRIVER() macro 2014-10-06 10:27:57 +01:00
xenbus_dev.h xenbus: Add support for xenbus backend in stub domain 2012-05-21 09:53:18 -04:00