Skip to content

Commit 38e0ca9

Browse files
author
Memfault Inc
committed
Memfault Firmware SDK 1.3.1 (Build 3608)
1 parent 60712aa commit 38e0ca9

File tree

5 files changed

+33
-12
lines changed

5 files changed

+33
-12
lines changed

CHANGES.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
# Memfault Firmware SDK Changelog
22

3+
## 1.3.1 - Sept 21, 2023
4+
5+
### :chart_with_upwards_trend: Improvements
6+
7+
- Zephyr:
8+
- Add a new Kconfig, `CONFIG_MEMFAULT_COREDUMP_COMPUTE_THREAD_STACK_USAGE`, to
9+
control whether thread stack usage is computed and collected on device
10+
during a coredump.
11+
312
## 1.3.0 - Sept 20, 2023
413

514
### :chart_with_upwards_trend: Improvements

VERSION

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
BUILD ID: 3558
2-
GIT COMMIT: 597c76e06
3-
VERSION: 1.3.0
1+
BUILD ID: 3608
2+
GIT COMMIT: 4124d24ad
3+
VERSION: 1.3.1

components/include/memfault/version.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ typedef struct {
1919
uint8_t patch;
2020
} sMfltSdkVersion;
2121

22-
#define MEMFAULT_SDK_VERSION { .major = 1, .minor = 3, .patch = 0 }
23-
#define MEMFAULT_SDK_VERSION_STR "1.3.0"
22+
#define MEMFAULT_SDK_VERSION { .major = 1, .minor = 3, .patch = 1 }
23+
#define MEMFAULT_SDK_VERSION_STR "1.3.1"
2424

2525
#ifdef __cplusplus
2626
}

ports/zephyr/Kconfig

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,13 @@ config MEMFAULT_COREDUMP_COLLECT_TASKS_REGIONS
101101
When enabled, Zephyr thread stacks will be captured as part of the
102102
coredump. Disabling this will disable non-active-thread backtrace.
103103

104+
config MEMFAULT_COREDUMP_COMPUTE_THREAD_STACK_USAGE
105+
bool "Compute thread stack usage on device"
106+
default y
107+
depends on THREAD_STACK_INFO && !STACK_GROWS_UP && INIT_STACKS
108+
help
109+
Adds thread stack usage computed during fault handling into a coredump.
110+
104111
config MEMFAULT_HEAP_STATS
105112
bool "Collect system heap stats with coredumps"
106113
default y

ports/zephyr/common/memfault_zephyr_ram_regions.c

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,12 @@ static struct k_thread *s_task_tcbs[CONFIG_MEMFAULT_COREDUMP_MAX_TRACKED_TASKS];
2929
"Only full-descending stacks are supported by this implementation. Please contact [email protected]."
3030
#endif
3131

32+
#if defined(CONFIG_MEMFAULT_COREDUMP_COMPUTE_THREAD_STACK_USAGE)
3233
static struct MfltTaskWatermarks {
3334
uint32_t high_watermark;
3435
} s_task_watermarks[CONFIG_MEMFAULT_COREDUMP_MAX_TRACKED_TASKS];
36+
#endif // defined(CONFIG_MEMFAULT_COMPUTE_STACK_HIGHWATER_ON_DEVICE)
37+
3538
#endif
3639

3740
#define EMPTY_SLOT 0
@@ -105,6 +108,7 @@ size_t memfault_platform_sanitize_address_range(void *start_addr, size_t desired
105108
return 0;
106109
}
107110

111+
#if defined(CONFIG_MEMFAULT_COREDUMP_COMPUTE_THREAD_STACK_USAGE)
108112
//! Compute the high watermark of a task's stack. This is the amount of stack
109113
//! that has been written to since the task was created.
110114
static ssize_t prv_stack_bytes_unused(uintptr_t stack_start, size_t stack_size) {
@@ -119,14 +123,15 @@ static ssize_t prv_stack_bytes_unused(uintptr_t stack_start, size_t stack_size)
119123
// looking for the first address that contains something other than the stack
120124
// painting pattern, 0xAA.
121125
const uint8_t *stack_max = (const uint8_t *)stack_start;
122-
const uint8_t * const stack_bottom = (const uint8_t * const)(stack_start + stack_size);
126+
const uint8_t *const stack_bottom = (const uint8_t *const)(stack_start + stack_size);
123127

124128
for (; (stack_max < stack_bottom) && (*stack_max == 0xAA); stack_max++) {
125129
}
126130

127131
// return the "bytes unused" count for the stack
128132
return (uintptr_t)stack_max - stack_start;
129133
}
134+
#endif // defined(CONFIG_MEMFAULT_COREDUMP_COMPUTE_THREAD_STACK_USAGE)
130135

131136
size_t memfault_zephyr_get_task_regions(sMfltCoredumpRegion *regions, size_t num_regions) {
132137
if (regions == NULL || num_regions == 0) {
@@ -174,10 +179,10 @@ size_t memfault_zephyr_get_task_regions(sMfltCoredumpRegion *regions, size_t num
174179
// when collecting partial stacks, thread context is only valid when task
175180
// is _not_ running so we skip collecting it. just update the watermark
176181
// for the thread
177-
#if CONFIG_THREAD_STACK_INFO
182+
#if defined(CONFIG_MEMFAULT_COREDUMP_COMPUTE_THREAD_STACK_USAGE)
178183
s_task_watermarks[i].high_watermark =
179184
prv_stack_bytes_unused(thread->stack_info.start, thread->stack_info.size);
180-
#endif
185+
#endif // defined(CONFIG_MEMFAULT_COREDUMP_COMPUTE_THREAD_STACK_USAGE)
181186
continue;
182187
}
183188
#endif
@@ -207,21 +212,21 @@ size_t memfault_zephyr_get_task_regions(sMfltCoredumpRegion *regions, size_t num
207212
continue;
208213
}
209214

210-
#if defined(CONFIG_THREAD_STACK_INFO)
215+
#if defined(CONFIG_MEMFAULT_COREDUMP_COMPUTE_THREAD_STACK_USAGE)
211216
// compute high watermarks for each task
212217
s_task_watermarks[i].high_watermark =
213218
prv_stack_bytes_unused(thread->stack_info.start, thread->stack_info.size);
214-
#endif
219+
#endif // defined(CONFIG_MEMFAULT_COREDUMP_COMPUTE_THREAD_STACK_USAGE)
215220

216221
regions[region_idx] = MEMFAULT_COREDUMP_MEMORY_REGION_INIT(sp, stack_size_to_collect);
217222
region_idx++;
218223
}
219224

220-
#if defined(CONFIG_THREAD_STACK_INFO)
225+
#if defined(CONFIG_MEMFAULT_COREDUMP_COMPUTE_THREAD_STACK_USAGE)
221226
regions[region_idx] =
222227
MEMFAULT_COREDUMP_MEMORY_REGION_INIT(s_task_watermarks, sizeof(s_task_watermarks));
223228
region_idx++;
224-
#endif
229+
#endif // defined(CONFIG_MEMFAULT_COREDUMP_COMPUTE_THREAD_STACK_USAGE)
225230

226231
regions[region_idx] = MEMFAULT_COREDUMP_MEMORY_REGION_INIT(s_task_tcbs, sizeof(s_task_tcbs));
227232
region_idx++;

0 commit comments

Comments
 (0)