KVM: selftests: Add memory size parameter to the demand paging test
Add an argument to allow the demand paging test to work on larger and smaller guest sizes. Signed-off-by: Ben Gardon <bgardon@google.com> [Rewrote parse_size() to simplify and provide user more flexibility as to how sizes are input. Also fixed size overflow assert.] Signed-off-by: Andrew Jones <drjones@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:

committed by
Paolo Bonzini

parent
0119cb365c
commit
af99e1ad7e
51
tools/testing/selftests/kvm/lib/test_util.c
Normal file
51
tools/testing/selftests/kvm/lib/test_util.c
Normal file
@@ -0,0 +1,51 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* tools/testing/selftests/kvm/lib/test_util.c
|
||||
*
|
||||
* Copyright (C) 2020, Google LLC.
|
||||
*/
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
#include <limits.h>
|
||||
#include "test_util.h"
|
||||
|
||||
/*
|
||||
* Parses "[0-9]+[kmgt]?".
|
||||
*/
|
||||
size_t parse_size(const char *size)
|
||||
{
|
||||
size_t base;
|
||||
char *scale;
|
||||
int shift = 0;
|
||||
|
||||
TEST_ASSERT(size && isdigit(size[0]), "Need at least one digit in '%s'", size);
|
||||
|
||||
base = strtoull(size, &scale, 0);
|
||||
|
||||
TEST_ASSERT(base != ULLONG_MAX, "Overflow parsing size!");
|
||||
|
||||
switch (tolower(*scale)) {
|
||||
case 't':
|
||||
shift = 40;
|
||||
break;
|
||||
case 'g':
|
||||
shift = 30;
|
||||
break;
|
||||
case 'm':
|
||||
shift = 20;
|
||||
break;
|
||||
case 'k':
|
||||
shift = 10;
|
||||
break;
|
||||
case 'b':
|
||||
case '\0':
|
||||
shift = 0;
|
||||
break;
|
||||
default:
|
||||
TEST_ASSERT(false, "Unknown size letter %c", *scale);
|
||||
}
|
||||
|
||||
TEST_ASSERT((base << shift) >> shift == base, "Overflow scaling size!");
|
||||
|
||||
return base << shift;
|
||||
}
|
Reference in New Issue
Block a user