linux-crypto.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Laurent Vivier <lvivier@redhat.com>
To: linux-kernel@vger.kernel.org
Cc: Alexander Potapenko <glider@google.com>,
	linux-crypto@vger.kernel.org, Dmitriy Vyukov <dvyukov@google.com>,
	rusty@rustcorp.com.au, amit@kernel.org, akong@redhat.com,
	Herbert Xu <herbert@gondor.apana.org.au>,
	"Michael S . Tsirkin" <mst@redhat.com>,
	Matt Mackall <mpm@selenic.com>,
	virtualization@lists.linux-foundation.org,
	Laurent Vivier <lvivier@redhat.com>
Subject: [PATCH 2/4] hwrng: virtio - don't wait on cleanup
Date: Wed, 22 Sep 2021 19:09:01 +0200	[thread overview]
Message-ID: <20210922170903.577801-3-lvivier@redhat.com> (raw)
In-Reply-To: <20210922170903.577801-1-lvivier@redhat.com>

When virtio-rng device was dropped by the hwrng core we were forced
to wait the buffer to come back from the device to not have
remaining ongoing operation that could spoil the buffer.

But now, as the buffer is internal to the virtio-rng we can release
the waiting loop immediately, the buffer will be retrieve and use
when the virtio-rng driver will be selected again.

This avoids to hang on an rng_current write command if the virtio-rng
device is blocked by a lack of entropy. This allows to select
another entropy source if the current one is empty.

Signed-off-by: Laurent Vivier <lvivier@redhat.com>
---
 drivers/char/hw_random/virtio-rng.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/char/hw_random/virtio-rng.c b/drivers/char/hw_random/virtio-rng.c
index 208c547dcac1..173aeea835bb 100644
--- a/drivers/char/hw_random/virtio-rng.c
+++ b/drivers/char/hw_random/virtio-rng.c
@@ -82,6 +82,11 @@ static int virtio_read(struct hwrng *rng, void *buf, size_t size, bool wait)
 		ret = wait_for_completion_killable(&vi->have_data);
 		if (ret < 0)
 			return ret;
+		/* if vi->data_avail is 0, we have been interrupted
+		 * by a cleanup, but buffer stays in the queue
+		 */
+		if (vi->data_avail == 0)
+			return read;
 
 		chunk = min_t(unsigned int, size, vi->data_avail);
 		memcpy(buf + read, vi->data, chunk);
@@ -105,7 +110,7 @@ static void virtio_cleanup(struct hwrng *rng)
 	struct virtrng_info *vi = (struct virtrng_info *)rng->priv;
 
 	if (vi->busy)
-		wait_for_completion(&vi->have_data);
+		complete(&vi->have_data);
 }
 
 static int probe_common(struct virtio_device *vdev)
-- 
2.31.1


  parent reply	other threads:[~2021-09-22 17:09 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-22 17:08 [PATCH 0/4] hwrng: virtio - add an internal buffer Laurent Vivier
2021-09-22 17:09 ` [PATCH 1/4] " Laurent Vivier
2021-09-22 19:02   ` Michael S. Tsirkin
2021-09-23  6:26     ` Laurent Vivier
2021-09-23  7:04       ` Michael S. Tsirkin
2021-09-23  7:34         ` Laurent Vivier
2021-10-05 11:55           ` Michael S. Tsirkin
2021-10-05 13:30             ` Laurent Vivier
2021-09-22 17:09 ` Laurent Vivier [this message]
2021-09-22 17:09 ` [PATCH 3/4] hwrng: virtio - don't waste entropy Laurent Vivier
2021-09-22 17:09 ` [PATCH 4/4] hwrng: virtio - always add a pending request Laurent Vivier
2021-09-22 17:50 ` [PATCH 0/4] hwrng: virtio - add an internal buffer Alexander Potapenko
2021-10-05 11:40 ` Laurent Vivier

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=20210922170903.577801-3-lvivier@redhat.com \
    --to=lvivier@redhat.com \
    --cc=akong@redhat.com \
    --cc=amit@kernel.org \
    --cc=dvyukov@google.com \
    --cc=glider@google.com \
    --cc=herbert@gondor.apana.org.au \
    --cc=linux-crypto@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mpm@selenic.com \
    --cc=mst@redhat.com \
    --cc=rusty@rustcorp.com.au \
    --cc=virtualization@lists.linux-foundation.org \
    /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).