qemu-devel
[Top][All Lists]
Advanced

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

Re: [PATCH v9 01/10] virtio: introduce macro IRTIO_CONFIG_IRQ_IDX


From: Michael S. Tsirkin
Subject: Re: [PATCH v9 01/10] virtio: introduce macro IRTIO_CONFIG_IRQ_IDX
Date: Tue, 19 Oct 2021 02:47:54 -0400

On Thu, Sep 30, 2021 at 10:33:39AM +0800, Cindy Lu wrote:
> To support configure interrupt for vhost-vdpa
> introduce VIRTIO_CONFIG_IRQ_IDX -1 as config queue index, Then we can reuse
> the function guest_notifier_mask and guest_notifier_pending.
> Add the check of queue index, if the driver does not support configure
> interrupt, the function will just return
> 
> Signed-off-by: Cindy Lu <lulu@redhat.com>

typo in subject

Also the commit log and subject do not seem to match what patch is
doing. Description makes it look like a refactoring, but
it isn't. guest_notifier_mask don't exist.
And I'm not sure why it's safe to do nothing e.g. in
pending.




> ---
>  hw/display/vhost-user-gpu.c    |  6 ++++++
>  hw/net/virtio-net.c            | 10 +++++++---
>  hw/virtio/vhost-user-fs.c      |  9 +++++++--
>  hw/virtio/vhost-vsock-common.c |  6 ++++++
>  hw/virtio/virtio-crypto.c      |  6 ++++++
>  include/hw/virtio/virtio.h     |  2 ++
>  6 files changed, 34 insertions(+), 5 deletions(-)
> 
> diff --git a/hw/display/vhost-user-gpu.c b/hw/display/vhost-user-gpu.c
> index 49df56cd14..73ad3d84c9 100644
> --- a/hw/display/vhost-user-gpu.c
> +++ b/hw/display/vhost-user-gpu.c
> @@ -485,6 +485,9 @@ vhost_user_gpu_guest_notifier_pending(VirtIODevice *vdev, 
> int idx)
>  {
>      VhostUserGPU *g = VHOST_USER_GPU(vdev);
>  
> +    if (idx == VIRTIO_CONFIG_IRQ_IDX) {
> +        return false;
> +    }
>      return vhost_virtqueue_pending(&g->vhost->dev, idx);
>  }
>  
> @@ -493,6 +496,9 @@ vhost_user_gpu_guest_notifier_mask(VirtIODevice *vdev, 
> int idx, bool mask)
>  {
>      VhostUserGPU *g = VHOST_USER_GPU(vdev);
>  
> +    if (idx == VIRTIO_CONFIG_IRQ_IDX) {
> +        return;
> +    }
>      vhost_virtqueue_mask(&g->vhost->dev, vdev, idx, mask);
>  }
>  
> diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c
> index 16d20cdee5..65b7cabcaf 100644
> --- a/hw/net/virtio-net.c
> +++ b/hw/net/virtio-net.c
> @@ -3152,7 +3152,10 @@ static bool 
> virtio_net_guest_notifier_pending(VirtIODevice *vdev, int idx)
>      VirtIONet *n = VIRTIO_NET(vdev);
>      NetClientState *nc = qemu_get_subqueue(n->nic, vq2q(idx));
>      assert(n->vhost_started);
> -    return vhost_net_virtqueue_pending(get_vhost_net(nc->peer), idx);
> +    if (idx != VIRTIO_CONFIG_IRQ_IDX) {
> +        return vhost_net_virtqueue_pending(get_vhost_net(nc->peer), idx);
> +    }
> +    return false;
>  }
>  
>  static void virtio_net_guest_notifier_mask(VirtIODevice *vdev, int idx,
> @@ -3161,8 +3164,9 @@ static void virtio_net_guest_notifier_mask(VirtIODevice 
> *vdev, int idx,
>      VirtIONet *n = VIRTIO_NET(vdev);
>      NetClientState *nc = qemu_get_subqueue(n->nic, vq2q(idx));
>      assert(n->vhost_started);
> -    vhost_net_virtqueue_mask(get_vhost_net(nc->peer),
> -                             vdev, idx, mask);
> +    if (idx != VIRTIO_CONFIG_IRQ_IDX) {
> +        vhost_net_virtqueue_mask(get_vhost_net(nc->peer), vdev, idx, mask);
> +    }
>  }
>  
>  static void virtio_net_set_config_size(VirtIONet *n, uint64_t host_features)
> diff --git a/hw/virtio/vhost-user-fs.c b/hw/virtio/vhost-user-fs.c
> index c595957983..309c8efabf 100644
> --- a/hw/virtio/vhost-user-fs.c
> +++ b/hw/virtio/vhost-user-fs.c
> @@ -156,11 +156,13 @@ static void vuf_handle_output(VirtIODevice *vdev, 
> VirtQueue *vq)
>       */
>  }
>  
> -static void vuf_guest_notifier_mask(VirtIODevice *vdev, int idx,
> -                                            bool mask)
> +static void vuf_guest_notifier_mask(VirtIODevice *vdev, int idx, bool mask)
>  {
>      VHostUserFS *fs = VHOST_USER_FS(vdev);
>  
> +    if (idx == VIRTIO_CONFIG_IRQ_IDX) {
> +        return;
> +    }
>      vhost_virtqueue_mask(&fs->vhost_dev, vdev, idx, mask);
>  }
>  
> @@ -168,6 +170,9 @@ static bool vuf_guest_notifier_pending(VirtIODevice 
> *vdev, int idx)
>  {
>      VHostUserFS *fs = VHOST_USER_FS(vdev);
>  
> +    if (idx == VIRTIO_CONFIG_IRQ_IDX) {
> +        return false;
> +    }
>      return vhost_virtqueue_pending(&fs->vhost_dev, idx);
>  }
>  
> diff --git a/hw/virtio/vhost-vsock-common.c b/hw/virtio/vhost-vsock-common.c
> index 4ad6e234ad..2112b44802 100644
> --- a/hw/virtio/vhost-vsock-common.c
> +++ b/hw/virtio/vhost-vsock-common.c
> @@ -101,6 +101,9 @@ static void 
> vhost_vsock_common_guest_notifier_mask(VirtIODevice *vdev, int idx,
>  {
>      VHostVSockCommon *vvc = VHOST_VSOCK_COMMON(vdev);
>  
> +    if (idx == VIRTIO_CONFIG_IRQ_IDX) {
> +        return;
> +    }
>      vhost_virtqueue_mask(&vvc->vhost_dev, vdev, idx, mask);
>  }
>  
> @@ -109,6 +112,9 @@ static bool 
> vhost_vsock_common_guest_notifier_pending(VirtIODevice *vdev,
>  {
>      VHostVSockCommon *vvc = VHOST_VSOCK_COMMON(vdev);
>  
> +    if (idx == VIRTIO_CONFIG_IRQ_IDX) {
> +        return false;
> +    }
>      return vhost_virtqueue_pending(&vvc->vhost_dev, idx);
>  }
>  
> diff --git a/hw/virtio/virtio-crypto.c b/hw/virtio/virtio-crypto.c
> index 54f9bbb789..1d5192f8b4 100644
> --- a/hw/virtio/virtio-crypto.c
> +++ b/hw/virtio/virtio-crypto.c
> @@ -948,6 +948,9 @@ static void 
> virtio_crypto_guest_notifier_mask(VirtIODevice *vdev, int idx,
>  
>      assert(vcrypto->vhost_started);
>  
> +    if (idx == VIRTIO_CONFIG_IRQ_IDX) {
> +        return;
> +    }
>      cryptodev_vhost_virtqueue_mask(vdev, queue, idx, mask);
>  }
>  
> @@ -958,6 +961,9 @@ static bool 
> virtio_crypto_guest_notifier_pending(VirtIODevice *vdev, int idx)
>  
>      assert(vcrypto->vhost_started);
>  
> +    if (idx == VIRTIO_CONFIG_IRQ_IDX) {
> +        return false;
> +    }
>      return cryptodev_vhost_virtqueue_pending(vdev, queue, idx);
>  }
>  
> diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h
> index fa711a8912..2766c293f4 100644
> --- a/include/hw/virtio/virtio.h
> +++ b/include/hw/virtio/virtio.h
> @@ -67,6 +67,8 @@ typedef struct VirtQueueElement
>  
>  #define VIRTIO_NO_VECTOR 0xffff
>

Add a comment here. E.g. /* special index value used internally for config irqs 
*/
  
> +#define VIRTIO_CONFIG_IRQ_IDX -1
> +
>  #define TYPE_VIRTIO_DEVICE "virtio-device"
>  OBJECT_DECLARE_TYPE(VirtIODevice, VirtioDeviceClass, VIRTIO_DEVICE)
>  
> -- 
> 2.21.3




reply via email to

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