On 24/03/2025 16:34, André Draszik wrote: > +static bool acpm_may_sleep(void) > +{ > + return system_state <= SYSTEM_RUNNING || > + (IS_ENABLED(CONFIG_PREEMPT_COUNT) ? preemptible() : !irqs_disabled()); > +} > + > /** > * acpm_dequeue_by_polling() - RX dequeue by polling. > * @achan: ACPM channel info. > @@ -300,7 +314,10 @@ static int acpm_dequeue_by_polling(struct acpm_chan *achan, > return 0; > > /* Determined experimentally. */ > - usleep_range(20, 30); > + if (!acpm_may_sleep()) > + udelay(10); > + else ... and what do you do if IRQs get disabled exactly in this moment? This is just racy. You cannot check for a condition and assume it will be valid for whatever time you want it to be valid. What happens if system_state is changed to shutdown in this particular moment? How did you prevent this from happening? > + usleep_range(20, 30); > } while (ktime_before(ktime_get(), timeout)); > > dev_err(dev, "Timeout! ch:%u s:%u bitmap:%lx.\n", > Best regards, Krzysztof