From 7aeb981c2f13e829554a244d7ea7de0861f2dbfa Mon Sep 17 00:00:00 2001 From: Peter Harper Date: Mon, 7 Oct 2024 11:28:44 +0100 Subject: [PATCH 1/2] Test for best_effort_wfe_or_timeout sev issue best_effort_wfe_or_timeout should not ignore an outstanding sev See https://github.com/raspberrypi/pico-sdk/issues/1812 --- test/pico_time_test/pico_time_test.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/test/pico_time_test/pico_time_test.c b/test/pico_time_test/pico_time_test.c index 818c14b23..a50a880d0 100644 --- a/test/pico_time_test/pico_time_test.c +++ b/test/pico_time_test/pico_time_test.c @@ -72,6 +72,7 @@ static bool repeating_timer_callback(struct repeating_timer *t) { #endif int issue_195_test(void); +int issue_1812_test(void); int main() { setup_default_uart(); @@ -227,6 +228,8 @@ int main() { return -1; } + issue_1812_test(); + PICOTEST_END_TEST(); } @@ -255,3 +258,16 @@ int issue_195_test(void) { return 0; } +// Setting an alarm should not swallow a sev +int issue_1812_test(void) { + PICOTEST_START_SECTION("Issue #1812 defect - Setting an alarm should not ignore a sev"); + + __sev(); // Make sure the call below does not ignore this + absolute_time_t before = get_absolute_time(); + bool result = best_effort_wfe_or_timeout(make_timeout_time_ms(1000)); + int64_t diff = absolute_time_diff_us(before, get_absolute_time()); + PICOTEST_CHECK(diff < 250 && !result, "sev ignored by best_effort_wfe_or_timeout") + + PICOTEST_END_SECTION(); + return 0; +} From f10dd45ddbc765414f95dd800502967f4dc51181 Mon Sep 17 00:00:00 2001 From: Peter Harper Date: Mon, 7 Oct 2024 11:50:27 +0100 Subject: [PATCH 2/2] Test for alarm being set in the past issue See https://github.com/raspberrypi/pico-sdk/issues/1953 --- test/pico_time_test/pico_time_test.c | 58 +++++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 2 deletions(-) diff --git a/test/pico_time_test/pico_time_test.c b/test/pico_time_test/pico_time_test.c index a50a880d0..362187ddb 100644 --- a/test/pico_time_test/pico_time_test.c +++ b/test/pico_time_test/pico_time_test.c @@ -73,6 +73,7 @@ static bool repeating_timer_callback(struct repeating_timer *t) { int issue_195_test(void); int issue_1812_test(void); +int issue_1953_test(void); int main() { setup_default_uart(); @@ -193,13 +194,19 @@ int main() { PICOTEST_END_SECTION(); + PICOTEST_START_SECTION("Repeating timertest"); for(uint i=0;i= 6us (PICO_TIME_SLEEP_OVERHEAD_ADJUST_US) + absolute_time_t timeout = make_timeout_time_ms(3000); + while(absolute_time_diff_us(get_absolute_time(), timeout) > 0) { + sleep_us(5); + } + uint callbacks = 0; for(uint i=0;i