All of lore.kernel.org
 help / color / mirror / Atom feed
From: Zhirun Yan <zhirun.yan@intel.com>
To: dev@dpdk.org, qi.z.zhang@intel.com
Cc: Zhirun Yan <zhirun.yan@intel.com>, Haiyue Wang <haiyue.wang@intel.com>
Subject: [PATCH v3 1/2] net/i40e: support VF request more queues
Date: Thu, 13 Dec 2018 14:05:04 +0000	[thread overview]
Message-ID: <20181213140505.14578-2-zhirun.yan@intel.com> (raw)
In-Reply-To: <20181213140505.14578-1-zhirun.yan@intel.com>

Before this patch, VF gets a default number of queues from the PF.
This patch enables VF to request a different number. When VF configures
more queues, it will send VIRTCHNL_OP_REQUEST_QUEUES to PF to request
more queues, if success, PF will reset the VF.

User can run "port stop all", "port config port_id rxq/txq queue_num"
and "port start all" to reconfigure queue number.

Signed-off-by: Zhirun Yan <zhirun.yan@intel.com>
Signed-off-by: Haiyue Wang <haiyue.wang@intel.com>
---
 drivers/net/i40e/i40e_ethdev_vf.c | 56 ++++++++++++++++++++++++++++---
 1 file changed, 52 insertions(+), 4 deletions(-)

diff --git a/drivers/net/i40e/i40e_ethdev_vf.c b/drivers/net/i40e/i40e_ethdev_vf.c
index cecedc91f..50e3f1f4f 100644
--- a/drivers/net/i40e/i40e_ethdev_vf.c
+++ b/drivers/net/i40e/i40e_ethdev_vf.c
@@ -343,6 +343,7 @@ i40evf_execute_vf_cmd(struct rte_eth_dev *dev, struct vf_cmd_info *args)
 		err = 0;
 		break;
 	case VIRTCHNL_OP_VERSION:
+	case VIRTCHNL_OP_REQUEST_QUEUES:
 	case VIRTCHNL_OP_GET_VF_RESOURCES:
 		/* for init adminq commands, need to poll the response */
 		err = -1;
@@ -350,8 +351,15 @@ i40evf_execute_vf_cmd(struct rte_eth_dev *dev, struct vf_cmd_info *args)
 			ret = i40evf_read_pfmsg(dev, &info);
 			vf->cmd_retval = info.result;
 			if (ret == I40EVF_MSG_CMD) {
-				err = 0;
+				if (info.ops != VIRTCHNL_OP_REQUEST_QUEUES)
+					err = 0;
 				break;
+			} else if (ret == I40EVF_MSG_SYS) {
+				if (args->ops == VIRTCHNL_OP_REQUEST_QUEUES &&
+					vf->vf_reset) {
+					err = 0;
+					break;
+				}
 			} else if (ret == I40EVF_MSG_ERR)
 				break;
 			rte_delay_ms(ASQ_DELAY_MS);
@@ -1012,6 +1020,28 @@ i40evf_add_vlan(struct rte_eth_dev *dev, uint16_t vlanid)
 	return err;
 }
 
