On 12/19/2017 11:41 AM, Cornelia Huck wrote: > On Tue, 19 Dec 2017 09:19:21 +0100 > Christian Borntraeger <borntraeger@xxxxxxxxxx> wrote: > >> when multiple memory slots are present the cmma migration code > > s/when/When/ > >> does not allocate enough memory for the bitmap. The memory slots >> are sorted in reverse order, so we must use gfn and size of >> slot[0] instead of the last one. > > I've spent way too much time looking at the memslot code, but this > seems correct. > >> >> Signed-off-by: Christian Borntraeger <borntraeger@xxxxxxxxxx> >> Reviewed-by: Claudio Imbrenda <imbrenda@xxxxxxxxxxxxxxxxxx> >> Cc: stable@xxxxxxxxxxxxxxx # 4.13+ >> Fixes: 190df4a212a7 (KVM: s390: CMMA tracking, ESSA emulation, migration mode) >> --- >> arch/s390/kvm/kvm-s390.c | 9 +++++---- >> 1 file changed, 5 insertions(+), 4 deletions(-) >> >> diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c >> index 966ea611210a..3373d8dff131 100644 >> --- a/arch/s390/kvm/kvm-s390.c >> +++ b/arch/s390/kvm/kvm-s390.c >> @@ -792,11 +792,12 @@ static int kvm_s390_vm_start_migration(struct kvm *kvm) >> >> if (kvm->arch.use_cmma) { >> /* >> - * Get the last slot. They should be sorted by base_gfn, so the >> - * last slot is also the one at the end of the address space. >> - * We have verified above that at least one slot is present. >> + * Get the first slot. They are reverse sorted by base_gfn, so >> + * the first slot is also the one at the end of the address >> + * space. We have verified above that at least one slot is >> + * present. >> */ >> - ms = slots->memslots + slots->used_slots - 1; >> + ms = slots->memslots; >> /* round up so we only use full longs */ >> ram_pages = roundup(ms->base_gfn + ms->npages, BITS_PER_LONG); >> /* allocate enough bytes to store all the bits */ > > Reviewed-by: Cornelia Huck <cohuck@xxxxxxxxxx> > > As you wrote, this is good as a minimal fix. Paolo, Radim, do you want a respin and/or pull request or can you take a fixed up version ( adding the Review and fixing when vs When/ for kvm/master?