linux-crypto.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Stephen Boyd <swboyd@chromium.org>
To: Herbert Xu <herbert@gondor.apana.org.au>,
	Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Cc: linux-kernel@vger.kernel.org, Theodore Ts'o <tytso@mit.edu>,
	linux-crypto@vger.kernel.org, Matt Mackall <mpm@selenic.com>,
	Keerthy <j-keerthy@ti.com>, Thomas Gleixner <tglx@linutronix.de>,
	Peter Zijlstra <peterz@infradead.org>
Subject: Re: [PATCH] random: Support freezable kthreads in add_hwgenerator_randomness()
Date: Wed, 04 Sep 2019 11:49:57 -0700	[thread overview]
Message-ID: <5d700756.1c69fb81.77c08.9c82@mx.google.com> (raw)
In-Reply-To: <20190904110038.2bx25byitrejlteu@flow>

Quoting Sebastian Andrzej Siewior (2019-09-04 04:00:38)
> On 2019-08-22 15:55:19 [+1000], Herbert Xu wrote:
> > Patch applied.  Thanks.
> [ ff296293b3538 ("random: Support freezable kthreads in add_hwgenerator_randomness()") ]
> 
> and since kthread_freezable_should_stop() has might_sleep() in it, I get
> this:
> 
> |: do not call blocking ops when !TASK_RUNNING; state=1 set at [<00000000349d1489>] prepare_to_wait_event+0x5a/0x180
> |: WARNING: CPU: 0 PID: 828 at kernel/sched/core.c:6741 __might_sleep+0x6f/0x80
> |: Modules linked in:
> |:
> |: CPU: 0 PID: 828 Comm: hwrng Not tainted 5.3.0-rc7-next-20190903+ #46
> |: RIP: 0010:__might_sleep+0x6f/0x80
> …
> |: Call Trace:
> |:  kthread_freezable_should_stop+0x1b/0x60
> |:  add_hwgenerator_randomness+0xdd/0x130
> |:  hwrng_fillfn+0xbf/0x120
> |:  kthread+0x10c/0x140
> |:  ret_from_fork+0x27/0x50
> 

Ugh ok. Thanks for the report.

We're getting warnings because the task is in TASK_INTERRUPTIBLE state
when we call kthread_freezable_should_stop() from deep within the wait
event code. We shouldn't do that, and instead we should call
wait_event_freezable() and kthread_should_stop() in the condition. This
way we'll call into the freezer when the task is woken up by the suspend
path.

Can you try this?

diff --git a/drivers/char/random.c b/drivers/char/random.c
index 9b54cdb301d3..d3beed084c0a 100644
--- a/drivers/char/random.c
+++ b/drivers/char/random.c
@@ -327,6 +327,7 @@
 #include <linux/percpu.h>
 #include <linux/cryptohash.h>
 #include <linux/fips.h>
+#include <linux/freezer.h>
 #include <linux/ptrace.h>
 #include <linux/workqueue.h>
 #include <linux/irq.h>
@@ -2429,7 +2430,6 @@ void add_hwgenerator_randomness(const char *buffer, size_t count,
 				size_t entropy)
 {
 	struct entropy_store *poolp = &input_pool;
-	bool frozen = false;
 
 	if (unlikely(crng_init == 0)) {
 		crng_fast_load(buffer, count);
@@ -2440,13 +2440,11 @@ void add_hwgenerator_randomness(const char *buffer, size_t count,
 	 * We'll be woken up again once below random_write_wakeup_thresh,
 	 * or when the calling thread is about to terminate.
 	 */
-	wait_event_interruptible(random_write_wait,
-			kthread_freezable_should_stop(&frozen) ||
+	wait_event_freezable(random_write_wait,
+			kthread_should_stop() ||
 			ENTROPY_BITS(&input_pool) <= random_write_wakeup_bits);
-	if (!frozen) {
-		mix_pool_bytes(poolp, buffer, count);
-		credit_entropy_bits(poolp, entropy);
-	}
+	mix_pool_bytes(poolp, buffer, count);
+	credit_entropy_bits(poolp, entropy);
 }
 EXPORT_SYMBOL_GPL(add_hwgenerator_randomness);
 


  reply	other threads:[~2019-09-04 18:50 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-08-19 15:02 [PATCH] random: Support freezable kthreads in add_hwgenerator_randomness() Stephen Boyd
2019-08-22  5:55 ` Herbert Xu
2019-09-04 11:00   ` Sebastian Andrzej Siewior
2019-09-04 18:49     ` Stephen Boyd [this message]
2019-09-05  7:41       ` Sebastian Andrzej Siewior
2019-09-05 16:31         ` Stephen Boyd

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5d700756.1c69fb81.77c08.9c82@mx.google.com \
    --to=swboyd@chromium.org \
    --cc=bigeasy@linutronix.de \
    --cc=herbert@gondor.apana.org.au \
    --cc=j-keerthy@ti.com \
    --cc=linux-crypto@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mpm@selenic.com \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    --cc=tytso@mit.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).