+static int
+i40evf_request_queues(struct rte_eth_dev *dev, uint16_t num)
+{
+	struct i40e_vf *vf = I40EVF_DEV_PRIVATE_TO_VF(dev->data->dev_private);
+	struct virtchnl_vf_res_request vfres;
+	struct vf_cmd_info args;
+	int err;
+
+	vfres.num_queue_pairs = num;
+
+	args.ops = VIRTCHNL_OP_REQUEST_QUEUES;
+	args.in_args = (u8 *)&vfres;
+	args.in_args_size = sizeof(vfres);
+	args.out_buffer = vf->aq_resp;
+	args.out_size = I40E_AQ_BUF_SZ;
+	err = i40evf_execute_vf_cmd(dev, &args);
+	if (err)
+		PMD_DRV_LOG(ERR, "fail to execute command OP_REQUEST_QUEUES");
+
+	return err;
+}
+
 static int
 i40evf_del_vlan(struct rte_eth_dev *dev, uint16_t vlanid)
 {
@@ -1515,8 +1545,12 @@ RTE_PMD_REGISTER_KMOD_DEP(net_i40e_vf, "* igb_uio | vfio-pci");
 static int
 i40evf_dev_configure(struct rte_eth_dev *dev)
 {
+	struct i40e_vf *vf = I40EVF_DEV_PRIVATE_TO_VF(dev->data->dev_private);
 	struct i40e_adapter *ad =
 		I40E_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);
+	uint16_t num_queue_pairs = RTE_MAX(dev->data->nb_rx_queues,
+				dev->data->nb_tx_queues);
+	int ret = 0;
 
 	/* Initialize to TRUE. If any of Rx queues doesn't meet the bulk
 	 * allocation or vector Rx preconditions we will reset it.
@@ -1526,7 +1560,21 @@ i40evf_dev_configure(struct rte_eth_dev *dev)
 	ad->tx_simple_allowed = true;
 	ad->tx_vec_allowed = true;
 
-	return i40evf_init_vlan(dev);
+	if (num_queue_pairs != vf->vsi_res->num_queue_pairs) {
+		PMD_DRV_LOG(INFO, "change queue pairs from %u to %u",
+				vf->vsi_res->num_queue_pairs, num_queue_pairs);
+		ret = i40evf_request_queues(dev, num_queue_pairs);
+		if (ret != 0)
+			return ret;
+
+		ret = i40evf_dev_reset(dev);
+		if (ret != 0)
+			return ret;
+	}
+
+	i40evf_init_vlan(dev);
+
+	return ret;
 }
 
 static int
@@ -2137,8 +2185,8 @@ i40evf_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
 {
 	struct i40e_vf *vf = I40EVF_DEV_PRIVATE_TO_VF(dev->data->dev_private);
 
-	dev_info->max_rx_queues = vf->vsi_res->num_queue_pairs;
-	dev_info->max_tx_queues = vf->vsi_res->num_queue_pairs;
+	dev_info->max_rx_queues = I40E_MAX_QP_NUM_PER_VF;
+	dev_info->max_tx_queues = I40E_MAX_QP_NUM_PER_VF;
 	dev_info->min_rx_bufsize = I40E_BUF_SIZE_MIN;
 	dev_info->max_rx_pktlen = I40E_FRAME_SIZE_MAX;
 	dev_info->hash_key_size = (I40E_VFQF_HKEY_MAX_INDEX + 1) * sizeof(uint32_t);
-- 
2.17.1

  reply	other threads:[~2018-12-13  6:28 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-28 16:58 [PATCH v2 0/2] Support request more queues Zhirun Yan
2018-11-28 16:58 ` [PATCH v2 1/2] net/i40e: support VF " Zhirun Yan
2018-11-28 16:58 ` [PATCH v2 2/2] net/i40e: support PF respond " Zhirun Yan
2018-12-13 14:05 ` [PATCH v3 0/2] Support " Zhirun Yan
2018-12-13 14:05   ` Zhirun Yan [this message]
2018-12-13  8:26     ` [PATCH v3 1/2] net/i40e: support VF " David Marchand
2018-12-14  3:17       ` Yan, Zhirun
2018-12-13 10:49     ` Zhang, Qi Z
2018-12-14  3:22       ` Yan, Zhirun
2018-12-13 14:05   ` [PATCH v3 2/2] net/i40e: support PF respond " Zhirun Yan
2018-12-14 14:37   ` [PATCH v4 0/2] Support " Zhirun Yan
2018-12-14 14:37     ` [PATCH v4 1/2] net/i40e: support VF " Zhirun Yan
2018-12-14 11:59       ` Zhang, Qi Z
2018-12-17  3:12         ` Yan, Zhirun
2018-12-14 14:37     ` [PATCH v4 2/2] net/i40e: support PF respond " Zhirun Yan
2018-12-17 11:10     ` [PATCH v5 0/2] Support " Zhirun Yan
2018-12-17  5:31       ` Zhang, Qi Z
2018-12-17 11:10       ` [PATCH v5 1/2] net/i40e: support VF " Zhirun Yan
2018-12-17 14:28         ` Ferruh Yigit
2018-12-18  1:44           ` Zhang, Qi Z
2018-12-17 14:31         ` Ferruh Yigit
2018-12-17 11:10       ` [PATCH v5 2/2] net/i40e: support PF respond " Zhirun Yan
2018-12-17 14:26         ` Ferruh Yigit
2018-12-18 16:09       ` [PATCH v6 0/3] Support " Zhirun Yan
2018-12-18 16:09         ` [PATCH v6 1/3] net/i40e: support VF " Zhirun Yan
2018-12-18 12:44           ` Zhang, Qi Z
2018-12-19  1:34             ` Yan, Zhirun
2018-12-18 16:09         ` [PATCH v6 2/3] net/i40e: support PF respond " Zhirun Yan
2018-12-18 16:09         ` [PATCH v6 3/3] doc: update queue number per vf for i40e Zhirun Yan
2018-12-18 12:59           ` Zhang, Qi Z
2018-12-19  1:33             ` Yan, Zhirun
2018-12-19 13:08         ` [PATCH v7 0/3] Support request more queues Zhirun Yan
2018-12-19 13:08           ` [PATCH v7 1/3] net/i40e: support VF " Zhirun Yan
2018-12-19 13:08           ` [PATCH v7 2/3] net/i40e: support PF respond " Zhirun Yan
2018-12-19 13:08           ` [PATCH v7 3/3] doc: update queue number per vf for i40e Zhirun Yan
2018-12-19 13:37             ` [PATCH v8 0/3] Support request more queues Zhirun Yan
2018-12-19 13:37               ` [PATCH v8 1/3] net/i40e: support VF " Zhirun Yan
2018-12-19 13:37               ` [PATCH v8 2/3] net/i40e: support PF respond " Zhirun Yan
2018-12-19 13:37               ` [PATCH v8 3/3] doc: update queue number per vf for i40e Zhirun Yan

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=20181213140505.14578-2-zhirun.yan@intel.com \
    --to=zhirun.yan@intel.com \
    --cc=dev@dpdk.org \
    --cc=haiyue.wang@intel.com \
    --cc=qi.z.zhang@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.