Message ID | 20230105124528.93813-4-david@redhat.com |
---|---|
State | New |
Headers | show |
Series | migration/ram: background snapshot fixes and optimiations | expand |
David Hildenbrand <david@redhat.com> wrote: > 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. > > Signed-off-by: David Hildenbrand <david@redhat.com> Reviewed-by: Juan Quintela <quintela@redhat.com> Fixing a bug by removing code O:-)
diff --git a/migration/ram.c b/migration/ram.c index 6e4e41952a..6a3dbee2c3 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,
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. Signed-off-by: David Hildenbrand <david@redhat.com> --- migration/ram.c | 9 --------- 1 file changed, 9 deletions(-)