patches for DPDK stable branches
 help / color / mirror / Atom feed
From: Yuanhan Liu <yliu@fridaylinux.org>
To: Kirill Rybalchenko <kirill.rybalchenko@intel.com>
Cc: Andrey Chilikin <andrey.chilikin@intel.com>,
	Beilei Xing <beilei.xing@intel.com>,
	dpdk stable <stable@dpdk.org>
Subject: [dpdk-stable] patch 'net/i40e: fix multiple DDP packages conflict' has been queued to LTS release 17.11.1
Date: Wed,  7 Feb 2018 16:57:18 +0800	[thread overview]
Message-ID: <1517993838-26692-24-git-send-email-yliu@fridaylinux.org> (raw)
In-Reply-To: <1517993838-26692-1-git-send-email-yliu@fridaylinux.org>

Hi,

FYI, your patch has been queued to LTS release 17.11.1

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 02/09/18. So please
shout if anyone has objections.

Thanks.

	--yliu

---
>From fb4c79d4062f110201af15040d8cd78373881582 Mon Sep 17 00:00:00 2001
From: Kirill Rybalchenko <kirill.rybalchenko@intel.com>
Date: Thu, 1 Feb 2018 12:43:05 +0000
Subject: [PATCH] net/i40e: fix multiple DDP packages conflict

[ upstream commit b1ec717bfff5cede471261078f3e2dce156553f4 ]

Should be not possible to load conflicting DDP profiles. Only DDP
profiles of the same group (not 0) can be loaded together. If DDP
profile group is 0, it is exclusive, i.e. it cannot be loaded with
any other DDP profile. If DDP profile groups are different, these
profiles cannot be loaded together.

Fixes: b319712f53c8 ("net/i40e: extended list of operations for DDP processing")

Signed-off-by: Kirill Rybalchenko <kirill.rybalchenko@intel.com>
Acked-by: Andrey Chilikin <andrey.chilikin@intel.com>
Acked-by: Beilei Xing <beilei.xing@intel.com>
---
 drivers/net/i40e/rte_pmd_i40e.c | 40 ++++++++++++++++++++++++++++++++++++----
 1 file changed, 36 insertions(+), 4 deletions(-)

diff --git a/drivers/net/i40e/rte_pmd_i40e.c b/drivers/net/i40e/rte_pmd_i40e.c
index c2e2466..f726a9c 100644
--- a/drivers/net/i40e/rte_pmd_i40e.c
+++ b/drivers/net/i40e/rte_pmd_i40e.c
@@ -1525,7 +1525,14 @@ i40e_check_profile_info(uint16_t port, uint8_t *profile_info_sec)
 	struct rte_pmd_i40e_profile_info *pinfo, *p;
 	uint32_t i;
 	int ret;
+	static const uint32_t group_mask = 0x00ff0000;
 
+	pinfo = (struct rte_pmd_i40e_profile_info *)(profile_info_sec +
+			     sizeof(struct i40e_profile_section_header));
+	if (pinfo->track_id == 0) {
+		PMD_DRV_LOG(INFO, "Read-only profile.");
+		return 0;
+	}
 	buff = rte_zmalloc("pinfo_list",
 			   (I40E_PROFILE_INFO_SIZE * I40E_MAX_PROFILE_NUM + 4),
 			   0);
@@ -1544,8 +1551,6 @@ i40e_check_profile_info(uint16_t port, uint8_t *profile_info_sec)
 		return -1;
 	}
 	p_list = (struct rte_pmd_i40e_profile_list *)buff;
-	pinfo = (struct rte_pmd_i40e_profile_info *)(profile_info_sec +
-			     sizeof(struct i40e_profile_section_header));
 	for (i = 0; i < p_list->p_count; i++) {
 		p = &p_list->p_info[i];
 		if (pinfo->track_id == p->track_id) {
@@ -1554,6 +1559,23 @@ i40e_check_profile_info(uint16_t port, uint8_t *profile_info_sec)
 			return 1;
 		}
 	}
+	for (i = 0; i < p_list->p_count; i++) {
+		p = &p_list->p_info[i];
+		if ((p->track_id & group_mask) == 0) {
+			PMD_DRV_LOG(INFO, "Profile of the group 0 exists.");
+			rte_free(buff);
+			return 2;
+		}
+	}
+	for (i = 0; i < p_list->p_count; i++) {
+		p = &p_list->p_info[i];
+		if ((pinfo->track_id & group_mask) !=
+		    (p->track_id & group_mask)) {
+			PMD_DRV_LOG(INFO, "Profile of different group exists.");
+			rte_free(buff);
+			return 3;
+		}
+	}
 
 	rte_free(buff);
 	return 0;
