OSDN Git Service

selftests/powerpc: Remove powerpc special cases from stack expansion test
authorMichael Ellerman <mpe@ellerman.id.au>
Fri, 24 Jul 2020 09:25:28 +0000 (19:25 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Wed, 29 Jul 2020 11:02:12 +0000 (21:02 +1000)
Now that the powerpc code behaves the same as other architectures we
can drop the special cases we had.

Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20200724092528.1578671-5-mpe@ellerman.id.au
tools/testing/selftests/powerpc/mm/stack_expansion_ldst.c

index 8dbfb51..ed91439 100644 (file)
@@ -56,13 +56,7 @@ int consume_stack(unsigned long target_sp, unsigned long stack_high, int delta,
 #else
                asm volatile ("mov %%rsp, %[sp]" : [sp] "=r" (stack_top_sp));
 #endif
-
-               // Kludge, delta < 0 indicates relative to SP
-               if (delta < 0)
-                       target = stack_top_sp + delta;
-               else
-                       target = stack_high - delta + 1;
-
+               target = stack_high - delta + 1;
                volatile char *p = (char *)target;
 
                if (type == STORE)
@@ -162,41 +156,16 @@ static int test_one(unsigned int stack_used, int delta, enum access_type type)
 
 static void test_one_type(enum access_type type, unsigned long page_size, unsigned long rlim_cur)
 {
-       assert(test_one(DEFAULT_SIZE, 512 * _KB, type) == 0);
+       unsigned long delta;
 
-       // powerpc has a special case to allow up to 1MB
-       assert(test_one(DEFAULT_SIZE, 1 * _MB, type) == 0);
-
-#ifdef __powerpc__
-       // This fails on powerpc because it's > 1MB and is not a stdu &
-       // not close to r1
-       assert(test_one(DEFAULT_SIZE, 1 * _MB + 8, type) != 0);
-#else
-       assert(test_one(DEFAULT_SIZE, 1 * _MB + 8, type) == 0);
-#endif
-
-#ifdef __powerpc__
-       // Accessing way past the stack pointer is not allowed on powerpc
-       assert(test_one(DEFAULT_SIZE, rlim_cur, type) != 0);
-#else
        // We should be able to access anywhere within the rlimit
+       for (delta = page_size; delta <= rlim_cur; delta += page_size)
+               assert(test_one(DEFAULT_SIZE, delta, type) == 0);
+
        assert(test_one(DEFAULT_SIZE, rlim_cur, type) == 0);
-#endif
 
        // But if we go past the rlimit it should fail
        assert(test_one(DEFAULT_SIZE, rlim_cur + 1, type) != 0);
-
-       // Above 1MB powerpc only allows accesses within 4224 bytes of
-       // r1 for accesses that aren't stdu
-       assert(test_one(1 * _MB + page_size - 128, -4224, type) == 0);
-#ifdef __powerpc__
-       assert(test_one(1 * _MB + page_size - 128, -4225, type) != 0);
-#else
-       assert(test_one(1 * _MB + page_size - 128, -4225, type) == 0);
-#endif
-
-       // By consuming 2MB of stack we test the stdu case
-       assert(test_one(2 * _MB + page_size - 128, -4224, type) == 0);
 }
 
 static int test(void)