This is an automated email from the ASF dual-hosted git repository.

jerpelea pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit ec83d9a3a7f964f219cc4350e1987af7c9b4af66
Author: Javier Alonso <[email protected]>
AuthorDate: Fri Jul 24 14:10:53 2026 +0200

    Review: Address @raiden00pl comments
    
    The fix was ported from the STM32G0 to all the STM32 platforms,
    as the code is mostly the same hence presents the same failure
    
    Signed-off-by: Javier Alonso <[email protected]>
---
 arch/arm/src/common/stm32/stm32_exti_gpio_m3m4_v1v2.c | 11 +++++++++++
 arch/arm/src/stm32f7/stm32_exti_gpio.c                | 11 +++++++++++
 arch/arm/src/stm32h7/stm32_exti_gpio.c                | 11 +++++++++++
 arch/arm/src/stm32l4/stm32l4_exti_gpio.c              | 11 +++++++++++
 arch/arm/src/stm32l5/stm32l5_exti_gpio.c              | 11 +++++++++++
 arch/arm/src/stm32u5/stm32_exti_gpio.c                | 11 +++++++++++
 arch/arm/src/stm32wb/stm32wb_exti_gpio.c              | 11 +++++++++++
 arch/arm/src/stm32wl5/stm32wl5_exti_gpio.c            | 11 +++++++++++
 8 files changed, 88 insertions(+)

