[dpdk-dev] [PATCH 07/17] vhost: export vhost vring info

Yuanhan Liu yuanhan.liu at linux.intel.com
Thu Mar 16 08:24:11 CET 2017


On Tue, Mar 14, 2017 at 01:11:24PM +0100, Maxime Coquelin wrote:
> >+int
> >+rte_vhost_get_vhost_vring(int vid, uint16_t vring_idx,
> >+			  struct rte_vhost_vring *vring)
> >+{
> >+	struct virtio_net *dev;
> >+	struct vhost_virtqueue *vq;
> >+
> >+	dev = get_device(vid);
> >+	if (!dev)
> >+		return -1;
> >+
> >+	if (vring_idx > VHOST_MAX_VRING)
> Shouldn't be ">=" ?

Nice catch!

> >+#define VHOST_MAX_VRING			0x100
> Looking at the code, I'm not clear where this limitation comes from.
> It seems that it can be up to 0x10000, no?

It comes from the vhost-user spec:

	--yliu

---
 * VHOST_USER_SET_VRING_KICK

      Id: 12
      Equivalent ioctl: VHOST_SET_VRING_KICK
      Master payload: u64

      Set the event file descriptor for adding buffers to the vring. It
      is passed in the ancillary data.
      Bits (0-7) of the payload contain the vring index. Bit 8 is the
      invalid FD flag. This flag is set when there is no file descriptor
      in the ancillary data. This signals that polling should be used
      instead of waiting for a kick.
> 
> struct virtio_net {
> ...
> 	struct vhost_virtqueue	*virtqueue[VHOST_MAX_QUEUE_PAIRS * 2];
> 
> with:
> #ifdef VIRTIO_NET_F_MQ
>  #define VHOST_MAX_QUEUE_PAIRS	VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MAX
>  #define VHOST_SUPPORTS_MQ	(1ULL << VIRTIO_NET_F_MQ)
> #else
>  #define VHOST_MAX_QUEUE_PAIRS	1
>  #define VHOST_SUPPORTS_MQ	0
> #endif
> 
> and:
> #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MAX        0x8000
> 
> 
> Regards,
> Maxime


More information about the dev mailing list