All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jason Wang <jasowang@redhat.com>
To: wexu@redhat.com, mst@redhat.com, tiwei.bie@intel.com,
	jfreimann@redhat.com, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 1/8] virtio: feature bit, data structure for packed ring
Date: Tue, 10 Apr 2018 15:05:24 +0800	[thread overview]
Message-ID: <e6c4138a-df93-a342-6cbe-b7d5b9a64567@redhat.com> (raw)
In-Reply-To: <1522846444-31725-2-git-send-email-wexu@redhat.com>



On 2018年04月04日 20:53, wexu@redhat.com wrote:
> From: Wei Xu <wexu@redhat.com>
>
> Only minimum definitions from the spec are included
> for prototype.
>
> Signed-off-by: Wei Xu <wexu@redhat.com>
> ---
>   hw/virtio/virtio.c                             | 47 +++++++++++++++++++++++---
>   include/hw/virtio/virtio.h                     | 12 ++++++-
>   include/standard-headers/linux/virtio_config.h |  2 ++
>   3 files changed, 56 insertions(+), 5 deletions(-)
>
> diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
> index 006d3d1..9a6bfe7 100644
> --- a/hw/virtio/virtio.c
> +++ b/hw/virtio/virtio.c
> @@ -39,6 +39,14 @@ typedef struct VRingDesc
>       uint16_t next;
>   } VRingDesc;
>   
> +typedef struct VRingDescPacked
> +{
> +    uint64_t addr;
> +    uint32_t len;
> +    uint16_t id;
> +    uint16_t flags;
> +} VRingDescPacked;
> +
>   typedef struct VRingAvail
>   {
>       uint16_t flags;
> @@ -61,9 +69,18 @@ typedef struct VRingUsed
>   
>   typedef struct VRingMemoryRegionCaches {
>       struct rcu_head rcu;
> -    MemoryRegionCache desc;
> -    MemoryRegionCache avail;
> -    MemoryRegionCache used;
> +    union {
> +        struct {
> +            MemoryRegionCache desc;
> +            MemoryRegionCache avail;
> +            MemoryRegionCache used;
> +        };
> +        struct {
> +            MemoryRegionCache desc_packed;
> +            MemoryRegionCache driver;
> +            MemoryRegionCache device;
> +        };
> +    };

I think we can reuse exist memory region caches? Especially consider 
device/driver area could be treated as a renaming of avail/used area.

E.g desc for desc_packed, avail for driver area and used for device area.

>   } VRingMemoryRegionCaches;
>   
>   typedef struct VRing
> @@ -77,10 +94,31 @@ typedef struct VRing
>       VRingMemoryRegionCaches *caches;
>   } VRing;
>   
> +typedef struct VRingPackedDescEvent {
> +    uint16_t desc_event_off:15,
> +             desc_event_wrap:1;
> +    uint16_t desc_event_flags:2;
> +} VRingPackedDescEvent ;
> +
> +typedef struct VRingPacked
> +{
> +    unsigned int num;
> +    unsigned int num_default;
> +    unsigned int align;
> +    hwaddr desc;
> +    hwaddr driver;
> +    hwaddr device;
> +    VRingMemoryRegionCaches *caches;
> +} VRingPacked;

Same here, can we reuse VRing here?

> +
>   struct VirtQueue
>   {
> -    VRing vring;
> +    union {
> +        struct VRing vring;
> +        struct VRingPacked packed;
> +    };
>   
> +    uint8_t wrap_counter:1;
>       /* Next head to pop */
>       uint16_t last_avail_idx;
>   
> @@ -1220,6 +1258,7 @@ void virtio_reset(void *opaque)
>           vdev->vq[i].vring.num = vdev->vq[i].vring.num_default;
>           vdev->vq[i].inuse = 0;
>           virtio_virtqueue_reset_region_cache(&vdev->vq[i]);
> +        vdev->vq[i].wrap_counter = 1;
>       }
>   }
>   
> diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h
> index 098bdaa..563e88e 100644
> --- a/include/hw/virtio/virtio.h
> +++ b/include/hw/virtio/virtio.h
> @@ -46,6 +46,14 @@ typedef struct VirtQueueElement
>       unsigned int index;
>       unsigned int out_num;
>       unsigned int in_num;
> +
> +    /* Number of descriptors used by packed ring */

Do you mean the number of chained descriptors?

> +    uint16_t count;
> +    uint8_t wrap_counter:1;