diff --git a/arch/arm/src/common/stm32/stm32_exti_gpio_m3m4_v1v2.c 
b/arch/arm/src/common/stm32/stm32_exti_gpio_m3m4_v1v2.c
index db62fac13f6..f278016ce51 100644
--- a/arch/arm/src/common/stm32/stm32_exti_gpio_m3m4_v1v2.c
+++ b/arch/arm/src/common/stm32/stm32_exti_gpio_m3m4_v1v2.c
@@ -259,6 +259,7 @@ int stm32_gpiosetevent(uint32_t pinset, bool risingedge, 
bool fallingedge,
   xcpt_t   handler;
   int      nshared;
   int      i;
+  int      ret;
 
   /* Select the interrupt handler for this EXTI pin */
 
@@ -333,6 +334,16 @@ int stm32_gpiosetevent(uint32_t pinset, bool risingedge, 
bool fallingedge,
 
       if (i == nshared)
         {
+          /* remove any leftover callback */
+
+          ret = irq_detach(irq);
+          if (ret < 0)
+            {
+              return ret;
+            }
+
+          /* disable the interrupt */
+
           up_disable_irq(irq);
         }
     }
diff --git a/arch/arm/src/stm32f7/stm32_exti_gpio.c 
b/arch/arm/src/stm32f7/stm32_exti_gpio.c
index 4081d9cba24..057b905abd2 100644
--- a/arch/arm/src/stm32f7/stm32_exti_gpio.c
+++ b/arch/arm/src/stm32f7/stm32_exti_gpio.c
@@ -266,6 +266,7 @@ int stm32_gpiosetevent(uint32_t pinset, bool risingedge, 
bool fallingedge,
   xcpt_t   handler;
   int      nshared;
   int      i;
+  int      ret;
 
   /* Select the interrupt handler for this EXTI pin */
 
@@ -340,6 +341,16 @@ int stm32_gpiosetevent(uint32_t pinset, bool risingedge, 
bool fallingedge,
 
       if (i == nshared)
         {
+          /* remove any leftover callback */
+
+          ret = irq_detach(irq);
+          if (ret < 0)
+            {
+              return ret;
+            }
+
+          /* disable the interrupt */
+
           up_disable_irq(irq);
         }
     }
diff --git a/arch/arm/src/stm32h7/stm32_exti_gpio.c 
b/arch/arm/src/stm32h7/stm32_exti_gpio.c
index 74c8e812fc4..07af8666db3 100644
--- a/arch/arm/src/stm32h7/stm32_exti_gpio.c
+++ b/arch/arm/src/stm32h7/stm32_exti_gpio.c
@@ -268,6 +268,7 @@ int stm32_gpiosetevent(uint32_t pinset, bool risingedge, 
bool fallingedge,
   xcpt_t   handler;
   int      nshared;
   int      i;
+  int      ret;
 
   /* Select the interrupt handler for this EXTI pin */
 
@@ -342,6 +343,16 @@ int stm32_gpiosetevent(uint32_t pinset, bool risingedge, 
bool fallingedge,
 
       if (i == nshared)
         {
+          /* remove any leftover callback */
+
+          ret = irq_detach(irq);
+          if (ret < 0)
+            {
+              return ret;
+            }
+
+          /* disable the interrupt */
+
           up_disable_irq(irq);
         }
     }
diff --git a/arch/arm/src/stm32l4/stm32l4_exti_gpio.c 
b/arch/arm/src/stm32l4/stm32l4_exti_gpio.c
index 1418d7c75d6..8a5ef06e0d2 100644
--- a/arch/arm/src/stm32l4/stm32l4_exti_gpio.c
+++ b/arch/arm/src/stm32l4/stm32l4_exti_gpio.c
@@ -262,6 +262,7 @@ int stm32_gpiosetevent(uint32_t pinset, bool risingedge, 
bool fallingedge,
   xcpt_t   handler;
   int      nshared;
   int      i;
+  int      ret;
 
   /* Select the interrupt handler for this EXTI pin */
 
@@ -336,6 +337,16 @@ int stm32_gpiosetevent(uint32_t pinset, bool risingedge, 
bool fallingedge,
 
       if (i == nshared)
         {
+          /* remove any leftover callback */
+
+          ret = irq_detach(irq);
+          if (ret < 0)
+            {
+              return ret;
+            }
+
+          /* disable the interrupt */
+
           up_disable_irq(irq);
         }
     }
diff --git a/arch/arm/src/stm32l5/stm32l5_exti_gpio.c 
b/arch/arm/src/stm32l5/stm32l5_exti_gpio.c
index 10e1099e0ec..0077576be74 100644
--- a/arch/arm/src/stm32l5/stm32l5_exti_gpio.c
+++ b/arch/arm/src/stm32l5/stm32l5_exti_gpio.c
@@ -126,6 +126,7 @@ int stm32_gpiosetevent(uint32_t pinset, bool risingedge, 
bool fallingedge,
   uint32_t pin = pinset & GPIO_PIN_MASK;
   uint32_t exti = 1 << pin;
   int      irq = STM32_IRQ_EXTI0 + pin;
+  int      ret;
 
   g_gpio_handlers[pin].callback = func;
   g_gpio_handlers[pin].arg      = arg;
@@ -139,6 +140,16 @@ int stm32_gpiosetevent(uint32_t pinset, bool risingedge, 
bool fallingedge,
     }
   else
     {
+      /* remove any leftover callback */
+
+      ret = irq_detach(irq);
+      if (ret < 0)
+        {
+          return ret;
+        }
+
+      /* disable the interrupt */
+
       up_disable_irq(irq);
     }
 
diff --git a/arch/arm/src/stm32u5/stm32_exti_gpio.c 
b/arch/arm/src/stm32u5/stm32_exti_gpio.c
index 03865acd4c2..d9bc149f552 100644
--- a/arch/arm/src/stm32u5/stm32_exti_gpio.c
+++ b/arch/arm/src/stm32u5/stm32_exti_gpio.c
@@ -126,6 +126,7 @@ int stm32_gpiosetevent(uint32_t pinset, bool risingedge, 
bool fallingedge,
   uint32_t pin = pinset & GPIO_PIN_MASK;
   uint32_t exti = 1 << pin;
   int      irq = STM32_IRQ_EXTI0 + pin;
+  int      ret;
 
   g_gpio_handlers[pin].callback = func;
   g_gpio_handlers[pin].arg      = arg;
@@ -139,6 +140,16 @@ int stm32_gpiosetevent(uint32_t pinset, bool risingedge, 
bool fallingedge,
     }
   else
     {
+      /* remove any leftover callback */
+
+      ret = irq_detach(irq);
+      if (ret < 0)
+        {
+          return ret;
+        }
+
+      /* disable the interrupt */
+
       up_disable_irq(irq);
     }
 
diff --git a/arch/arm/src/stm32wb/stm32wb_exti_gpio.c 
b/arch/arm/src/stm32wb/stm32wb_exti_gpio.c
index 6e6597b60ca..138bb52404c 100644
--- a/arch/arm/src/stm32wb/stm32wb_exti_gpio.c
+++ b/arch/arm/src/stm32wb/stm32wb_exti_gpio.c
@@ -260,6 +260,7 @@ int stm32_gpiosetevent(uint32_t pinset, bool risingedge, 
bool fallingedge,
   xcpt_t   handler;
   int      nshared;
   int      i;
+  int      ret;
 
   /* Select the interrupt handler for this EXTI pin */
 
@@ -334,6 +335,16 @@ int stm32_gpiosetevent(uint32_t pinset, bool risingedge, 
bool fallingedge,
 
       if (i == nshared)
         {
+          /* remove any leftover callback */
+
+          ret = irq_detach(irq);
+          if (ret < 0)
+            {
+              return ret;
+            }
+
+          /* disable the interrupt */
+
           up_disable_irq(irq);
         }
     }
diff --git a/arch/arm/src/stm32wl5/stm32wl5_exti_gpio.c 
b/arch/arm/src/stm32wl5/stm32wl5_exti_gpio.c
index eec0c58a667..92b9bd9b241 100644
--- a/arch/arm/src/stm32wl5/stm32wl5_exti_gpio.c
+++ b/arch/arm/src/stm32wl5/stm32wl5_exti_gpio.c
@@ -262,6 +262,7 @@ int stm32_gpiosetevent(uint32_t pinset, bool risingedge, 
bool fallingedge,
   xcpt_t   handler;
   int      nshared;
   int      i;
+  int      ret;
 
   /* Select the interrupt handler for this EXTI pin */
 
@@ -336,6 +337,16 @@ int stm32_gpiosetevent(uint32_t pinset, bool risingedge, 
bool fallingedge,
 
       if (i == nshared)
         {
+          /* remove any leftover callback */
+
+          ret = irq_detach(irq);
+          if (ret < 0)
+            {
+              return ret;
+            }
+
+          /* disable the interrupt */
+
           up_disable_irq(irq);
         }
     }

Reply via email to