davids5 commented on a change in pull request #3517:
URL: https://github.com/apache/incubator-nuttx/pull/3517#discussion_r612735629



##########
File path: arch/arm/src/common/arm_usestack.c
##########
@@ -127,37 +117,17 @@ int up_use_stack(struct tcb_s *tcb, void *stack, size_t 
stack_size)
   /* Save the new stack allocation */
 
   tcb->stack_alloc_ptr = stack;
-
-  /* Align stack top */
-
-  tcb->adj_stack_ptr =
-      (FAR void *)STACK_ALIGN_DOWN((uintptr_t)stack + stack_size);
-
-  /* Offset by tls_size */
-
-  stack = (FAR void *)((uintptr_t)stack + tls_size);
-
-  /* Is there enough room for at least TLS ? */
-
-  if ((uintptr_t)stack > (uintptr_t)tcb->adj_stack_ptr)
-    {
-      return -ENOMEM;
-    }
-
-  tcb->adj_stack_size = (uintptr_t)tcb->adj_stack_ptr - (uintptr_t)stack;
-
-  /* Initialize the TLS data structure */
-
-  memset(tcb->stack_alloc_ptr, 0, tls_size);
+  tcb->adj_stack_ptr   = tcb->stack_alloc_ptr;
+  tcb->adj_stack_size  =
+      STACK_ALIGN_DOWN((uintptr_t)stack + stack_size) - (uintptr_t)stack;

Review comment:
       Yes. My head is stuck in the days were the alloc pointer was not 
aligned. (it was also freed if not 0) Now it is aligned on allocation. So that 
is one change not in the same place that added to my not understanding it. 
   
   Am I understanding the sizing correctly: If I have 300 byte stack it will 
now be either much larger with CONFIG_TLS_ALIGNED lit or it will be smaller by 
the sizeof(tls) and args? Before this change it looked (CONFIG_TLS_ALIGNED not 
lit) like 300+sizeof(tls) which I got what I asked for and the OS got what it 
needed. Is that still the case? 
   
   Also it is correct that if I ask for an 11K stack it may get truncated by 3K 
without warning if the TLS_MAXSTACK (log and friends) ends up at 8K?
   
   

##########
File path: arch/arm/src/common/arm_usestack.c
##########
@@ -127,37 +117,17 @@ int up_use_stack(struct tcb_s *tcb, void *stack, size_t 
stack_size)
   /* Save the new stack allocation */
 
   tcb->stack_alloc_ptr = stack;
-
-  /* Align stack top */
-
-  tcb->adj_stack_ptr =
-      (FAR void *)STACK_ALIGN_DOWN((uintptr_t)stack + stack_size);
-
-  /* Offset by tls_size */
-
-  stack = (FAR void *)((uintptr_t)stack + tls_size);
-
-  /* Is there enough room for at least TLS ? */
-
-  if ((uintptr_t)stack > (uintptr_t)tcb->adj_stack_ptr)
-    {
-      return -ENOMEM;
-    }
-
-  tcb->adj_stack_size = (uintptr_t)tcb->adj_stack_ptr - (uintptr_t)stack;
-
-  /* Initialize the TLS data structure */
-
-  memset(tcb->stack_alloc_ptr, 0, tls_size);
+  tcb->adj_stack_ptr   = tcb->stack_alloc_ptr;
+  tcb->adj_stack_size  =
+      STACK_ALIGN_DOWN((uintptr_t)stack + stack_size) - (uintptr_t)stack;

Review comment:
       Yes. My head is stuck in the days were the alloc pointer was not 
aligned. (it was also freed if not 0) Now it is aligned on allocation. So that 
is one change not in the same place that added to my not understanding it. 
   
   Am I understanding the sizing correctly: If I have 300 byte stack it will 
now be either much larger with CONFIG_TLS_ALIGNED lit or it will be smaller by 
the sizeof(tls) and args? Before this change it looked (CONFIG_TLS_ALIGNED not 
lit) like 300+sizeof(tls) which I got what I asked for and the OS got what it 
needed. Is that still the case? 
   
   Also is it correct that if I ask for an 11K stack it may get truncated by 3K 
without warning if the TLS_MAXSTACK (log and friends) ends up at 8K?
   
   




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


Reply via email to