Re: [PATCH v4] hwrng: core - Stop/start hwrng_fillfn() kthread before/after suspend-resume
From: Thomas Richard
Date: Mon Jul 27 2026 - 05:32:29 EST
On 7/27/26 1:55 AM, Herbert Xu wrote:
> On Mon, Jul 13, 2026 at 01:25:37PM +0200, Thomas Richard (TI) wrote:
>>
>> This is the fourth iteration, as requested by Herbert I replaced BUG_ON()
>> by lockdep_assert_held().
>> ---
>> Changes in v4:
>> - use lockdep_assert_held() instead of BUG_ON()
>> - Link to v3: https://lore.kernel.org/r/20260703-hw-random-fix-hwrng-fillfn-crash-suspend-resume-v3-1-b7165cb9cf38@xxxxxxxxxxx
>
> https://sashiko.dev/#/patchset/20260713-hw-random-fix-hwrng-fillfn-crash-suspend-resume-v4-1-b5fb4c520b05%40bootlin.com
>
> Sashiko is asking about whether user-space can restart the hwrng
> thread via sysfs after you stop it in the notifier. I know nothing
> about suspension so I can't say whether that's possible. But if
> it is possible then you'd need to close the race window with a flag
> of some kind.
Oh yes, indeed Sashiko is right. PM notifiers are run before user space
processes freezing.
What do you think if I lock the rng_mutex at the very beginning of
suspend and release it at the end of resume?
static int hwrng_pm_notifier(struct notifier_block *nb,
unsigned long action,
void *data)
{
switch (action) {
case PM_SUSPEND_PREPARE:
case PM_HIBERNATION_PREPARE:
case PM_RESTORE_PREPARE:
mutex_lock(&rng_mutex);
hwrng_stop_hwrng_fillfn();
break;
case PM_POST_SUSPEND:
case PM_POST_HIBERNATION:
case PM_POST_RESTORE:
if (rcu_access_pointer(current_rng))
hwrng_start_hwrng_fillfn();
mutex_unlock(&rng_mutex);
break;
}
return NOTIFY_DONE;
}
IIUC once rng_mutex is locked nobody can start the hwrng_thread.
And even if suspend sequence fails somewhere, POST PM notifier will be
run, so mutex will be released in any cases.
Best Regards,
Thomas