Displaying 20 results from an estimated 97 matches for "data_avail".
2014 Aug 06
2
[PATCH] virtio-rng: complete have_data completion in removing device
...leting have_data completion before
> > unregistering a virtio-rng device.
>
> Hi Amit,
>
> Before applying this patch, it's blocking insider wait_for_completion_killable()
> Applied this patch, wait_for_completion_killable() returns 0,
> and vi->data_avail becomes 0, then rng_get_date() will return 0.
Thanks for checking this.
> Is it expected result?
I think what will happen is vi->data_avail will be set to whatever it
was set last. In case of a previous successful read request, the
data_avail will be set to whatever number of bytes the ho...
2014 Aug 06
2
[PATCH] virtio-rng: complete have_data completion in removing device
...leting have_data completion before
> > unregistering a virtio-rng device.
>
> Hi Amit,
>
> Before applying this patch, it's blocking insider wait_for_completion_killable()
> Applied this patch, wait_for_completion_killable() returns 0,
> and vi->data_avail becomes 0, then rng_get_date() will return 0.
Thanks for checking this.
> Is it expected result?
I think what will happen is vi->data_avail will be set to whatever it
was set last. In case of a previous successful read request, the
data_avail will be set to whatever number of bytes the ho...
2014 Dec 08
0
[PATCH v5 REPOST 1/6] hw_random: place mutex around read functions and buffers.
...- a/drivers/char/hw_random/core.c
+++ b/drivers/char/hw_random/core.c
@@ -53,7 +53,10 @@
static struct hwrng *current_rng;
static struct task_struct *hwrng_fill;
static LIST_HEAD(rng_list);
+/* Protects rng_list and current_rng */
static DEFINE_MUTEX(rng_mutex);
+/* Protects rng read functions, data_avail, rng_buffer and rng_fillbuf */
+static DEFINE_MUTEX(reading_mutex);
static int data_avail;
static u8 *rng_buffer, *rng_fillbuf;
static unsigned short current_quality;
@@ -81,7 +84,9 @@ static void add_early_randomness(struct hwrng *rng)
unsigned char bytes[16];
int bytes_read;
+ mutex_lock...
2014 Apr 25
1
[PATCH] virtio-rng: support multiple virtio-rng devices
...g.c b/drivers/char/hw_random/virtio-rng.c
index 2ce0e22..12e242b 100644
--- a/drivers/char/hw_random/virtio-rng.c
+++ b/drivers/char/hw_random/virtio-rng.c
@@ -25,88 +25,108 @@
#include <linux/virtio_rng.h>
#include <linux/module.h>
-static struct virtqueue *vq;
-static unsigned int data_avail;
-static DECLARE_COMPLETION(have_data);
-static bool busy;
+
+struct virtrng_info {
+ struct virtio_device *vdev;
+ struct hwrng hwrng;
+ struct virtqueue *vq;
+ unsigned int data_avail;
+ struct completion have_data;
+ bool busy;
+};
static void random_recv_done(struct virtqueue *vq)
{
+ struc...
2014 Apr 25
1
[PATCH] virtio-rng: support multiple virtio-rng devices
...g.c b/drivers/char/hw_random/virtio-rng.c
index 2ce0e22..12e242b 100644
--- a/drivers/char/hw_random/virtio-rng.c
+++ b/drivers/char/hw_random/virtio-rng.c
@@ -25,88 +25,108 @@
#include <linux/virtio_rng.h>
#include <linux/module.h>
-static struct virtqueue *vq;
-static unsigned int data_avail;
-static DECLARE_COMPLETION(have_data);
-static bool busy;
+
+struct virtrng_info {
+ struct virtio_device *vdev;
+ struct hwrng hwrng;
+ struct virtqueue *vq;
+ unsigned int data_avail;
+ struct completion have_data;
+ bool busy;
+};
static void random_recv_done(struct virtqueue *vq)
{
+ struc...
2014 Sep 09
2
[PATCH v2] virtio-rng: fix stuck of hot-unplugging busy device
When we try to hot-remove a busy virtio-rng device from QEMU monitor,
the device can't be hot-removed. Because virtio-rng driver hangs at
wait_for_completion_killable().
This patch exits the waiting by completing have_data completion before
unregistering, resets data_avail to avoid the hwrng core use wrong
buffer bytes. Before real unregistering we should return -ENODEV for
reading.
When we hot-unplug the device, dd process in guest will exit.
$ dd if=/dev/hwrng of=/dev/null
dd: error reading ?/dev/hwrng?: No such device
Signed-off-by: Amos Kong <akong at re...
2014 Sep 09
2
[PATCH v2] virtio-rng: fix stuck of hot-unplugging busy device
When we try to hot-remove a busy virtio-rng device from QEMU monitor,
the device can't be hot-removed. Because virtio-rng driver hangs at
wait_for_completion_killable().
This patch exits the waiting by completing have_data completion before
unregistering, resets data_avail to avoid the hwrng core use wrong
buffer bytes. Before real unregistering we should return -ENODEV for
reading.
When we hot-unplug the device, dd process in guest will exit.
$ dd if=/dev/hwrng of=/dev/null
dd: error reading ?/dev/hwrng?: No such device
Signed-off-by: Amos Kong <akong at re...
2014 Sep 08
0
[PATCH] virtio-rng: complete have_data completion in removing device
...> > > unregistering a virtio-rng device.
> >
> > Hi Amit,
> >
> > Before applying this patch, it's blocking insider wait_for_completion_killable()
> > Applied this patch, wait_for_completion_killable() returns 0,
> > and vi->data_avail becomes 0, then rng_get_date() will return 0.
>
> Thanks for checking this.
>
> > Is it expected result?
>
> I think what will happen is vi->data_avail will be set to whatever it
> was set last. In case of a previous successful read request, the
> data_avail will b...
2014 Aug 05
2
[PATCH] virtio-rng: complete have_data completion in removing device
When we try to hot-remove a busy virtio-rng device from QEMU monitor,
the device can't be hot-removed. Because virtio-rng driver hangs at
wait_for_completion_killable().
This patch fixed the hang by completing have_data completion before
unregistering a virtio-rng device.
Signed-off-by: Amos Kong <akong at redhat.com>
Cc: stable at vger.kernel.org
---
2014 Aug 05
2
[PATCH] virtio-rng: complete have_data completion in removing device
When we try to hot-remove a busy virtio-rng device from QEMU monitor,
the device can't be hot-removed. Because virtio-rng driver hangs at
wait_for_completion_killable().
This patch fixed the hang by completing have_data completion before
unregistering a virtio-rng device.
Signed-off-by: Amos Kong <akong at redhat.com>
Cc: stable at vger.kernel.org
---
2020 Aug 11
0
[PATCH v2] virtio-rng: return available data with O_NONBLOCK
...y have got some
>>>> + * randomness already.
>>>> + */
>>>> + if (vi->busy && completion_done(&vi->have_data)) {
>>>> + unsigned int len;
>>>> +
>>>> + vi->busy = false;
>>>> + len = vi->data_avail > size ? size : vi->data_avail;
>>>> + vi->data_avail -= len;
>>
>> You don't need to modify data_avail. As busy is set to false, the
>> buffer
>> will be reused. and it is always overwritten by virtqueue_get_buf().
>> And moreover, if it was...
2020 Aug 11
0
[PATCH v2] virtio-rng: return available data with O_NONBLOCK
...locking, we may have got some
> > > + * randomness already.
> > > + */
> > > + if (vi->busy && completion_done(&vi->have_data)) {
> > > + unsigned int len;
> > > +
> > > + vi->busy = false;
> > > + len = vi->data_avail > size ? size : vi->data_avail;
> > > + vi->data_avail -= len;
> >
> > I wonder what purpose does this line serve: busy is false
> > which basically means data_avail is invalid, right?
> > A following non blocking call will not enter here.
>
> Well...
2014 Sep 18
2
[PATCH 1/5] hw_random: place mutex around read functions and buffers.
...- a/drivers/char/hw_random/core.c
+++ b/drivers/char/hw_random/core.c
@@ -53,7 +53,10 @@
static struct hwrng *current_rng;
static struct task_struct *hwrng_fill;
static LIST_HEAD(rng_list);
+/* Protects rng_list and current_rng */
static DEFINE_MUTEX(rng_mutex);
+/* Protects rng read functions, data_avail, rng_buffer and rng_fillbuf */
+static DEFINE_MUTEX(reading_mutex);
static int data_avail;
static u8 *rng_buffer, *rng_fillbuf;
static unsigned short current_quality;
@@ -81,7 +84,9 @@ static void add_early_randomness(struct hwrng *rng)
unsigned char bytes[16];
int bytes_read;
+ mutex_lock...
2014 Sep 10
4
[PATCH v3 0/2] virtio-rng: fix hotunplug
...ry to hot-unplugging a busy virtio-rng device, the device
can't be removed. And the reading process in guest gets stuck.
Those two patches fixed this issue by completing have_data completion
and preventing invalid reading.
Thanks for the help of Amit.
Cc: stable at vger.kernel.org
V2: reset data_avail (Amit)
adjust unregister order
V3: split patch, update commitlog
Amos Kong (2):
virtio-rng: fix stuck of hot-unplugging busy device
virtio-rng: skip reading when we start to remove the device
drivers/char/hw_random/virtio-rng.c | 7 +++++++
1 file changed, 7 insertions(+)
--
1.9.3
2014 Sep 10
4
[PATCH v3 0/2] virtio-rng: fix hotunplug
...ry to hot-unplugging a busy virtio-rng device, the device
can't be removed. And the reading process in guest gets stuck.
Those two patches fixed this issue by completing have_data completion
and preventing invalid reading.
Thanks for the help of Amit.
Cc: stable at vger.kernel.org
V2: reset data_avail (Amit)
adjust unregister order
V3: split patch, update commitlog
Amos Kong (2):
virtio-rng: fix stuck of hot-unplugging busy device
virtio-rng: skip reading when we start to remove the device
drivers/char/hw_random/virtio-rng.c | 7 +++++++
1 file changed, 7 insertions(+)
--
1.9.3
2014 Dec 08
8
[PATCH v5 REPOST 0/6] fix hw_random stuck
When I hotunplug a busy virtio-rng device or try to access
hwrng attributes in non-smp guest, it gets stuck.
My hotplug tests:
| test 0:
| hotunplug rng device from qemu monitor
|
| test 1:
| guest) # dd if=/dev/hwrng of=/dev/null &
| hotunplug rng device from qemu monitor
|
| test 2:
| guest) # dd if=/dev/random of=/dev/null &
| hotunplug rng device from qemu monitor
|
| test
2014 Dec 08
8
[PATCH v5 REPOST 0/6] fix hw_random stuck
When I hotunplug a busy virtio-rng device or try to access
hwrng attributes in non-smp guest, it gets stuck.
My hotplug tests:
| test 0:
| hotunplug rng device from qemu monitor
|
| test 1:
| guest) # dd if=/dev/hwrng of=/dev/null &
| hotunplug rng device from qemu monitor
|
| test 2:
| guest) # dd if=/dev/random of=/dev/null &
| hotunplug rng device from qemu monitor
|
| test
2020 Aug 11
2
[PATCH v2] virtio-rng: return available data with O_NONBLOCK
...already.
>>>>>> + */
>>>>>> + if (vi->busy && completion_done(&vi->have_data)) {
>>>>>> + unsigned int len;
>>>>>> +
>>>>>> + vi->busy = false;
>>>>>> + len = vi->data_avail > size ? size : vi-
>>>>>>> data_avail;
>>>>>> + vi->data_avail -= len;
>>>>
>>>> You don't need to modify data_avail. As busy is set to false, the
>>>> buffer
>>>> will be reused. and it is always ove...
2020 Aug 11
2
[PATCH v2] virtio-rng: return available data with O_NONBLOCK
...already.
>>>>>> + */
>>>>>> + if (vi->busy && completion_done(&vi->have_data)) {
>>>>>> + unsigned int len;
>>>>>> +
>>>>>> + vi->busy = false;
>>>>>> + len = vi->data_avail > size ? size : vi-
>>>>>>> data_avail;
>>>>>> + vi->data_avail -= len;
>>>>
>>>> You don't need to modify data_avail. As busy is set to false, the
>>>> buffer
>>>> will be reused. and it is always ove...
2020 Aug 11
0
[PATCH v2] virtio-rng: return available data with O_NONBLOCK
...t;> + * If the previous call was non-blocking, we may have got some
>> + * randomness already.
>> + */
>> + if (vi->busy && completion_done(&vi->have_data)) {
>> + unsigned int len;
>> +
>> + vi->busy = false;
>> + len = vi->data_avail > size ? size : vi->data_avail;
>> + vi->data_avail -= len;
You don't need to modify data_avail. As busy is set to false, the buffer
will be reused. and it is always overwritten by virtqueue_get_buf().
And moreover, if it was reused it would be always the beginning.
>> +...