aboutsummaryrefslogtreecommitdiff
path: root/migration
diff options
context:
space:
mode:
authorDavid Hildenbrand <david@redhat.com>2023-01-05 13:45:26 +0100
committerJuan Quintela <quintela@redhat.com>2023-02-06 19:22:56 +0100
commit7cc8e9e0fadc734065d4d5c9cb0bd8997e743146 (patch)
treee4cb2ff38bd2fb7dfd107ced83cc35cc510a60ac /migration
parent72ef3a370836aa07261ad7aaeea27ed5cbcee342 (diff)
downloadqemu-7cc8e9e0fadc734065d4d5c9cb0bd8997e743146.zip
qemu-7cc8e9e0fadc734065d4d5c9cb0bd8997e743146.tar.gz
qemu-7cc8e9e0fadc734065d4d5c9cb0bd8997e743146.tar.bz2
migration/ram: Don't explicitly unprotect when unregistering uffd-wp
When unregistering uffd-wp, older kernels before commit f369b07c86143 ("mm/uffd:reset write protection when unregister with wp-mode") won't clear the uffd-wp PTE bit. When re-registering uffd-wp, the previous uffd-wp PTE bits would trigger again. With above commit, the kernel will clear the uffd-wp PTE bits when unregistering itself. Consequently, we'll clear the uffd-wp PTE bits now twice -- whereby we don't care about clearing them at all: a new background snapshot will re-register uffd-wp and re-protect all memory either way. So let's skip the manual clearing of uffd-wp. If ever relevant, we could clear conditionally in uffd_unregister_memory() -- we just need a way to figure out more recent kernels. Reviewed-by: Peter Xu <peterx@redhat.com> Reviewed-by: Juan Quintela <quintela@redhat.com> Signed-off-by: David Hildenbrand <david@redhat.com> Signed-off-by: Juan Quintela <quintela@redhat.com>
Diffstat (limited to 'migration')
-rw-r--r--migration/ram.c9
1 files changed, 0 insertions, 9 deletions
diff --git a/migration/ram.c b/migration/ram.c
index 73e5ca9..efaae07 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -1918,12 +1918,6 @@ fail:
if ((block->flags & RAM_UF_WRITEPROTECT) == 0) {
continue;
}
- /*
- * In case some memory block failed to be write-protected
- * remove protection and unregister all succeeded RAM blocks
- */
- uffd_change_protection(rs->uffdio_fd, block->host, block->max_length,
- false, false);
uffd_unregister_memory(rs->uffdio_fd, block->host, block->max_length);
/* Cleanup flags and remove reference */
block->flags &= ~RAM_UF_WRITEPROTECT;
@@ -1949,9 +1943,6 @@ void ram_write_tracking_stop(void)
if ((block->flags & RAM_UF_WRITEPROTECT) == 0) {
continue;
}
- /* Remove protection and unregister all affected RAM blocks */
- uffd_change_protection(rs->uffdio_fd, block->host, block->max_length,
- false, false);
uffd_unregister_memory(rs->uffdio_fd, block->host, block->max_length);
trace_ram_write_tracking_ramblock_stop(block->idstr, block->page_size,