diff mbox series

[03/14] KVM: selftests: Fix divide-by-zero bug in memslot_perf_test

Message ID 20221213001653.3852042-4-seanjc@google.com (mailing list archive)
State RFC
Headers show
Series KVM: selftests: Clang fixes, Makefile cleanup | expand

Checks

Context Check Description
conchuod/tree_selection fail Guessing tree name failed

Commit Message

Sean Christopherson Dec. 13, 2022, 12:16 a.m. UTC
Check that the number of pages per slot is non-zero in get_max_slots()
prior to computing the remaining number of pages.  clang generates code
that uses an actual DIV for calculating the remaining, which causes a #DE
if the total number of pages is less than the number of slots.

  traps: memslot_perf_te[97611] trap divide error ip:4030c4 sp:7ffd18ae58f0
         error:0 in memslot_perf_test[401000+cb000]

Fixes: a69170c65acd ("KVM: selftests: memslot_perf_test: Report optimal memory slots")
Signed-off-by: Sean Christopherson <seanjc@google.com>
---
 tools/testing/selftests/kvm/memslot_perf_test.c | 3 +++
 1 file changed, 3 insertions(+)

Comments

Philippe Mathieu-Daudé Dec. 13, 2022, 9:46 a.m. UTC | #1
On 13/12/22 01:16, Sean Christopherson wrote:
> Check that the number of pages per slot is non-zero in get_max_slots()
> prior to computing the remaining number of pages.  clang generates code
> that uses an actual DIV for calculating the remaining, which causes a #DE
> if the total number of pages is less than the number of slots.
> 
>    traps: memslot_perf_te[97611] trap divide error ip:4030c4 sp:7ffd18ae58f0
>           error:0 in memslot_perf_test[401000+cb000]
> 
> Fixes: a69170c65acd ("KVM: selftests: memslot_perf_test: Report optimal memory slots")
> Signed-off-by: Sean Christopherson <seanjc@google.com>
> ---
>   tools/testing/selftests/kvm/memslot_perf_test.c | 3 +++
>   1 file changed, 3 insertions(+)

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
diff mbox series

Patch

diff --git a/tools/testing/selftests/kvm/memslot_perf_test.c b/tools/testing/selftests/kvm/memslot_perf_test.c
index e698306bf49d..e6587e193490 100644
--- a/tools/testing/selftests/kvm/memslot_perf_test.c
+++ b/tools/testing/selftests/kvm/memslot_perf_test.c
@@ -265,6 +265,9 @@  static uint64_t get_max_slots(struct vm_data *data, uint32_t host_page_size)
 	slots = data->nslots;
 	while (--slots > 1) {
 		pages_per_slot = mempages / slots;
+		if (!pages_per_slot)
+			continue;
+
 		rempages = mempages % pages_per_slot;
 		if (check_slot_pages(host_page_size, guest_page_size,
 				     pages_per_slot, rempages))