You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2026/08/03 15:16:34 UTC
(nuttx) branch releases/13.0 updated (670d39673b1 -> 426b9729ecb)
This is an automated email from the ASF dual-hosted git repository.
xiaoxiang781216 pushed a change to branch releases/13.0
in repository https://gitbox.apache.org/repos/asf/nuttx.git
from 670d39673b1 drivers/video: zero message on MIPI DSI driver
new 3899064e414 stm32: Detach GPIO IRQ callbacks upon clearing "setevent"
new 426b9729ecb Review: Address @raiden00pl comments
The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
arch/arm/src/common/stm32/stm32_exti_gpio_m0_v1.c | 11 +++++++++++
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 +++++++++++
9 files changed, 99 insertions(+)
(nuttx) 02/02: Review: Address @raiden00pl comments
Posted by xi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
xiaoxiang781216 pushed a commit to branch releases/13.0
in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit 426b9729ecb60ac1a0a8c5e883e1c4064d2e25d9
Author: Javier Alonso <ja...@geotab.com>
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 <ja...@geotab.com>
---
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);
}
}
(nuttx) 01/02: stm32: Detach GPIO IRQ callbacks upon clearing "setevent"
Posted by xi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
xiaoxiang781216 pushed a commit to branch releases/13.0
in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit 3899064e414b7b9d1156e905ea618bfd545b2825
Author: Javier Alonso <ja...@geotab.com>
AuthorDate: Fri Jul 24 12:25:40 2026 +0200
stm32: Detach GPIO IRQ callbacks upon clearing "setevent"
When the interrupts get disabled, the callback(s) are still attached.
That structure is never cleared, causing several calls to attach/detach
to eventually fail as the callback queue gets full.
When the error occurs, the registration fails with error 12 (ENOMEM).
By detaching the IRQ and clearing the callbacks, this error doesn't
happen again
Signed-off-by: Javier Alonso <ja...@geotab.com>
---
arch/arm/src/common/stm32/stm32_exti_gpio_m0_v1.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/arch/arm/src/common/stm32/stm32_exti_gpio_m0_v1.c b/arch/arm/src/common/stm32/stm32_exti_gpio_m0_v1.c
index 00b9158085c..b143d31dc9e 100644
--- a/arch/arm/src/common/stm32/stm32_exti_gpio_m0_v1.c
+++ b/arch/arm/src/common/stm32/stm32_exti_gpio_m0_v1.c
@@ -221,6 +221,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 */
@@ -274,6 +275,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);
}
}