And use it where s390 code would just access the memslot with the highest
gfn directly.
No functional change intended.
Signed-off-by: Maciej S. Szmigiero <maciej.szmigiero@oracle.com>
Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
Message-Id: <
42496041d6af1c23b1cbba2636b344ca8d5fc3af.
1638817641.git.maciej.szmigiero@oracle.com>
 
        if (!ms)
                return 0;
        next_gfn = kvm_s390_next_dirty_cmma(slots, cur_gfn + 1);
-       mem_end = slots->memslots[0].base_gfn + slots->memslots[0].npages;
+       mem_end = kvm_s390_get_gfn_end(slots);
 
        while (args->count < bufsize) {
                hva = gfn_to_hva(kvm, cur_gfn);
 
        kvm->arch.user_cpu_state_ctrl = 1;
 }
 
+/* get the end gfn of the last (highest gfn) memslot */
+static inline unsigned long kvm_s390_get_gfn_end(struct kvm_memslots *slots)
+{
+       struct kvm_memory_slot *ms;
+
+       if (WARN_ON(!slots->used_slots))
+               return 0;
+
+       ms = slots->memslots;
+       return ms->base_gfn + ms->npages;
+}
+
 /* implemented in pv.c */
 int kvm_s390_pv_destroy_cpu(struct kvm_vcpu *vcpu, u16 *rc, u16 *rrc);
 int kvm_s390_pv_create_cpu(struct kvm_vcpu *vcpu, u16 *rc, u16 *rrc);
 
        unsigned long base = uv_info.guest_base_stor_len;
        unsigned long virt = uv_info.guest_virt_var_stor_len;
        unsigned long npages = 0, vlen = 0;
-       struct kvm_memory_slot *memslot;
 
        kvm->arch.pv.stor_var = NULL;
        kvm->arch.pv.stor_base = __get_free_pages(GFP_KERNEL_ACCOUNT, get_order(base));
         * Slots are sorted by GFN
         */
        mutex_lock(&kvm->slots_lock);
-       memslot = kvm_memslots(kvm)->memslots;
-       npages = memslot->base_gfn + memslot->npages;
+       npages = kvm_s390_get_gfn_end(kvm_memslots(kvm));
        mutex_unlock(&kvm->slots_lock);
 
        kvm->arch.pv.guest_len = npages * PAGE_SIZE;