diff --git a/block-raw-posix.c b/block-raw-posix.c index 81382b5255..5c3b0ac2e7 100644 --- a/block-raw-posix.c +++ b/block-raw-posix.c @@ -28,7 +28,9 @@ #endif #include "block_int.h" #include +#ifdef CONFIG_AIO #include +#endif #ifdef CONFIG_COCOA #include @@ -418,6 +420,7 @@ static int raw_pwrite(BlockDriverState *bs, int64_t offset, #endif +#ifdef CONFIG_AIO /***********************************************************/ /* Unix AIO using POSIX AIO */ @@ -688,6 +691,37 @@ static void raw_aio_cancel(BlockDriverAIOCB *blockacb) } } +# else /* CONFIG_AIO */ + +void qemu_aio_init(void) +{ +} + +void qemu_aio_poll(void) +{ +} + +void qemu_aio_flush(void) +{ +} + +void qemu_aio_wait_start(void) +{ +} + +void qemu_aio_wait(void) +{ +#if !defined(QEMU_IMG) && !defined(QEMU_NBD) + qemu_bh_poll(); +#endif +} + +void qemu_aio_wait_end(void) +{ +} + +#endif /* CONFIG_AIO */ + static void raw_close(BlockDriverState *bs) { BDRVRawState *s = bs->opaque; @@ -792,10 +826,12 @@ BlockDriver bdrv_raw = { raw_create, raw_flush, +#ifdef CONFIG_AIO .bdrv_aio_read = raw_aio_read, .bdrv_aio_write = raw_aio_write, .bdrv_aio_cancel = raw_aio_cancel, .aiocb_size = sizeof(RawAIOCB), +#endif .protocol_name = "file", .bdrv_pread = raw_pread, .bdrv_pwrite = raw_pwrite, @@ -1144,10 +1180,12 @@ BlockDriver bdrv_host_device = { NULL, raw_flush, +#ifdef CONFIG_AIO .bdrv_aio_read = raw_aio_read, .bdrv_aio_write = raw_aio_write, .bdrv_aio_cancel = raw_aio_cancel, .aiocb_size = sizeof(RawAIOCB), +#endif .bdrv_pread = raw_pread, .bdrv_pwrite = raw_pwrite, .bdrv_getlength = raw_getlength, diff --git a/configure b/configure index 260a8920aa..5fdc227623 100755 --- a/configure +++ b/configure @@ -106,6 +106,7 @@ darwin_user="no" build_docs="no" uname_release="" curses="yes" +aio="yes" nptl="yes" mixemu="no" @@ -334,6 +335,8 @@ for opt do ;; --enable-mixemu) mixemu="yes" ;; + --disable-aio) aio="no" + ;; *) echo "ERROR: unknown option $opt"; show_help="yes" ;; esac @@ -436,6 +439,7 @@ echo " --fmod-inc path to FMOD includes" echo " --enable-uname-release=R Return R for uname -r in usermode emulation" echo " --sparc_cpu=V Build qemu for Sparc architecture v7, v8, v8plus, v8plusa, v9" echo " --disable-vde disable support for vde network" +echo " --disable-aio disable AIO support" echo "" echo "NOTE: The object files are built at the place where configure is launched" exit 1 @@ -863,6 +867,19 @@ EOF fi fi # test "$curses" +########################################## +# AIO probe +if test "$aio" = "yes" ; then + aio=no + cat > $TMPC << EOF +#include +int main(void) { return aio_write(NULL); } +EOF + if $cc $ARCH_CFLAGS -o $TMPE $AIOLIBS $TMPC 2> /dev/null ; then + aio=yes + fi +fi + # Check if tools are available to build documentation. if [ -x "`which texi2html 2>/dev/null`" ] && \ [ -x "`which pod2man 2>/dev/null`" ]; then @@ -934,6 +951,7 @@ echo "Documentation $build_docs" echo "uname -r $uname_release" echo "NPTL support $nptl" echo "vde support $vde" +echo "AIO support $aio" if test $sdl_too_old = "yes"; then echo "-> Your SDL version is too old - please upgrade to have SDL support" @@ -1179,6 +1197,9 @@ if test "$brlapi" = "yes" ; then echo "#define CONFIG_BRLAPI 1" >> $config_h echo "BRLAPI_LIBS=-lbrlapi" >> $config_mak fi +if test "$aio" = "yes" ; then + echo "#define CONFIG_AIO 1" >> $config_h +fi # XXX: suppress that if [ "$bsd" = "yes" ] ; then