migration: run pending/iterate callbacks out of big lock
commit32c835ba3984728c22d4e73cdb595090a60f437e
authorPaolo Bonzini <pbonzini@redhat.com>
Fri, 22 Feb 2013 16:36:27 +0000 (22 17:36 +0100)
committerJuan Quintela <quintela@redhat.com>
Mon, 11 Mar 2013 12:32:01 +0000 (11 13:32 +0100)
tree48c53ef25b4ec19f1f006694294ca109ef3500f1
parent8c8de19d93444536d3291e6ab83e2bcf61dd2d0c
migration: run pending/iterate callbacks out of big lock

This makes it possible to do blocking writes directly to the socket,
with no buffer in the middle.  For RAM, only the migration_bitmap_sync()
call needs the iothread lock.  For block migration, it is needed by
the block layer (including bdrv_drain_all and dirty bitmap access),
but because some code is shared between iterate and complete, all of
mig_save_device_dirty is run with the lock taken.

In the savevm case, the iterate callback runs within the big lock.
This is annoying because it complicates the rules.  Luckily we do not
need to do anything about it: the RAM iterate callback does not need
the iothread lock, and block migration never runs during savevm.

Reviewed-by: Orit Wasserman <owasserm@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
arch_init.c
block-migration.c
include/migration/vmstate.h
migration.c