qemu-e2k/include
Stefan Hajnoczi fc9c0a9c4b blockjob: add pause points
Block jobs are coroutines that usually perform I/O but sometimes also
sleep or yield.  Currently only sleeping or yielded block jobs can be
paused.  This means jobs that do not sleep or yield (using
block_job_yield()) are unaffected by block_job_pause().

Add block_job_pause_point() so that block jobs can mark quiescent points
that are suitable for pausing.  This solves the problem that it can take
a block job a long time to pause if it is performing a long series of
I/O operations.

Transitioning to paused state involves a .pause()/.resume() callback.
These callbacks are used to ensure that I/O and event loop activity has
ceased while the job is at a pause point.

Note that this patch introduces a stricter pause state than previously.
The job->busy flag was incorrectly documented as a quiescent state
without I/O pending.  This is violated by any job that has I/O pending
across sleep or block_job_yield(), like the mirror block job.

[Add missing block_job_should_pause() check to avoid deadlock after
job->driver->pause() in block_job_pause_point().
--Stefan]

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Fam Zheng <famz@redhat.com>
Message-id: 1466096189-6477-4-git-send-email-stefanha@redhat.com
2016-06-20 14:25:36 +01:00
..
block blockjob: add pause points 2016-06-20 14:25:36 +01:00
crypto crypto: aes: always rename internal symbols 2016-06-13 12:41:17 +01:00
disas qemu-common: push cpu.h inclusion out of qemu-common.h 2016-05-19 16:42:29 +02:00
exec tb hash: track translated blocks with qht 2016-06-11 17:11:16 -07:00
fpu include: Clean up includes 2016-02-23 12:43:05 +00:00
hw target-arm queue: 2016-06-17 16:16:37 +01:00
io Fix some typos found by codespell 2016-05-18 15:04:27 +03:00
libdecnumber include: Clean up includes 2016-02-23 12:43:05 +00:00
migration migration: Define VMSTATE_UINT64_2DARRAY 2016-06-17 15:23:51 +01:00
monitor Use scripts/clean-includes to drop redundant qemu/typedefs.h 2016-03-22 22:20:16 +01:00
net vhost-net: save & restore vring enable state 2016-06-17 03:28:03 +03:00
qapi migration: add reporting of errors for outgoing migration 2016-05-26 11:31:30 +05:30
qemu bitops.h: Implement half-shuffle and half-unshuffle ops 2016-06-17 15:23:51 +01:00
qom qom: API to get instance_size of a type 2016-06-17 16:33:48 +10:00
standard-headers linux-headers: update 2016-06-14 13:34:50 +02:00
sysemu pc, pci, virtio: new features, cleanups, fixes 2016-06-17 11:25:46 +01:00
ui spice: Initialization stubs on qemu-spice.h 2016-05-20 14:28:53 -03:00
elf.h Add PowerPC AT_HWCAP2 definitions 2016-06-14 10:41:38 +10:00
glib-compat.h glib: add compatibility interface for g_hash_table_add() 2015-10-30 09:01:03 +01:00
qemu-common.h qemu-common.h: Drop WORDS_ALIGNED define 2016-06-07 18:19:24 +03:00
qemu-io.h qemu-io: Use BlockBackend 2015-02-16 15:07:19 +00:00
trace-tcg.h trace: [tcg] Generate TCG tracing routines 2014-08-12 14:26:12 +01:00
trace.h trace: [tcg] Include event definitions in "trace.h" 2014-08-12 14:26:12 +01:00