From: Sean Christopherson <sean.j.christopherson@intel.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Paul Mackerras" <paulus@ozlabs.org>,
"Christian Borntraeger" <borntraeger@de.ibm.com>,
"Janosch Frank" <frankja@linux.ibm.com>,
"David Hildenbrand" <david@redhat.com>,
"Cornelia Huck" <cohuck@redhat.com>,
"Sean Christopherson" <sean.j.christopherson@intel.com>,
"Vitaly Kuznetsov" <vkuznets@redhat.com>,
"Wanpeng Li" <wanpengli@tencent.com>,
"Jim Mattson" <jmattson@google.com>,
"Joerg Roedel" <joro@8bytes.org>, "Marc Zyngier" <maz@kernel.org>,
"James Morse" <james.morse@arm.com>,
"Julien Thierry" <julien.thierry.kdev@gmail.com>,
"Suzuki K Poulose" <suzuki.poulose@arm.com>,
linux-mips@vger.kernel.org, kvm@vger.kernel.org,
kvm-ppc@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
kvmarm@lists.cs.columbia.edu, linux-kernel@vger.kernel.org,
"Christoffer Dall" <christoffer.dall@arm.com>,
"Peter Xu" <peterx@redhat.com>,
"Philippe Mathieu-Daudé" <f4bug@amsat.org>
Subject: [PATCH v5 08/19] KVM: Refactor error handling for setting memory region
Date: Tue, 21 Jan 2020 22:31:46 +0000 [thread overview]
Message-ID: <20200121223157.15263-9-sean.j.christopherson@intel.com> (raw)
In-Reply-To: <20200121223157.15263-1-sean.j.christopherson@intel.com>
Replace a big pile o' gotos with returns to make it more obvious what
error code is being returned, and to prepare for refactoring the
functional, i.e. post-checks, portion of __kvm_set_memory_region().
Reviewed-by: Janosch Frank <frankja@linux.ibm.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com>
---
virt/kvm/kvm_main.c | 40 ++++++++++++++++++----------------------
1 file changed, 18 insertions(+), 22 deletions(-)
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index 9bc51f062022..fdf045a5d240 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -1004,34 +1004,33 @@ int __kvm_set_memory_region(struct kvm *kvm,
r = check_memory_region_flags(mem);
if (r)
- goto out;
+ return r;
- r = -EINVAL;
as_id = mem->slot >> 16;
id = (u16)mem->slot;
/* General sanity checks */
if (mem->memory_size & (PAGE_SIZE - 1))
- goto out;
+ return -EINVAL;
if (mem->guest_phys_addr & (PAGE_SIZE - 1))
- goto out;
+ return -EINVAL;
/* We can read the guest memory with __xxx_user() later on. */
if ((id < KVM_USER_MEM_SLOTS) &&
((mem->userspace_addr & (PAGE_SIZE - 1)) ||
!access_ok((void __user *)(unsigned long)mem->userspace_addr,
mem->memory_size)))
- goto out;
+ return -EINVAL;
if (as_id >= KVM_ADDRESS_SPACE_NUM || id >= KVM_MEM_SLOTS_NUM)
- goto out;
+ return -EINVAL;
if (mem->guest_phys_addr + mem->memory_size < mem->guest_phys_addr)
- goto out;
+ return -EINVAL;
slot = id_to_memslot(__kvm_memslots(kvm, as_id), id);
base_gfn = mem->guest_phys_addr >> PAGE_SHIFT;
npages = mem->memory_size >> PAGE_SHIFT;
if (npages > KVM_MEM_MAX_NR_PAGES)
- goto out;
+ return -EINVAL;
new = old = *slot;
@@ -1048,20 +1047,18 @@ int __kvm_set_memory_region(struct kvm *kvm,
if ((new.userspace_addr != old.userspace_addr) ||
(npages != old.npages) ||
((new.flags ^ old.flags) & KVM_MEM_READONLY))
- goto out;
+ return -EINVAL;
if (base_gfn != old.base_gfn)
change = KVM_MR_MOVE;
else if (new.flags != old.flags)
change = KVM_MR_FLAGS_ONLY;
- else { /* Nothing to change. */
- r = 0;
- goto out;
- }
+ else /* Nothing to change. */
+ return 0;
}
} else {
if (!old.npages)
- goto out;
+ return -EINVAL;
change = KVM_MR_DELETE;
new.base_gfn = 0;
@@ -1070,29 +1067,29 @@ int __kvm_set_memory_region(struct kvm *kvm,
if ((change = KVM_MR_CREATE) || (change = KVM_MR_MOVE)) {
/* Check for overlaps */
- r = -EEXIST;
kvm_for_each_memslot(slot, __kvm_memslots(kvm, as_id)) {
if (slot->id = id)
continue;
if (!((base_gfn + npages <= slot->base_gfn) ||
(base_gfn >= slot->base_gfn + slot->npages)))
- goto out;
+ return -EEXIST;
}
}
- r = -ENOMEM;
-
/* Allocate/free page dirty bitmap as needed */
if (!(new.flags & KVM_MEM_LOG_DIRTY_PAGES))
new.dirty_bitmap = NULL;
else if (!new.dirty_bitmap) {
- if (kvm_create_dirty_bitmap(&new) < 0)
- goto out;
+ r = kvm_create_dirty_bitmap(&new);
+ if (r)
+ return r;
}
slots = kvzalloc(sizeof(struct kvm_memslots), GFP_KERNEL_ACCOUNT);
- if (!slots)
+ if (!slots) {
+ r = -ENOMEM;
goto out_bitmap;
+ }
memcpy(slots, __kvm_memslots(kvm, as_id), sizeof(struct kvm_memslots));
if ((change = KVM_MR_DELETE) || (change = KVM_MR_MOVE)) {
@@ -1143,7 +1140,6 @@ int __kvm_set_memory_region(struct kvm *kvm,
out_bitmap:
if (new.dirty_bitmap && !old.dirty_bitmap)
kvm_destroy_dirty_bitmap(&new);
-out:
return r;
}
EXPORT_SYMBOL_GPL(__kvm_set_memory_region);
--
2.24.1
WARNING: multiple messages have this Message-ID (diff)
From: Sean Christopherson <sean.j.christopherson@intel.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Wanpeng Li" <wanpengli@tencent.com>,
kvm@vger.kernel.org, "David Hildenbrand" <david@redhat.com>,
linux-mips@vger.kernel.org, "Paul Mackerras" <paulus@ozlabs.org>,
kvmarm@lists.cs.columbia.edu,
"Janosch Frank" <frankja@linux.ibm.com>,
"Marc Zyngier" <maz@kernel.org>, "Joerg Roedel" <joro@8bytes.org>,
"Christian Borntraeger" <borntraeger@de.ibm.com>,
kvm-ppc@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
"Jim Mattson" <jmattson@google.com>,
"Cornelia Huck" <cohuck@redhat.com>,
"Sean Christopherson" <sean.j.christopherson@intel.com>,
linux-kernel@vger.kernel.org,
"Vitaly Kuznetsov" <vkuznets@redhat.com>,
"Philippe Mathieu-Daudé" <f4bug@amsat.org>
Subject: [PATCH v5 08/19] KVM: Refactor error handling for setting memory region
Date: Tue, 21 Jan 2020 14:31:46 -0800 [thread overview]
Message-ID: <20200121223157.15263-9-sean.j.christopherson@intel.com> (raw)
In-Reply-To: <20200121223157.15263-1-sean.j.christopherson@intel.com>
Replace a big pile o' gotos with returns to make it more obvious what
error code is being returned, and to prepare for refactoring the
functional, i.e. post-checks, portion of __kvm_set_memory_region().
Reviewed-by: Janosch Frank <frankja@linux.ibm.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com>
---
virt/kvm/kvm_main.c | 40 ++++++++++++++++++----------------------
1 file changed, 18 insertions(+), 22 deletions(-)
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index 9bc51f062022..fdf045a5d240 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -1004,34 +1004,33 @@ int __kvm_set_memory_region(struct kvm *kvm,
r = check_memory_region_flags(mem);
if (r)
- goto out;
+ return r;
- r = -EINVAL;
as_id = mem->slot >> 16;
id = (u16)mem->slot;
/* General sanity checks */
if (mem->memory_size & (PAGE_SIZE - 1))
- goto out;
+ return -EINVAL;
if (mem->guest_phys_addr & (PAGE_SIZE - 1))
- goto out;
+ return -EINVAL;
/* We can read the guest memory with __xxx_user() later on. */
if ((id < KVM_USER_MEM_SLOTS) &&
((mem->userspace_addr & (PAGE_SIZE - 1)) ||
!access_ok((void __user *)(unsigned long)mem->userspace_addr,
mem->memory_size)))
- goto out;
+ return -EINVAL;
if (as_id >= KVM_ADDRESS_SPACE_NUM || id >= KVM_MEM_SLOTS_NUM)
- goto out;
+ return -EINVAL;
if (mem->guest_phys_addr + mem->memory_size < mem->guest_phys_addr)
- goto out;
+ return -EINVAL;
slot = id_to_memslot(__kvm_memslots(kvm, as_id), id);
base_gfn = mem->guest_phys_addr >> PAGE_SHIFT;
npages = mem->memory_size >> PAGE_SHIFT;
if (npages > KVM_MEM_MAX_NR_PAGES)
- goto out;
+ return -EINVAL;
new = old = *slot;
@@ -1048,20 +1047,18 @@ int __kvm_set_memory_region(struct kvm *kvm,
if ((new.userspace_addr != old.userspace_addr) ||
(npages != old.npages) ||
((new.flags ^ old.flags) & KVM_MEM_READONLY))
- goto out;
+ return -EINVAL;
if (base_gfn != old.base_gfn)
change = KVM_MR_MOVE;
else if (new.flags != old.flags)
change = KVM_MR_FLAGS_ONLY;
- else { /* Nothing to change. */
- r = 0;
- goto out;
- }
+ else /* Nothing to change. */
+ return 0;
}
} else {
if (!old.npages)
- goto out;
+ return -EINVAL;
change = KVM_MR_DELETE;
new.base_gfn = 0;
@@ -1070,29 +1067,29 @@ int __kvm_set_memory_region(struct kvm *kvm,
if ((change == KVM_MR_CREATE) || (change == KVM_MR_MOVE)) {
/* Check for overlaps */
- r = -EEXIST;
kvm_for_each_memslot(slot, __kvm_memslots(kvm, as_id)) {
if (slot->id == id)
continue;
if (!((base_gfn + npages <= slot->base_gfn) ||
(base_gfn >= slot->base_gfn + slot->npages)))
- goto out;
+ return -EEXIST;
}
}
- r = -ENOMEM;
-
/* Allocate/free page dirty bitmap as needed */
if (!(new.flags & KVM_MEM_LOG_DIRTY_PAGES))
new.dirty_bitmap = NULL;
else if (!new.dirty_bitmap) {
- if (kvm_create_dirty_bitmap(&new) < 0)
- goto out;
+ r = kvm_create_dirty_bitmap(&new);
+ if (r)
+ return r;
}
slots = kvzalloc(sizeof(struct kvm_memslots), GFP_KERNEL_ACCOUNT);
- if (!slots)
+ if (!slots) {
+ r = -ENOMEM;
goto out_bitmap;
+ }
memcpy(slots, __kvm_memslots(kvm, as_id), sizeof(struct kvm_memslots));
if ((change == KVM_MR_DELETE) || (change == KVM_MR_MOVE)) {
@@ -1143,7 +1140,6 @@ int __kvm_set_memory_region(struct kvm *kvm,
out_bitmap:
if (new.dirty_bitmap && !old.dirty_bitmap)
kvm_destroy_dirty_bitmap(&new);
-out:
return r;
}
EXPORT_SYMBOL_GPL(__kvm_set_memory_region);
--
2.24.1
_______________________________________________
kvmarm mailing list
kvmarm@lists.cs.columbia.edu
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
WARNING: multiple messages have this Message-ID (diff)
From: Sean Christopherson <sean.j.christopherson@intel.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Paul Mackerras" <paulus@ozlabs.org>,
"Christian Borntraeger" <borntraeger@de.ibm.com>,
"Janosch Frank" <frankja@linux.ibm.com>,
"David Hildenbrand" <david@redhat.com>,
"Cornelia Huck" <cohuck@redhat.com>,
"Sean Christopherson" <sean.j.christopherson@intel.com>,
"Vitaly Kuznetsov" <vkuznets@redhat.com>,
"Wanpeng Li" <wanpengli@tencent.com>,
"Jim Mattson" <jmattson@google.com>,
"Joerg Roedel" <joro@8bytes.org>, "Marc Zyngier" <maz@kernel.org>,
"James Morse" <james.morse@arm.com>,
"Julien Thierry" <julien.thierry.kdev@gmail.com>,
"Suzuki K Poulose" <suzuki.poulose@arm.com>,
linux-mips@vger.kernel.org, kvm@vger.kernel.org,
kvm-ppc@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
kvmarm@lists.cs.columbia.edu, linux-kernel@vger.kernel.org,
"Christoffer Dall" <christoffer.dall@arm.com>,
"Peter Xu" <peterx@redhat.com>,
"Philippe Mathieu-Daudé" <f4bug@amsat.org>
Subject: [PATCH v5 08/19] KVM: Refactor error handling for setting memory region
Date: Tue, 21 Jan 2020 14:31:46 -0800 [thread overview]
Message-ID: <20200121223157.15263-9-sean.j.christopherson@intel.com> (raw)
In-Reply-To: <20200121223157.15263-1-sean.j.christopherson@intel.com>
Replace a big pile o' gotos with returns to make it more obvious what
error code is being returned, and to prepare for refactoring the
functional, i.e. post-checks, portion of __kvm_set_memory_region().
Reviewed-by: Janosch Frank <frankja@linux.ibm.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com>
---
virt/kvm/kvm_main.c | 40 ++++++++++++++++++----------------------
1 file changed, 18 insertions(+), 22 deletions(-)
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index 9bc51f062022..fdf045a5d240 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -1004,34 +1004,33 @@ int __kvm_set_memory_region(struct kvm *kvm,
r = check_memory_region_flags(mem);
if (r)
- goto out;
+ return r;
- r = -EINVAL;
as_id = mem->slot >> 16;
id = (u16)mem->slot;
/* General sanity checks */
if (mem->memory_size & (PAGE_SIZE - 1))
- goto out;
+ return -EINVAL;
if (mem->guest_phys_addr & (PAGE_SIZE - 1))
- goto out;
+ return -EINVAL;
/* We can read the guest memory with __xxx_user() later on. */
if ((id < KVM_USER_MEM_SLOTS) &&
((mem->userspace_addr & (PAGE_SIZE - 1)) ||
!access_ok((void __user *)(unsigned long)mem->userspace_addr,
mem->memory_size)))
- goto out;
+ return -EINVAL;
if (as_id >= KVM_ADDRESS_SPACE_NUM || id >= KVM_MEM_SLOTS_NUM)
- goto out;
+ return -EINVAL;
if (mem->guest_phys_addr + mem->memory_size < mem->guest_phys_addr)
- goto out;
+ return -EINVAL;
slot = id_to_memslot(__kvm_memslots(kvm, as_id), id);
base_gfn = mem->guest_phys_addr >> PAGE_SHIFT;
npages = mem->memory_size >> PAGE_SHIFT;
if (npages > KVM_MEM_MAX_NR_PAGES)
- goto out;
+ return -EINVAL;
new = old = *slot;
@@ -1048,20 +1047,18 @@ int __kvm_set_memory_region(struct kvm *kvm,
if ((new.userspace_addr != old.userspace_addr) ||
(npages != old.npages) ||
((new.flags ^ old.flags) & KVM_MEM_READONLY))
- goto out;
+ return -EINVAL;
if (base_gfn != old.base_gfn)
change = KVM_MR_MOVE;
else if (new.flags != old.flags)
change = KVM_MR_FLAGS_ONLY;
- else { /* Nothing to change. */
- r = 0;
- goto out;
- }
+ else /* Nothing to change. */
+ return 0;
}
} else {
if (!old.npages)
- goto out;
+ return -EINVAL;
change = KVM_MR_DELETE;
new.base_gfn = 0;
@@ -1070,29 +1067,29 @@ int __kvm_set_memory_region(struct kvm *kvm,
if ((change == KVM_MR_CREATE) || (change == KVM_MR_MOVE)) {
/* Check for overlaps */
- r = -EEXIST;
kvm_for_each_memslot(slot, __kvm_memslots(kvm, as_id)) {
if (slot->id == id)
continue;
if (!((base_gfn + npages <= slot->base_gfn) ||
(base_gfn >= slot->base_gfn + slot->npages)))
- goto out;
+ return -EEXIST;
}
}
- r = -ENOMEM;
-
/* Allocate/free page dirty bitmap as needed */
if (!(new.flags & KVM_MEM_LOG_DIRTY_PAGES))
new.dirty_bitmap = NULL;
else if (!new.dirty_bitmap) {
- if (kvm_create_dirty_bitmap(&new) < 0)
- goto out;
+ r = kvm_create_dirty_bitmap(&new);
+ if (r)
+ return r;
}
slots = kvzalloc(sizeof(struct kvm_memslots), GFP_KERNEL_ACCOUNT);
- if (!slots)
+ if (!slots) {
+ r = -ENOMEM;
goto out_bitmap;
+ }
memcpy(slots, __kvm_memslots(kvm, as_id), sizeof(struct kvm_memslots));
if ((change == KVM_MR_DELETE) || (change == KVM_MR_MOVE)) {
@@ -1143,7 +1140,6 @@ int __kvm_set_memory_region(struct kvm *kvm,
out_bitmap:
if (new.dirty_bitmap && !old.dirty_bitmap)
kvm_destroy_dirty_bitmap(&new);
-out:
return r;
}
EXPORT_SYMBOL_GPL(__kvm_set_memory_region);
--
2.24.1
WARNING: multiple messages have this Message-ID (diff)
From: Sean Christopherson <sean.j.christopherson@intel.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Wanpeng Li" <wanpengli@tencent.com>,
kvm@vger.kernel.org, "David Hildenbrand" <david@redhat.com>,
"Peter Xu" <peterx@redhat.com>,
linux-mips@vger.kernel.org, "Paul Mackerras" <paulus@ozlabs.org>,
kvmarm@lists.cs.columbia.edu,
"Janosch Frank" <frankja@linux.ibm.com>,
"Marc Zyngier" <maz@kernel.org>, "Joerg Roedel" <joro@8bytes.org>,
"Christian Borntraeger" <borntraeger@de.ibm.com>,
"Julien Thierry" <julien.thierry.kdev@gmail.com>,
"Suzuki K Poulose" <suzuki.poulose@arm.com>,
kvm-ppc@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
"Jim Mattson" <jmattson@google.com>,
"Cornelia Huck" <cohuck@redhat.com>,
"Christoffer Dall" <christoffer.dall@arm.com>,
"Sean Christopherson" <sean.j.christopherson@intel.com>,
linux-kernel@vger.kernel.org, "James Morse" <james.morse@arm.com>,
"Vitaly Kuznetsov" <vkuznets@redhat.com>,
"Philippe Mathieu-Daudé" <f4bug@amsat.org>
Subject: [PATCH v5 08/19] KVM: Refactor error handling for setting memory region
Date: Tue, 21 Jan 2020 14:31:46 -0800 [thread overview]
Message-ID: <20200121223157.15263-9-sean.j.christopherson@intel.com> (raw)
In-Reply-To: <20200121223157.15263-1-sean.j.christopherson@intel.com>
Replace a big pile o' gotos with returns to make it more obvious what
error code is being returned, and to prepare for refactoring the
functional, i.e. post-checks, portion of __kvm_set_memory_region().
Reviewed-by: Janosch Frank <frankja@linux.ibm.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com>
---
virt/kvm/kvm_main.c | 40 ++++++++++++++++++----------------------
1 file changed, 18 insertions(+), 22 deletions(-)
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index 9bc51f062022..fdf045a5d240 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -1004,34 +1004,33 @@ int __kvm_set_memory_region(struct kvm *kvm,
r = check_memory_region_flags(mem);
if (r)
- goto out;
+ return r;
- r = -EINVAL;
as_id = mem->slot >> 16;
id = (u16)mem->slot;
/* General sanity checks */
if (mem->memory_size & (PAGE_SIZE - 1))
- goto out;
+ return -EINVAL;
if (mem->guest_phys_addr & (PAGE_SIZE - 1))
- goto out;
+ return -EINVAL;
/* We can read the guest memory with __xxx_user() later on. */
if ((id < KVM_USER_MEM_SLOTS) &&
((mem->userspace_addr & (PAGE_SIZE - 1)) ||
!access_ok((void __user *)(unsigned long)mem->userspace_addr,
mem->memory_size)))
- goto out;
+ return -EINVAL;
if (as_id >= KVM_ADDRESS_SPACE_NUM || id >= KVM_MEM_SLOTS_NUM)
- goto out;
+ return -EINVAL;
if (mem->guest_phys_addr + mem->memory_size < mem->guest_phys_addr)
- goto out;
+ return -EINVAL;
slot = id_to_memslot(__kvm_memslots(kvm, as_id), id);
base_gfn = mem->guest_phys_addr >> PAGE_SHIFT;
npages = mem->memory_size >> PAGE_SHIFT;
if (npages > KVM_MEM_MAX_NR_PAGES)
- goto out;
+ return -EINVAL;
new = old = *slot;
@@ -1048,20 +1047,18 @@ int __kvm_set_memory_region(struct kvm *kvm,
if ((new.userspace_addr != old.userspace_addr) ||
(npages != old.npages) ||
((new.flags ^ old.flags) & KVM_MEM_READONLY))
- goto out;
+ return -EINVAL;
if (base_gfn != old.base_gfn)
change = KVM_MR_MOVE;
else if (new.flags != old.flags)
change = KVM_MR_FLAGS_ONLY;
- else { /* Nothing to change. */
- r = 0;
- goto out;
- }
+ else /* Nothing to change. */
+ return 0;
}
} else {
if (!old.npages)
- goto out;
+ return -EINVAL;
change = KVM_MR_DELETE;
new.base_gfn = 0;
@@ -1070,29 +1067,29 @@ int __kvm_set_memory_region(struct kvm *kvm,
if ((change == KVM_MR_CREATE) || (change == KVM_MR_MOVE)) {
/* Check for overlaps */
- r = -EEXIST;
kvm_for_each_memslot(slot, __kvm_memslots(kvm, as_id)) {
if (slot->id == id)
continue;
if (!((base_gfn + npages <= slot->base_gfn) ||
(base_gfn >= slot->base_gfn + slot->npages)))
- goto out;
+ return -EEXIST;
}
}
- r = -ENOMEM;
-
/* Allocate/free page dirty bitmap as needed */
if (!(new.flags & KVM_MEM_LOG_DIRTY_PAGES))
new.dirty_bitmap = NULL;
else if (!new.dirty_bitmap) {
- if (kvm_create_dirty_bitmap(&new) < 0)
- goto out;
+ r = kvm_create_dirty_bitmap(&new);
+ if (r)
+ return r;
}
slots = kvzalloc(sizeof(struct kvm_memslots), GFP_KERNEL_ACCOUNT);
- if (!slots)
+ if (!slots) {
+ r = -ENOMEM;
goto out_bitmap;
+ }
memcpy(slots, __kvm_memslots(kvm, as_id), sizeof(struct kvm_memslots));
if ((change == KVM_MR_DELETE) || (change == KVM_MR_MOVE)) {
@@ -1143,7 +1140,6 @@ int __kvm_set_memory_region(struct kvm *kvm,
out_bitmap:
if (new.dirty_bitmap && !old.dirty_bitmap)
kvm_destroy_dirty_bitmap(&new);
-out:
return r;
}
EXPORT_SYMBOL_GPL(__kvm_set_memory_region);
--
2.24.1
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2020-01-21 22:31 UTC|newest]
Thread overview: 281+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-01-21 22:31 [PATCH v5 00/19] KVM: Dynamically size memslot arrays Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` [PATCH v5 01/19] KVM: x86: Allocate new rmap and large page tracking when moving memslot Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-02-05 21:49 ` Peter Xu
2020-02-05 21:49 ` Peter Xu
2020-02-05 21:49 ` Peter Xu
2020-02-05 21:49 ` Peter Xu
2020-02-05 23:55 ` Sean Christopherson
2020-02-05 23:55 ` Sean Christopherson
2020-02-05 23:55 ` Sean Christopherson
2020-02-05 23:55 ` Sean Christopherson
2020-02-06 2:00 ` Peter Xu
2020-02-06 2:00 ` Peter Xu
2020-02-06 2:00 ` Peter Xu
2020-02-06 2:00 ` Peter Xu
2020-02-06 2:17 ` Sean Christopherson
2020-02-06 2:17 ` Sean Christopherson
2020-02-06 2:17 ` Sean Christopherson
2020-02-06 2:17 ` Sean Christopherson
2020-02-06 2:58 ` Peter Xu
2020-02-06 2:58 ` Peter Xu
2020-02-06 2:58 ` Peter Xu
2020-02-06 2:58 ` Peter Xu
2020-02-06 5:05 ` Sean Christopherson
2020-02-06 5:05 ` Sean Christopherson
2020-02-06 5:05 ` Sean Christopherson
2020-02-06 5:05 ` Sean Christopherson
2020-01-21 22:31 ` [PATCH v5 02/19] KVM: Reinstall old memslots if arch preparation fails Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-02-05 22:08 ` Peter Xu
2020-02-05 22:08 ` Peter Xu
2020-02-05 22:08 ` Peter Xu
2020-02-05 22:08 ` Peter Xu
2020-01-21 22:31 ` [PATCH v5 03/19] KVM: Don't free new memslot if allocation of said memslot fails Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-02-05 22:28 ` Peter Xu
2020-02-05 22:28 ` Peter Xu
2020-02-05 22:28 ` Peter Xu
2020-02-05 22:28 ` Peter Xu
2020-01-21 22:31 ` [PATCH v5 04/19] KVM: PPC: Move memslot memory allocation into prepare_memory_region() Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-02-05 22:41 ` Peter Xu
2020-02-05 22:41 ` Peter Xu
2020-02-05 22:41 ` Peter Xu
2020-02-05 22:41 ` Peter Xu
2020-01-21 22:31 ` [PATCH v5 05/19] KVM: x86: Allocate memslot resources during prepare_memory_region() Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` [PATCH v5 06/19] KVM: Drop kvm_arch_create_memslot() Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-02-05 22:45 ` Peter Xu
2020-02-05 22:45 ` Peter Xu
2020-02-05 22:45 ` Peter Xu
2020-02-05 22:45 ` Peter Xu
2020-01-21 22:31 ` [PATCH v5 07/19] KVM: Explicitly free allocated-but-unused dirty bitmap Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson [this message]
2020-01-21 22:31 ` [PATCH v5 08/19] KVM: Refactor error handling for setting memory region Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-02-05 22:48 ` Peter Xu
2020-02-05 22:48 ` Peter Xu
2020-02-05 22:48 ` Peter Xu
2020-02-05 22:48 ` Peter Xu
2020-01-21 22:31 ` [PATCH v5 09/19] KVM: Move setting of memslot into helper routine Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-02-06 16:26 ` Peter Xu
2020-02-06 16:26 ` Peter Xu
2020-02-06 16:26 ` Peter Xu
2020-02-06 16:26 ` Peter Xu
2020-01-21 22:31 ` [PATCH v5 10/19] KVM: Drop "const" attribute from old memslot in commit_memory_region() Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-02-06 16:26 ` Peter Xu
2020-02-06 16:26 ` Peter Xu
2020-02-06 16:26 ` Peter Xu
2020-02-06 16:26 ` Peter Xu
2020-01-21 22:31 ` [PATCH v5 11/19] KVM: x86: Free arrays for old memslot when moving memslot's base gfn Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` [PATCH v5 12/19] KVM: Move memslot deletion to helper function Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-02-06 16:14 ` Peter Xu
2020-02-06 16:14 ` Peter Xu
2020-02-06 16:14 ` Peter Xu
2020-02-06 16:14 ` Peter Xu
2020-02-06 16:28 ` Sean Christopherson
2020-02-06 16:28 ` Sean Christopherson
2020-02-06 16:28 ` Sean Christopherson
2020-02-06 16:28 ` Sean Christopherson
2020-02-06 16:51 ` Peter Xu
2020-02-06 16:51 ` Peter Xu
2020-02-06 16:51 ` Peter Xu
2020-02-06 16:51 ` Peter Xu
2020-02-07 17:59 ` Sean Christopherson
2020-02-07 17:59 ` Sean Christopherson
2020-02-07 17:59 ` Sean Christopherson
2020-02-07 17:59 ` Sean Christopherson
2020-02-07 18:07 ` Sean Christopherson
2020-02-07 18:07 ` Sean Christopherson
2020-02-07 18:07 ` Sean Christopherson
2020-02-07 18:07 ` Sean Christopherson
2020-02-07 18:17 ` Peter Xu
2020-02-07 18:17 ` Peter Xu
2020-02-07 18:17 ` Peter Xu
2020-02-07 18:17 ` Peter Xu
2020-01-21 22:31 ` [PATCH v5 13/19] KVM: Simplify kvm_free_memslot() and all its descendents Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-02-06 16:29 ` Peter Xu
2020-02-06 16:29 ` Peter Xu
2020-02-06 16:29 ` Peter Xu
2020-02-06 16:29 ` Peter Xu
2020-01-21 22:31 ` [PATCH v5 14/19] KVM: Clean up local variable usage in __kvm_set_memory_region() Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-02-06 19:06 ` Peter Xu
2020-02-06 19:06 ` Peter Xu
2020-02-06 19:06 ` Peter Xu
2020-02-06 19:06 ` Peter Xu
2020-02-06 19:22 ` Sean Christopherson
2020-02-06 19:22 ` Sean Christopherson
2020-02-06 19:22 ` Sean Christopherson
2020-02-06 19:22 ` Sean Christopherson
2020-02-06 19:36 ` Peter Xu
2020-02-06 19:36 ` Peter Xu
2020-02-06 19:36 ` Peter Xu
2020-02-06 19:36 ` Peter Xu
2020-01-21 22:31 ` [PATCH v5 15/19] KVM: Provide common implementation for generic dirty log functions Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-02-06 20:02 ` Peter Xu
2020-02-06 20:02 ` Peter Xu
2020-02-06 20:02 ` Peter Xu
2020-02-06 20:02 ` Peter Xu
2020-02-06 21:21 ` Sean Christopherson
2020-02-06 21:21 ` Sean Christopherson
2020-02-06 21:21 ` Sean Christopherson
2020-02-06 21:21 ` Sean Christopherson
2020-02-06 21:41 ` Peter Xu
2020-02-06 21:41 ` Peter Xu
2020-02-06 21:41 ` Peter Xu
2020-02-06 21:41 ` Peter Xu
2020-02-07 19:45 ` Sean Christopherson
2020-02-07 19:45 ` Sean Christopherson
2020-02-07 19:45 ` Sean Christopherson
2020-02-07 19:45 ` Sean Christopherson
2020-02-08 0:18 ` Peter Xu
2020-02-08 0:18 ` Peter Xu
2020-02-08 0:18 ` Peter Xu
2020-02-08 0:18 ` Peter Xu
2020-02-08 0:42 ` Sean Christopherson
2020-02-08 0:42 ` Sean Christopherson
2020-02-08 0:42 ` Sean Christopherson
2020-02-08 0:42 ` Sean Christopherson
2020-02-08 0:53 ` Peter Xu
2020-02-08 0:53 ` Peter Xu
2020-02-08 0:53 ` Peter Xu
2020-02-08 0:53 ` Peter Xu
2020-02-08 1:29 ` Sean Christopherson
2020-02-08 1:29 ` Sean Christopherson
2020-02-08 1:29 ` Sean Christopherson
2020-02-08 1:29 ` Sean Christopherson
2020-02-17 15:39 ` Vitaly Kuznetsov
2020-02-17 15:39 ` Vitaly Kuznetsov
2020-02-17 15:39 ` Vitaly Kuznetsov
2020-02-17 15:39 ` Vitaly Kuznetsov
2020-02-18 17:10 ` Sean Christopherson
2020-02-18 17:10 ` Sean Christopherson
2020-02-18 17:10 ` Sean Christopherson
2020-02-18 17:10 ` Sean Christopherson
2020-02-17 15:35 ` Vitaly Kuznetsov
2020-02-17 15:35 ` Vitaly Kuznetsov
2020-02-17 15:35 ` Vitaly Kuznetsov
2020-02-17 15:35 ` Vitaly Kuznetsov
2020-02-06 21:24 ` Peter Xu
2020-02-06 21:24 ` Peter Xu
2020-02-06 21:24 ` Peter Xu
2020-02-06 21:24 ` Peter Xu
2020-01-21 22:31 ` [PATCH v5 16/19] KVM: Ensure validity of memslot with respect to kvm_get_dirty_log() Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` [PATCH v5 17/19] KVM: Terminate memslot walks via used_slots Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-02-06 21:09 ` Peter Xu
2020-02-06 21:09 ` Peter Xu
2020-02-06 21:09 ` Peter Xu
2020-02-06 21:09 ` Peter Xu
2020-02-07 18:33 ` Sean Christopherson
2020-02-07 18:33 ` Sean Christopherson
2020-02-07 18:33 ` Sean Christopherson
2020-02-07 18:33 ` Sean Christopherson
2020-02-07 20:39 ` Peter Xu
2020-02-07 20:39 ` Peter Xu
2020-02-07 20:39 ` Peter Xu
2020-02-07 20:39 ` Peter Xu
2020-02-07 21:10 ` Sean Christopherson
2020-02-07 21:10 ` Sean Christopherson
2020-02-07 21:10 ` Sean Christopherson
2020-02-07 21:10 ` Sean Christopherson
2020-02-07 21:46 ` Peter Xu
2020-02-07 21:46 ` Peter Xu
2020-02-07 21:46 ` Peter Xu
2020-02-07 21:46 ` Peter Xu
2020-02-07 22:03 ` Sean Christopherson
2020-02-07 22:03 ` Sean Christopherson
2020-02-07 22:03 ` Sean Christopherson
2020-02-07 22:03 ` Sean Christopherson
2020-02-07 22:24 ` Peter Xu
2020-02-07 22:24 ` Peter Xu
2020-02-07 22:24 ` Peter Xu
2020-02-07 22:24 ` Peter Xu
2020-01-21 22:31 ` [PATCH v5 18/19] KVM: Dynamically size memslot array based on number of used slots Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-02-06 22:12 ` Peter Xu
2020-02-06 22:12 ` Peter Xu
2020-02-06 22:12 ` Peter Xu
2020-02-06 22:12 ` Peter Xu
2020-02-07 15:38 ` Sean Christopherson
2020-02-07 15:38 ` Sean Christopherson
2020-02-07 15:38 ` Sean Christopherson
2020-02-07 15:38 ` Sean Christopherson
2020-02-07 16:05 ` Peter Xu
2020-02-07 16:05 ` Peter Xu
2020-02-07 16:05 ` Peter Xu
2020-02-07 16:05 ` Peter Xu
2020-02-07 16:09 ` Peter Xu
2020-02-07 16:15 ` Sean Christopherson
2020-02-07 16:15 ` Sean Christopherson
2020-02-07 16:15 ` Sean Christopherson
2020-02-07 16:15 ` Sean Christopherson
2020-02-07 16:37 ` Peter Xu
2020-02-07 16:37 ` Peter Xu
2020-02-07 16:37 ` Peter Xu
2020-02-07 16:37 ` Peter Xu
2020-02-07 16:47 ` Sean Christopherson
2020-02-07 16:47 ` Sean Christopherson
2020-02-07 16:47 ` Sean Christopherson
2020-02-07 16:47 ` Sean Christopherson
2020-01-21 22:31 ` [PATCH v5 19/19] KVM: selftests: Add test for KVM_SET_USER_MEMORY_REGION Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-01-21 22:31 ` Sean Christopherson
2020-02-06 22:30 ` Peter Xu
2020-02-06 22:30 ` Peter Xu
2020-02-06 22:30 ` Peter Xu
2020-02-06 22:30 ` Peter Xu
2020-02-06 23:11 ` Sean Christopherson
2020-02-06 23:11 ` Sean Christopherson
2020-02-06 23:11 ` Sean Christopherson
2020-02-06 23:11 ` Sean Christopherson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200121223157.15263-9-sean.j.christopherson@intel.com \
--to=sean.j.christopherson@intel.com \
--cc=borntraeger@de.ibm.com \
--cc=christoffer.dall@arm.com \
--cc=cohuck@redhat.com \
--cc=david@redhat.com \
--cc=f4bug@amsat.org \
--cc=frankja@linux.ibm.com \
--cc=james.morse@arm.com \
--cc=jmattson@google.com \
--cc=joro@8bytes.org \
--cc=julien.thierry.kdev@gmail.com \
--cc=kvm-ppc@vger.kernel.org \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.cs.columbia.edu \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mips@vger.kernel.org \
--cc=maz@kernel.org \
--cc=paulus@ozlabs.org \
--cc=pbonzini@redhat.com \
--cc=peterx@redhat.com \
--cc=suzuki.poulose@arm.com \
--cc=vkuznets@redhat.com \
--cc=wanpengli@tencent.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.