What's the use of this bit? If you refer to my v1 vhost code, I used to 
have this, but it won't work for OOO completion e.g when zerocopy is 
disabled. I've dropped it now.

This is tricky and can only work when device complete descriptors in order.

> +    /* FIXME: Length of every used buffer for a descriptor,
> +       move to dynamical allocating due to out/in sgs numbers */
> +    uint32_t len[VIRTQUEUE_MAX_SIZE];

Can you explain more about this?

> +
>       hwaddr *in_addr;
>       hwaddr *out_addr;
>       struct iovec *in_sg;
> @@ -262,7 +270,9 @@ typedef struct VirtIORNGConf VirtIORNGConf;
>       DEFINE_PROP_BIT64("any_layout", _state, _field, \
>                         VIRTIO_F_ANY_LAYOUT, true), \
>       DEFINE_PROP_BIT64("iommu_platform", _state, _field, \
> -                      VIRTIO_F_IOMMU_PLATFORM, false)
> +                      VIRTIO_F_IOMMU_PLATFORM, false), \
> +    DEFINE_PROP_BIT64("ring_packed", _state, _field, \
> +                      VIRTIO_F_RING_PACKED, true)

Remember to disable this for old machine types in next version.

Thanks

>   
>   hwaddr virtio_queue_get_desc_addr(VirtIODevice *vdev, int n);
>   hwaddr virtio_queue_get_avail_addr(VirtIODevice *vdev, int n);
> diff --git a/include/standard-headers/linux/virtio_config.h b/include/standard-headers/linux/virtio_config.h
> index b777069..6ee5529 100644
> --- a/include/standard-headers/linux/virtio_config.h
> +++ b/include/standard-headers/linux/virtio_config.h
> @@ -71,4 +71,6 @@
>    * this is for compatibility with legacy systems.
>    */
>   #define VIRTIO_F_IOMMU_PLATFORM		33
> +
> +#define VIRTIO_F_RING_PACKED		34
>   #endif /* _LINUX_VIRTIO_CONFIG_H */

  reply	other threads:[~2018-04-10  7:05 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-04 12:53 [Qemu-devel] [RFC PATCH 0/8] virtio-net 1.1 userspace backend support wexu
2018-04-04 12:53 ` [Qemu-devel] [PATCH 1/8] virtio: feature bit, data structure for packed ring wexu
2018-04-10  7:05   ` Jason Wang [this message]
2018-06-03 16:21     ` Wei Xu
2018-04-04 12:53 ` [Qemu-devel] [PATCH 2/8] virtio: memory cache " wexu
2018-04-10  7:06   ` Jason Wang
2018-04-04 12:53 ` [Qemu-devel] [PATCH 3/8] virtio: add empty check " wexu
2018-04-10  7:23   ` Jason Wang
2018-06-03 17:44     ` Wei Xu
2018-06-04  8:32       ` Jason Wang
2018-04-04 12:54 ` [Qemu-devel] [PATCH 4/8] virtio: add detach element for packed ring(1.1) wexu
2018-04-10  7:32   ` Jason Wang
2018-06-04  1:34     ` Wei Xu
2018-06-04  1:54       ` Michael S. Tsirkin
2018-06-04  9:40         ` Wei Xu
2018-04-04 12:54 ` [Qemu-devel] [PATCH 5/8] virtio: notification tweak for packed ring wexu
2018-04-04 12:54 ` [Qemu-devel] [PATCH 6/8] virtio: flush/push support " wexu
2018-04-11  2:58   ` Jason Wang
2018-04-04 12:54 ` [Qemu-devel] [PATCH 7/8] virtio: get avail bytes check " wexu
2018-04-11  3:03   ` Jason Wang
2018-06-04  6:07     ` Wei Xu
2018-04-04 12:54 ` [Qemu-devel] [PATCH 8/8] virtio: queue pop support " wexu
2018-04-11  2:43   ` Jason Wang
2018-06-04  7:07     ` Wei Xu
2018-04-04 13:11 ` [Qemu-devel] [RFC PATCH 0/8] virtio-net 1.1 userspace backend support no-reply
2018-04-04 13:14 ` no-reply
2018-04-04 13:14 ` no-reply
2018-04-10  3:46 ` Jason Wang
2018-04-11  2:22   ` Wei Xu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=e6c4138a-df93-a342-6cbe-b7d5b9a64567@redhat.com \
    --to=jasowang@redhat.com \
    --cc=jfreimann@redhat.com \
    --cc=mst@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=tiwei.bie@intel.com \
    --cc=wexu@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.