From: Huawei Xie <huawei.xie@intel.com>
To: dev@dpdk.org
Subject: [dpdk-dev] [PATCH] examples/vhost: support i40e in vhost example
Date: Sun, 28 Sep 2014 11:21:06 +0800 [thread overview]
Message-ID: <1411874466-20973-2-git-send-email-huawei.xie@intel.com> (raw)
In-Reply-To: <1411874466-20973-1-git-send-email-huawei.xie@intel.com>
i40e PMD divide queues among MAIN VSI and VMDQ VSI. The queue index and pool
index doesn't start from zero.
Get VMDQ queue base and pool base from rte_eth_dev_info_get.
Currently we set up all queues including pf queues. If PMD supports, we could only set up queues we use.
Signed-off-by: Huawei Xie <huawei.xie@intel.com>
---
examples/vhost/main.c | 34 +++++++++++++++++++++++++++-------
1 file changed, 27 insertions(+), 7 deletions(-)
diff --git a/examples/vhost/main.c b/examples/vhost/main.c
index 6569188..2dec252 100644
--- a/examples/vhost/main.c
+++ b/examples/vhost/main.c
@@ -53,7 +53,7 @@
#include "main.h"
-#define MAX_QUEUES 128
+#define MAX_QUEUES 256
/* the maximum number of external ports supported */
#define MAX_SUP_PORTS 1
@@ -281,6 +281,8 @@ static struct rte_eth_conf vmdq_conf_default = {
static unsigned lcore_ids[RTE_MAX_LCORE];
static uint8_t ports[RTE_MAX_ETHPORTS];
static unsigned num_ports = 0; /**< The number of ports specified in command line */
+static uint16_t num_pf_queues, num_vmdq_queues, queues_per_pool;
+static uint16_t vmdq_pool_base, vmdq_queue_base;
static const uint16_t external_pkt_default_vlan_tag = 2000;
const uint16_t vlan_tags[] = {
@@ -411,7 +413,11 @@ port_init(uint8_t port)
int retval;
uint16_t q;
- /* The max pool number from dev_info will be used to validate the pool number specified in cmd line */
+
+ /*
+ * The max pool number from dev_info will be used to
+ * validate the pool number specified in cmd line
+ */
rte_eth_dev_info_get (port, &dev_info);
/*configure the number of supported virtio devices based on VMDQ limits */
@@ -436,10 +442,22 @@ port_init(uint8_t port)
retval = get_eth_conf(&port_conf, num_devices);
if (retval < 0)
return retval;
+ /* NIC queues are divided into pf queues and vmdq queues. */
+ num_pf_queues = dev_info.max_rx_queues - dev_info.vmdq_queue_num;
+ queues_per_pool = dev_info.vmdq_queue_num / dev_info.max_vmdq_pools;
+ num_vmdq_queues = num_devices * queues_per_pool;
+ num_queues = num_pf_queues + num_vmdq_queues;
+ vmdq_queue_base = dev_info.vmdq_queue_base;
+ vmdq_pool_base = dev_info.vmdq_pool_base;
+ printf("pf queue num: %u, configured vmdq pool num: %u, "
+ "each vmdq pool has %u queues\n",
+ num_pf_queues, num_devices, queues_per_pool);
if (port >= rte_eth_dev_count()) return -1;
- rx_rings = (uint16_t)num_queues,
+ rx_rings = (uint16_t)num_queues;
+ tx_rings += num_pf_queues;
+
/* Configure ethernet device. */
retval = rte_eth_dev_configure(port, rx_rings, tx_rings, &port_conf);
if (retval != 0)
@@ -933,7 +951,8 @@ link_vmdq(struct vhost_dev *vdev, struct rte_mbuf *m)
vdev->vlan_tag);
/* Register the MAC address. */
- ret = rte_eth_dev_mac_addr_add(ports[0], &vdev->mac_address, (uint32_t)dev->device_fh);
+ ret = rte_eth_dev_mac_addr_add(ports[0], &vdev->mac_address,
+ (uint32_t)dev->device_fh + vmdq_pool_base);
if (ret)
RTE_LOG(ERR, VHOST_DATA, "(%"PRIu64") Failed to add device MAC address to VMDQ\n",
dev->device_fh);
@@ -2614,8 +2633,8 @@ new_device (struct virtio_net *dev)
}
ll_dev->vdev = vdev;
add_data_ll_entry(&ll_root_used, ll_dev);
- vdev->vmdq_rx_q
- = dev->device_fh * (num_queues / num_devices);
+ vdev->vmdq_rx_q = vmdq_queue_base +
+ dev->device_fh * (num_queues / queues_per_pool);
if (zero_copy) {
uint32_t index = vdev->vmdq_rx_q;
@@ -2852,7 +2871,8 @@ MAIN(int argc, char *argv[])
unsigned lcore_id, core_id = 0;
unsigned nb_ports, valid_num_ports;
int ret;
- uint8_t portid, queue_id = 0;
+ uint8_t portid;
+ uint16_t queue_id = 0;
static pthread_t tid;
/* init EAL */
--
1.8.1.4
prev parent reply other threads:[~2014-09-28 3:14 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-28 3:21 Huawei Xie
2014-09-28 3:21 ` Huawei Xie [this message]
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=1411874466-20973-2-git-send-email-huawei.xie@intel.com \
--to=huawei.xie@intel.com \
--cc=dev@dpdk.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 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).