[SLOF] [PATCH] virtio-net: fix ring handling in receive
Alexey Kardashevskiy
aik at ozlabs.ru
Mon Jun 27 13:04:12 AEST 2016
On 22/06/16 05:41, Thomas Huth wrote:
> On 20.06.2016 13:32, Nikunj A Dadhania wrote:
>> A bug crept in while doing the virtio 1.0 enablement in
>> commit 6e4d62c2 (virtio-net: enable virtio 1.0)
>>
>> + idx = virtio_modern16_to_cpu(&virtiodev, vq_rx.used->idx);
>>
>> [...]
>>
>> - vq_rx.avail->ring[vq_rx.avail->idx % vq_rx.size] = id - 1;
>> + vq_rx.avail->ring[idx % vq_rx.size] = virtio_cpu_to_modern16(&virtiodev, id - 1);
>> sync();
>> - vq_rx.avail->idx += 1;
>> + vq_rx.avail->idx = virtio_cpu_to_modern16(&virtiodev, idx + 1);
>>
>> Should be using avail->idx in place of used->idx.
Thanks, applied.
>>
>> Signed-off-by: Nikunj A Dadhania <nikunj at linux.vnet.ibm.com>
>> ---
>> lib/libvirtio/virtio-net.c | 6 ++++--
>> 1 file changed, 4 insertions(+), 2 deletions(-)
>>
>> diff --git a/lib/libvirtio/virtio-net.c b/lib/libvirtio/virtio-net.c
>> index fc620a2..2573031 100644
>> --- a/lib/libvirtio/virtio-net.c
>> +++ b/lib/libvirtio/virtio-net.c
>> @@ -266,6 +266,7 @@ static int virtionet_receive(char *buf, int maxlen)
>> {
>> uint32_t len = 0;
>> uint32_t id, idx;
>> + uint16_t avail_idx;
>>
>> idx = virtio_modern16_to_cpu(&virtiodev, vq_rx.used->idx);
>>
>> @@ -304,9 +305,10 @@ static int virtionet_receive(char *buf, int maxlen)
>> /* Move indices to next entries */
>> last_rx_idx = last_rx_idx + 1;
>>
>> - vq_rx.avail->ring[idx % vq_rx.size] = virtio_cpu_to_modern16(&virtiodev, id - 1);
>> + avail_idx = virtio_modern16_to_cpu(&virtiodev, vq_rx.avail->idx);
>> + vq_rx.avail->ring[avail_idx % vq_rx.size] = virtio_cpu_to_modern16(&virtiodev, id - 1);
>> sync();
>> - vq_rx.avail->idx = virtio_cpu_to_modern16(&virtiodev, idx + 1);
>> + vq_rx.avail->idx = virtio_cpu_to_modern16(&virtiodev, avail_idx + 1);
>>
>> /* Tell HV that RX queue entry is ready */
>> virtio_queue_notify(&virtiodev, VQ_RX);
>>
>
> You're right, that looks better this way!
>
> Reviewed-by: Thomas Huth <thuth at redhat.com>
>
> _______________________________________________
> SLOF mailing list
> SLOF at lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/slof
>
--
Alexey
More information about the SLOF
mailing list