net/virtio: define avail and used flags as constants
Checks
Commit Message
We are consistently passing 1 as the argument in the data path,
so there is no need to define avail/used flags as function-like
macros anymore. This patch changes the avail and used flags to
constants. And a frequently used combination is also introduced.
Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
---
drivers/net/virtio/virtio_ethdev.c | 10 ++++------
drivers/net/virtio/virtio_ring.h | 9 +++++++--
drivers/net/virtio/virtio_rxtx.c | 9 ++++-----
.../net/virtio/virtio_user/virtio_user_dev.c | 17 ++++++++++-------
drivers/net/virtio/virtqueue.h | 4 ++--
5 files changed, 27 insertions(+), 22 deletions(-)
Comments
On Mon, Mar 25, 2019 at 01:27:16PM +0800, Tiwei Bie wrote:
>We are consistently passing 1 as the argument in the data path,
>so there is no need to define avail/used flags as function-like
>macros anymore. This patch changes the avail and used flags to
>constants. And a frequently used combination is also introduced.
>
>Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
>---
> drivers/net/virtio/virtio_ethdev.c | 10 ++++------
> drivers/net/virtio/virtio_ring.h | 9 +++++++--
> drivers/net/virtio/virtio_rxtx.c | 9 ++++-----
> .../net/virtio/virtio_user/virtio_user_dev.c | 17 ++++++++++-------
> drivers/net/virtio/virtqueue.h | 4 ++--
> 5 files changed, 27 insertions(+), 22 deletions(-)
>
Reviewed-by: Jens Freimann <jfreimann@redhat.com>
On 3/25/19 6:27 AM, Tiwei Bie wrote:
> We are consistently passing 1 as the argument in the data path,
> so there is no need to define avail/used flags as function-like
> macros anymore. This patch changes the avail and used flags to
> constants. And a frequently used combination is also introduced.
>
> Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
> ---
> drivers/net/virtio/virtio_ethdev.c | 10 ++++------
> drivers/net/virtio/virtio_ring.h | 9 +++++++--
> drivers/net/virtio/virtio_rxtx.c | 9 ++++-----
> .../net/virtio/virtio_user/virtio_user_dev.c | 17 ++++++++++-------
> drivers/net/virtio/virtqueue.h | 4 ++--
> 5 files changed, 27 insertions(+), 22 deletions(-)
>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Thanks,
Maxime
On 3/25/19 6:27 AM, Tiwei Bie wrote:
> We are consistently passing 1 as the argument in the data path,
> so there is no need to define avail/used flags as function-like
> macros anymore. This patch changes the avail and used flags to
> constants. And a frequently used combination is also introduced.
>
> Signed-off-by: Tiwei Bie<tiwei.bie@intel.com>
> ---
> drivers/net/virtio/virtio_ethdev.c | 10 ++++------
> drivers/net/virtio/virtio_ring.h | 9 +++++++--
> drivers/net/virtio/virtio_rxtx.c | 9 ++++-----
> .../net/virtio/virtio_user/virtio_user_dev.c | 17 ++++++++++-------
> drivers/net/virtio/virtqueue.h | 4 ++--
> 5 files changed, 27 insertions(+), 22 deletions(-)
Applied to dpdk-next-virtio/master.
Thanks,
Maxime
@@ -168,8 +168,7 @@ virtio_send_command_packed(struct virtnet_ctl *cvq,
nb_descs++;
if (++vq->vq_avail_idx >= vq->vq_nentries) {
vq->vq_avail_idx -= vq->vq_nentries;
- vq->vq_packed.cached_flags ^=
- VRING_DESC_F_AVAIL(1) | VRING_DESC_F_USED(1);
+ vq->vq_packed.cached_flags ^= VRING_PACKED_DESC_F_AVAIL_USED;
}
for (k = 0; k < pkt_num; k++) {
@@ -185,7 +184,7 @@ virtio_send_command_packed(struct virtnet_ctl *cvq,
if (++vq->vq_avail_idx >= vq->vq_nentries) {
vq->vq_avail_idx -= vq->vq_nentries;
vq->vq_packed.cached_flags ^=
- VRING_DESC_F_AVAIL(1) | VRING_DESC_F_USED(1);
+ VRING_PACKED_DESC_F_AVAIL_USED;
}
}
@@ -198,8 +197,7 @@ virtio_send_command_packed(struct virtnet_ctl *cvq,
nb_descs++;
if (++vq->vq_avail_idx >= vq->vq_nentries) {
vq->vq_avail_idx -= vq->vq_nentries;
- vq->vq_packed.cached_flags ^=
- VRING_DESC_F_AVAIL(1) | VRING_DESC_F_USED(1);
+ vq->vq_packed.cached_flags ^= VRING_PACKED_DESC_F_AVAIL_USED;
}
virtio_wmb(vq->hw->weak_barriers);
@@ -502,7 +500,7 @@ virtio_init_queue(struct rte_eth_dev *dev, uint16_t vtpci_queue_idx)
vq->vq_nentries = vq_size;
if (vtpci_packed_queue(hw)) {
vq->vq_packed.used_wrap_counter = 1;
- vq->vq_packed.cached_flags = VRING_DESC_F_AVAIL(1);
+ vq->vq_packed.cached_flags = VRING_PACKED_DESC_F_AVAIL;
vq->vq_packed.event_flags_shadow = 0;
if (queue_type == VTNET_RQ)
vq->vq_packed.cached_flags |= VRING_DESC_F_WRITE;
@@ -15,10 +15,15 @@
#define VRING_DESC_F_WRITE 2
/* This means the buffer contains a list of buffer descriptors. */
#define VRING_DESC_F_INDIRECT 4
+
/* This flag means the descriptor was made available by the driver */
-#define VRING_DESC_F_AVAIL(b) ((uint16_t)(b) << 7)
+#define VRING_PACKED_DESC_F_AVAIL (1 << 7)
/* This flag means the descriptor was used by the device */
-#define VRING_DESC_F_USED(b) ((uint16_t)(b) << 15)
+#define VRING_PACKED_DESC_F_USED (1 << 15)
+
+/* Frequently used combinations */
+#define VRING_PACKED_DESC_F_AVAIL_USED (VRING_PACKED_DESC_F_AVAIL | \
+ VRING_PACKED_DESC_F_USED)
/* The Host uses this in used->flags to advise the Guest: don't kick me
* when you add a buffer. It's unreliable, so it's simply an
@@ -461,7 +461,7 @@ virtqueue_enqueue_recv_refill_packed(struct virtqueue *vq,
if (++vq->vq_avail_idx >= vq->vq_nentries) {
vq->vq_avail_idx -= vq->vq_nentries;
vq->vq_packed.cached_flags ^=
- VRING_DESC_F_AVAIL(1) | VRING_DESC_F_USED(1);
+ VRING_PACKED_DESC_F_AVAIL_USED;
flags = vq->vq_packed.cached_flags;
}
}
@@ -660,8 +660,7 @@ virtqueue_enqueue_xmit_packed_fast(struct virtnet_tx *txvq,
if (++vq->vq_avail_idx >= vq->vq_nentries) {
vq->vq_avail_idx -= vq->vq_nentries;
- vq->vq_packed.cached_flags ^=
- VRING_DESC_F_AVAIL(1) | VRING_DESC_F_USED(1);
+ vq->vq_packed.cached_flags ^= VRING_PACKED_DESC_F_AVAIL_USED;
}
vq->vq_free_cnt--;
@@ -728,7 +727,7 @@ virtqueue_enqueue_xmit_packed(struct virtnet_tx *txvq, struct rte_mbuf *cookie,
if (idx >= vq->vq_nentries) {
idx -= vq->vq_nentries;
vq->vq_packed.cached_flags ^=
- VRING_DESC_F_AVAIL(1) | VRING_DESC_F_USED(1);
+ VRING_PACKED_DESC_F_AVAIL_USED;
}
}
@@ -749,7 +748,7 @@ virtqueue_enqueue_xmit_packed(struct virtnet_tx *txvq, struct rte_mbuf *cookie,
if (idx >= vq->vq_nentries) {
idx -= vq->vq_nentries;
vq->vq_packed.cached_flags ^=
- VRING_DESC_F_AVAIL(1) | VRING_DESC_F_USED(1);
+ VRING_PACKED_DESC_F_AVAIL_USED;
}
} while ((cookie = cookie->next) != NULL);
@@ -628,8 +628,10 @@ virtio_user_handle_ctrl_msg(struct virtio_user_dev *dev, struct vring *vring,
static inline int
desc_is_avail(struct vring_packed_desc *desc, bool wrap_counter)
{
- return wrap_counter == !!(desc->flags & VRING_DESC_F_AVAIL(1)) &&
- wrap_counter != !!(desc->flags & VRING_DESC_F_USED(1));
+ uint16_t flags = desc->flags;
+
+ return wrap_counter == !!(flags & VRING_PACKED_DESC_F_AVAIL) &&
+ wrap_counter != !!(flags & VRING_PACKED_DESC_F_USED);
}
static uint32_t
@@ -684,7 +686,7 @@ virtio_user_handle_cq_packed(struct virtio_user_dev *dev, uint16_t queue_idx)
{
struct virtio_user_queue *vq = &dev->packed_queues[queue_idx];
struct vring_packed *vring = &dev->packed_vrings[queue_idx];
- uint16_t n_descs;
+ uint16_t n_descs, flags;
while (desc_is_avail(&vring->desc[vq->used_idx],
vq->used_wrap_counter)) {
@@ -692,11 +694,12 @@ virtio_user_handle_cq_packed(struct virtio_user_dev *dev, uint16_t queue_idx)
n_descs = virtio_user_handle_ctrl_msg_packed(dev, vring,
vq->used_idx);
+ flags = VRING_DESC_F_WRITE;
+ if (vq->used_wrap_counter)
+ flags |= VRING_PACKED_DESC_F_AVAIL_USED;
+
rte_smp_wmb();
- vring->desc[vq->used_idx].flags =
- VRING_DESC_F_WRITE |
- VRING_DESC_F_AVAIL(vq->used_wrap_counter) |
- VRING_DESC_F_USED(vq->used_wrap_counter);
+ vring->desc[vq->used_idx].flags = flags;
vq->used_idx += n_descs;
if (vq->used_idx >= dev->queue_size) {
@@ -287,8 +287,8 @@ desc_is_used(struct vring_packed_desc *desc, struct virtqueue *vq)
uint16_t used, avail, flags;
flags = desc->flags;
- used = !!(flags & VRING_DESC_F_USED(1));
- avail = !!(flags & VRING_DESC_F_AVAIL(1));
+ used = !!(flags & VRING_PACKED_DESC_F_USED);
+ avail = !!(flags & VRING_PACKED_DESC_F_AVAIL);
return avail == used && used == vq->vq_packed.used_wrap_counter;
}