From b6aed5c505e69f6200cdf9d3c1c549d47c126849 Mon Sep 17 00:00:00 2001 From: Chris Friedt Date: Fri, 4 Oct 2024 18:21:49 -0400 Subject: [PATCH] kernel: dynamic: use 4k stack size for x86 x86 architectures require a dynamic stack size that is a multiple of 4096 bytes due to mmu restrictions. For example, this test would previously fail when using the default dynamic stack size of 1024 bytes for 32-bit platforms. ``` west build -p auto -b qemu_x86/atom/nopae -t run \ tests/posix/common/ -- -DCONFIG_USERSPACE=y ``` It would pass with an additional argument ``` west build -p auto -b qemu_x86/atom/nopae -t run \ tests/posix/common/ -- -DCONFIG_USERSPACE=y \ -DCONFIG_DYNAMIC_THREAD_STACK_SIZE=4096 ``` Add a special default for x86 when using dynamic thread stacks. The x86 default removes the need for `boards/qemu_x86*.conf`, with the exception of `qemu_x86_tiny`. qemu_x86_tiny did not have sufficient memory (or configuration) to run the non-userspace tests, so bump up the available ram from 256k to 512k for this test and clone the .conf from the demand paging tests. Eventually, the common posix test should be split into more concise functional categories. Signed-off-by: Chris Friedt --- kernel/Kconfig | 5 +++-- tests/posix/common/boards/qemu_x86.conf | 1 - tests/posix/common/boards/qemu_x86_64.conf | 1 - tests/posix/common/boards/qemu_x86_tiny.conf | 16 ++++++++++++++++ tests/posix/common/boards/qemu_x86_tiny.overlay | 11 +++++++++++ 5 files changed, 30 insertions(+), 4 deletions(-) delete mode 100644 tests/posix/common/boards/qemu_x86.conf delete mode 100644 tests/posix/common/boards/qemu_x86_64.conf create mode 100644 tests/posix/common/boards/qemu_x86_tiny.conf create mode 100644 tests/posix/common/boards/qemu_x86_tiny.overlay diff --git a/kernel/Kconfig b/kernel/Kconfig index 54e0ccf1f2d8..0553161eca1e 100644 --- a/kernel/Kconfig +++ b/kernel/Kconfig @@ -245,8 +245,9 @@ if DYNAMIC_THREAD config DYNAMIC_THREAD_STACK_SIZE int "Size of each pre-allocated thread stack" - default 1024 if !64BIT - default 2048 if 64BIT + default 4096 if X86 + default 1024 if !X86 && !64BIT + default 2048 if !X86 && 64BIT help Default stack size (in bytes) for dynamic threads. diff --git a/tests/posix/common/boards/qemu_x86.conf b/tests/posix/common/boards/qemu_x86.conf deleted file mode 100644 index 2fa43926ee48..000000000000 --- a/tests/posix/common/boards/qemu_x86.conf +++ /dev/null @@ -1 +0,0 @@ -CONFIG_DYNAMIC_THREAD_STACK_SIZE=4096 diff --git a/tests/posix/common/boards/qemu_x86_64.conf b/tests/posix/common/boards/qemu_x86_64.conf deleted file mode 100644 index 2fa43926ee48..000000000000 --- a/tests/posix/common/boards/qemu_x86_64.conf +++ /dev/null @@ -1 +0,0 @@ -CONFIG_DYNAMIC_THREAD_STACK_SIZE=4096 diff --git a/tests/posix/common/boards/qemu_x86_tiny.conf b/tests/posix/common/boards/qemu_x86_tiny.conf new file mode 100644 index 000000000000..01506ce9f553 --- /dev/null +++ b/tests/posix/common/boards/qemu_x86_tiny.conf @@ -0,0 +1,16 @@ +# Copyright (c) 2021 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +# The test is highly sensitive to size of kernel image. +# However, specifying how many pages used by +# the backing store must be done in build time. +# So here we are, tuning this manually. +CONFIG_BACKING_STORE_RAM_PAGES=12 + +# The following is needed so that .text and following +# sections are present in physical memory to test +# using backing store for anonymous memory. +CONFIG_KERNEL_VM_BASE=0x0 +CONFIG_LINKER_GENERIC_SECTIONS_PRESENT_AT_BOOT=y +CONFIG_BACKING_STORE_RAM=y +CONFIG_BACKING_STORE_QEMU_X86_TINY_FLASH=n diff --git a/tests/posix/common/boards/qemu_x86_tiny.overlay b/tests/posix/common/boards/qemu_x86_tiny.overlay new file mode 100644 index 000000000000..f717f3ff7edc --- /dev/null +++ b/tests/posix/common/boards/qemu_x86_tiny.overlay @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2024, Tenstorrent AI ULC + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/ { + dram0: memory@0 { + reg = <0x100000 0x80000>; + }; +};