Commit 73da08f6 authored by Michael Ellerman's avatar Michael Ellerman

selftests/powerpc: Remove powerpc special cases from stack expansion test

Now that the powerpc code behaves the same as other architectures we
can drop the special cases we had.
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20200724092528.1578671-5-mpe@ellerman.id.au
parent 773b3e53
...@@ -56,13 +56,7 @@ int consume_stack(unsigned long target_sp, unsigned long stack_high, int delta, ...@@ -56,13 +56,7 @@ int consume_stack(unsigned long target_sp, unsigned long stack_high, int delta,
#else #else
asm volatile ("mov %%rsp, %[sp]" : [sp] "=r" (stack_top_sp)); asm volatile ("mov %%rsp, %[sp]" : [sp] "=r" (stack_top_sp));
#endif #endif
target = stack_high - delta + 1;
// Kludge, delta < 0 indicates relative to SP
if (delta < 0)
target = stack_top_sp + delta;
else
target = stack_high - delta + 1;
volatile char *p = (char *)target; volatile char *p = (char *)target;
if (type == STORE) if (type == STORE)
...@@ -162,41 +156,16 @@ static int test_one(unsigned int stack_used, int delta, enum access_type type) ...@@ -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) 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 // 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); assert(test_one(DEFAULT_SIZE, rlim_cur, type) == 0);
#endif
// But if we go past the rlimit it should fail // But if we go past the rlimit it should fail
assert(test_one(DEFAULT_SIZE, rlim_cur + 1, type) != 0); 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) static int test(void)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment