[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <be580155-372f-445b-b9d1-2dc4fbf1c3a1@kernel.org>
Date: Tue, 25 Mar 2025 08:57:25 +0100
From: Krzysztof Kozlowski <krzk@...nel.org>
To: André Draszik <andre.draszik@...aro.org>,
Tudor Ambarus <tudor.ambarus@...aro.org>,
Alim Akhtar <alim.akhtar@...sung.com>
Cc: Peter Griffin <peter.griffin@...aro.org>,
Will McVicker <willmcvicker@...gle.com>, kernel-team@...roid.com,
linux-kernel@...r.kernel.org, linux-samsung-soc@...r.kernel.org,
linux-arm-kernel@...ts.infradead.org
Subject: Re: [PATCH v2 2/2] firmware: exynos-acpm: allow use during system
shutdown
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
Powered by blists - more mailing lists