sterlinghughes closed pull request #888: kernel/os: Make sure correct stack 
aligment 
URL: https://github.com/apache/mynewt-core/pull/888
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/kernel/os/include/os/os_task.h b/kernel/os/include/os/os_task.h
index da517ef05..cbbd357f0 100644
--- a/kernel/os/include/os/os_task.h
+++ b/kernel/os/include/os/os_task.h
@@ -36,6 +36,10 @@
 extern "C" {
 #endif
 
+#define OS_TASK_STACK_DEFINE(__name, __size) \
+    static os_stack_t __name [OS_STACK_ALIGN(__size)] \
+        __attribute__((aligned(OS_STACK_ALIGNMENT)));
+
 /** Highest priority task */
 #define OS_TASK_PRI_HIGHEST (0)
 /** Lowest priority task */
diff --git a/kernel/os/src/os.c b/kernel/os/src/os.c
index 438694f80..3f32bd9ea 100644
--- a/kernel/os/src/os.c
+++ b/kernel/os/src/os.c
@@ -40,12 +40,12 @@
  */
 
 struct os_task g_idle_task;
-os_stack_t g_idle_task_stack[OS_STACK_ALIGN(OS_IDLE_STACK_SIZE)];
+OS_TASK_STACK_DEFINE(g_idle_task_stack, OS_IDLE_STACK_SIZE);
 
 uint32_t g_os_idle_ctr;
 
 static struct os_task os_main_task;
-static os_stack_t os_main_stack[OS_STACK_ALIGN(OS_MAIN_STACK_SIZE)];
+OS_TASK_STACK_DEFINE(os_main_stack, OS_MAIN_STACK_SIZE);
 
 /* Default zero.  Set by the architecture specific code when os is started.
  */
diff --git a/net/nimble/controller/src/ble_ll.c 
b/net/nimble/controller/src/ble_ll.c
index 23d8d78de..a1775c176 100644
--- a/net/nimble/controller/src/ble_ll.c
+++ b/net/nimble/controller/src/ble_ll.c
@@ -217,7 +217,8 @@ static void ble_ll_event_dbuf_overflow(struct os_event *ev);
 #endif
 
 struct os_task g_ble_ll_task;
-os_stack_t g_ble_ll_stack[BLE_LL_STACK_SIZE];
+
+OS_TASK_STACK_DEFINE(g_ble_ll_stack, BLE_LL_STACK_SIZE);
 
 /** Our global device address (public) */
 uint8_t g_dev_addr[BLE_DEV_ADDR_LEN];
diff --git a/net/nimble/host/mesh/src/adv.c b/net/nimble/host/mesh/src/adv.c
index 3dce81c9e..f75dcb499 100644
--- a/net/nimble/host/mesh/src/adv.c
+++ b/net/nimble/host/mesh/src/adv.c
@@ -45,6 +45,7 @@ static s32_t adv_int_min =  ADV_INT_DEFAULT_MS;
  * an increased call stack whenever it's used.
  */
 #define ADV_STACK_SIZE 768
+OS_TASK_STACK_DEFINE(g_blemesh_stack, ADV_STACK_SIZE);
 
 struct os_task adv_task;
 static struct os_eventq adv_queue;
@@ -294,12 +295,8 @@ static void bt_mesh_scan_cb(const bt_addr_le_t *addr, s8_t 
rssi,
 
 void bt_mesh_adv_init(void)
 {
-       os_stack_t *pstack;
        int rc;
 
-       pstack = malloc(sizeof(os_stack_t) * ADV_STACK_SIZE);
-       assert(pstack);
-
        rc = os_mempool_init(&adv_buf_mempool, 
MYNEWT_VAL(BLE_MESH_ADV_BUF_COUNT),
                             BT_MESH_ADV_DATA_SIZE + BT_MESH_MBUF_HEADER_SIZE,
                             adv_buf_mem, "adv_buf_pool");
@@ -313,8 +310,8 @@ void bt_mesh_adv_init(void)
        os_eventq_init(&adv_queue);
 
        os_task_init(&adv_task, "mesh_adv", adv_thread, NULL,
-                    MYNEWT_VAL(BLE_MESH_ADV_TASK_PRIO), OS_WAIT_FOREVER, 
pstack,
-                    ADV_STACK_SIZE);
+                    MYNEWT_VAL(BLE_MESH_ADV_TASK_PRIO), OS_WAIT_FOREVER,
+                    g_blemesh_stack, ADV_STACK_SIZE);
 
        /* For BT5 controllers we can have fast advertising interval */
        if (ble_hs_hci_get_hci_version() >= BLE_HCI_VER_BCS_5_0) {
diff --git a/net/nimble/host/mesh/src/shell.c b/net/nimble/host/mesh/src/shell.c
index 668ec38cb..8a5cb38b6 100644
--- a/net/nimble/host/mesh/src/shell.c
+++ b/net/nimble/host/mesh/src/shell.c
@@ -36,6 +36,8 @@
 #define BLE_MESH_SHELL_TASK_PRIO 126
 #define BLE_MESH_SHELL_STACK_SIZE 768
 
+OS_TASK_STACK_DEFINE(g_blemesh_shell_stack, BLE_MESH_SHELL_STACK_SIZE);
+
 struct os_task mesh_shell_task;
 static struct os_eventq mesh_shell_queue;
 
@@ -2249,13 +2251,10 @@ static void mesh_shell_thread(void *args)
 
 static void bt_mesh_shell_task_init(void)
 {
-       os_stack_t *pstack;
-
-       pstack = malloc(sizeof(os_stack_t) * BLE_MESH_SHELL_STACK_SIZE);
        os_eventq_init(&mesh_shell_queue);
 
        os_task_init(&mesh_shell_task, "mesh_sh", mesh_shell_thread, NULL,
-                    BLE_MESH_SHELL_TASK_PRIO, OS_WAIT_FOREVER, pstack,
+                    BLE_MESH_SHELL_TASK_PRIO, OS_WAIT_FOREVER, 
g_blemesh_shell_stack,
                     BLE_MESH_SHELL_STACK_SIZE);
 }
 #endif


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

Reply via email to