On Thu, Jan 09, 2025, James Houghton wrote: > @@ -2073,6 +2080,23 @@ void kvm_arch_commit_memory_region(struct kvm *kvm, > enum kvm_mr_change change) > { > bool log_dirty_pages = new && new->flags & KVM_MEM_LOG_DIRTY_PAGES; > + u32 new_flags = new ? new->flags : 0; > + u32 changed_flags = (new_flags) ^ (old ? old->flags : 0); This is a bit hard to read, and there's only one use of log_dirty_pages. With zapping handled in common KVM, just do: @@ -2127,14 +2131,19 @@ void kvm_arch_commit_memory_region(struct kvm *kvm, const struct kvm_memory_slot *new, enum kvm_mr_change change) { - bool log_dirty_pages = new && new->flags & KVM_MEM_LOG_DIRTY_PAGES; + u32 old_flags = old ? old->flags : 0; + u32 new_flags = new ? new->flags : 0; + + /* Nothing to do if not toggling dirty logging. */ + if (!((old_flags ^ new_flags) & KVM_MEM_LOG_DIRTY_PAGES)) + return; /* * At this point memslot has been committed and there is an * allocated dirty_bitmap[], dirty pages will be tracked while the * memory slot is write protected. */ - if (log_dirty_pages) { + if (new_flags & KVM_MEM_LOG_DIRTY_PAGES) { if (change == KVM_MR_DELETE) return;