From 4a9dc8c8e865c5e2ccda0859f2b309cb334b42f6 Mon Sep 17 00:00:00 2001 From: Extrems Date: Mon, 8 Apr 2024 13:13:12 -0400 Subject: [PATCH] - Move unlock outside of coroutine. --- cube/patches/bba/bba.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/cube/patches/bba/bba.c b/cube/patches/bba/bba.c index 773519d2..9dfbbce1 100644 --- a/cube/patches/bba/bba.c +++ b/cube/patches/bba/bba.c @@ -161,7 +161,7 @@ void bba_ins(uint16_t reg, void *val, uint32_t len) _bba.locked = false; if (!setjmp(_bba.entry)) - longjmp(_bba.exit, 1); + longjmp(_bba.exit, 2); _bba.locked = true; exi_deselect(); @@ -184,7 +184,7 @@ void bba_outs(uint16_t reg, const void *val, uint32_t len) _bba.locked = false; if (!setjmp(_bba.entry)) - longjmp(_bba.exit, 1); + longjmp(_bba.exit, 2); _bba.locked = true; exi_deselect(); @@ -247,8 +247,14 @@ static void bba_interrupt(void) static void exi_callback() { - if (!setjmp(_bba.exit)) - longjmp(_bba.entry, 1); + switch (setjmp(_bba.exit)) { + case 0: + longjmp(_bba.entry, 1); + break; + case 1: + EXIUnlock(EXI_CHANNEL_0); + break; + } } static void exi_coroutine() @@ -275,11 +281,12 @@ static void exi_coroutine() mask_interrupts(OS_INTERRUPTMASK_EXI_0_TC); _bba.locked = false; - EXIUnlock(EXI_CHANNEL_0); + if (!setjmp(_bba.entry)) + longjmp(_bba.exit, 1); + } else { + if (!setjmp(_bba.entry)) + longjmp(_bba.exit, 2); } - - if (!setjmp(_bba.entry)) - longjmp(_bba.exit, 1); } static void exi_interrupt_handler(OSInterrupt interrupt, OSContext *context)