Refactor AIO to allow multiple AIO implementations

This patch refactors the AIO layer to allow multiple AIO implementations.  It's
only possible because of the recent signalfd() patch.  

Right now, the AIO infrastructure is pretty specific to the block raw backend.
For other block devices to implement AIO, the qemu_aio_wait function must
support registration.  This patch introduces a new function,
qemu_aio_set_fd_handler, which can be used to register a file descriptor to be
called back.  qemu_aio_wait() now polls a set of file descriptors registered
with this function until one becomes readable or writable.

This patch should allow the implementation of alternative AIO backends (via a
thread pool or linux-aio) and AIO backends in non-traditional block devices
(like NBD).

Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>



git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5297 c046a42c-6fe2-441c-8c8c-71466251a162
8 files changed
tree: ae411e977a38d038186d96cee86affe3e04e1d57
  1. audio/
  2. darwin-user/
  3. fpu/
  4. hw/
  5. keymaps/
  6. linux-user/
  7. pc-bios/
  8. slirp/
  9. target-alpha/
  10. target-arm/
  11. target-cris/
  12. target-i386/
  13. target-m68k/
  14. target-mips/
  15. target-ppc/
  16. target-sh4/
  17. target-sparc/
  18. tcg/
  19. tests/
  20. .gitignore
  21. a.out.h
  22. aes.c
  23. aes.h
  24. aio.c
  25. alpha-dis.c
  26. alpha.ld
  27. arm-dis.c
  28. arm-semi.c
  29. arm.ld
  30. block-bochs.c
  31. block-cloop.c
  32. block-cow.c
  33. block-dmg.c
  34. block-nbd.c
  35. block-parallels.c
  36. block-qcow.c
  37. block-qcow2.c
  38. block-raw-posix.c
  39. block-raw-win32.c
  40. block-vmdk.c
  41. block-vpc.c
  42. block-vvfat.c
  43. block.c
  44. block.h
  45. block_int.h
  46. bswap.h
  47. Changelog
  48. check_ops.sh
  49. cocoa.m
  50. compatfd.c
  51. compatfd.h
  52. configure
  53. console.c
  54. console.h
  55. COPYING
  56. COPYING.LIB
  57. cpu-all.h
  58. cpu-defs.h
  59. cpu-exec.c
  60. cris-dis.c
  61. curses.c
  62. curses_keys.h
  63. cutils.c
  64. d3des.c
  65. d3des.h
  66. dis-asm.h
  67. disas.c
  68. disas.h
  69. dyngen-exec.h
  70. dyngen.c
  71. elf.h
  72. elf_ops.h
  73. exec-all.h
  74. exec.c
  75. gdbstub.c
  76. gdbstub.h
  77. gen-icount.h
  78. host-utils.c
  79. host-utils.h
  80. hostregs_helper.h
  81. hpet.h
  82. hppa-dis.c
  83. hppa.ld
  84. i386-dis.c
  85. i386.ld
  86. ia64.ld
  87. keymaps.c
  88. kqemu.c
  89. kqemu.h
  90. LICENSE
  91. loader.c
  92. m68k-dis.c
  93. m68k-semi.c
  94. m68k.ld
  95. MAINTAINERS
  96. Makefile
  97. Makefile.target
  98. mips-dis.c
  99. mips.ld
  100. mipsel.ld
  101. monitor.c
  102. nbd.c
  103. nbd.h
  104. net-checksum.c
  105. net.h
  106. osdep.c
  107. osdep.h
  108. ppc-dis.c
  109. ppc.ld
  110. ppc64.ld
  111. qemu-aio.h
  112. qemu-binfmt-conf.sh
  113. qemu-char.h
  114. qemu-common.h
  115. qemu-doc.texi
  116. qemu-img.c
  117. qemu-img.texi
  118. qemu-lock.h
  119. qemu-log.h
  120. qemu-malloc.c
  121. qemu-nbd.c
  122. qemu-nbd.texi
  123. qemu-tech.texi
  124. qemu-timer.h
  125. qemu-tool.c
  126. qemu_socket.h
  127. readline.c
  128. README
  129. s390-dis.c
  130. s390.ld
  131. sdl.c
  132. sdl_keysym.h
  133. sh4-dis.c
  134. softmmu-semi.h
  135. softmmu_defs.h
  136. softmmu_exec.h
  137. softmmu_header.h
  138. softmmu_template.h
  139. sparc-dis.c
  140. sparc.ld
  141. sparc64.ld
  142. sys-queue.h
  143. sysemu.h
  144. tap-win32.c
  145. texi2pod.pl
  146. thunk.c
  147. thunk.h
  148. TODO
  149. translate-all.c
  150. uboot_image.h
  151. usb-linux.c
  152. VERSION
  153. vgafont.h
  154. vl.c
  155. vnc.c
  156. vnc_keysym.h
  157. vnchextile.h
  158. x86_64.ld
  159. x_keymap.c