From 3d1ec3f45194ddae19ddefc856f6a0f10560bddf Mon Sep 17 00:00:00 2001 From: michael Date: Sun, 20 Oct 2019 13:23:47 +0800 Subject: [PATCH] intr_alloc: fix the issue intr_enable/disable cannot be used in ISR in esp32s2beta. This issue is reported in config freertos_compliance_s2. --- components/esp32/intr_alloc.c | 2 +- components/esp32s2beta/intr_alloc.c | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/components/esp32/intr_alloc.c b/components/esp32/intr_alloc.c index 168bab30d..67f68f8d0 100644 --- a/components/esp32/intr_alloc.c +++ b/components/esp32/intr_alloc.c @@ -858,7 +858,7 @@ esp_err_t IRAM_ATTR esp_intr_disable(intr_handle_t handle) } else { //Disable using per-cpu regs if (handle->vector_desc->cpu!=xPortGetCoreID()) { - portEXIT_CRITICAL(&spinlock); + portEXIT_CRITICAL_SAFE(&spinlock); return ESP_ERR_INVALID_ARG; //Can only enable these ints on this cpu } ESP_INTR_DISABLE(handle->vector_desc->intno); diff --git a/components/esp32s2beta/intr_alloc.c b/components/esp32s2beta/intr_alloc.c index 534e4cb0b..ce13d7b9b 100644 --- a/components/esp32s2beta/intr_alloc.c +++ b/components/esp32s2beta/intr_alloc.c @@ -780,7 +780,7 @@ int esp_intr_get_cpu(intr_handle_t handle) esp_err_t IRAM_ATTR esp_intr_enable(intr_handle_t handle) { if (!handle) return ESP_ERR_INVALID_ARG; - portENTER_CRITICAL(&spinlock); + portENTER_CRITICAL_SAFE(&spinlock); int source; if (handle->shared_vector_desc) { handle->shared_vector_desc->disabled=0; @@ -796,14 +796,14 @@ esp_err_t IRAM_ATTR esp_intr_enable(intr_handle_t handle) if (handle->vector_desc->cpu!=xPortGetCoreID()) return ESP_ERR_INVALID_ARG; //Can only enable these ints on this cpu ESP_INTR_ENABLE(handle->vector_desc->intno); } - portEXIT_CRITICAL(&spinlock); + portEXIT_CRITICAL_SAFE(&spinlock); return ESP_OK; } esp_err_t IRAM_ATTR esp_intr_disable(intr_handle_t handle) { if (!handle) return ESP_ERR_INVALID_ARG; - portENTER_CRITICAL(&spinlock); + portENTER_CRITICAL_SAFE(&spinlock); int source; bool disabled = 1; if (handle->shared_vector_desc) { @@ -831,12 +831,12 @@ esp_err_t IRAM_ATTR esp_intr_disable(intr_handle_t handle) } else { //Disable using per-cpu regs if (handle->vector_desc->cpu!=xPortGetCoreID()) { - portEXIT_CRITICAL(&spinlock); + portEXIT_CRITICAL_SAFE(&spinlock); return ESP_ERR_INVALID_ARG; //Can only enable these ints on this cpu } ESP_INTR_DISABLE(handle->vector_desc->intno); } - portEXIT_CRITICAL(&spinlock); + portEXIT_CRITICAL_SAFE(&spinlock); return ESP_OK; }