OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

virtio-comment message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: Re: [virtio-comment] [PATCH] virtio-rng: add a control queue


On 03/08/2020 15:57, Cornelia Huck wrote:
> On Mon,  3 Aug 2020 15:24:31 +0200
> Laurent Vivier <lvivier@redhat.com> wrote:
> 
>> A control queue is needed to send command to ask the device to
>> release the request buffers if it cannot provide data.
>>
>> Changes:
>>
>>   5.4.2 Virtqueues
>>   0 requestq
>>   1 controlq
>>   controlq only exists if VIRTIO_RNG_F_CTRL_VQ set.
>>
>>   5.4.3 Feature bits
>>   VIRTIO_RNG_F_CTRL_VQ (0)
>>   Device has a control queue
>>
>>   5.4.5 Device Initialization
>>   Identify and initialize the request virtqueue.
>>   If the VIRTIO_RNG_F_CTRL_VQ feature bit is negotiated,
>>   identify the control virtqueue.
>>
>>   5.4.6.3 Control Virtqueue
>>   The driver uses the control virtqueue (if VIRTIO_RNG_F_CTRL_VQ is negotiated)
>>   to send commands to control the device.
>>   All commands are of the following form:
>>   struct virtio_rng_ctrl_hdr {
>>          u8 cmd;
>>   };
>>
>>   5.4.6.3.1 Request Virtqueue Flushing
>>   When the device is not able to provide enough entropy to the driver,
>>   the driver can be stuck. And for instance, it cannot be removed from the
>>   system to switch to another one. The flush command allows the driver to ask
>>   the device to release all the buffers sent to the device and to unlock the
>>   driver.
>>   #define VIRTIO_RNG_CMD_FLUSH 0
>>
>> Bug-Link: https://github.com/oasis-tcs/virtio-spec/issues/83
>> Signed-off-by: Laurent Vivier <lvivier@redhat.com>
>> ---
>>  content.tex | 38 ++++++++++++++++++++++++++++++++++++--
>>  1 file changed, 36 insertions(+), 2 deletions(-)
> 
> (...)
> 
>> +\paragraph{Request Virtqueue Flushing}\label{sec:Device Types / Entropy Device / Device Operation / Control Virtqueue / Request Virtqueue Flushing}
>> +
>> +When the device is not able to provide enough entropy to the driver, the driver can be stuck.
>> +And for instance, it cannot be removed from the system to switch to another one.
> 
> Maybe
> 
> "...the driver may be stuck waiting for the device returning buffers,
> and cannot be removed..." ?

ok

> 
>> +The flush command allows the driver to ask the device to release all the buffers sent to the
>> +device and to unlock the driver.
> 
> What does "unlock the driver" mean?

In fact, this is very implementation specific: in current linux
implementation the driver is waiting on the data with read mutex locked.
And with this mutex locked you can't do anything else in the driver...

I will replace this by:
"This allows the driver to release resources allocated to receive data
from the device."

> 
> You'll probably also want a device normative statement for that, something like
> 
> "When the driver sends a flush request, the device MUST release all
> outstanding buffers."
> 
>> +
>> +\begin{lstlisting}
>> +#define VIRTIO_RNG_CMD_FLUSH 0
>> +\end{lstlisting}
> 
> As we (currently) have only that one command, I think we need to
> specify that (a) negotiation of the CTRL_VQ feature implies that the
> flush command is available, and that (b) any other value of cmd should
> (must?) be ignored by the device. (I'd assume that new commands would
> require new feature bits.)

I will add:

"The negociation of the CTRL_VQ feature implies that the flush command
is available."
"Any other value of cmd MUST be ignored by the device."

But where? In this section?

Thanks,
Laurent



[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]