Hi Izik, On Thu, Sep 04, 2008 at 05:13:20PM +0300, izik eidus wrote: > > + struct kvm_memory_slot *alias_slot = &kvm->memslots[i]; > + > + if (alias_slot->base_gfn == slot->base_gfn) > + return 1; > + } > + return 0; > +} > + > +static void update_alias_slots(struct kvm *kvm, struct kvm_memory_slot *free) > +{ > + int i; > + > + if (is_aliased_slot(kvm, free)) > + return; > + > + for (i = KVM_MEMORY_SLOTS; i < KVM_MEMORY_SLOTS + KVM_ALIAS_SLOTS; > + ++i) { > + struct kvm_memory_slot *alias_memslot = &kvm->memslots[i]; > + unsigned long size = free->npages << PAGE_SHIFT; > + > + if (alias_memslot->userspace_addr >= free->userspace_addr && > + alias_memslot->userspace_addr < free->userspace_addr + > + size) { > + alias_memslot->flags = free->flags; > + if (free->dirty_bitmap) { > + unsigned long offset = > + alias_memslot->userspace_addr - > + free->userspace_addr; > + unsigned dirty_offset; > + unsigned long bitmap_addr; > + > + offset = offset >> PAGE_SHIFT; > + dirty_offset = ALIGN(offset, BITS_PER_LONG) / 8; > + bitmap_addr = (unsigned long) > free->dirty_bitmap; > + bitmap_addr += dirty_offset; > + alias_memslot->dirty_bitmap = (unsigned long *) > bitmap_addr; > + } else > + alias_memslot->dirty_bitmap = NULL; > + } > + } > +} > + > /* > * Free any memory in @free but not in @dont. > */ > -static void kvm_free_physmem_slot(struct kvm_memory_slot *free, > +static void kvm_free_physmem_slot(struct kvm *kvm, > + struct kvm_memory_slot *free, > struct kvm_memory_slot *dont) > { > if (!dont || free->rmap != dont->rmap) > @@ -385,10 +433,16 @@ static void kvm_free_physmem_slot(struct > kvm_memory_slot *free, > if (!dont || free->lpage_info != dont->lpage_info) > vfree(free->lpage_info); > > - free->npages = 0; > free->dirty_bitmap = NULL; > free->rmap = NULL; > free->lpage_info = NULL; > + > +#ifdef CONFIG_X86 > + update_alias_slots(kvm, free); > + if (dont) > + update_alias_slots(kvm, dont); > +#endif > + free->npages = 0;
Why is this needed? I don't understand when would you free a memslot without freeing any aliases that map it first? -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html