alistair23-linux/drivers/xen
Boris Ostrovsky ff1e22e7a6 xen/events: Mask a moving irq
Moving an unmasked irq may result in irq handler being invoked on both
source and target CPUs.

With 2-level this can happen as follows:

On source CPU:
        evtchn_2l_handle_events() ->
            generic_handle_irq() ->
                handle_edge_irq() ->
                   eoi_pirq():
                       irq_move_irq(data);

                       /***** WE ARE HERE *****/

                       if (VALID_EVTCHN(evtchn))
                           clear_evtchn(evtchn);

If at this moment target processor is handling an unrelated event in
evtchn_2l_handle_events()'s loop it may pick up our event since target's
cpu_evtchn_mask claims that this event belongs to it *and* the event is
unmasked and still pending. At the same time, source CPU will continue
executing its own handle_edge_irq().

With FIFO interrupt the scenario is similar: irq_move_irq() may result
in a EVTCHNOP_unmask hypercall which, in turn, may make the event
pending on the target CPU.

We can avoid this situation by moving and clearing the event while
keeping event masked.

Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Cc: stable@vger.kernel.org
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
2016-04-04 11:18:00 +01:00
..
events xen/events: Mask a moving irq 2016-04-04 11:18:00 +01:00
xen-pciback xen: features and fixes for 4.6-rc0 2016-03-22 12:55:17 -07:00
xenbus xen: features and fixes for 4.6-rc0 2016-03-22 12:55:17 -07:00
xenfs xen: audit usages of module.h ; remove unnecessary instances 2016-03-21 15:13:32 +00:00
acpi.c xen: rename dom0_op to platform_op 2015-12-21 14:40:55 +00:00
balloon.c xen: features and fixes for 4.6-rc0 2016-03-22 12:55:17 -07:00
biomerge.c
cpu_hotplug.c
dbgp.c
efi.c xen: rename dom0_op to platform_op 2015-12-21 14:40:55 +00:00
evtchn.c xen/evtchn: dynamically grow pending event channel ring 2015-11-26 18:49:54 +00:00
fallback.c
features.c xen: audit usages of module.h ; remove unnecessary instances 2016-03-21 15:13:32 +00:00
gntalloc.c
gntdev.c xen/gntdev: add ioctl for grant copy 2016-01-07 13:21:53 +00:00
grant-table.c xen: audit usages of module.h ; remove unnecessary instances 2016-03-21 15:13:32 +00:00
Kconfig xen_balloon: support memory auto onlining policy 2016-03-15 16:55:16 -07:00
Makefile xen: move xen_setup_runstate_info and get_runstate_snapshot to drivers/xen/time.c 2015-12-21 14:40:52 +00:00
manage.c
mcelog.c
pci.c
pcpu.c xen: rename dom0_op to platform_op 2015-12-21 14:40:55 +00:00
platform-pci.c drivers/xen: make platform-pci.c explicitly non-modular 2016-03-21 15:14:04 +00:00
preempt.c
privcmd.c
privcmd.h
swiotlb-xen.c
sys-hypervisor.c drivers/xen: make sys-hypervisor.c explicitly non-modular 2016-03-21 15:14:03 +00:00
time.c xen/time: use READ_ONCE 2015-12-21 14:41:00 +00:00
tmem.c cleancache: constify cleancache_ops structure 2016-01-27 09:09:57 -05:00
xen-acpi-cpuhotplug.c xen: rename dom0_op to platform_op 2015-12-21 14:40:55 +00:00
xen-acpi-memhotplug.c
xen-acpi-pad.c xen: rename dom0_op to platform_op 2015-12-21 14:40:55 +00:00
xen-acpi-processor.c xen: rename dom0_op to platform_op 2015-12-21 14:40:55 +00:00
xen-balloon.c drivers/xen: make [xen-]ballon explicitly non-modular 2016-03-21 15:13:44 +00:00
xen-scsiback.c Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending 2016-03-22 12:41:14 -07:00
xen-selfballoon.c xen: audit usages of module.h ; remove unnecessary instances 2016-03-21 15:13:32 +00:00
xen-stub.c
xlate_mmu.c