QEMU With E2K User Support
Go to file
Ian Main fc5d3f8432 Implement sync modes for drive-backup.
This patch adds sync-modes to the drive-backup interface and
implements the FULL, NONE and TOP modes of synchronization.

FULL performs as before copying the entire contents of the drive
while preserving the point-in-time using CoW.
NONE only copies new writes to the target drive.
TOP copies changes to the topmost drive image and preserves the
point-in-time using CoW.

For sync mode TOP are creating a new target image using the same backing
file as the original disk image.  Then any new data that has been laid
on top of it since creation is copied in the main backup_run() loop.
There is an extra check in the 'TOP' case so that we don't bother to copy
all the data of the backing file as it already exists in the target.
This is where the bdrv_co_is_allocated() is used to determine if the
data exists in the topmost layer or below.

Also any new data being written is intercepted via the write_notifier
hook which ends up calling backup_do_cow() to copy old data out before
it gets overwritten.

For mode 'NONE' we create the new target image and only copy in the
original data from the disk image starting from the time the call was
made.  This preserves the point in time data by only copying the parts
that are *going to change* to the target image.  This way we can
reconstruct the final image by checking to see if the given block exists
in the new target image first, and if it does not, you can get it from
the original image.  This is basically an optimization allowing you to
do point-in-time snapshots with low overhead vs the 'FULL' version.

Since there is no old data to copy out the loop in backup_run() for the
NONE case just calls qemu_coroutine_yield() which only wakes up after
an event (usually cancel in this case).  The rest is handled by the
before_write notifier which again calls backup_do_cow() to write out
the old data so it can be preserved.

