You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by ag...@apache.org on 2020/05/05 17:56:40 UTC

[incubator-nuttx] 01/04: libs/libc/tls/Kconfig: Add CONFIG_TLS_ALIGNED

This is an automated email from the ASF dual-hosted git repository.

aguettouche pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git

commit b1071cca0043a2c81e1bb032660560c53df888d5
Author: Gregory Nutt <gn...@nuttx.org>
AuthorDate: Tue May 5 07:28:04 2020 -0600

    libs/libc/tls/Kconfig:  Add CONFIG_TLS_ALIGNED
    
    CONFIG_TLS_ALIGNED will select the (legacy) aligned stack implementation of TLS.  If CONFIG_TLS_ALIGNED is not defined, then the new, implementation of TLS using an unaligned stack will be enabled.
---
 libs/libc/tls/Kconfig | 32 ++++++++++++++++++++++++++------
 1 file changed, 26 insertions(+), 6 deletions(-)

diff --git a/libs/libc/tls/Kconfig b/libs/libc/tls/Kconfig
index 8cc17fc..55d0050 100644
--- a/libs/libc/tls/Kconfig
+++ b/libs/libc/tls/Kconfig
@@ -21,17 +21,37 @@ config TLS
 
 if TLS
 
-config TLS_LOG2_MAXSTACK
-	int "Maximum stack size (log2)"
-	default 13
-	range 11 24
+config TLS_ALIGNED
+	bool "Require stack alignment"
+	default y if BUILD_KERNEL
+	default n if !BUILD_KERNEL
 	---help---
-		Stack based TLS works by fetch thread information from the beginning
+		Aligned TLS works by fetch thread information from the beginning
 		of the stack memory allocation.  In order to do this, the memory
 		must be aligned in such a way that the executing logic can simply
-		masking the current stack pointer to get the beginning of the stack
+		mask the current stack pointer to get the beginning of the stack
 		allocation.
 
+		The advantage of using an aligned stack is no OS interface need
+		be called to get the beginning of the stack.  It is simply and
+		AND operation on the current stack pointer.  The disadvantages
+		are that the alignment (1) causes memory fragmentation which
+		be a serious problem for memory limited systems, and (2) limits
+		the maximum size of the stack.  Any mask places a limit on the
+		maximum size of the stack; stack sizes about that would map to
+		an incorrect address.
+
+		In general, CONFIG_TLS_ALIGNED is preferred for the KERNEL
+		build where the virtualized stack address an be aligned with
+		no implications to physical memory.  In other builds, the
+		unaligned stack implementation is usually superior.
+
+config TLS_LOG2_MAXSTACK
+	int "Maximum stack size (log2)"
+	default 13
+	range 11 24
+	depends on TLS_ALIGNED
+	---help---
 		This setting specifies the alignment of the stack as a power of 2:
 		11=2KB, 12=4KB, 13=8KB, etc.  The exact alignment is not so critical
 		except that (1) a very large value can cause you to run out of