Hi, Hamza, On Mon, Jul 12, 2021 at 10:33:38PM -0400, Hamza Mahfooz wrote: > @@ -1467,16 +1467,20 @@ rmap_walk_init_level(struct slot_rmap_walk_iterator *iterator, int level) > > static void > slot_rmap_walk_init(struct slot_rmap_walk_iterator *iterator, > - struct kvm_memory_slot *slot, int start_level, > + const struct kvm_memory_slot *slot, int start_level, > int end_level, gfn_t start_gfn, gfn_t end_gfn) > { > - iterator->slot = slot; > - iterator->start_level = start_level; > - iterator->end_level = end_level; > - iterator->start_gfn = start_gfn; > - iterator->end_gfn = end_gfn; > + struct slot_rmap_walk_iterator iter = { > + .slot = slot, > + .start_gfn = start_gfn, > + .end_gfn = end_gfn, > + .start_level = start_level, > + .end_level = end_level, > + }; > + > + rmap_walk_init_level(&iter, iterator->start_level); Here it should be s/iterator->//. > > - rmap_walk_init_level(iterator, iterator->start_level); > + memcpy(iterator, &iter, sizeof(struct slot_rmap_walk_iterator)); > } This patch breaks kvm/queue with above issue. Constify of kvm_memory_slot pointer should have nothing to do with this so at least it should need a separate patch. At the meantime I also don't understand why memcpy() here, which seems to be even slower.. -- Peter Xu