All of lore.kernel.org
 help / color / mirror / Atom feed
From: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
To: "Michael S. Tsirkin" <mst@redhat.com>
Cc: Jesper Dangaard Brouer <hawk@kernel.org>,
	Daniel Borkmann <daniel@iogearbox.net>,
	netdev@vger.kernel.org, John Fastabend <john.fastabend@gmail.com>,
	Alexei Starovoitov <ast@kernel.org>,
	virtualization@lists.linux-foundation.org,
	Eric Dumazet <edumazet@google.com>,
	Jakub Kicinski <kuba@kernel.org>,
	bpf@vger.kernel.org, Paolo Abeni <pabeni@redhat.com>,
	"David S. Miller" <davem@davemloft.net>
Subject: Re: [PATCH vhost v10 07/10] virtio_ring: introduce helpers for premapped
Date: Tue, 6 Jun 2023 10:01:12 +0800	[thread overview]
Message-ID: <1686016872.3496485-3-xuanzhuo@linux.alibaba.com> (raw)
In-Reply-To: <20230605013658-mutt-send-email-mst@kernel.org>

On Mon, 5 Jun 2023 01:38:48 -0400, "Michael S. Tsirkin" <mst@redhat.com> wrote:
> On Mon, Jun 05, 2023 at 10:06:51AM +0800, Xuan Zhuo wrote:
> > On Sun, 4 Jun 2023 09:45:14 -0400, "Michael S. Tsirkin" <mst@redhat.com> wrote:
> > > On Fri, Jun 02, 2023 at 05:22:03PM +0800, Xuan Zhuo wrote:
> > > > This patch introduces three helpers for premapped mode.
> > > >
> > > > * virtqueue_get_buf_premapped
> > > > * virtqueue_detach_unused_buf_premapped
> > > >
> > > > The above helpers work like the non-premapped funcs. But a cursor is
> > > > passed.
> > > >
> > > > virtqueue_detach is used to get the dma info of the last buf by
> > > >   cursor.
> > >
> > > This isn't very clear from the description but virtqueue_detach is
> > > also introduced by this patch as opposed to being used.
> > >
> > >
> > > > Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
> > > > ---
> > > >  drivers/virtio/virtio_ring.c | 83 ++++++++++++++++++++++++++++++++++++
> > > >  include/linux/virtio.h       | 10 +++++
> > > >  2 files changed, 93 insertions(+)
> > > >
> > > > diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c
> > > > index cbc22daae7e1..6771b9661798 100644
> > > > --- a/drivers/virtio/virtio_ring.c
> > > > +++ b/drivers/virtio/virtio_ring.c
> > > > @@ -2555,6 +2555,66 @@ void *virtqueue_get_buf(struct virtqueue *_vq, unsigned int *len)
> > > >  	return virtqueue_get_buf_ctx(_vq, len, NULL);
> > > >  }
> > > >  EXPORT_SYMBOL_GPL(virtqueue_get_buf);
> > > > +
> > > > +/**
> > > > + * virtqueue_get_buf_premapped - get the next used buffer
> > > > + * @_vq: the struct virtqueue we're talking about.
> > > > + * @len: the length written into the buffer
> > > > + * @ctx: extra context for the token
> > > > + * @cursor: detach cursor
> > > > + *
> > > > + * If the device wrote data into the buffer, @len will be set to the
> > > > + * amount written.  This means you don't need to clear the buffer
> > > > + * beforehand to ensure there's no data leakage in the case of short
> > > > + * writes.
> > > > + *
> > > > + * Caller must ensure we don't call this with other virtqueue
> > > > + * operations at the same time (except where noted).
> > > > + *
> > > > + * This is used for the premapped vq. The cursor is passed by the dirver, that
> > > > + * is used for virtqueue_detach. That will be initialized by virtio core
> > > > + * internally.
> > > > + *
> > > > + * Returns NULL if there are no used buffers, or the "data" token
> > > > + * handed to virtqueue_add_*().
> > > > + */
> > > > +void *virtqueue_get_buf_premapped(struct virtqueue *_vq, unsigned int *len,
> > > > +				  void **ctx,
> > > > +				  struct virtqueue_detach_cursor *cursor)
> > > > +{
> > > > +	struct vring_virtqueue *vq = to_vvq(_vq);
> > > > +
> > > > +	return vq->packed_ring ? virtqueue_get_buf_ctx_packed(_vq, len, ctx, cursor) :
> > > > +				 virtqueue_get_buf_ctx_split(_vq, len, ctx, cursor);
> > > > +}
> > > > +EXPORT_SYMBOL_GPL(virtqueue_get_buf_premapped);
> > > > +
> > > > +/**
> > > > + * virtqueue_detach - get the dma info of last buf
> > >
> > > detach what from what then?
> > > I am guessing this is not the only thing this function does?
> > > sounds like a bad name for a function.
> >
> > Let me think of a good name
> >
> > >
> > > > + * @_vq: the struct virtqueue we're talking about.
> > > > + * @cursor: detach cursor
> > > > + * @addr: the dma address
> > >
> > > what address?  it's the 1st time you mention an address ...
> >
> > Will fix.
> >
> >
> > >
> > > > + * @len: the length of the dma address
> > > > + * @dir: the direction of the dma address
> > > > + *
> > > > + * This is used for the premapped vq. The cursor is initialized by
> > > > + * virtqueue_get_buf_premapped or virtqueue_detach_unused_buf_premapped.
> > > > + *
> > > > + * Returns:
> > > > + * -EAGAIN: there are more dma info, this function should be called more.
> > >
> > > here too, pls don't return -EAGAIN not in an error case.
> > > something like "1" will do.
> >
> > While I agree with you, -EAGAIN seems to be a commonly used method.
>
> Where is it used like this? A typical use is e.g. in read(2):
>
>       EAGAIN The file descriptor fd refers to a file other than a socket and has been marked nonblocking (O_NONBLOCK), and  the  read
>               would block.  See open(2) for further details on the O_NONBLOCK flag.
>
> a better analog here is read filling up all its buffer, in which
> case it returns the # of bytes returned.


Rethink about this, I confused some scenarios. I should return a value to
indicate there is more data. "1" might be a good choice

Will fix.

Thanks.

>
>
> > How about we
> > return EAGAIN instead of -EAGAIN ?
> >
> > Thanks.
> >
> >
> >
> > >
> > > > + * -EINVAL: the process is done, should not call this function
> > > > + * 0: no more dma info
> > > > + */
> > > > +int virtqueue_detach(struct virtqueue *_vq, struct virtqueue_detach_cursor *cursor,
> > > > +		     dma_addr_t *addr, u32 *len, enum dma_data_direction *dir)
> > > > +{
> > > > +	struct vring_virtqueue *vq = to_vvq(_vq);
> > > > +
> > > > +	return vq->packed_ring ? virtqueue_detach_packed(_vq, cursor, addr, len, dir) :
> > > > +				 virtqueue_detach_split(_vq, cursor, addr, len, dir);
> > > > +}
> > > > +EXPORT_SYMBOL_GPL(virtqueue_detach);
> > > > +
> > > >  /**
> > > >   * virtqueue_disable_cb - disable callbacks
> > > >   * @_vq: the struct virtqueue we're talking about.
> > > > @@ -2682,6 +2742,29 @@ void *virtqueue_detach_unused_buf(struct virtqueue *_vq)
> > > >  }
> > > >  EXPORT_SYMBOL_GPL(virtqueue_detach_unused_buf);
> > > >
> > > > +/**
> > > > + * virtqueue_detach_unused_buf_premapped - detach first unused buffer
> > > > + * @_vq: the struct virtqueue we're talking about.
> > > > + * @cursor: detach cursor
> > > > + *
> > > > + * This is used for the premapped vq. The cursor is passed by the dirver, that
> > > > + * is used for virtqueue_detach. That will be initialized by virtio core
> > > > + * internally.
> > > > + *
> > > > + * Returns NULL or the "data" token handed to virtqueue_add_*().
> > > > + * This is not valid on an active queue; it is useful for device
> > > > + * shutdown or the reset queue.
> > > > + */
> > > > +void *virtqueue_detach_unused_buf_premapped(struct virtqueue *_vq,
> > > > +					    struct virtqueue_detach_cursor *cursor)
> > > > +{
> > > > +	struct vring_virtqueue *vq = to_vvq(_vq);
> > > > +
> > > > +	return vq->packed_ring ? virtqueue_detach_unused_buf_packed(_vq, cursor) :
> > > > +				 virtqueue_detach_unused_buf_split(_vq, cursor);
> > > > +}
> > > > +EXPORT_SYMBOL_GPL(virtqueue_detach_unused_buf_premapped);
> > > > +
> > > >  static inline bool more_used(const struct vring_virtqueue *vq)
> > > >  {
> > > >  	return vq->packed_ring ? more_used_packed(vq) : more_used_split(vq);
> > > > diff --git a/include/linux/virtio.h b/include/linux/virtio.h
> > > > index 7f137c7a9034..0a11c5b32fe5 100644
> > > > --- a/include/linux/virtio.h
> > > > +++ b/include/linux/virtio.h
> > > > @@ -3,6 +3,7 @@
> > > >  #define _LINUX_VIRTIO_H
> > > >  /* Everything a virtio driver needs to work with any particular virtio
> > > >   * implementation. */
> > > > +#include <linux/dma-mapping.h>
> > > >  #include <linux/types.h>
> > > >  #include <linux/scatterlist.h>
> > > >  #include <linux/spinlock.h>
> > > > @@ -88,6 +89,10 @@ void *virtqueue_get_buf(struct virtqueue *vq, unsigned int *len);
> > > >  void *virtqueue_get_buf_ctx(struct virtqueue *vq, unsigned int *len,
> > > >  			    void **ctx);
> > > >
> > > > +void *virtqueue_get_buf_premapped(struct virtqueue *_vq, unsigned int *len,
> > > > +				  void **ctx,
> > > > +				  struct virtqueue_detach_cursor *cursor);
> > > > +
> > > >  void virtqueue_disable_cb(struct virtqueue *vq);
> > > >
> > > >  bool virtqueue_enable_cb(struct virtqueue *vq);
> > > > @@ -101,6 +106,8 @@ bool virtqueue_poll(struct virtqueue *vq, unsigned);
> > > >  bool virtqueue_enable_cb_delayed(struct virtqueue *vq);
> > > >
> > > >  void *virtqueue_detach_unused_buf(struct virtqueue *vq);
> > > > +void *virtqueue_detach_unused_buf_premapped(struct virtqueue *_vq,
> > > > +					    struct virtqueue_detach_cursor *cursor);
> > > >
> > > >  unsigned int virtqueue_get_vring_size(const struct virtqueue *vq);
> > > >
> > > > @@ -114,6 +121,9 @@ dma_addr_t virtqueue_get_used_addr(const struct virtqueue *vq);
> > > >  int virtqueue_resize(struct virtqueue *vq, u32 num,
> > > >  		     void (*recycle)(struct virtqueue *vq, void *buf));
> > > >
> > > > +int virtqueue_detach(struct virtqueue *_vq, struct virtqueue_detach_cursor *cursor,
> > > > +		     dma_addr_t *addr, u32 *len, enum dma_data_direction *dir);
> > > > +
> > > >  /**
> > > >   * struct virtio_device - representation of a device using virtio
> > > >   * @index: unique position on the virtio bus
> > > > --
> > > > 2.32.0.3.g01195cf9f
> > >
>
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization

WARNING: multiple messages have this Message-ID (diff)
From: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
To: "Michael S. Tsirkin" <mst@redhat.com>
Cc: virtualization@lists.linux-foundation.org,
	Jason Wang <jasowang@redhat.com>,
	"David S. Miller" <davem@davemloft.net>,
	Eric Dumazet <edumazet@google.com>,
	Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
	Alexei Starovoitov <ast@kernel.org>,
	Daniel Borkmann <daniel@iogearbox.net>,
	Jesper Dangaard Brouer <hawk@kernel.org>,
	John Fastabend <john.fastabend@gmail.com>,
	netdev@vger.kernel.org, bpf@vger.kernel.org
Subject: Re: [PATCH vhost v10 07/10] virtio_ring: introduce helpers for premapped
Date: Tue, 6 Jun 2023 10:01:12 +0800	[thread overview]
Message-ID: <1686016872.3496485-3-xuanzhuo@linux.alibaba.com> (raw)
In-Reply-To: <20230605013658-mutt-send-email-mst@kernel.org>

On Mon, 5 Jun 2023 01:38:48 -0400, "Michael S. Tsirkin" <mst@redhat.com> wrote:
> On Mon, Jun 05, 2023 at 10:06:51AM +0800, Xuan Zhuo wrote:
> > On Sun, 4 Jun 2023 09:45:14 -0400, "Michael S. Tsirkin" <mst@redhat.com> wrote:
> > > On Fri, Jun 02, 2023 at 05:22:03PM +0800, Xuan Zhuo wrote:
> > > > This patch introduces three helpers for premapped mode.
> > > >
> > > > * virtqueue_get_buf_premapped
> > > > * virtqueue_detach_unused_buf_premapped
> > > >
> > > > The above helpers work like the non-premapped funcs. But a cursor is
> > > > passed.
> > > >
> > > > virtqueue_detach is used to get the dma info of the last buf by
> > > >   cursor.
> > >
> > > This isn't very clear from the description but virtqueue_detach is
> > > also introduced by this patch as opposed to being used.
> > >
> > >
> > > > Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
> > > > ---
> > > >  drivers/virtio/virtio_ring.c | 83 ++++++++++++++++++++++++++++++++++++
> > > >  include/linux/virtio.h       | 10 +++++
> > > >  2 files changed, 93 insertions(+)
> > > >
> > > > diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c
> > > > index cbc22daae7e1..6771b9661798 100644
> > > > --- a/drivers/virtio/virtio_ring.c
> > > > +++ b/drivers/virtio/virtio_ring.c
> > > > @@ -2555,6 +2555,66 @@ void *virtqueue_get_buf(struct virtqueue *_vq, unsigned int *len)
> > > >  	return virtqueue_get_buf_ctx(_vq, len, NULL);
> > > >  }
> > > >  EXPORT_SYMBOL_GPL(virtqueue_get_buf);
> > > > +
> > > > +/**
> > > > + * virtqueue_get_buf_premapped - get the next used buffer
> > > > + * @_vq: the struct virtqueue we're talking about.
> > > > + * @len: the length written into the buffer
> > > > + * @ctx: extra context for the token
> > > > + * @cursor: detach cursor
> > > > + *
> > > > + * If the device wrote data into the buffer, @len will be set to the
> > > > + * amount written.  This means you don't need to clear the buffer
> > > > + * beforehand to ensure there's no data leakage in the case of short
> > > > + * writes.
> > > > + *
> > > > + * Caller must ensure we don't call this with other virtqueue
> > > > + * operations at the same time (except where noted).
> > > > + *
> > > > + * This is used for the premapped vq. The cursor is passed by the dirver, that
> > > > + * is used for virtqueue_detach. That will be initialized by virtio core
> > > > + * internally.
> > > > + *
> > > > + * Returns NULL if there are no used buffers, or the "data" token
> > > > + * handed to virtqueue_add_*().
> > > > + */
> > > > +void *virtqueue_get_buf_premapped(struct virtqueue *_vq, unsigned int *len,
> > > > +				  void **ctx,
> > > > +				  struct virtqueue_detach_cursor *cursor)
> > > > +{
> > > > +	struct vring_virtqueue *vq = to_vvq(_vq);
> > > > +
> > > > +	return vq->packed_ring ? virtqueue_get_buf_ctx_packed(_vq, len, ctx, cursor) :
> > > > +				 virtqueue_get_buf_ctx_split(_vq, len, ctx, cursor);
> > > > +}
> > > > +EXPORT_SYMBOL_GPL(virtqueue_get_buf_premapped);
> > > > +
> > > > +/**
> > > > + * virtqueue_detach - get the dma info of last buf
> > >
> > > detach what from what then?
> > > I am guessing this is not the only thing this function does?
> > > sounds like a bad name for a function.
> >
> > Let me think of a good name
> >
> > >
> > > > + * @_vq: the struct virtqueue we're talking about.
> > > > + * @cursor: detach cursor
> > > > + * @addr: the dma address
> > >
> > > what address?  it's the 1st time you mention an address ...
> >
> > Will fix.
> >
> >
> > >
> > > > + * @len: the length of the dma address
> > > > + * @dir: the direction of the dma address
> > > > + *
> > > > + * This is used for the premapped vq. The cursor is initialized by
> > > > + * virtqueue_get_buf_premapped or virtqueue_detach_unused_buf_premapped.
> > > > + *
> > > > + * Returns:
> > > > + * -EAGAIN: there are more dma info, this function should be called more.
> > >
> > > here too, pls don't return -EAGAIN not in an error case.
> > > something like "1" will do.
> >
> > While I agree with you, -EAGAIN seems to be a commonly used method.
>
> Where is it used like this? A typical use is e.g. in read(2):
>
>       EAGAIN The file descriptor fd refers to a file other than a socket and has been marked nonblocking (O_NONBLOCK), and  the  read
>               would block.  See open(2) for further details on the O_NONBLOCK flag.
>
> a better analog here is read filling up all its buffer, in which
> case it returns the # of bytes returned.


Rethink about this, I confused some scenarios. I should return a value to
indicate there is more data. "1" might be a good choice

Will fix.

Thanks.

>
>
> > How about we
> > return EAGAIN instead of -EAGAIN ?
> >
> > Thanks.
> >
> >
> >
> > >
> > > > + * -EINVAL: the process is done, should not call this function
> > > > + * 0: no more dma info
> > > > + */
> > > > +int virtqueue_detach(struct virtqueue *_vq, struct virtqueue_detach_cursor *cursor,
> > > > +		     dma_addr_t *addr, u32 *len, enum dma_data_direction *dir)
> > > > +{
> > > > +	struct vring_virtqueue *vq = to_vvq(_vq);
> > > > +
> > > > +	return vq->packed_ring ? virtqueue_detach_packed(_vq, cursor, addr, len, dir) :
> > > > +				 virtqueue_detach_split(_vq, cursor, addr, len, dir);
> > > > +}
> > > > +EXPORT_SYMBOL_GPL(virtqueue_detach);
> > > > +
> > > >  /**
> > > >   * virtqueue_disable_cb - disable callbacks
> > > >   * @_vq: the struct virtqueue we're talking about.
> > > > @@ -2682,6 +2742,29 @@ void *virtqueue_detach_unused_buf(struct virtqueue *_vq)
> > > >  }
> > > >  EXPORT_SYMBOL_GPL(virtqueue_detach_unused_buf);
> > > >
> > > > +/**
> > > > + * virtqueue_detach_unused_buf_premapped - detach first unused buffer
> > > > + * @_vq: the struct virtqueue we're talking about.
> > > > + * @cursor: detach cursor
> > > > + *
> > > > + * This is used for the premapped vq. The cursor is passed by the dirver, that
> > > > + * is used for virtqueue_detach. That will be initialized by virtio core
> > > > + * internally.
> > > > + *
> > > > + * Returns NULL or the "data" token handed to virtqueue_add_*().
> > > > + * This is not valid on an active queue; it is useful for device
> > > > + * shutdown or the reset queue.
> > > > + */
> > > > +void *virtqueue_detach_unused_buf_premapped(struct virtqueue *_vq,
> > > > +					    struct virtqueue_detach_cursor *cursor)
> > > > +{
> > > > +	struct vring_virtqueue *vq = to_vvq(_vq);
> > > > +
> > > > +	return vq->packed_ring ? virtqueue_detach_unused_buf_packed(_vq, cursor) :
> > > > +				 virtqueue_detach_unused_buf_split(_vq, cursor);
> > > > +}
> > > > +EXPORT_SYMBOL_GPL(virtqueue_detach_unused_buf_premapped);
> > > > +
> > > >  static inline bool more_used(const struct vring_virtqueue *vq)
> > > >  {
> > > >  	return vq->packed_ring ? more_used_packed(vq) : more_used_split(vq);
> > > > diff --git a/include/linux/virtio.h b/include/linux/virtio.h
> > > > index 7f137c7a9034..0a11c5b32fe5 100644
> > > > --- a/include/linux/virtio.h
> > > > +++ b/include/linux/virtio.h
> > > > @@ -3,6 +3,7 @@
> > > >  #define _LINUX_VIRTIO_H
> > > >  /* Everything a virtio driver needs to work with any particular virtio
> > > >   * implementation. */
> > > > +#include <linux/dma-mapping.h>
> > > >  #include <linux/types.h>
> > > >  #include <linux/scatterlist.h>
> > > >  #include <linux/spinlock.h>
> > > > @@ -88,6 +89,10 @@ void *virtqueue_get_buf(struct virtqueue *vq, unsigned int *len);
> > > >  void *virtqueue_get_buf_ctx(struct virtqueue *vq, unsigned int *len,
> > > >  			    void **ctx);
> > > >
> > > > +void *virtqueue_get_buf_premapped(struct virtqueue *_vq, unsigned int *len,
> > > > +				  void **ctx,
> > > > +				  struct virtqueue_detach_cursor *cursor);
> > > > +
> > > >  void virtqueue_disable_cb(struct virtqueue *vq);
> > > >
> > > >  bool virtqueue_enable_cb(struct virtqueue *vq);
> > > > @@ -101,6 +106,8 @@ bool virtqueue_poll(struct virtqueue *vq, unsigned);
> > > >  bool virtqueue_enable_cb_delayed(struct virtqueue *vq);
> > > >
> > > >  void *virtqueue_detach_unused_buf(struct virtqueue *vq);
> > > > +void *virtqueue_detach_unused_buf_premapped(struct virtqueue *_vq,
> > > > +					    struct virtqueue_detach_cursor *cursor);
> > > >
> > > >  unsigned int virtqueue_get_vring_size(const struct virtqueue *vq);
> > > >
> > > > @@ -114,6 +121,9 @@ dma_addr_t virtqueue_get_used_addr(const struct virtqueue *vq);
> > > >  int virtqueue_resize(struct virtqueue *vq, u32 num,
> > > >  		     void (*recycle)(struct virtqueue *vq, void *buf));
> > > >
> > > > +int virtqueue_detach(struct virtqueue *_vq, struct virtqueue_detach_cursor *cursor,
> > > > +		     dma_addr_t *addr, u32 *len, enum dma_data_direction *dir);
> > > > +
> > > >  /**
> > > >   * struct virtio_device - representation of a device using virtio
> > > >   * @index: unique position on the virtio bus
> > > > --
> > > > 2.32.0.3.g01195cf9f
> > >
>

  reply	other threads:[~2023-06-06  2:06 UTC|newest]

Thread overview: 91+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-02  9:21 [PATCH vhost v10 00/10] virtio core prepares for AF_XDP Xuan Zhuo
2023-06-02  9:21 ` Xuan Zhuo
2023-06-02  9:21 ` [PATCH vhost v10 01/10] virtio_ring: put mapping error check in vring_map_one_sg Xuan Zhuo
2023-06-02  9:21   ` Xuan Zhuo
2023-06-27  8:03   ` Jason Wang
2023-06-27  8:03     ` Jason Wang
2023-06-02  9:21 ` [PATCH vhost v10 02/10] virtio_ring: introduce virtqueue_set_premapped() Xuan Zhuo
2023-06-02  9:21   ` Xuan Zhuo
2023-06-27  8:03   ` Jason Wang
2023-06-27  8:03     ` Jason Wang
2023-06-27  8:50     ` Xuan Zhuo
2023-06-27  8:50       ` Xuan Zhuo
2023-06-27 14:56       ` Michael S. Tsirkin
2023-06-27 14:56         ` Michael S. Tsirkin
2023-06-28  1:34         ` Xuan Zhuo
2023-06-28  1:34           ` Xuan Zhuo
2023-06-02  9:21 ` [PATCH vhost v10 03/10] virtio_ring: split: support add premapped buf Xuan Zhuo
2023-06-02  9:21   ` Xuan Zhuo
2023-06-27  8:03   ` Jason Wang
2023-06-27  8:03     ` Jason Wang
2023-06-27  9:01     ` Xuan Zhuo
2023-06-27  9:01       ` Xuan Zhuo
2023-06-28  4:07       ` Jason Wang
2023-06-28  6:00         ` Xuan Zhuo
2023-06-28  6:51           ` Jason Wang
2023-06-02  9:22 ` [PATCH vhost v10 04/10] virtio_ring: packed: " Xuan Zhuo
2023-06-02  9:22   ` Xuan Zhuo
2023-06-27  8:03   ` Jason Wang
2023-06-27  8:03     ` Jason Wang
2023-06-27  9:05     ` Xuan Zhuo
2023-06-27  9:05       ` Xuan Zhuo
2023-06-02  9:22 ` [PATCH vhost v10 05/10] virtio_ring: split-detach: support return dma info to driver Xuan Zhuo
2023-06-02  9:22   ` Xuan Zhuo
2023-06-22 19:36   ` Michael S. Tsirkin
2023-06-22 19:36     ` Michael S. Tsirkin
2023-06-25  2:10     ` Xuan Zhuo
2023-06-25  2:10       ` Xuan Zhuo
2023-06-27  8:03   ` Jason Wang
2023-06-27  8:03     ` Jason Wang
2023-06-27  9:21     ` Xuan Zhuo
2023-06-27  9:21       ` Xuan Zhuo
2023-06-02  9:22 ` [PATCH vhost v10 06/10] virtio_ring: packed-detach: " Xuan Zhuo
2023-06-02  9:22   ` Xuan Zhuo
2023-06-02 11:40   ` Michael S. Tsirkin
2023-06-02 11:40     ` Michael S. Tsirkin
2023-06-02  9:22 ` [PATCH vhost v10 07/10] virtio_ring: introduce helpers for premapped Xuan Zhuo
2023-06-02  9:22   ` Xuan Zhuo
2023-06-04 13:45   ` Michael S. Tsirkin
2023-06-04 13:45     ` Michael S. Tsirkin
2023-06-05  2:06     ` Xuan Zhuo
2023-06-05  2:06       ` Xuan Zhuo
2023-06-05  5:38       ` Michael S. Tsirkin
2023-06-05  5:38         ` Michael S. Tsirkin
2023-06-06  2:01         ` Xuan Zhuo [this message]
2023-06-06  2:01           ` Xuan Zhuo
2023-06-22 19:29   ` Michael S. Tsirkin
2023-06-22 19:29     ` Michael S. Tsirkin
2023-06-02  9:22 ` [PATCH vhost v10 08/10] virtio_ring: introduce virtqueue_dma_dev() Xuan Zhuo
2023-06-02  9:22   ` Xuan Zhuo
2023-06-02  9:22 ` [PATCH vhost v10 09/10] virtio_ring: introduce virtqueue_add_sg() Xuan Zhuo
2023-06-02  9:22   ` Xuan Zhuo
2023-06-02  9:22 ` [PATCH vhost v10 10/10] virtio_net: support dma premapped Xuan Zhuo
2023-06-02  9:22   ` Xuan Zhuo
2023-06-03  6:31   ` Jakub Kicinski
2023-06-05  2:10     ` Xuan Zhuo
2023-06-05  2:10       ` Xuan Zhuo
2023-06-05  5:44       ` Michael S. Tsirkin
2023-06-05  5:44         ` Michael S. Tsirkin
2023-06-06  2:11         ` Xuan Zhuo
2023-06-06  2:11           ` Xuan Zhuo
2023-06-22 12:15   ` Michael S. Tsirkin
2023-06-22 12:15     ` Michael S. Tsirkin
2023-06-25  2:43     ` Xuan Zhuo
2023-06-25  2:43       ` Xuan Zhuo
2023-06-27  8:03   ` Jason Wang
2023-06-27  8:03     ` Jason Wang
2023-06-27  9:23     ` Xuan Zhuo
2023-06-27  9:23       ` Xuan Zhuo
2023-06-03  6:29 ` [PATCH vhost v10 00/10] virtio core prepares for AF_XDP Jakub Kicinski
2023-06-05  1:58   ` Xuan Zhuo
2023-06-05  1:58     ` Xuan Zhuo
2023-06-07 14:05     ` Christoph Hellwig
2023-06-07 14:05       ` Christoph Hellwig
2023-06-07 20:15       ` Michael S. Tsirkin
2023-06-07 20:15         ` Michael S. Tsirkin
2023-06-21  6:42 ` Xuan Zhuo
2023-06-21  6:42   ` Xuan Zhuo
2023-06-25  7:19   ` Jason Wang
2023-06-25  7:19     ` Jason Wang
2023-06-22 19:38 ` Michael S. Tsirkin
2023-06-22 19:38   ` Michael S. Tsirkin

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=1686016872.3496485-3-xuanzhuo@linux.alibaba.com \
    --to=xuanzhuo@linux.alibaba.com \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=hawk@kernel.org \
    --cc=john.fastabend@gmail.com \
    --cc=kuba@kernel.org \
    --cc=mst@redhat.com \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=virtualization@lists.linux-foundation.org \
    /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.