DPDK patches and discussions
 help / color / mirror / Atom feed
From: Maxime Coquelin <maxime.coquelin@redhat.com>
To: dev@dpdk.org, chenbo.xia@intel.com, olivier.matz@6wind.com,
	amorenoz@redhat.com, david.marchand@redhat.com
Cc: Maxime Coquelin <maxime.coquelin@redhat.com>
Subject: [dpdk-dev] [PATCH v4 16/44] net/virtio: pack virtio HW struct
Date: Tue, 26 Jan 2021 11:16:11 +0100
Message-ID: <20210126101639.250481-17-maxime.coquelin@redhat.com> (raw)
In-Reply-To: <20210126101639.250481-1-maxime.coquelin@redhat.com>

This patch improves the virtio_hw struct packing,
going from 88 down to 80 bytes with a 6 bytes hole in
the end of the first cacheline. Fields only used in the
slow path are placed in the end, so that hot path only
uses the first cacheline.

The patch also changes booleans fields to uint8_t type, and
fix inconsistencies in their assignments.

Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Reviewed-by: Chenbo Xia <chenbo.xia@intel.com>
---
 drivers/net/virtio/virtio_ethdev.c | 12 ++++----
 drivers/net/virtio/virtio_pci.h    | 45 +++++++++++++++---------------
 drivers/net/virtio/virtqueue.h     |  2 +-
 3 files changed, 29 insertions(+), 30 deletions(-)

diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c
index c46fe4adf6..c1d7b14dda 100644
--- a/drivers/net/virtio/virtio_ethdev.c
+++ b/drivers/net/virtio/virtio_ethdev.c
@@ -699,7 +699,7 @@ virtio_dev_close(struct rte_eth_dev *dev)
 
 	if (!hw->opened)
 		return 0;
-	hw->opened = false;
+	hw->opened = 0;
 
 	/* reset the NIC */
 	if (dev->data->dev_flags & RTE_ETH_DEV_INTR_LSC)
@@ -1864,7 +1864,7 @@ eth_virtio_dev_init(struct rte_eth_dev *eth_dev)
 		}
 	}
 
-	hw->opened = true;
+	hw->opened = 1;
 
 	return 0;
 
@@ -1973,7 +1973,7 @@ virtio_dev_devargs_parse(struct rte_devargs *devargs, uint32_t *speed, int *vect
 	return ret;
 }
 
-static bool
+static uint8_t
 rx_offload_enabled(struct virtio_hw *hw)
 {
 	return vtpci_with_feature(hw, VIRTIO_NET_F_GUEST_CSUM) ||
@@ -1981,7 +1981,7 @@ rx_offload_enabled(struct virtio_hw *hw)
 		vtpci_with_feature(hw, VIRTIO_NET_F_GUEST_TSO6);
 }
 
-static bool
+static uint8_t
 tx_offload_enabled(struct virtio_hw *hw)
 {
 	return vtpci_with_feature(hw, VIRTIO_NET_F_CSUM) ||
@@ -2267,7 +2267,7 @@ virtio_dev_start(struct rte_eth_dev *dev)
 	}
 
 	set_rxtx_funcs(dev);
-	hw->started = true;
+	hw->started = 1;
 
 	/* Initialize Link state */
 	virtio_dev_link_update(dev, 0);
@@ -2336,7 +2336,7 @@ virtio_dev_stop(struct rte_eth_dev *dev)
 	rte_spinlock_lock(&hw->state_lock);
 	if (!hw->started)
 		goto out_unlock;
