On 02/13/2018 05:23 PM, David Hildenbrand wrote: > Copied from x86/sieve.c. Modifications: > - proper code formatting. > - as setup_vm() is already called, temporarily disable DAT. > > The test takes fairly long, especially because we only have 128MB of ram > and allocate 3 times in a row ~100mb of virtual memory. Does it make sense to change the memory size in the unittests.cfg file? e.g. via extra_params? > > Signed-off-by: David Hildenbrand <david@xxxxxxxxxx> > --- > s390x/Makefile | 1 + > s390x/sieve.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++ > s390x/unittests.cfg | 6 ++++++ > 3 files changed, 66 insertions(+) > create mode 100644 s390x/sieve.c > > diff --git a/s390x/Makefile b/s390x/Makefile > index d9bef37..2d3336c 100644 > --- a/s390x/Makefile > +++ b/s390x/Makefile > @@ -1,6 +1,7 @@ > tests = $(TEST_DIR)/selftest.elf > tests += $(TEST_DIR)/intercept.elf > tests += $(TEST_DIR)/emulator.elf > +tests += $(TEST_DIR)/sieve.elf > > all: directories test_cases > > diff --git a/s390x/sieve.c b/s390x/sieve.c > new file mode 100644 > index 0000000..28d4d1e > --- /dev/null > +++ b/s390x/sieve.c > @@ -0,0 +1,59 @@ > +/* > + * Copied from x86/sieve.c > + */ > + > +#include <libcflat.h> > +#include <alloc.h> > +#include <asm/pgtable.h> > + > +int sieve(char* data, int size) > +{ > + int i, j, r = 0; > + > + for (i = 0; i < size; ++i) > + data[i] = 1; > + > + data[0] = data[1] = 0; > + > + for (i = 2; i < size; ++i) > + if (data[i]) { > + ++r; > + for (j = i * 2; j < size; j += i) > + data[j] = 0; > + } > + return r; > +} > + > +void test_sieve(const char *msg, char *data, int size) > +{ > + int r; > + > + printf("%s:", msg); > + r = sieve(data, size); > + printf("%d out of %d\n", r, size); > +} > + > +#define STATIC_SIZE 1000000 > +#define VSIZE 100000000 > +char static_data[STATIC_SIZE]; > + > +int main() > +{ > + void *v; > + int i; > + > + printf("starting sieve\n"); > + > + configure_dat(0); > + test_sieve("static", static_data, STATIC_SIZE); > + configure_dat(1); > + > + test_sieve("mapped", static_data, STATIC_SIZE); > + for (i = 0; i < 3; ++i) { > + v = malloc(VSIZE); > + test_sieve("virtual", v, VSIZE); > + free(v); > + } > + > + return 0; > +} > diff --git a/s390x/unittests.cfg b/s390x/unittests.cfg > index 1343a19..4a1e469 100644 > --- a/s390x/unittests.cfg > +++ b/s390x/unittests.cfg > @@ -28,3 +28,9 @@ file = intercept.elf > > [emulator] > file = emulator.elf > + > +[sieve] > +file = sieve.elf > +groups = selftest > +# can take fairly long even on KVM guests > +timeout = 600 >