@@ -51,19 +51,19 @@ static struct k_spinlock lists_lock; /* kobj dlist */
51
51
static struct k_spinlock objfree_lock ; /* k_object_free */
52
52
53
53
#ifdef CONFIG_GEN_PRIV_STACKS
54
- /* On ARM & ARC MPU we may have two different alignment requirement
54
+ /* On ARM & ARC MPU & RISC-V PMP we may have two different alignment requirement
55
55
* when dynamically allocating thread stacks, one for the privileged
56
56
* stack and other for the user stack, so we need to account the
57
57
* worst alignment scenario and reserve space for that.
58
58
*/
59
- #if defined(CONFIG_ARM_MPU ) || defined(CONFIG_ARC_MPU )
59
+ #if defined(CONFIG_ARM_MPU ) || defined(CONFIG_ARC_MPU ) || defined( CONFIG_RISCV_PMP )
60
60
#define STACK_ELEMENT_DATA_SIZE (size ) \
61
61
(sizeof(struct z_stack_data) + CONFIG_PRIVILEGED_STACK_SIZE + \
62
62
Z_THREAD_STACK_OBJ_ALIGN(size) + K_THREAD_STACK_LEN(size))
63
63
#else
64
64
#define STACK_ELEMENT_DATA_SIZE (size ) (sizeof(struct z_stack_data) + \
65
65
K_THREAD_STACK_LEN(size))
66
- #endif /* CONFIG_ARM_MPU || CONFIG_ARC_MPU */
66
+ #endif /* CONFIG_ARM_MPU || CONFIG_ARC_MPU || CONFIG_RISCV_PMP */
67
67
#else
68
68
#define STACK_ELEMENT_DATA_SIZE (size ) K_THREAD_STACK_LEN(size)
69
69
#endif /* CONFIG_GEN_PRIV_STACKS */
@@ -150,13 +150,13 @@ uint8_t *z_priv_stack_find(k_thread_stack_t *stack)
150
150
#endif /* ARCH_DYNAMIC_OBJ_K_THREAD_ALIGNMENT */
151
151
152
152
#ifdef CONFIG_DYNAMIC_THREAD_STACK_SIZE
153
- #ifndef CONFIG_MPU_STACK_GUARD
153
+ #if defined( CONFIG_MPU_STACK_GUARD ) || defined( CONFIG_PMP_STACK_GUARD )
154
154
#define DYN_OBJ_DATA_ALIGN_K_THREAD_STACK \
155
- Z_THREAD_STACK_OBJ_ALIGN(CONFIG_PRIVILEGED_STACK_SIZE )
155
+ Z_THREAD_STACK_OBJ_ALIGN(CONFIG_DYNAMIC_THREAD_STACK_SIZE )
156
156
#else
157
157
#define DYN_OBJ_DATA_ALIGN_K_THREAD_STACK \
158
- Z_THREAD_STACK_OBJ_ALIGN(CONFIG_DYNAMIC_THREAD_STACK_SIZE )
159
- #endif /* ! CONFIG_MPU_STACK_GUARD */
158
+ Z_THREAD_STACK_OBJ_ALIGN(CONFIG_PRIVILEGED_STACK_SIZE )
159
+ #endif /* CONFIG_MPU_STACK_GUARD || CONFIG_PMP_STACK_GUARD */
160
160
#else
161
161
#define DYN_OBJ_DATA_ALIGN_K_THREAD_STACK \
162
162
Z_THREAD_STACK_OBJ_ALIGN(ARCH_STACK_PTR_ALIGN)
@@ -349,13 +349,13 @@ static struct k_object *dynamic_object_create(enum k_objects otype, size_t align
349
349
stack_data -> priv = (uint8_t * )dyn -> data ;
350
350
stack_data -> size = adjusted_size ;
351
351
dyn -> kobj .data .stack_data = stack_data ;
352
- #if defined(CONFIG_ARM_MPU ) || defined(CONFIG_ARC_MPU )
352
+ #if defined(CONFIG_ARM_MPU ) || defined(CONFIG_ARC_MPU ) || defined( CONFIG_RISCV_PMP )
353
353
dyn -> kobj .name = (void * )ROUND_UP (
354
354
((uint8_t * )dyn -> data + CONFIG_PRIVILEGED_STACK_SIZE ),
355
355
Z_THREAD_STACK_OBJ_ALIGN (size ));
356
356
#else
357
357
dyn -> kobj .name = dyn -> data ;
358
- #endif /* CONFIG_ARM_MPU || CONFIG_ARC_MPU */
358
+ #endif /* CONFIG_ARM_MPU || CONFIG_ARC_MPU || CONFIG_RISCV_PMP */
359
359
#else
360
360
dyn -> kobj .name = dyn -> data ;
361
361
dyn -> kobj .data .stack_size = adjusted_size ;
0 commit comments