mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-07 17:53:56 -06:00
coroutine: add flag to re-queue at front of CoQueue
When a coroutine wakes up it may determine that it must re-queue. Normally coroutines are pushed onto the back of the CoQueue, but for fairness it may be necessary to push it onto the front of the CoQueue. Add a flag to specify that the coroutine should be pushed onto the front of the CoQueue. A later patch will use this to ensure fairness in the bounce buffer CoQueue used by the blkio BlockDriver. Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Message-id: 20221013185908.1297568-2-stefanha@redhat.com Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
parent
79fc2fb685
commit
0421b563ab
2 changed files with 20 additions and 4 deletions
|
@ -39,10 +39,15 @@ void qemu_co_queue_init(CoQueue *queue)
|
|||
QSIMPLEQ_INIT(&queue->entries);
|
||||
}
|
||||
|
||||
void coroutine_fn qemu_co_queue_wait_impl(CoQueue *queue, QemuLockable *lock)
|
||||
void coroutine_fn qemu_co_queue_wait_impl(CoQueue *queue, QemuLockable *lock,
|
||||
CoQueueWaitFlags flags)
|
||||
{
|
||||
Coroutine *self = qemu_coroutine_self();
|
||||
QSIMPLEQ_INSERT_TAIL(&queue->entries, self, co_queue_next);
|
||||
if (flags & CO_QUEUE_WAIT_FRONT) {
|
||||
QSIMPLEQ_INSERT_HEAD(&queue->entries, self, co_queue_next);
|
||||
} else {
|
||||
QSIMPLEQ_INSERT_TAIL(&queue->entries, self, co_queue_next);
|
||||
}
|
||||
|
||||
if (lock) {
|
||||
qemu_lockable_unlock(lock);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue