[dpdk-dev,01/11] net/qede: fix default MAC address handling
Checks
Commit Message
From: Harish Patil <harish.patil@qlogic.com>
- In qede_mac_addr_set(), in order to configure default MAC address we
first delete the existing MAC address before trying to add new one. During
init time, there is no MAC filter to begin with, so trying to remove a
non-existing MAC address causes a firmware exception. This can be prevented
by internally calling qede_mac_addr_add() which has the checks in place to
delete a MAC address only if it was added before.
- Remove setting of the default MAC address from within
qede_dev_configure() since rte_eth_dev_start() calls mac_addr_set() anyway.
Fixes: 2ea6f76aff40 ("qede: add core driver")
Cc: stable@dpdk.org
Signed-off-by: Harish Patil <harish.patil@qlogic.com>
---
drivers/net/qede/qede_ethdev.c | 30 +-----------------------------
1 file changed, 1 insertion(+), 29 deletions(-)
Comments
On 4/25/2017 8:28 AM, Rasesh Mody wrote:
> From: Harish Patil <harish.patil@qlogic.com>
>
> - In qede_mac_addr_set(), in order to configure default MAC address we
> first delete the existing MAC address before trying to add new one. During
> init time, there is no MAC filter to begin with, so trying to remove a
> non-existing MAC address causes a firmware exception. This can be prevented
> by internally calling qede_mac_addr_add() which has the checks in place to
> delete a MAC address only if it was added before.
>
> - Remove setting of the default MAC address from within
> qede_dev_configure() since rte_eth_dev_start() calls mac_addr_set() anyway.
>
> Fixes: 2ea6f76aff40 ("qede: add core driver")
> Cc: stable@dpdk.org
>
> Signed-off-by: Harish Patil <harish.patil@qlogic.com>
Series applied to dpdk-next-net/master, thanks.
Thanks for taking care of coverity issues as well as base files CFLAGS.
(Mail addressed updated to current ones.)
@@ -551,8 +551,6 @@ static void qede_set_cmn_tunn_param(struct ecore_tunnel_info *p_tunn,
{
struct qede_dev *qdev = QEDE_INIT_QDEV(eth_dev);
struct ecore_dev *edev = QEDE_INIT_EDEV(qdev);
- struct ecore_filter_ucast ucast;
- int rc;
if (IS_VF(edev) && !ecore_vf_check_mac(ECORE_LEADING_HWFN(edev),
mac_addr->addr_bytes)) {
@@ -562,29 +560,7 @@ static void qede_set_cmn_tunn_param(struct ecore_tunnel_info *p_tunn,
return;
}
- /* First remove the primary mac */
- qede_set_ucast_cmn_params(&ucast);
- ucast.opcode = ECORE_FILTER_REMOVE;
- ucast.type = ECORE_FILTER_MAC;
- ether_addr_copy(&qdev->primary_mac,
- (struct ether_addr *)&ucast.mac);
- rc = ecore_filter_ucast_cmd(edev, &ucast, ECORE_SPQ_MODE_CB, NULL);
- if (rc != 0) {
- DP_ERR(edev, "Unable to remove current macaddr"
- " Reverting to previous default mac\n");
- ether_addr_copy(&qdev->primary_mac,
- ð_dev->data->mac_addrs[0]);
- return;
- }
-
- /* Add new MAC */
- ucast.opcode = ECORE_FILTER_ADD;
- ether_addr_copy(mac_addr, (struct ether_addr *)&ucast.mac);
- rc = ecore_filter_ucast_cmd(edev, &ucast, ECORE_SPQ_MODE_CB, NULL);
- if (rc != 0)
- DP_ERR(edev, "Unable to add new default mac\n");
- else
- ether_addr_copy(mac_addr, &qdev->primary_mac);
+ qede_mac_addr_add(eth_dev, mac_addr, 0, 0);
}
static void qede_config_accept_any_vlan(struct qede_dev *qdev, bool action)
@@ -925,10 +901,6 @@ static int qede_dev_configure(struct rte_eth_dev *eth_dev)
SLIST_INIT(&qdev->vlan_list_head);
- /* Add primary mac for PF */
- if (IS_PF(edev))
- qede_mac_addr_set(eth_dev, &qdev->primary_mac);
-
/* Enable VLAN offloads by default */
qede_vlan_offload_set(eth_dev, ETH_VLAN_STRIP_MASK |
ETH_VLAN_FILTER_MASK |