qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] virtio: remove unnecessary thread fence while reading next d


From: Stefan Hajnoczi
Subject: Re: [PATCH] virtio: remove unnecessary thread fence while reading next descriptor
Date: Mon, 25 Sep 2023 10:32:22 -0400

On Fri, 25 Aug 2023 at 13:02, Ilya Maximets <i.maximets@ovn.org> wrote:
>
> It was supposed to be a compiler barrier and it was a compiler barrier
> initially called 'wmb' (??) when virtio core support was introduced.
> Later all the instances of 'wmb' were switched to smp_wmb to fix memory
> ordering issues on non-x86 platforms.  However, this one doesn't need
> to be an actual barrier.  It's enough for it to stay a compiler barrier
> as its only purpose is to ensure that the value is not read twice.
>
> There is no counterpart read barrier in the drivers, AFAICT.  And even
> if we needed an actual barrier, it shouldn't have been a write barrier.
>
> Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
> ---
>  hw/virtio/virtio.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
> index 309038fd46..6eb8586858 100644
> --- a/hw/virtio/virtio.c
> +++ b/hw/virtio/virtio.c
> @@ -1051,7 +1051,7 @@ static int virtqueue_split_read_next_desc(VirtIODevice 
> *vdev, VRingDesc *desc,
>      /* Check they're not leading us off end of descriptors. */
>      *next = desc->next;

I don't see a caller that uses *next. Can the argument be eliminated?

>      /* Make sure compiler knows to grab that: we don't want it changing! */
> -    smp_wmb();
> +    barrier();

What is the purpose of this barrier? desc is not guest memory and
nothing modifies desc's fields while this function is executing. I
think the barrier can be removed.

>
>      if (*next >= max) {
>          virtio_error(vdev, "Desc next is %u", *next);
> --
> 2.40.1
>
>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]