Re: [PATCH] irqchip/stm32mp-exti: fix the unit of the hwspinlock timeout
Radu Rendec <[email protected]>
| Newsgroups | gmane.linux.kernel,gmane.linux.ports.arm.kernel |
|---|---|
| Message-ID | <[email protected]> |
On Sat, 2026-08-15 at 10:08 -0400, Radu Rendec wrote: > On Wed, 2026-08-05 at 11:21 +0800, Ju Nan wrote: > > HWSPNLCK_TIMEOUT is passed to hwspin_lock_timeout_in_atomic(), whose > > timeout argument is in milliseconds, not microseconds: > > > > atomic_delay += HWSPINLOCK_RETRY_DELAY_US; > > if (atomic_delay > to * 1000) > > return -ETIMEDOUT; > > > > So stm32mp_exti_set_type() asks for a 1 second timeout where the comment > > next to the macro says it wants 1 millisecond. The semaphore is polled > > with udelay() from a section that holds chip_data->rlock, a > > raw_spinlock_t, so preemption stays disabled for the whole wait on every > > configuration, PREEMPT_RT included. > > > > The hwspinlock core documents this explicitly: > > > > If the mode is HWLOCK_IN_ATOMIC (called from an atomic context) the > > timeout is handled with busy-waiting delays, hence shall not exceed > > few msecs. > > > > Pass the value the comment always described. The core retries every > > HWSPINLOCK_RETRY_DELAY_US (100 us), so the semaphore is still polled ten > > times before giving up, which is far longer than any plausible hold time > > on the coprocessor side. A timeout is reported with pr_err() and fails > > the trigger type configuration, so shortening it degrades gracefully. > > > > Signed-off-by: Ju Nan <[email protected]> > > --- > > drivers/irqchip/irq-stm32mp-exti.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/drivers/irqchip/irq-stm32mp-exti.c b/drivers/irqchip/irq-stm32mp-exti.c > > index a24f4f1a4..f5f0109bf 100644 > > --- a/drivers/irqchip/irq-stm32mp-exti.c > > +++ b/drivers/irqchip/irq-stm32mp-exti.c > > @@ -23,7 +23,7 @@ > > > > #define IRQS_PER_BANK 32 > > > > -#define HWSPNLCK_TIMEOUT 1000 /* usec */ > > +#define HWSPNLCK_TIMEOUT 1 /* msec */ > > > > #define EXTI_EnCIDCFGR(n) (0x180 + (n) * 4) > > #define EXTI_HWCFGR1 0x3f0 > > Reviewed-by: Radu Rendec <[email protected]> Oops! Hit the "send" button too soon. The patch is OK, so the r-b tag stays. But it also needs this: Fixes: 5257169ade8c ("irqchip/stm32-exti: Use the hwspin_lock_timeout_in_atomic() API")