ide: Split error status from status register

When adding the werror=stop mode, some flags were added to s->status
which are used to determine what kind of operation should be restarted
when the VM is continued.

Unfortunately, it turns out that s->status is in fact a device register
and as such is visible to the guest (some of the abused bits are even
writable for the guest).

For migration we keep on using the old VMState field (renamed to
migration_compat_status) if the status register doesn't use any of the
previously abused bits. If it does, we use a subsection with a clean copy of
the status register.

The error status is always sent in a subsection if there is any error. It can't
use the old field because errors happen even without PCI.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
4 files changed
tree: d2730ee2e84d06a24048e8d1abbe937207b60824
  1. audio/
  2. block/
  3. bsd-user/
  4. darwin-user/
  5. default-configs/
  6. docs/
  7. fpu/
  8. fsdev/
  9. gdb-xml/
  10. hw/
  11. libcacard/
  12. linux-user/
  13. net/
  14. pc-bios/
  15. QMP/
  16. roms/
  17. scripts/
  18. slirp/
  19. sysconfigs/
  20. target-alpha/
  21. target-arm/
  22. target-cris/
  23. target-i386/
  24. target-lm32/
  25. target-m68k/
  26. target-microblaze/
  27. target-mips/
  28. target-ppc/
  29. target-s390x/
  30. target-sh4/
  31. target-sparc/
  32. target-unicore32/
  33. tcg/
  34. tests/
  35. ui/
  36. .gitignore
  37. .gitmodules
  38. a.out.h
  39. acl.c
  40. acl.h
  41. aes.c
  42. aes.h
  43. aio.c
  44. alpha-dis.c
  45. alpha.ld
  46. arch_init.c
  47. arch_init.h
  48. arm-dis.c
  49. arm-semi.c
  50. arm.ld
  51. async.c
  52. balloon.c
  53. balloon.h
  54. bitmap.c
  55. bitmap.h
  56. bitops.c
  57. bitops.h
  58. block-migration.c
  59. block-migration.h
  60. block.c
  61. block.h
  62. block_int.h
  63. blockdev.c
  64. blockdev.h
  65. bswap.h
  66. bt-host.c
  67. bt-host.h
  68. bt-vhci.c
  69. buffered_file.c
  70. buffered_file.h
  71. cache-utils.c
  72. cache-utils.h
  73. Changelog
  74. check-qdict.c
  75. check-qfloat.c
  76. check-qint.c
  77. check-qjson.c
  78. check-qlist.c
  79. check-qstring.c
  80. cmd.c
  81. cmd.h
  82. CODING_STYLE
  83. compatfd.c
  84. compatfd.h
  85. config.h
  86. configure
  87. console.c
  88. console.h
  89. COPYING
  90. COPYING.LIB
  91. cpu-all.h
  92. cpu-common.h
  93. cpu-defs.h
  94. cpu-exec.c
  95. cpus.c
  96. cpus.h
  97. cris-dis.c
  98. cursor.c
  99. cursor_hidden.xpm
  100. cursor_left_ptr.xpm
  101. cutils.c
  102. def-helper.h
  103. device_tree.c
  104. device_tree.h
  105. dis-asm.h
  106. disas.c
  107. disas.h
  108. dma-helpers.c
  109. dma.h
  110. dyngen-exec.h
  111. elf.h
  112. envlist.c
  113. envlist.h
  114. error.c
  115. error.h
  116. error_int.h
  117. exec-all.h
  118. exec.c
  119. gdbstub.c
  120. gdbstub.h
  121. gen-icount.h
  122. HACKING
  123. hmp-commands.hx
  124. host-utils.c
  125. host-utils.h
  126. hpet.h
  127. hppa-dis.c
  128. hppa.ld
  129. i386-dis.c
  130. i386.ld
  131. ia64-dis.c
  132. ia64.ld
  133. input.c
  134. iohandler.c
  135. ioport-user.c
  136. ioport.c
  137. ioport.h
  138. iorange.h
  139. iov.c
  140. iov.h
  141. json-lexer.c
  142. json-lexer.h
  143. json-parser.c
  144. json-parser.h
  145. json-streamer.c
  146. json-streamer.h
  147. kvm-all.c
  148. kvm-stub.c
  149. kvm.h
  150. libfdt_env.h
  151. LICENSE
  152. linux-aio.c
  153. m68k-dis.c
  154. m68k-semi.c
  155. m68k.ld
  156. MAINTAINERS
  157. Makefile
  158. Makefile.dis
  159. Makefile.hw
  160. Makefile.objs
  161. Makefile.target
  162. Makefile.user
  163. microblaze-dis.c
  164. migration-exec.c
  165. migration-fd.c
  166. migration-tcp.c
  167. migration-unix.c
  168. migration.c
  169. migration.h
  170. mips-dis.c
  171. mips.ld
  172. module.c
  173. module.h
  174. monitor.c
  175. monitor.h
  176. nbd.c
  177. nbd.h
  178. net.c
  179. net.h
  180. notify.c
  181. notify.h
  182. os-posix.c
  183. os-win32.c
  184. osdep.c
  185. osdep.h
  186. oslib-posix.c
  187. oslib-win32.c
  188. path.c
  189. pci-ids.txt
  190. pflib.c
  191. pflib.h
  192. poison.h
  193. posix-aio-compat.c
  194. ppc-dis.c
  195. ppc.ld
  196. ppc64.ld
  197. qbool.c
  198. qbool.h
  199. qdict-test-data.txt
  200. qdict.c
  201. qdict.h
  202. qemu-aio.h
  203. qemu-barrier.h
  204. qemu-char.c
  205. qemu-char.h
  206. qemu-common.h
  207. qemu-config.c
  208. qemu-config.h
  209. qemu-doc.texi
  210. qemu-error.c
  211. qemu-error.h
  212. qemu-img-cmds.hx
  213. qemu-img.c
  214. qemu-img.texi
  215. qemu-io.c
  216. qemu-lock.h
  217. qemu-log.h
  218. qemu-malloc.c
  219. qemu-nbd.c
  220. qemu-nbd.texi
  221. qemu-objects.h
  222. qemu-option.c
  223. qemu-option.h
  224. qemu-options.h
  225. qemu-options.hx
  226. qemu-os-posix.h
  227. qemu-os-win32.h
  228. qemu-progress.c
  229. qemu-queue.h
  230. qemu-sockets.c
  231. qemu-tech.texi
  232. qemu-thread-posix.c
  233. qemu-thread-posix.h
  234. qemu-thread-win32.c
  235. qemu-thread-win32.h
  236. qemu-thread.h
  237. qemu-timer-common.c
  238. qemu-timer.c
  239. qemu-timer.h
  240. qemu-tool.c
  241. qemu-x509.h
  242. qemu.sasl
  243. qemu_socket.h
  244. qerror.c
  245. qerror.h
  246. qfloat.c
  247. qfloat.h
  248. qint.c
  249. qint.h
  250. qjson.c
  251. qjson.h
  252. qlist.c
  253. qlist.h
  254. qmp-commands.hx
  255. qobject.h
  256. qstring.c
  257. qstring.h
  258. range.h
  259. readline.c
  260. readline.h
  261. README
  262. rules.mak
  263. rwhandler.c
  264. rwhandler.h
  265. s390-dis.c
  266. s390.ld
  267. savevm.c
  268. sh4-dis.c
  269. simpletrace.c
  270. simpletrace.h
  271. softmmu-semi.h
  272. softmmu_defs.h
  273. softmmu_exec.h
  274. softmmu_header.h
  275. softmmu_template.h
  276. sparc-dis.c
  277. sparc.ld
  278. sparc64.ld
  279. spice-qemu-char.c
  280. sysemu.h
  281. targphys.h
  282. tcg-runtime.c
  283. thunk.c
  284. thunk.h
  285. TODO
  286. trace-events
  287. translate-all.c
  288. uboot_image.h
  289. usb-bsd.c
  290. usb-linux.c
  291. usb-stub.c
  292. user-exec.c
  293. VERSION
  294. version.rc
  295. vgafont.h
  296. vl.c
  297. x86_64.ld
  298. xen-all.c
  299. xen-mapcache-stub.c
  300. xen-mapcache.c
  301. xen-mapcache.h
  302. xen-stub.c