Loading arch/ia64/kvm/kvm-ia64.c +1 −1 Original line number Diff line number Diff line Loading @@ -1818,7 +1818,7 @@ int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm, if (log->slot >= KVM_MEMORY_SLOTS) goto out; memslot = &kvm->memslots->memslots[log->slot]; memslot = id_to_memslot(kvm->memslots, log->slot); r = -ENOENT; if (!memslot->dirty_bitmap) goto out; Loading arch/powerpc/kvm/book3s.c +1 −1 Original line number Diff line number Diff line Loading @@ -498,7 +498,7 @@ int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm, /* If nothing is dirty, don't bother messing with page tables. */ if (is_dirty) { memslot = &kvm->memslots->memslots[log->slot]; memslot = id_to_memslot(kvm->memslots, log->slot); ga = memslot->base_gfn << PAGE_SHIFT; ga_end = ga + (memslot->npages << PAGE_SHIFT); Loading arch/x86/kvm/vmx.c +4 −2 Original line number Diff line number Diff line Loading @@ -2711,11 +2711,13 @@ static gva_t rmode_tss_base(struct kvm *kvm) { if (!kvm->arch.tss_addr) { struct kvm_memslots *slots; struct kvm_memory_slot *slot; gfn_t base_gfn; slots = kvm_memslots(kvm); base_gfn = slots->memslots[0].base_gfn + kvm->memslots->memslots[0].npages - 3; slot = id_to_memslot(slots, 0); base_gfn = slot->base_gfn + slot->npages - 3; return base_gfn << PAGE_SHIFT; } return kvm->arch.tss_addr; Loading arch/x86/kvm/x86.c +9 −9 Original line number Diff line number Diff line Loading @@ -3520,7 +3520,7 @@ int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm, if (log->slot >= KVM_MEMORY_SLOTS) goto out; memslot = &kvm->memslots->memslots[log->slot]; memslot = id_to_memslot(kvm->memslots, log->slot); r = -ENOENT; if (!memslot->dirty_bitmap) goto out; Loading @@ -3531,27 +3531,27 @@ int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm, /* If nothing is dirty, don't bother messing with page tables. */ if (nr_dirty_pages) { struct kvm_memslots *slots, *old_slots; unsigned long *dirty_bitmap; unsigned long *dirty_bitmap, *dirty_bitmap_head; dirty_bitmap = memslot->dirty_bitmap_head; if (memslot->dirty_bitmap == dirty_bitmap) dirty_bitmap += n / sizeof(long); memset(dirty_bitmap, 0, n); dirty_bitmap = memslot->dirty_bitmap; dirty_bitmap_head = memslot->dirty_bitmap_head; if (dirty_bitmap == dirty_bitmap_head) dirty_bitmap_head += n / sizeof(long); memset(dirty_bitmap_head, 0, n); r = -ENOMEM; slots = kzalloc(sizeof(struct kvm_memslots), GFP_KERNEL); if (!slots) goto out; memcpy(slots, kvm->memslots, sizeof(struct kvm_memslots)); memslot = &slots->memslots[log->slot]; memslot->dirty_bitmap = dirty_bitmap; memslot = id_to_memslot(slots, log->slot); memslot->nr_dirty_pages = 0; memslot->dirty_bitmap = dirty_bitmap_head; update_memslots(slots, NULL); old_slots = kvm->memslots; rcu_assign_pointer(kvm->memslots, slots); synchronize_srcu_expedited(&kvm->srcu); dirty_bitmap = old_slots->memslots[log->slot].dirty_bitmap; kfree(old_slots); write_protect_slot(kvm, memslot, dirty_bitmap, nr_dirty_pages); Loading include/linux/kvm_host.h +6 −0 Original line number Diff line number Diff line Loading @@ -333,6 +333,12 @@ static inline struct kvm_memslots *kvm_memslots(struct kvm *kvm) || lockdep_is_held(&kvm->slots_lock)); } static inline struct kvm_memory_slot * id_to_memslot(struct kvm_memslots *slots, int id) { return &slots->memslots[id]; } #define HPA_MSB ((sizeof(hpa_t) * 8) - 1) #define HPA_ERR_MASK ((hpa_t)1 << HPA_MSB) static inline int is_error_hpa(hpa_t hpa) { return hpa >> HPA_MSB; } Loading Loading
arch/ia64/kvm/kvm-ia64.c +1 −1 Original line number Diff line number Diff line Loading @@ -1818,7 +1818,7 @@ int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm, if (log->slot >= KVM_MEMORY_SLOTS) goto out; memslot = &kvm->memslots->memslots[log->slot]; memslot = id_to_memslot(kvm->memslots, log->slot); r = -ENOENT; if (!memslot->dirty_bitmap) goto out; Loading
arch/powerpc/kvm/book3s.c +1 −1 Original line number Diff line number Diff line Loading @@ -498,7 +498,7 @@ int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm, /* If nothing is dirty, don't bother messing with page tables. */ if (is_dirty) { memslot = &kvm->memslots->memslots[log->slot]; memslot = id_to_memslot(kvm->memslots, log->slot); ga = memslot->base_gfn << PAGE_SHIFT; ga_end = ga + (memslot->npages << PAGE_SHIFT); Loading
arch/x86/kvm/vmx.c +4 −2 Original line number Diff line number Diff line Loading @@ -2711,11 +2711,13 @@ static gva_t rmode_tss_base(struct kvm *kvm) { if (!kvm->arch.tss_addr) { struct kvm_memslots *slots; struct kvm_memory_slot *slot; gfn_t base_gfn; slots = kvm_memslots(kvm); base_gfn = slots->memslots[0].base_gfn + kvm->memslots->memslots[0].npages - 3; slot = id_to_memslot(slots, 0); base_gfn = slot->base_gfn + slot->npages - 3; return base_gfn << PAGE_SHIFT; } return kvm->arch.tss_addr; Loading
arch/x86/kvm/x86.c +9 −9 Original line number Diff line number Diff line Loading @@ -3520,7 +3520,7 @@ int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm, if (log->slot >= KVM_MEMORY_SLOTS) goto out; memslot = &kvm->memslots->memslots[log->slot]; memslot = id_to_memslot(kvm->memslots, log->slot); r = -ENOENT; if (!memslot->dirty_bitmap) goto out; Loading @@ -3531,27 +3531,27 @@ int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm, /* If nothing is dirty, don't bother messing with page tables. */ if (nr_dirty_pages) { struct kvm_memslots *slots, *old_slots; unsigned long *dirty_bitmap; unsigned long *dirty_bitmap, *dirty_bitmap_head; dirty_bitmap = memslot->dirty_bitmap_head; if (memslot->dirty_bitmap == dirty_bitmap) dirty_bitmap += n / sizeof(long); memset(dirty_bitmap, 0, n); dirty_bitmap = memslot->dirty_bitmap; dirty_bitmap_head = memslot->dirty_bitmap_head; if (dirty_bitmap == dirty_bitmap_head) dirty_bitmap_head += n / sizeof(long); memset(dirty_bitmap_head, 0, n); r = -ENOMEM; slots = kzalloc(sizeof(struct kvm_memslots), GFP_KERNEL); if (!slots) goto out; memcpy(slots, kvm->memslots, sizeof(struct kvm_memslots)); memslot = &slots->memslots[log->slot]; memslot->dirty_bitmap = dirty_bitmap; memslot = id_to_memslot(slots, log->slot); memslot->nr_dirty_pages = 0; memslot->dirty_bitmap = dirty_bitmap_head; update_memslots(slots, NULL); old_slots = kvm->memslots; rcu_assign_pointer(kvm->memslots, slots); synchronize_srcu_expedited(&kvm->srcu); dirty_bitmap = old_slots->memslots[log->slot].dirty_bitmap; kfree(old_slots); write_protect_slot(kvm, memslot, dirty_bitmap, nr_dirty_pages); Loading
include/linux/kvm_host.h +6 −0 Original line number Diff line number Diff line Loading @@ -333,6 +333,12 @@ static inline struct kvm_memslots *kvm_memslots(struct kvm *kvm) || lockdep_is_held(&kvm->slots_lock)); } static inline struct kvm_memory_slot * id_to_memslot(struct kvm_memslots *slots, int id) { return &slots->memslots[id]; } #define HPA_MSB ((sizeof(hpa_t) * 8) - 1) #define HPA_ERR_MASK ((hpa_t)1 << HPA_MSB) static inline int is_error_hpa(hpa_t hpa) { return hpa >> HPA_MSB; } Loading