DPDK patches and discussions
 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: [dpdk-dev] [PATCH v4 2/2] net/i40e: support PF respond VF request more queues
Date: Fri, 14 Dec 2018 14:37:20 +0000	[thread overview]
Message-ID: <20181214143720.34163-3-zhirun.yan@intel.com> (raw)
In-Reply-To: <20181214143720.34163-1-zhirun.yan@intel.com>

This patch respond the VIRTCHNL_OP_REQUEST_QUEUES msg from VF, and
process to allocated more queues for the requested VF. If successful,
PF will notify VF to reset. If unsuccessful, PF will send message to
inform VF.

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

diff --git a/drivers/net/i40e/i40e_pf.c b/drivers/net/i40e/i40e_pf.c
index dd3962d38..da0e5d6c5 100644
--- a/drivers/net/i40e/i40e_pf.c
+++ b/drivers/net/i40e/i40e_pf.c
@@ -1218,6 +1218,66 @@ i40e_notify_vf_link_status(struct rte_eth_dev *dev, struct i40e_pf_vf *vf)
 			I40E_SUCCESS, (uint8_t *)&event, sizeof(event));
 }
 
+/**
+ * i40e_vc_notify_vf_reset
+ * @vf: pointer to the VF structure
+ *
+ * indicate a pending reset to the given VF
+ **/
+static void
+i40e_vc_notify_vf_reset(struct i40e_pf_vf *vf)
+{
+	struct i40e_hw *hw = I40E_PF_TO_HW(vf->pf);
+	struct virtchnl_pf_event pfe;
+	int abs_vf_id;
+	uint16_t vf_id = vf->vf_idx;
+
+	abs_vf_id = vf_id + hw->func_caps.vf_base_id;
+	pfe.event = VIRTCHNL_EVENT_RESET_IMPENDING;
+	pfe.severity = PF_EVENT_SEVERITY_CERTAIN_DOOM;
+	i40e_aq_send_msg_to_vf(hw, abs_vf_id, VIRTCHNL_OP_EVENT, 0, (u8 *)&pfe,
+			       sizeof(struct virtchnl_pf_event), NULL);
+}
+
+static int
+i40e_pf_host_process_cmd_request_queues(struct i40e_pf_vf *vf, uint8_t *msg)
+{
+	struct virtchnl_vf_res_request *vfres =
+		(struct virtchnl_vf_res_request *)msg;
+	struct i40e_pf *pf;
+	uint32_t req_pairs = vfres->num_queue_pairs;
+	uint32_t cur_pairs = vf->vsi->nb_used_qps;
+
+	pf = vf->pf;
+
+	if (req_pairs <= 0) {
+		PMD_DRV_LOG(ERR, "VF %d tried to request %d queues. Ignoring.\n",
+			    vf->vf_idx,
+			    I40E_MAX_QP_NUM_PER_VF);
+	} else if (req_pairs > I40E_MAX_QP_NUM_PER_VF) {
+		PMD_DRV_LOG(ERR, "VF %d tried to request more than %d queues.\n",
+			    vf->vf_idx,
+			    I40E_MAX_QP_NUM_PER_VF);
+		vfres->num_queue_pairs = I40E_MAX_QP_NUM_PER_VF;
+	} else if (req_pairs > cur_pairs + pf->qp_pool.num_free) {
+		PMD_DRV_LOG(ERR, "VF %d requested %d more queues, but noly %d left\n",
+			    vf->vf_idx,
+			    req_pairs - cur_pairs,
+			    pf->qp_pool.num_free);
+		vfres->num_queue_pairs = pf->qp_pool.num_free + cur_pairs;
+	} else {
+		i40e_vc_notify_vf_reset(vf);
+		vf->vsi->nb_qps = req_pairs;
+		pf->vf_nb_qps = req_pairs;
+		i40e_pf_host_process_cmd_reset_vf(vf);
+
+		return 0;
+	}
+
+	return i40e_pf_host_send_msg_to_vf(vf, VIRTCHNL_OP_REQUEST_QUEUES, 0,
+				(u8 *)vfres, sizeof(*vfres));
+}
+
 void
 i40e_pf_host_handle_vf_msg(struct rte_eth_dev *dev,
 			   uint16_t abs_vf_id, uint32_t opcode,
@@ -1351,6 +1411,11 @@ i40e_pf_host_handle_vf_msg(struct rte_eth_dev *dev,
 		PMD_DRV_LOG(INFO, "OP_CONFIG_RSS_KEY received");
 		i40e_pf_host_process_cmd_set_rss_key(vf, msg, msglen, b_op);
 		break;
+	case VIRTCHNL_OP_REQUEST_QUEUES:
+		PMD_DRV_LOG(INFO, "OP_REQUEST_QUEUES received");
+		i40e_pf_host_process_cmd_request_queues(vf, msg);
+		break;
+
 	/* Don't add command supported below, which will
 	 * return an error code.
 	 */
-- 
2.17.1

  parent reply	other threads:[~2018-12-14  7:00 UTC|newest]

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