From 8acedc61d1333a597730bc658abd58406210175f Mon Sep 17 00:00:00 2001 From: Lucas Tamborrino Date: Fri, 19 May 2023 16:07:29 -0300 Subject: [PATCH] drivers: flash: esp32xx: use K_NO_WAIT when in ISR Avoid timeout when taking semaphores in ISR. This enables flash operations inside interrupted context such as exceptions, allowing operations like saving core dump to flash for instance. Signed-off-by: Lucas Tamborrino --- drivers/flash/flash_esp32.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/flash/flash_esp32.c b/drivers/flash/flash_esp32.c index e2919258294..a7c13b332cb 100644 --- a/drivers/flash/flash_esp32.c +++ b/drivers/flash/flash_esp32.c @@ -57,6 +57,8 @@ #include LOG_MODULE_REGISTER(flash_esp32, CONFIG_FLASH_LOG_LEVEL); +#define FLASH_SEM_TIMEOUT (k_is_in_isr() ? K_NO_WAIT : K_FOREVER) + struct flash_esp32_dev_config { spi_dev_t *controller; }; @@ -77,7 +79,7 @@ static inline void flash_esp32_sem_take(const struct device *dev) { struct flash_esp32_dev_data *data = dev->data; - k_sem_take(&data->sem, K_FOREVER); + k_sem_take(&data->sem, FLASH_SEM_TIMEOUT); } static inline void flash_esp32_sem_give(const struct device *dev)