Signed-off-by: Ian Main <imain@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
2013-07-26 22:01:31 +02:00
audio audio: Replace static functions in header file by macros, remove GCC_ATTR 2013-06-21 22:52:50 +04:00
backends rng-random: use error_setg_file_open() 2013-06-17 11:01:14 -04:00
block Implement sync modes for drive-backup. 2013-07-26 22:01:31 +02:00
bsd-user gdbstub: Change gdb_handlesig() argument to CPUState 2013-07-23 02:41:33 +02:00
default-configs default-configs/ppc64: add all components of i82378 SuperIO chip used by prep 2013-07-25 08:12:28 -05:00
disas
docs qapi: Anonymous unions 2013-07-26 21:10:11 +02:00
dtc@bc895d6d09
fpu softfloat: Fix shift128Right for shift counts 64..127 2013-06-10 11:36:12 -05:00
fsdev fsdev: Fix potential memory leak 2013-07-09 13:38:56 -05:00
gdb-xml
hw pc-testdev: add I/O port to test memory.c auto split/combine 2013-07-25 08:12:28 -05:00
include Implement sync modes for drive-backup. 2013-07-26 22:01:31 +02:00
libcacard libcacard: Fix cppcheck warning and remove unneeded code 2013-06-21 22:52:50 +04:00
linux-headers linux-headers: Update to v3.10-rc5 2013-06-12 13:19:10 +04:00
linux-user Merge remote-tracking branch 'riku/linux-user-for-upstream' into staging 2013-07-25 15:56:06 -05:00
net net: add support of mac-programming over macvtap in QEMU side 2013-07-15 21:23:08 +03:00
pc-bios seabios: update to 1.7.3 2013-07-24 15:37:43 +02:00
pixman@97336fad32
po po/Makefile: Use macro quiet-command for nice looking messages 2013-07-23 15:45:24 -05:00
qapi qapi: Anonymous unions 2013-07-26 21:10:11 +02:00
qga qga: escape cmdline args when registering win32 service (CVE-2013-2231) 2013-07-25 14:49:04 -05:00
QMP net: add support of mac-programming over macvtap in QEMU side 2013-07-15 21:23:08 +03:00
qobject Implement qdict_flatten() 2013-07-26 22:01:31 +02:00
qom QOM CPUState refactorings 2013-07-10 10:54:16 -05:00
roms seabios: update to 1.7.3 2013-07-24 15:37:43 +02:00
scripts qapi: Anonymous unions 2013-07-26 21:10:11 +02:00
slirp slirp: remove mbuf(m_hdr,m_dat) indirection 2013-07-19 12:52:03 +04:00
stubs cpus: Add return value for vm_stop() 2013-07-15 09:51:38 +02:00
sysconfigs/target
target-alpha cpu: Turn cpu_get_phys_page_debug() into a CPUClass hook 2013-07-23 02:41:33 +02:00
target-arm gdbstub: Change gdb_register_coprocessor() argument to CPUState 2013-07-23 02:41:33 +02:00
target-cris cpu: Turn cpu_get_phys_page_debug() into a CPUClass hook 2013-07-23 02:41:33 +02:00
target-i386 Merge remote-tracking branch 'quintela/migration.next' into staging 2013-07-23 10:57:23 -05:00
target-lm32 cpu: Turn cpu_get_phys_page_debug() into a CPUClass hook 2013-07-23 02:41:33 +02:00
target-m68k gdbstub: Change gdb_register_coprocessor() argument to CPUState 2013-07-23 02:41:33 +02:00
target-microblaze cpu: Turn cpu_get_phys_page_debug() into a CPUClass hook 2013-07-23 02:41:33 +02:00
target-mips cpu: Turn cpu_get_phys_page_debug() into a CPUClass hook 2013-07-23 02:41:33 +02:00
target-moxie cpu: Turn cpu_get_phys_page_debug() into a CPUClass hook 2013-07-23 02:41:33 +02:00
target-openrisc cpu: Turn cpu_get_phys_page_debug() into a CPUClass hook 2013-07-23 02:41:33 +02:00
target-ppc gdbstub: Change gdb_register_coprocessor() argument to CPUState 2013-07-23 02:41:33 +02:00
target-s390x cpu: Turn cpu_get_phys_page_debug() into a CPUClass hook 2013-07-23 02:41:33 +02:00
target-sh4 cpu: Turn cpu_get_phys_page_debug() into a CPUClass hook 2013-07-23 02:41:33 +02:00
target-sparc cpu: Introduce CPUClass::memory_rw_debug() for target_memory_rw_debug() 2013-07-23 02:41:33 +02:00
target-unicore32 cpu: Turn cpu_get_phys_page_debug() into a CPUClass hook 2013-07-23 02:41:33 +02:00
target-xtensa exec: Change cpu_memory_rw_debug() argument to CPUState 2013-07-23 02:41:33 +02:00
tcg tcg-arm: Implement tcg_register_jit 2013-07-09 07:15:25 -07:00
tests blockdev: Rename 'readonly' option to 'read-only' 2013-07-26 22:01:02 +02:00
trace
ui gtk: Fix accelerator filtering 2013-07-22 12:52:34 -05:00
util QemuOpts: Add qemu_opt_unset() 2013-07-26 21:10:11 +02:00
.exrc
.gitignore gitignore: unignore *.patch 2013-06-11 23:45:43 +04:00
.gitmodules pc-bios: Update palcode-clipper 2013-07-18 08:17:42 -07:00
.mailmap
aio-posix.c
aio-win32.c
arch_init.c rdma: send pc.ram 2013-07-23 11:12:00 +02:00
async.c QEMUBH: make AioContext's bh re-entrant 2013-07-19 12:29:21 +08:00
balloon.c
block-migration.c block-migration: efficiently encode zero blocks 2013-07-19 12:29:21 +08:00
block.c block: Allow "driver" option on the top level 2013-07-26 21:10:11 +02:00
blockdev-nbd.c hw: move headers to include/ 2013-04-08 18:13:10 +02:00
blockdev.c Implement sync modes for drive-backup. 2013-07-26 22:01:31 +02:00
blockjob.c
bt-host.c
bt-vhci.c
Changelog
CODING_STYLE
configure Merge remote-tracking branch 'riku/linux-user-for-upstream' into staging 2013-07-25 15:56:06 -05:00
COPYING
COPYING.LIB
coroutine-gthread.c
coroutine-sigaltstack.c Merge remote-tracking branch 'kwolf/for-anthony' into staging 2013-02-26 07:44:39 -06:00
coroutine-ucontext.c
coroutine-win32.c
cpu-exec.c cpu: Move singlestep_enabled field from CPU_COMMON to CPUState 2013-07-23 02:41:32 +02:00
cpus.c exec: Change cpu_memory_rw_debug() argument to CPUState 2013-07-23 02:41:33 +02:00
cputlb.c cpu: Make first_cpu and next_cpu CPUState 2013-07-09 21:32:54 +02:00
device_tree.c device_tree: Add qemu_devtree_setprop_sized_cells() utility functions 2013-07-19 12:58:46 +01:00
device-hotplug.c
disas.c exec: Change cpu_memory_rw_debug() argument to CPUState 2013-07-23 02:41:33 +02:00
dma-helpers.c dma: keep a device alive while it has SGLists 2013-07-04 17:42:30 +02:00
dump.c cpu: Make first_cpu and next_cpu CPUState 2013-07-09 21:32:54 +02:00
exec.c Merge remote-tracking branch 'riku/linux-user-for-upstream' into staging 2013-07-25 15:56:06 -05:00
gdbstub.c gdbstub: Change gdb_register_coprocessor() argument to CPUState 2013-07-23 02:41:33 +02:00
HACKING HACKING: Document vaddr type usage 2013-07-23 02:41:31 +02:00
hmp-commands.hx block: add drive_backup HMP command 2013-07-15 09:49:00 +02:00
hmp.c rdma: account for the time spent in MIG_STATE_SETUP through QMP 2013-07-23 13:06:37 +02:00
hmp.h block: add drive_backup HMP command 2013-07-15 09:49:00 +02:00
iohandler.c
ioport.c Revert "ioport: remove LITTLE_ENDIAN mark for portio" 2013-07-25 08:12:27 -05:00
kvm-all.c kvm: Change kvm_{insert,remove}_breakpoint() argument to CPUState 2013-07-23 02:41:32 +02:00
kvm-stub.c kvm: Change kvm_{insert,remove}_breakpoint() argument to CPUState 2013-07-23 02:41:32 +02:00
LICENSE
main-loop.c main-loop: do not include slirp/slirp.h, use libslirp.h instead 2013-06-12 18:43:08 +04:00
MAINTAINERS tcg: Add myself to general TCG maintainership 2013-07-08 22:03:59 -07:00
Makefile Makefile: pass include directives to dtc via CPPFLAGS, not CFLAGS 2013-06-21 22:52:50 +04:00
Makefile.objs rdma: core logic 2013-07-23 11:12:00 +02:00
Makefile.target build: do not use TARGET_ARCH 2013-06-14 15:33:10 +01:00
memory_mapping.c cpu: Make first_cpu and next_cpu CPUState 2013-07-09 21:32:54 +02:00
memory.c memory: check memory region endianness, not target's 2013-07-25 08:12:28 -05:00
migration-exec.c
migration-fd.c migration: eliminate s->migration_file 2013-03-11 13:32:03 +01:00
migration-rdma.c rdma: core logic 2013-07-23 11:12:00 +02:00
migration-tcp.c
migration-unix.c
migration.c rdma: account for the time spent in MIG_STATE_SETUP through QMP 2013-07-23 13:06:37 +02:00
monitor.c exec: Change cpu_memory_rw_debug() argument to CPUState 2013-07-23 02:41:33 +02:00
nbd.c
os-posix.c
os-win32.c
page_cache.c remove some double-includes 2013-05-18 16:35:12 +04:00
qapi-schema-test.json qapi: add native list coverage for QMP output visitor tests 2013-05-23 09:44:21 -04:00
qapi-schema.json migration: add autoconvergence documentation 2013-07-23 15:21:09 +02:00
qdev-monitor.c qdev: Let qdev_prop_parse() pass through Error 2013-05-06 19:40:44 +02:00
qdict-test-data.txt
qemu-bridge-helper.c
qemu-char.c char: io_channel_send: don't lose written bytes 2013-07-18 11:22:56 -05:00
qemu-coroutine-io.c rdma: export yield_until_fd_readable() 2013-06-27 02:38:36 +02:00
qemu-coroutine-lock.c coroutine: stop using AioContext in CoQueue 2013-05-24 16:17:56 +02:00
qemu-coroutine-sleep.c misc: move include files to include/qemu/ 2012-12-19 08:32:39 +01:00
qemu-coroutine.c coroutine: stop using AioContext in CoQueue 2013-05-24 16:17:56 +02:00
qemu-doc.texi doc: we use seabios, not bochs bios 2013-06-28 22:10:34 +04:00
qemu-img-cmds.hx
qemu-img.c block: Don't parse protocol from file.filename 2013-07-15 09:49:00 +02:00
qemu-img.texi
qemu-io-cmds.c qemu-io: Interface cleanup 2013-06-06 11:27:05 +02:00
qemu-io.c qemu-io: Use the qemu version for -V 2013-06-06 11:27:05 +02:00
qemu-log.c
qemu-nbd.c
qemu-nbd.texi
qemu-options-wrapper.h
qemu-options.h vl.c: Move option generation logic into a wrapper file 2011-12-19 10:27:33 -06:00
qemu-options.hx doc: monitor multiplexing rewording 2013-07-19 12:52:03 +04:00
qemu-seccomp.c seccomp: add the asynchronous I/O syscalls to the whitelist 2013-05-30 11:46:07 -05:00
qemu-tech.texi qemu-tech.texi: update implemented xtensa features list 2012-11-29 13:00:52 -06:00
qemu-timer.c
qemu.sasl Fix command example in qemu.sasl 2013-07-19 12:52:03 +04:00
qmp-commands.hx Implement sync modes for drive-backup. 2013-07-26 22:01:31 +02:00
qmp.c
qtest.c qtest: Don't reset on qtest chardev connect 2013-07-18 13:27:46 -05:00
readline.c readline: Handle xterm escape sequences for Home/End keys 2013-05-14 08:53:22 -05:00
README
rules.mak
savevm.c rdma: bugfix: ram_control_save_page() 2013-07-23 11:11:59 +02:00
spice-qemu-char.c qemu-char: don't issue CHR_EVENT_OPEN in a BH 2013-06-10 11:38:37 -05:00
tcg-runtime.c
tci.c
thread-pool.c
thunk.c
tpm.c
trace-events trace-events: Fix up source file comments 2013-07-18 11:44:42 +08:00
translate-all.c linux-user: Unlock mmap_lock when resuming guest from page_unprotect 2013-07-23 17:28:28 +03:00
translate-all.h
user-exec.c linux-user: fix segmentation fault passing with h2g(x) != x 2013-07-23 17:28:28 +03:00
VERSION Open up 1.6 development 2013-05-20 10:55:18 -05:00
version.rc
vl.c add timestamp to error_report() 2013-07-10 13:42:09 -04:00
xbzrle.c
xen-all.c memory: add ref/unref calls 2013-07-04 17:42:45 +02:00
xen-mapcache.c hw: move headers to include/ 2013-04-08 18:13:10 +02:00
xen-stub.c Allow use of pc machine type (accel=xen) for Xen HVM domains. 2013-06-25 12:00:48 +00:00

Read the documentation in qemu-doc.html or on http://wiki.qemu.org

- QEMU team