mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-27 13:30:52 +00:00
qemu-io: use main_loop_wait
This will let timers run during aio_read and aio_write commands, though not during synchronous commands. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
3ed9902528
commit
a5a5238ee4
10
cmd.c
10
cmd.c
@ -25,6 +25,7 @@
|
|||||||
|
|
||||||
#include "cmd.h"
|
#include "cmd.h"
|
||||||
#include "qemu-aio.h"
|
#include "qemu-aio.h"
|
||||||
|
#include "main-loop.h"
|
||||||
|
|
||||||
#define _(x) x /* not gettext support yet */
|
#define _(x) x /* not gettext support yet */
|
||||||
|
|
||||||
@ -146,7 +147,7 @@ static void prep_fetchline(void *opaque)
|
|||||||
{
|
{
|
||||||
int *fetchable = opaque;
|
int *fetchable = opaque;
|
||||||
|
|
||||||
qemu_aio_set_fd_handler(STDIN_FILENO, NULL, NULL, NULL, NULL, NULL);
|
qemu_set_fd_handler(STDIN_FILENO, NULL, NULL, NULL);
|
||||||
*fetchable= 1;
|
*fetchable= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -193,12 +194,11 @@ void command_loop(void)
|
|||||||
if (!prompted) {
|
if (!prompted) {
|
||||||
printf("%s", get_prompt());
|
printf("%s", get_prompt());
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
qemu_aio_set_fd_handler(STDIN_FILENO, prep_fetchline, NULL, NULL,
|
qemu_set_fd_handler(STDIN_FILENO, prep_fetchline, NULL, &fetchable);
|
||||||
NULL, &fetchable);
|
|
||||||
prompted = 1;
|
prompted = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
qemu_aio_wait();
|
main_loop_wait(false);
|
||||||
|
|
||||||
if (!fetchable) {
|
if (!fetchable) {
|
||||||
continue;
|
continue;
|
||||||
@ -221,7 +221,7 @@ void command_loop(void)
|
|||||||
prompted = 0;
|
prompted = 0;
|
||||||
fetchable = 0;
|
fetchable = 0;
|
||||||
}
|
}
|
||||||
qemu_aio_set_fd_handler(STDIN_FILENO, NULL, NULL, NULL, NULL, NULL);
|
qemu_set_fd_handler(STDIN_FILENO, NULL, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* from libxcmd/input.c */
|
/* from libxcmd/input.c */
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
#include <libgen.h>
|
#include <libgen.h>
|
||||||
|
|
||||||
#include "qemu-common.h"
|
#include "qemu-common.h"
|
||||||
|
#include "main-loop.h"
|
||||||
#include "block_int.h"
|
#include "block_int.h"
|
||||||
#include "cmd.h"
|
#include "cmd.h"
|
||||||
#include "trace/control.h"
|
#include "trace/control.h"
|
||||||
@ -295,7 +296,7 @@ static int do_aio_readv(QEMUIOVector *qiov, int64_t offset, int *total)
|
|||||||
bdrv_aio_readv(bs, offset >> 9, qiov, qiov->size >> 9,
|
bdrv_aio_readv(bs, offset >> 9, qiov, qiov->size >> 9,
|
||||||
aio_rw_done, &async_ret);
|
aio_rw_done, &async_ret);
|
||||||
while (async_ret == NOT_DONE) {
|
while (async_ret == NOT_DONE) {
|
||||||
qemu_aio_wait();
|
main_loop_wait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
*total = qiov->size;
|
*total = qiov->size;
|
||||||
@ -309,7 +310,7 @@ static int do_aio_writev(QEMUIOVector *qiov, int64_t offset, int *total)
|
|||||||
bdrv_aio_writev(bs, offset >> 9, qiov, qiov->size >> 9,
|
bdrv_aio_writev(bs, offset >> 9, qiov, qiov->size >> 9,
|
||||||
aio_rw_done, &async_ret);
|
aio_rw_done, &async_ret);
|
||||||
while (async_ret == NOT_DONE) {
|
while (async_ret == NOT_DONE) {
|
||||||
qemu_aio_wait();
|
main_loop_wait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
*total = qiov->size;
|
*total = qiov->size;
|
||||||
@ -352,7 +353,7 @@ static int do_aio_multiwrite(BlockRequest* reqs, int num_reqs, int *total)
|
|||||||
}
|
}
|
||||||
|
|
||||||
while (async_ret.num_done < num_reqs) {
|
while (async_ret.num_done < num_reqs) {
|
||||||
qemu_aio_wait();
|
main_loop_wait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
return async_ret.error < 0 ? async_ret.error : 1;
|
return async_ret.error < 0 ? async_ret.error : 1;
|
||||||
|
Loading…
Reference in New Issue
Block a user