DPDK patches and discussions
 help / color / mirror / Atom feed
From: Jens Freimann <jfreimann@redhat.com>
To: Maxime Coquelin <maxime.coquelin@redhat.com>
Cc: dev@dpdk.org, tiwei.bie@intel.com
Subject: Re: [dpdk-dev] [PATCH v5 03/11] net/virtio: add packed virtqueue helpers
Date: Wed, 12 Sep 2018 11:04:15 +0200	[thread overview]
Message-ID: <20180912090415.4mlbiziikrrza6zq@jenstp.localdomain> (raw)
In-Reply-To: <3206e0ea-8c5c-60cc-6cab-6024b304da73@redhat.com>

On Wed, Sep 12, 2018 at 10:25:57AM +0200, Maxime Coquelin wrote:
>
>
>On 09/06/2018 08:19 PM, Jens Freimann wrote:
>>Add helper functions to set/clear and check descriptor flags.
>>
>>Signed-off-by: Jens Freimann <jfreimann@redhat.com>
>>---
>>  drivers/net/virtio/virtio_ring.h | 26 ++++++++++++++++++++++++++
>>  drivers/net/virtio/virtqueue.h   | 19 +++++++++++++++++++
>>  2 files changed, 45 insertions(+)
>>
>>diff --git a/drivers/net/virtio/virtio_ring.h b/drivers/net/virtio/virtio_ring.h
>>index e2c597434..f3b23f419 100644
>>--- a/drivers/net/virtio/virtio_ring.h
>>+++ b/drivers/net/virtio/virtio_ring.h
>>@@ -78,6 +78,8 @@ struct vring_packed_desc_event {
>>  struct vring {
>>  	unsigned int num;
>>+	unsigned int avail_wrap_counter;
>>+	unsigned int used_wrap_counter;
>>  	union {
>>  		struct vring_desc_packed *desc_packed;
>>  		struct vring_desc *desc;
>>@@ -92,6 +94,30 @@ struct vring {
>>  	};
>>  };
>>+static inline void
>>+_set_desc_avail(struct vring_desc_packed *desc, int wrap_counter)
>>+{
>>+	desc->flags |= VRING_DESC_F_AVAIL(wrap_counter) |
>>+		       VRING_DESC_F_USED(!wrap_counter);
>
>It implies the avail and used bits to be cleared beforehand.
>Maybe it would be safer to clear them in the helper?

Safer but also less explicit for someone who just reads the higher
level function. But I think it's better to go for the safer version
here.  

>
>>+}
>>+
>>+static inline void
>>+set_desc_avail(struct vring *vr, struct vring_desc_packed *desc)
>>+{
>>+	_set_desc_avail(desc, vr->avail_wrap_counter);
>>+}
>>+
>>+static inline int
>>+desc_is_used(struct vring_desc_packed *desc, struct vring *vr)
>>+{
>>+	uint16_t used, avail;
>>+
>>+	used = !!(desc->flags & VRING_DESC_F_USED(1));
>>+	avail = !!(desc->flags & VRING_DESC_F_AVAIL(1));
>>+
>>+	return used == avail && used == vr->used_wrap_counter;
>>+}
>>+
>>  /* The standard layout for the ring is a continuous chunk of memory which
>>   * looks like this.  We assume num is a power of 2.
>>   *
>>diff --git a/drivers/net/virtio/virtqueue.h b/drivers/net/virtio/virtqueue.h
>>index d2a0b651a..53fce61b4 100644
>>--- a/drivers/net/virtio/virtqueue.h
>>+++ b/drivers/net/virtio/virtqueue.h
>>@@ -245,6 +245,25 @@ struct virtio_tx_region {
>>  			   __attribute__((__aligned__(16)));
>>  };
>>+static inline uint16_t
>>+increment_pq_index(uint16_t idx, size_t ring_size)
>>+{
>>+	return ++idx >= ring_size ? 0 : idx;
>>+}
>
>Not sure this helper is really useful, as it ends up
>doing two checks in a row.
>
>>+
>>+static inline uint16_t
>>+update_pq_avail_index(struct virtqueue *vq)
>>+{
>>+	uint16_t idx;
>>+
>>+	idx = increment_pq_index(vq->vq_avail_idx, vq->vq_nentries);
>>+	if (idx == 0)
>>+		vq->vq_ring.avail_wrap_counter ^= 1;
>
>>+	vq->vq_avail_idx = idx;
>>+
>>+	return vq->vq_avail_idx;
>>+}
>
>So it could be simplified to:
>
>{
>	if (++vq->vq_avail_idx >= vq->vq_entries) {
>		vq->vq_avail_idx = 0;
>		vq->vq_ring.avail_wrap_counter ^= 1;
>	}
>
>	return vq->vq_avail_idx;

yes, I will either change to what you suggested or
get rid of the helper completely since it is only used in
very few places.

Thanks for the review!

regards,
Jens 

  reply	other threads:[~2018-09-12  9:04 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-06 18:19 [dpdk-dev] [PATCH v5 00/11] implement packed virtqueues Jens Freimann
2018-09-06 18:19 ` [dpdk-dev] [PATCH v5 01/11] net/virtio: vring init for packed queues Jens Freimann
2018-09-10  5:48   ` Gavin Hu (Arm Technology China)
2018-09-12  8:02   ` Maxime Coquelin
2018-09-12  9:04     ` Jens Freimann
2018-09-06 18:19 ` [dpdk-dev] [PATCH v5 02/11] net/virtio: add virtio 1.1 defines Jens Freimann
2018-09-10  5:22   ` Gavin Hu (Arm Technology China)
2018-09-10  6:07     ` Tiwei Bie
2018-09-11  7:18     ` Jens Freimann
2018-09-06 18:19 ` [dpdk-dev] [PATCH v5 03/11] net/virtio: add packed virtqueue helpers Jens Freimann
2018-09-12  8:25   ` Maxime Coquelin
2018-09-12  9:04     ` Jens Freimann [this message]
2018-09-06 18:19 ` [dpdk-dev] [PATCH v5 04/11] net/virtio: flush packed receive virtqueues Jens Freimann
2018-09-12  9:12   ` Maxime Coquelin
2018-09-12  9:49     ` Jens Freimann
2018-09-06 18:19 ` [dpdk-dev] [PATCH v5 05/11] net/virtio: dump packed virtqueue data Jens Freimann
2018-09-10  6:02   ` Gavin Hu (Arm Technology China)
2018-09-10  6:18     ` Tiwei Bie
2018-09-11  7:16       ` Jens Freimann
2018-09-12  9:13   ` Maxime Coquelin
2018-09-06 18:19 ` [dpdk-dev] [PATCH v5 06/11] net/virtio-user: add option to use packed queues Jens Freimann
2018-09-10  6:32   ` Gavin Hu (Arm Technology China)
2018-09-21 10:05     ` Jens Freimann
2018-09-12  9:25   ` Maxime Coquelin
2018-09-06 18:19 ` [dpdk-dev] [PATCH v5 07/11] net/virtio: implement transmit path for " Jens Freimann
2018-09-10  7:13   ` Gavin Hu (Arm Technology China)
2018-09-10  9:39   ` Gavin Hu (Arm Technology China)
2018-09-12 14:58   ` Maxime Coquelin
2018-09-13  9:15   ` Tiwei Bie
2018-09-06 18:19 ` [dpdk-dev] [PATCH v5 08/11] net/virtio: implement receive " Jens Freimann
2018-09-10 10:56   ` Gavin Hu (Arm Technology China)
2018-09-06 18:19 ` [dpdk-dev] [PATCH v5 09/11] net/virtio: disable ctrl virtqueue for packed rings Jens Freimann
2018-09-14  5:32   ` Tiwei Bie
2018-09-17  9:11     ` Jens Freimann
2018-09-06 18:19 ` [dpdk-dev] [PATCH v5 10/11] net/virtio: add support for mergeable buffers with packed virtqueues Jens Freimann
2018-09-06 18:19 ` [dpdk-dev] [PATCH v5 11/11] net/virtio: add support for event suppression Jens Freimann

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=20180912090415.4mlbiziikrrza6zq@jenstp.localdomain \
    --to=jfreimann@redhat.com \
    --cc=dev@dpdk.org \
    --cc=maxime.coquelin@redhat.com \
    --cc=tiwei.bie@intel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).