DPDK patches and discussions
 help / color / mirror / Atom feed
From: Shaopeng He <shaopeng.he@intel.com>
To: dev@dpdk.org
Cc: Shaopeng He <shaopeng.he@intel.com>
Subject: [dpdk-dev] [PATCH v2] fm10k: fix PF/VF MAC address register and clean up bug
Date: Mon, 15 Jun 2015 09:26:10 +0800	[thread overview]
Message-ID: <1434331570-31289-1-git-send-email-shaopeng.he@intel.com> (raw)
In-Reply-To: <1433474672-30951-1-git-send-email-shaopeng.he@intel.com>

v2 changes:
 - rebase this patch onto the HEAD
 - add more description for this patch

This patch includes 3 changes related to MAC/VLAN address table
when the system(e.g. testpmd) is started and closed:
 - remove default MAC address with fixed VLAN 0 which was for the
   debug purpose before the MAC/VLAN filter function was implemented.
 - enable VF MAC/VLAN filter for the first valid MAC address
   and first valid VLAN ID. This is needed for system(e.g. testpmd)
   to setup default MAC address and default VLAN for VF.
   Later attempt to change these default value will be refused by
   under layer shared code and PF host functions.
 - un-register any combination of VLAN and MAC address from fm10k
   switch side MAC table when the system(e.g. testpmd) is closed.

Signed-off-by: Shaopeng He <shaopeng.he@intel.com>
---
 drivers/net/fm10k/fm10k_ethdev.c | 42 ++++++++++++++++++++++------------------
 1 file changed, 23 insertions(+), 19 deletions(-)

diff --git a/drivers/net/fm10k/fm10k_ethdev.c b/drivers/net/fm10k/fm10k_ethdev.c
index 802a930..625fd31 100644
--- a/drivers/net/fm10k/fm10k_ethdev.c
+++ b/drivers/net/fm10k/fm10k_ethdev.c
@@ -58,6 +58,8 @@ static int
 fm10k_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on);
 static void
 fm10k_MAC_filter_set(struct rte_eth_dev *dev, const u8 *mac, bool add);
+static void
+fm10k_MACVLAN_remove_all(struct rte_eth_dev *dev);
 
 static void
 fm10k_mbx_initlock(struct fm10k_hw *hw)
@@ -703,6 +705,8 @@ fm10k_dev_close(struct rte_eth_dev *dev)
 
 	PMD_INIT_FUNC_TRACE();
 
+	fm10k_MACVLAN_remove_all(dev);
+
 	/* Stop mailbox service first */
 	fm10k_close_mbx_service(hw);
 	fm10k_dev_stop(dev);
@@ -832,12 +836,6 @@ fm10k_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on)
 	hw = FM10K_DEV_PRIVATE_TO_HW(dev->data->dev_private);
 	macvlan = FM10K_DEV_PRIVATE_TO_MACVLAN(dev->data->dev_private);
 
-	/* @todo - add support for the VF */
-	if (hw->mac.type != fm10k_mac_pf) {
-		PMD_INIT_LOG(ERR, "VLAN filter not available on VF");
-		return -ENOTSUP;
-	}
-
 	if (vlan_id > ETH_VLAN_ID_MAX) {
 		PMD_INIT_LOG(ERR, "Invalid vlan_id: must be < 4096");
 		return (-EINVAL);
@@ -926,12 +924,6 @@ fm10k_MAC_filter_set(struct rte_eth_dev *dev, const u8 *mac, bool add)
 	hw = FM10K_DEV_PRIVATE_TO_HW(dev->data->dev_private);
 	macvlan = FM10K_DEV_PRIVATE_TO_MACVLAN(dev->data->dev_private);
 
-	/* @todo - add support for the VF */
-	if (hw->mac.type != fm10k_mac_pf) {
-		PMD_INIT_LOG(ERR, "MAC filter not available on VF");
-		return;
-	}
-
 	i = 0;
 	for (j = 0; j < FM10K_VFTA_SIZE; j++) {
 		if (macvlan->vfta[j]) {
@@ -981,6 +973,25 @@ fm10k_macaddr_remove(struct rte_eth_dev *dev, uint32_t index)
 				FALSE);
 }
 
+/* Remove all VLAN and MAC address table entries */
+static void
+fm10k_MACVLAN_remove_all(struct rte_eth_dev *dev)
+{
+	uint32_t j, k;
+	struct fm10k_macvlan_filter_info *macvlan;
+
+	macvlan = FM10K_DEV_PRIVATE_TO_MACVLAN(dev->data->dev_private);
+	for (j = 0; j < FM10K_VFTA_SIZE; j++) {
+		if (macvlan->vfta[j]) {
+			for (k = 0; k < FM10K_UINT32_BIT_SIZE; k++) {
+				if (macvlan->vfta[j] & (1 << k))
+					fm10k_vlan_filter_set(dev,
+						j * FM10K_UINT32_BIT_SIZE + k, false);
+			}
+		}
+	}
+}
+
 static inline int
 check_nb_desc(uint16_t min, uint16_t max, uint16_t mult, uint16_t request)
 {
@@ -2008,13 +2019,6 @@ eth_fm10k_dev_init(struct rte_eth_dev *dev)
 	/* Enable port first */
 	hw->mac.ops.update_lport_state(hw, hw->mac.dglort_map, 1, 1);
 
-	/*
-	 * Add default mac. glort is assigned by SM for PF, while is
-	 * unused for VF. PF will assign correct glort for VF.
-	 */
-	hw->mac.ops.update_uc_addr(hw, hw->mac.dglort_map, hw->mac.addr,
-				0, 1, 0);
-
 	/* Set unicast mode by default. App can change to other mode in other
 	 * API func.
 	 */
-- 
1.9.3

  parent reply	other threads:[~2015-06-15  1:26 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-05  3:24 [dpdk-dev] [PATCH] " Shaopeng He
2015-06-05  8:55 ` Thomas Monjalon
2015-06-08  0:59   ` He, Shaopeng
2015-06-15  1:26 ` Shaopeng He [this message]
2015-06-16  6:43   ` [dpdk-dev] [PATCH v2] " Chen, Jing D
2015-06-22 15:15     ` Thomas Monjalon
2015-06-16 11:54   ` Qiu, Michael

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=1434331570-31289-1-git-send-email-shaopeng.he@intel.com \
    --to=shaopeng.he@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).