From b1c3ee27894d33d9fcfca4ea4d0ccfb6d4cfc83e Mon Sep 17 00:00:00 2001 From: Uros Majstorovic Date: Fri, 16 Mar 2018 14:15:39 +0100 Subject: fixed race conditions --- code/fe310/eos/event.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'code/fe310/eos/event.c') diff --git a/code/fe310/eos/event.c b/code/fe310/eos/event.c index a1cf591..127e45a 100644 --- a/code/fe310/eos/event.c +++ b/code/fe310/eos/event.c @@ -26,11 +26,16 @@ void eos_evtq_init(void) { } int eos_evtq_push(unsigned char cmd, unsigned char *buffer, uint16_t len) { - return eos_msgq_push(&_eos_event_q, cmd, buffer, len); + clear_csr(mstatus, MSTATUS_MIE); + int ret = eos_msgq_push(&_eos_event_q, cmd, buffer, len); + set_csr(mstatus, MSTATUS_MIE); + return ret; } void eos_evtq_pop(unsigned char *cmd, unsigned char **buffer, uint16_t *len) { + clear_csr(mstatus, MSTATUS_MIE); eos_msgq_pop(&_eos_event_q, cmd, buffer, len); + set_csr(mstatus, MSTATUS_MIE); } void eos_evtq_bad_handler(unsigned char cmd, unsigned char *buffer, uint16_t len) { @@ -71,7 +76,7 @@ void eos_evtq_loop(void) { while(foo) { clear_csr(mstatus, MSTATUS_MIE); - eos_evtq_pop(&cmd, &buffer, &len); + eos_msgq_pop(&_eos_event_q, &cmd, &buffer, &len); if (cmd) { set_csr(mstatus, MSTATUS_MIE); eos_evtq_handle(cmd, buffer, len); -- cgit v1.2.3