qemu/hw/block
Paul Durrant 32d0b7be68 xen-bus/block: explicitly assign event channels to an AioContext
It is not safe to close an event channel from the QEMU main thread when
that channel's poller is running in IOThread context.

This patch adds a new xen_device_set_event_channel_context() function
to explicitly assign the channel AioContext, and modifies
xen_device_bind_event_channel() to initially assign the channel's poller
to the QEMU main thread context. The code in xen-block's dataplane is
then modified to assign the channel to IOThread context during
xen_block_dataplane_start() and de-assign it during in
xen_block_dataplane_stop(), such that the channel is always assigned
back to main thread context before it is closed. aio_set_fd_handler()
already deals with all the necessary synchronization when moving an fd
between AioContext-s so no extra code is needed to manage this.

Reported-by: Julien Grall <jgrall@amazon.com>
Signed-off-by: Paul Durrant <pdurrant@amazon.com>
Reviewed-by: Anthony PERARD <anthony.perard@citrix.com>
Message-Id: <20191216143451.19024-1-pdurrant@amazon.com>
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
2020-02-27 11:50:30 +00:00
..
dataplane xen-bus/block: explicitly assign event channels to an AioContext 2020-02-27 11:50:30 +00:00
block.c pflash: Require backend size to match device, improve errors 2019-03-26 08:16:24 +01:00
cdrom.c Include qemu-common.h exactly where needed 2019-06-12 13:20:20 +02:00
ecc.c Include hw/hw.h exactly where needed 2019-08-16 13:31:52 +02:00
fdc.c qdev: set properties with device_class_set_props() 2020-01-24 20:59:15 +01:00
hd-geometry.c block: Remove blk_pread_unthrottled() 2019-08-16 10:25:16 +02:00
Kconfig hw/m68k: add a dummy SWIM floppy controller 2019-10-28 19:06:51 +01:00
m25p80.c qdev: set properties with device_class_set_props() 2020-01-24 20:59:15 +01:00
Makefile.objs hw/*/Makefile.objs: Move many .o files to common-objs 2020-02-04 09:00:57 +01:00
nand.c qdev: set properties with device_class_set_props() 2020-01-24 20:59:15 +01:00
nvme.c qdev: set properties with device_class_set_props() 2020-01-24 20:59:15 +01:00
nvme.h nvme: add Get/Set Feature Timestamp support 2019-06-04 15:22:09 +02:00
onenand.c qdev: set properties with device_class_set_props() 2020-01-24 20:59:15 +01:00
pflash_cfi01.c qdev: set properties with device_class_set_props() 2020-01-24 20:59:15 +01:00
pflash_cfi02.c hw/block/pflash_cfi02: Remove unneeded variable assignment 2020-02-18 20:20:49 +01:00
swim.c qdev: set properties with device_class_set_props() 2020-01-24 20:59:15 +01:00
tc58128.c Include hw/hw.h exactly where needed 2019-08-16 13:31:52 +02:00
trace-events hw/block/pflash: Remove dynamic field width from trace events 2019-11-19 14:45:58 +01:00
vhost-user-blk.c qdev: set properties with device_class_set_props() 2020-01-24 20:59:15 +01:00
virtio-blk.c virtio: increase virtqueue size for virtio-scsi and virtio-blk 2020-02-22 08:26:47 +00:00
xen_blkif.h xen: Import other xen/io/*.h 2019-06-24 10:42:30 +01:00
xen-block.c qdev: set properties with device_class_set_props() 2020-01-24 20:59:15 +01:00