-	hw->started = false;
+	hw->started = 0;
 
 	if (intr_conf->lsc || intr_conf->rxq) {
 		virtio_intr_disable(dev);
diff --git a/drivers/net/virtio/virtio_pci.h b/drivers/net/virtio/virtio_pci.h
index 4f3690032b..15f8144fc6 100644
--- a/drivers/net/virtio/virtio_pci.h
+++ b/drivers/net/virtio/virtio_pci.h
@@ -247,26 +247,25 @@ struct virtio_pci_ops {
 struct virtio_net_config;
 
 struct virtio_hw {
-	struct virtnet_ctl *cvq;
-	uint64_t    req_guest_features;
-	uint64_t    guest_features;
-	uint32_t    max_queue_pairs;
-	bool        started;
-	uint16_t	max_mtu;
-	uint16_t    vtnet_hdr_size;
-	uint8_t	    vlan_strip;
-	uint8_t	    use_msix;
-	uint8_t     use_vec_rx;
-	uint8_t     use_vec_tx;
-	uint8_t     use_inorder_rx;
-	uint8_t     use_inorder_tx;
-	uint8_t     weak_barriers;
-	bool        has_tx_offload;
-	bool        has_rx_offload;
-	uint16_t    port_id;
-	uint8_t     mac_addr[RTE_ETHER_ADDR_LEN];
-	uint32_t    speed;  /* link speed in MB */
-	uint8_t     duplex;
+	struct virtqueue **vqs;
+	uint64_t guest_features;
+	uint16_t vtnet_hdr_size;
+	uint8_t started;
+	uint8_t weak_barriers;
+	uint8_t vlan_strip;
+	uint8_t has_tx_offload;
+	uint8_t has_rx_offload;
+	uint8_t use_vec_rx;
+	uint8_t use_vec_tx;
+	uint8_t use_inorder_rx;
+	uint8_t use_inorder_tx;
+	uint8_t opened;
+	uint16_t port_id;
+	uint8_t mac_addr[RTE_ETHER_ADDR_LEN];
+	uint32_t speed;  /* link speed in MB */
+	uint8_t duplex;
+	uint8_t use_msix;
+	uint16_t max_mtu;
 	/*
 	 * App management thread and virtio interrupt handler thread
 	 * both can change device state, this lock is meant to avoid
@@ -274,9 +273,9 @@ struct virtio_hw {
 	 */
 	rte_spinlock_t state_lock;
 	struct rte_mbuf **inject_pkts;
-	bool        opened;
-
-	struct virtqueue **vqs;
+	uint16_t max_queue_pairs;
+	uint64_t req_guest_features;
+	struct virtnet_ctl *cvq;
 };
 
 struct virtio_pci_dev {
diff --git a/drivers/net/virtio/virtqueue.h b/drivers/net/virtio/virtqueue.h
index 7611317581..3a9ce29069 100644
--- a/drivers/net/virtio/virtqueue.h
+++ b/drivers/net/virtio/virtqueue.h
@@ -615,7 +615,7 @@ virtqueue_notify(struct virtqueue *vq)
 static inline void
 virtqueue_xmit_offload(struct virtio_net_hdr *hdr,
 			struct rte_mbuf *cookie,
-			bool offload)
+			uint8_t offload)
 {
 	if (offload) {
 		if (cookie->ol_flags & PKT_TX_TCP_SEG)
-- 
2.29.2


  parent reply	other threads:[~2021-01-26 10:19 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-26 10:15 [dpdk-dev] [PATCH v4 00/44] net/virtio: Virtio PMD rework Maxime Coquelin
2021-01-26 10:15 ` [dpdk-dev] [PATCH v4 01/44] bus/vdev: add helper to get vdev from ethdev Maxime Coquelin
2021-01-26 10:15 ` [dpdk-dev] [PATCH v4 02/44] bus/vdev: add driver IOVA VA mode requirement Maxime Coquelin
2021-01-26 11:50   ` Xia, Chenbo
2021-01-26 12:50   ` David Marchand
2021-01-26 13:23     ` Kinsella, Ray
2021-01-26 14:40       ` David Marchand
2021-01-26 15:28         ` Kinsella, Ray
2021-01-27  8:23   ` David Marchand
2021-01-27  8:25     ` Maxime Coquelin
2021-01-26 10:15 ` [dpdk-dev] [PATCH v4 03/44] net/virtio: fix getting old status on reconnect Maxime Coquelin
2021-01-26 10:15 ` [dpdk-dev] [PATCH v4 04/44] net/virtio: introduce Virtio bus type Maxime Coquelin
2021-01-26 10:16 ` [dpdk-dev] [PATCH v4 05/44] net/virtio: refactor virtio-user device Maxime Coquelin
2021-01-26 10:16 ` [dpdk-dev] [PATCH v4 06/44] net/virtio: introduce PCI device metadata Maxime Coquelin
2021-01-26 10:16 ` [dpdk-dev] [PATCH v4 07/44] net/virtio: move PCI device init in dedicated file Maxime Coquelin
2021-01-26 10:16 ` [dpdk-dev] [PATCH v4 08/44] net/virtio: move PCI specific dev init to PCI ethdev init Maxime Coquelin
2021-01-26 10:16 ` [dpdk-dev] [PATCH v4 09/44] net/virtio: move MSIX detection to PCI ethdev Maxime Coquelin
2021-01-26 10:16 ` [dpdk-dev] [PATCH v4 10/44] net/virtio: force IOVA as VA mode for Virtio-user Maxime Coquelin
2021-01-26 10:16 ` [dpdk-dev] [PATCH v4 11/44] net/virtio: store PCI type in Virtio device metadata Maxime Coquelin
2021-01-26 10:16 ` [dpdk-dev] [PATCH v4 12/44] net/virtio: add callback for device closing Maxime Coquelin
2021-01-26 10:16 ` [dpdk-dev] [PATCH v4 13/44] net/virtio: validate features at bus level Maxime Coquelin
2021-01-26 10:16 ` [dpdk-dev] [PATCH v4 14/44] net/virtio: remove bus type enum Maxime Coquelin
2021-01-26 10:16 ` [dpdk-dev] [PATCH v4 15/44] net/virtio: move PCI-specific fields to PCI device Maxime Coquelin
2021-01-26 10:16 ` Maxime Coquelin [this message]
2021-01-26 10:16 ` [dpdk-dev] [PATCH v4 17/44] net/virtio: move legacy IO to Virtio PCI Maxime Coquelin
2021-01-26 10:16 ` [dpdk-dev] [PATCH v4 18/44] net/virtio: introduce generic virtio header Maxime Coquelin
2021-01-26 10:16 ` [dpdk-dev] [PATCH v4 19/44] net/virtio: move features definition to generic header Maxime Coquelin
2021-01-26 10:16 ` [dpdk-dev] [PATCH v4 20/44] net/virtio: move virtqueue defines in " Maxime Coquelin
2021-01-26 10:16 ` [dpdk-dev] [PATCH v4 21/44] net/virtio: move config definitions to " Maxime Coquelin
2021-01-26 10:16 ` [dpdk-dev] [PATCH v4 22/44] net/virtio: make interrupt handling more generic Maxime Coquelin
2021-01-26 10:16 ` [dpdk-dev] [PATCH v4 23/44] net/virtio: move vring alignment to generic header Maxime Coquelin
2021-01-26 10:16 ` [dpdk-dev] [PATCH v4 24/44] net/virtio: remove last PCI refs in non-PCI code Maxime Coquelin
2021-01-26 10:16 ` [dpdk-dev] [PATCH v4 25/44] net/virtio: make Vhost-user request sender consistent Maxime Coquelin
2021-01-26 10:16 ` [dpdk-dev] [PATCH v4 26/44] net/virtio: add Virtio-user ops to set owner Maxime Coquelin
2021-01-26 10:16 ` [dpdk-dev] [PATCH v4 27/44] net/virtio: add Virtio-user features ops Maxime Coquelin
2021-01-26 10:16 ` [dpdk-dev] [PATCH v4 28/44] net/virtio: add Virtio-user protocol " Maxime Coquelin
2021-01-26 10:16 ` [dpdk-dev] [PATCH v4 29/44] net/virtio: add Virtio-user memory tables ops Maxime Coquelin
2021-01-26 10:16 ` [dpdk-dev] [PATCH v4 30/44] net/virtio: add Virtio-user vring setting ops Maxime Coquelin
2021-01-26 10:16 ` [dpdk-dev] [PATCH v4 31/44] net/virtio: add Virtio-user vring file ops Maxime Coquelin
2021-01-26 10:16 ` [dpdk-dev] [PATCH v4 32/44] net/virtio: add Virtio-user vring address ops Maxime Coquelin
2021-01-26 10:16 ` [dpdk-dev] [PATCH v4 33/44] net/virtio: add Virtio-user status ops Maxime Coquelin
2021-01-26 10:16 ` [dpdk-dev] [PATCH v4 34/44] net/virtio: remove useless request ops Maxime Coquelin
2021-01-26 10:16 ` [dpdk-dev] [PATCH v4 35/44] net/virtio: improve Virtio-user errors handling Maxime Coquelin
2021-01-26 10:16 ` [dpdk-dev] [PATCH v4 36/44] net/virtio: move Vhost-user requests to Vhost-user backend Maxime Coquelin
2021-01-26 10:16 ` [dpdk-dev] [PATCH v4 37/44] net/virtio: make server mode blocking Maxime Coquelin
2021-01-26 10:16 ` [dpdk-dev] [PATCH v4 38/44] net/virtio: move protocol features to Vhost-user Maxime Coquelin
2021-01-26 10:16 ` [dpdk-dev] [PATCH v4 39/44] net/virtio: introduce backend data Maxime Coquelin
2021-01-26 10:16 ` [dpdk-dev] [PATCH v4 40/44] net/virtio: move Vhost-user specifics to its backend Maxime Coquelin
2021-01-26 10:16 ` [dpdk-dev] [PATCH v4 41/44] net/virtio: move Vhost-kernel data " Maxime Coquelin
2021-01-26 10:16 ` [dpdk-dev] [PATCH v4 42/44] net/virtio: move Vhost-vDPA " Maxime Coquelin
2021-01-26 10:16 ` [dpdk-dev] [PATCH v4 43/44] net/virtio: improve Vhost-user error logging Maxime Coquelin
2021-01-26 10:16 ` [dpdk-dev] [PATCH v4 44/44] net/virtio: handle Virtio-user setup failure properly Maxime Coquelin
2021-01-26 12:02   ` Xia, Chenbo
2021-01-26 12:59     ` Maxime Coquelin
2021-01-27 11:59 ` [dpdk-dev] [PATCH v4 00/44] net/virtio: Virtio PMD rework Maxime Coquelin
2021-02-01  8:44 ` Wang, Yinan
2021-02-01  8:49   ` Maxime Coquelin
2021-02-01 13:00 ` Ilya Maximets
2021-02-01 13:03   ` Ilya Maximets
2021-02-01 13:16     ` Maxime Coquelin
2021-02-01 13:42       ` Ilya Maximets
2021-02-01 13:51         ` Maxime Coquelin

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=20210126101639.250481-17-maxime.coquelin@redhat.com \
    --to=maxime.coquelin@redhat.com \
    --cc=amorenoz@redhat.com \
    --cc=chenbo.xia@intel.com \
    --cc=david.marchand@redhat.com \
    --cc=dev@dpdk.org \
    --cc=olivier.matz@6wind.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

DPDK patches and discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://inbox.dpdk.org/dev/0 dev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 dev dev/ https://inbox.dpdk.org/dev \
		dev@dpdk.org
	public-inbox-index dev

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://inbox.dpdk.org/inbox.dpdk.dev


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git