@@ -1573,6 +1595,7 @@ rte_pmd_i40e_process_ddp_package(uint16_t port, uint8_t *buff,
 	uint8_t *profile_info_sec;
 	int is_exist;
 	enum i40e_status_code status = I40E_SUCCESS;
+	static const uint32_t type_mask = 0xff000000;
 
 	if (op != RTE_PMD_I40E_PKG_OP_WR_ADD &&
 		op != RTE_PMD_I40E_PKG_OP_WR_ONLY &&
@@ -1624,6 +1647,10 @@ rte_pmd_i40e_process_ddp_package(uint16_t port, uint8_t *buff,
 		return -EINVAL;
 	}
 
+	/* force read-only track_id for type 0 */
+	if ((track_id & type_mask) == 0)
+		track_id = 0;
+
 	/* Find profile segment */
 	profile_seg_hdr = i40e_find_segment_in_package(SEGMENT_TYPE_I40E,
 						       pkg_hdr);
@@ -1657,12 +1684,17 @@ rte_pmd_i40e_process_ddp_package(uint16_t port, uint8_t *buff,
 
 	if (op == RTE_PMD_I40E_PKG_OP_WR_ADD) {
 		if (is_exist) {
-			PMD_DRV_LOG(ERR, "Profile already exists.");
+			if (is_exist == 1)
+				PMD_DRV_LOG(ERR, "Profile already exists.");
+			else if (is_exist == 2)
+				PMD_DRV_LOG(ERR, "Profile of group 0 already exists.");
+			else if (is_exist == 3)
+				PMD_DRV_LOG(ERR, "Profile of different group already exists");
 			rte_free(profile_info_sec);
 			return -EEXIST;
 		}
 	} else if (op == RTE_PMD_I40E_PKG_OP_WR_DEL) {
-		if (!is_exist) {
+		if (is_exist != 1) {
 			PMD_DRV_LOG(ERR, "Profile does not exist.");
 			rte_free(profile_info_sec);
 			return -EACCES;
-- 
2.7.4

      parent reply	other threads:[~2018-02-07  9:00 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-07  8:56 [dpdk-stable] patch 'mk: fix external build' " Yuanhan Liu
2018-02-07  8:56 ` [dpdk-stable] patch 'bus/vdev: continue probing after a device failure' " Yuanhan Liu
2018-02-07  8:56 ` [dpdk-stable] patch 'mempool: fix physical contiguous check' " Yuanhan Liu
2018-02-07  8:56 ` [dpdk-stable] patch 'usertools/devbind: fix kernel module reporting' " Yuanhan Liu
2018-02-07  8:56 ` [dpdk-stable] patch 'net/mlx4: fix drop flow resources leak' " Yuanhan Liu
2018-02-07  8:57 ` [dpdk-stable] patch 'net/bonding: check error of MAC address setting' " Yuanhan Liu
2018-02-07  8:57 ` [dpdk-stable] patch 'net/qede: fix few log messages' " Yuanhan Liu
2018-02-07  8:57 ` [dpdk-stable] patch 'vhost: fix IOTLB pool out-of-memory handling' " Yuanhan Liu
2018-02-07  8:57 ` [dpdk-stable] patch 'vhost: remove pending IOTLB entry if miss request failed' " Yuanhan Liu
2018-02-07  8:57 ` [dpdk-stable] patch 'net/mlx4: fix Rx offload non-fragmented indication' " Yuanhan Liu
2018-02-07  8:57 ` [dpdk-stable] patch 'net/mlx5: fix flow RSS configuration' " Yuanhan Liu
2018-02-07  8:57 ` [dpdk-stable] patch 'net/mlx5: fix UAR remapping on non configured queues' " Yuanhan Liu
2018-02-07  8:57 ` [dpdk-stable] patch 'app/testpmd: fix port index in RSS forward config' " Yuanhan Liu
2018-02-07  8:57 ` [dpdk-stable] patch 'app/testpmd: fix port topology " Yuanhan Liu
2018-02-07  8:57 ` [dpdk-stable] patch 'bus/fslmc: fix build with latest glibc' " Yuanhan Liu
2018-02-07  8:57 ` [dpdk-stable] patch 'bus/dpaa: fix default IOVA mode' " Yuanhan Liu
2018-02-07  8:57 ` [dpdk-stable] patch 'examples/ip_pipeline: fix timer period unit' " Yuanhan Liu
2018-02-07  8:57 ` [dpdk-stable] patch 'test/bitmap: fix memory leak' " Yuanhan Liu
2018-02-07  8:57 ` [dpdk-stable] patch 'test/reorder: " Yuanhan Liu
2018-02-07  8:57 ` [dpdk-stable] patch 'test/ring: " Yuanhan Liu
2018-02-07  8:57 ` [dpdk-stable] patch 'test/ring_perf: " Yuanhan Liu
2018-02-07  8:57 ` [dpdk-stable] patch 'test/table: " Yuanhan Liu
2018-02-07  8:57 ` [dpdk-stable] patch 'test/timer_perf: " Yuanhan Liu
2018-02-07  8:57 ` Yuanhan Liu [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=1517993838-26692-24-git-send-email-yliu@fridaylinux.org \
    --to=yliu@fridaylinux.org \
    --cc=andrey.chilikin@intel.com \
    --cc=beilei.xing@intel.com \
    --cc=kirill.rybalchenko@intel.com \
    --cc=stable@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).