Skip to content

Commit

Permalink
migration/ram: ensure write persistence on loading all data to PMEM.
Browse files Browse the repository at this point in the history
Because we need to make sure the pmem kind memory data is synced
after migration, we choose to call pmem_persist() when the migration
finish. This will make sure the data of pmem is safe and will not
lose if power is off.

Signed-off-by: Junyan He <junyan.he@intel.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
  • Loading branch information
HeJunyan authored and mstsirkin committed Aug 10, 2018
1 parent 469dd51 commit 56eb90a
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 0 deletions.
6 changes: 6 additions & 0 deletions include/qemu/pmem.h
Expand Up @@ -25,6 +25,12 @@ pmem_memcpy_persist(void *pmemdest, const void *src, size_t len)
return NULL;
}

static inline void
pmem_persist(const void *addr, size_t len)
{
g_assert_not_reached();
}

#endif /* CONFIG_LIBPMEM */

#endif /* !QEMU_PMEM_H */
8 changes: 8 additions & 0 deletions migration/ram.c
Expand Up @@ -33,6 +33,7 @@
#include "qemu/bitops.h"
#include "qemu/bitmap.h"
#include "qemu/main-loop.h"
#include "qemu/pmem.h"
#include "xbzrle.h"
#include "ram.h"
#include "migration.h"
Expand Down Expand Up @@ -3547,6 +3548,13 @@ static int ram_load_setup(QEMUFile *f, void *opaque)
static int ram_load_cleanup(void *opaque)
{
RAMBlock *rb;

RAMBLOCK_FOREACH_MIGRATABLE(rb) {
if (ramblock_is_pmem(rb)) {
pmem_persist(rb->host, rb->used_length);
}
}

xbzrle_load_cleanup();
compress_threads_load_cleanup();

Expand Down

0 comments on commit 56eb90a

Please sign in to comment.