diff options
| author | Kevin Wolf <kwolf@redhat.com> | 2018-08-17 14:53:05 +0200 |
|---|---|---|
| committer | Kevin Wolf <kwolf@redhat.com> | 2018-09-25 15:50:15 +0200 |
| commit | 34dc97b9a0e592bc466bdb0bbfe45d77304a72b6 (patch) | |
| tree | 3edd653e46d14ca5fb2e1551a4cb3427875e6865 /include/qemu | |
| parent | d1756c780b7879fb64e41135feac781d84a1f995 (diff) | |
| download | focaccia-qemu-34dc97b9a0e592bc466bdb0bbfe45d77304a72b6.tar.gz focaccia-qemu-34dc97b9a0e592bc466bdb0bbfe45d77304a72b6.zip | |
blockjob: Wake up BDS when job becomes idle
In the context of draining a BDS, the .drained_poll callback of block jobs is called. If this returns true (i.e. there is still some activity pending), the drain operation may call aio_poll() with blocking=true to wait for completion. As soon as the pending activity is completed and the job finally arrives in a quiescent state (i.e. its coroutine either yields with busy=false or terminates), the block job must notify the aio_poll() loop to wake up, otherwise we get a deadlock if both are running in different threads. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Fam Zheng <famz@redhat.com> Reviewed-by: Max Reitz <mreitz@redhat.com>
Diffstat (limited to 'include/qemu')
| -rw-r--r-- | include/qemu/job.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/include/qemu/job.h b/include/qemu/job.h index 5cb0681834..b4a784d3cc 100644 --- a/include/qemu/job.h +++ b/include/qemu/job.h @@ -156,6 +156,9 @@ typedef struct Job { /** Notifiers called when the job transitions to READY */ NotifierList on_ready; + /** Notifiers called when the job coroutine yields or terminates */ + NotifierList on_idle; + /** Element of the list of jobs */ QLIST_ENTRY(Job) job_list; |