From: Paolo Bonzini Date: Sun, 19 Dec 2021 14:27:21 +0000 (+0100) Subject: Merge branch 'topic/ppc-kvm' of https://git.kernel.org/pub/scm/linux/kernel/git/power... X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=5a213b9220e0bf4c924412d83d7c9a90acb553e8;p=uclinux-h8%2Flinux.git Merge branch 'topic/ppc-kvm' of https://git./linux/kernel/git/powerpc/linux into HEAD Fix conflicts between memslot overhaul and commit 511d25d6b789f ("KVM: PPC: Book3S: Suppress warnings when allocating too big memory slots") from the powerpc tree. --- 5a213b9220e0bf4c924412d83d7c9a90acb553e8 diff --cc arch/powerpc/kvm/book3s_hv.c index 51e1c29a6fa0,f64e45d6c0f4..d1817cd9a691 --- a/arch/powerpc/kvm/book3s_hv.c +++ b/arch/powerpc/kvm/book3s_hv.c @@@ -4854,17 -4866,21 +4866,21 @@@ static void kvmppc_core_free_memslot_hv } static int kvmppc_core_prepare_memory_region_hv(struct kvm *kvm, - struct kvm_memory_slot *slot, - const struct kvm_userspace_memory_region *mem, - enum kvm_mr_change change) + const struct kvm_memory_slot *old, + struct kvm_memory_slot *new, + enum kvm_mr_change change) { - unsigned long npages = mem->memory_size >> PAGE_SHIFT; - if (change == KVM_MR_CREATE) { - new->arch.rmap = vzalloc(array_size(new->npages, - sizeof(*new->arch.rmap))); - unsigned long size = array_size(npages, sizeof(*slot->arch.rmap)); ++ unsigned long size = array_size(new->npages, sizeof(*new->arch.rmap)); + + if ((size >> PAGE_SHIFT) > totalram_pages()) + return -ENOMEM; + - slot->arch.rmap = vzalloc(size); - if (!slot->arch.rmap) ++ new->arch.rmap = vzalloc(size); + if (!new->arch.rmap) return -ENOMEM; + } else if (change != KVM_MR_DELETE) { + new->arch.rmap = old->arch.rmap; } return 0;