From patchwork Sat Feb 3 06:03:17 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Mody, Rasesh" X-Patchwork-Id: 34903 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id ECFFF293C; Sat, 3 Feb 2018 07:03:40 +0100 (CET) Received: from NAM03-DM3-obe.outbound.protection.outlook.com (mail-dm3nam03on0041.outbound.protection.outlook.com [104.47.41.41]) by dpdk.org (Postfix) with ESMTP id 2C7C411DC; Sat, 3 Feb 2018 07:03:38 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=i9cMPAaZduvUq/KkJP9R0tnDN1rrpxnlcfDKmHmAY0Q=; b=h1MAD6gs8xTiUHf3E0Bw42HP0OEbwBWLt7miiQn2ypK0FWmcl0Hv+26ibFP1C+rjl1sTXqEFciqJrksnVszH7m/nu9rj2Dd0ZsoQbZwFyjQsMEOsCOn1GywTvEudBGiCvSNoJa1Yx2LPyIdqkRG6V4GRp3mn7G6bgB29D0IRVu0= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Rasesh.Mody@cavium.com; Received: from cavium.com (198.186.0.2) by SN4PR0701MB3677.namprd07.prod.outlook.com (2603:10b6:803:4d::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.444.14; Sat, 3 Feb 2018 06:03:36 +0000 From: Rasesh Mody To: dev@dpdk.org Cc: Harish Patil , ferruh.yigit@intel.com, Dept-EngDPDKDev@cavium.com, stable@dpdk.org Date: Fri, 2 Feb 2018 22:03:17 -0800 Message-Id: <1517637799-15390-1-git-send-email-rasesh.mody@cavium.com> X-Mailer: git-send-email 1.7.10.3 MIME-Version: 1.0 X-Originating-IP: [198.186.0.2] X-ClientProxiedBy: BN6PR1301CA0018.namprd13.prod.outlook.com (2603:10b6:405:29::31) To SN4PR0701MB3677.namprd07.prod.outlook.com (2603:10b6:803:4d::19) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9e8006e0-56b6-403c-f38c-08d56acbdd77 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(4534165)(4627221)(201703031133081)(201702281549075)(5600026)(4604075)(2017052603307)(7153060)(7193020); SRVR:SN4PR0701MB3677; X-Microsoft-Exchange-Diagnostics: 1; SN4PR0701MB3677; 3:Kq2SB+S51zRuzN53oiHmhTJjF9NWD9dWpQoTac5ByfCzp0D2hXCezfH+iGGGv4if1oNah2LWRtY0dHMoLXmeWdQMOOev7NgmXjMvco12kCH/f8xLCHac5aSsdf1BttzZMNRzHViBEcR2RzqC7cy8kT/pdFmuWHCnPQHUmciJg2DidlrFHcFvMU/8JH+no+ekVC3V6WMDIkkwUyYUQFwOoS3bZY2HssXMWVxqbUL9D1VwUOAh/dNTO4801SCfdEwG; 25:zl6hCPu6n2w0OzV22Iq34q17Xs3+d5GdDHnyf/d2j0AuhjyPMBIyOJz49CKFITAD9fv/xtyxQpShRjTHFi8JgLi2s7Hr6NtL74lAQvPswwjflZP9IDQkyWO5Ll2/zBWAkaD9UW18zXHg5IRdwwbFEX4DUIdmsULjLOn7KZaNZyvHQK5DsTXC09YZ/9FcB9IuDlikEU9PG+rwoAPM1XrgwxwNL2++zq4C43HpPq4DS6YI1nDPhw0yskPcpj/ZfPf+x609Va6mOF+JfenoVF8OLgzNjq6+rXVm0aWzUs1mm7h5qtKTj1z+LeKYlirXDg7+wgEznpgLvslMgqUJSLYFiw==; 31:hON/NNnEj2AE8czO1j+cjuk9bZ4BeB1ZPDrNVAx/NC3SgiTG1HXL1/mBK4MzYJNncVDsY5W69cBdaC+85qRFIa9dHCewzEC9h23k6OUvyKuIQMwp4PXGvZCw0seAfxrPUx1a2Rg7Q6Ke3maJ/7+6P7+kETdZA/WWfevK5MvP2libJyt9IqHOE1TcGPR0zOihyMYLoafpONvPqb91Esp+njVcXGiefIZVbzMJYsdC0JM= X-MS-TrafficTypeDiagnostic: SN4PR0701MB3677: X-Microsoft-Exchange-Diagnostics: 1; SN4PR0701MB3677; 20:rJrO8u53EjbLYiOu2a3iC0+DGSLboOV+4omYUHS3zbTZbI6/+OVfXltDuolI6Uth/QPF0If3cYBd2LrC4rtYmmPSvcmm9XDFT0uf4a3lsS2ELG2r9RbM/SSZUYukRLvuq0B+ApvxsRP3Xjg2HoxmntNh4u2fHhVIYdwQw0eEQQaDLALArHt8SqbVGzjfpHUdxJCaAwZL1OqIBKHhVVctcdkiYKpuWOahcXIKQG+t1lP5NWXi3lSJFu4cuVy0GICPX/RJZ7X6Rhz0CiFZsh75BfSUnE2QXF/iRDAtphB3a2wa7vIQ+jRodAhVEALF1sNvP8rHWaQQDveRrn8XWxA978UxxtUYq4rcnsfsXaqiYsLAoe2xV73NHyBL+hhAjU9WY60zU24jDMUlGgdTBLQD9M4deO646gc8lPZo6cSTXTl46Dn9BVo27afOaD8LNo3mqchC7l1bka95kZKUNwYtp9LkkFCgizfoC9acSSgeOHyTm4VtR4HzpMv1o+6d3DUE; 4:cL0hnXD6WtH3UVGPt//ZYpTcjuYAR5qZ2wFq9Z++ihRJmGWA77bpLvXvPQw/E6+d0wMQCZnX1JjQmHQ3kPlV2+PY515naeZ2Sbhl4pGWSTG5g86X1mgclofOTOstAGcumWgalnaOFQHw9ZzUu1fpPLojo+3yTzD7DZVpsQnxKP3P53wKkDTUph+/uGK6TY8mjuG8JhRbQhLfBIZUm4aOM2zM1s8wht78nhrx55W1v0BFCLAPo7PydN33CA7ghiOfQWlG7M0aPJIDCnIqwuOj+g== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040501)(2401047)(8121501046)(5005006)(3002001)(10201501046)(3231101)(2400082)(944501161)(93006095)(93001095)(6041288)(20161123564045)(20161123560045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(6072148)(201708071742011); SRVR:SN4PR0701MB3677; BCL:0; PCL:0; RULEID:; SRVR:SN4PR0701MB3677; X-Forefront-PRVS: 05724A8921 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(346002)(376002)(39380400002)(366004)(39860400002)(396003)(189003)(199004)(53936002)(6116002)(3846002)(8936002)(81156014)(81166006)(8676002)(47776003)(25786009)(105586002)(66066001)(50226002)(48376002)(36756003)(51416003)(69596002)(50466002)(26005)(4326008)(7696005)(52116002)(2361001)(59450400001)(55016002)(386003)(6916009)(16526019)(2351001)(2906002)(186003)(72206003)(305945005)(97736004)(7736002)(316002)(478600001)(4720700003)(16586007)(5660300001)(575784001)(6666003)(106356001)(21086003)(86362001)(68736007); DIR:OUT; SFP:1101; SCL:1; SRVR:SN4PR0701MB3677; H:cavium.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; SN4PR0701MB3677; 23:9nDyiwwCi71FHqThBGRO/3+QxnNEzX1+QuH7TJi?= M2gnplxecyuV3Ue74yy2W6V6O3nV/9FPxDmo5FqKqG1XlouZUf3xpzCASRXO9sqHwGDdFpVIpcGqWS6WP0KcIoSv4zCOEmclVjoa9xdyZatNvogunsoSsG/UvXry0YhVM4BhFDACvECkYlVrikeTwU8/vksGVt1N0pqxSLbyBG/VETlBy+onsGKfRX2D+SqKBm5PNbPlJnrszGgmLpBG1QYpg6RX1jdg4zicKuIWdyi3OEbCTe/tXQkMqaa4zTnyguolP2C3ovMtthV0/BT2l/sykAAr0JVQFb6Cx7ARYJnZwilrhPohMVxTFwngyQW5RWjwaGKYFURJOZYTPigTHbVfyiifuNkTTt7J/quYghdxXqVZqr118avhlVLsNtEyuuxRt/4IDdxHNs3OvNn5DDgm8FYp9rQlJewMl8wfL2z8o6qwloqCETW7rQIzZHpN6gMqk+W2L72g9ZPiWy7/Hfb3lCUTD1JenwRhJ3S2WF+3j1zsUP3B8TKmzx4VoJUuPwXMPAFWpAK5WXAiPXpWxVeJ7cjiGZ4h8TNg4EOAiM6zINWi0CEQUEshZHTs4Bt1bKbq2xLyLwrrdwjYff95NRvY3OJsJPUV3t9+OMpn9ykUufjPrRNqaxQFiUwH3pVo0+RyzeB2R+vKAESQbceMTWuN+XufXgggi/GykwXIvonEgiWmIVGwPQyIYAgHIDsskEFxuXFkWePQfbANkXA7lsWGbSdmXZrT1cnhj0KqLeeol/2w0YfZZvx3sqqDPKOa+JdOigE2aJ7+Tv+0VZkBUcDwJHXo1ncI5jQc5RmL5urOxr9Rm46Ug+HxxY/sY5qbJERvanAYn0QIstYNbSD952mJTV4flL1IxlIBho0kAOF/HGDZdntM8fEu2NR/egRlZzLt5G6oUDuGVhXpZs66VZWy27khCt2Y0T0s8OA3lutMS9EGgEk772orcdxK3v1P1huVsi4tlJpDGTMrlRu1GnbkgjTMVBTT98ppfZQEnMLQug5jSXKut9TAWTNKaXOtl9NifQsHmkgt2Vbxu2HH6KS/Ns8p3OYoKgiWQdU4McajHJKGZHuYvL2sxrTUppYNf/8uGLwU9suOMvu6xzD49t40F80S/d4/0ZS9GV1XIXBUOwoEbHh0LNUThJhBfEt9krIp+dObeMNlXcBCDLvTuHdcBam/+TPfYc+9lVbuVsu8q1Q== X-Microsoft-Exchange-Diagnostics: 1; SN4PR0701MB3677; 6:UntzFaGfsTSQAa7VEiNoSPlQ8rh5Copuft/fDIGKqTYKgf8sIGjcvCd8rxGj5RWw9PxPTZzg2Xty+2ASE0F53BRqcHbcuxzjm9AqXDhb01rlHT+AFOZ2GoADXNIai0Q8OEbC/FdpBEGHKuSHdFndIw4uMJ5YEymF8yaHiGfdB33zW0xh5mLnSWXQAz8ohlHa8w25seMLE3MRbVwJebALcsWKnw7HD8ghhLmEE7E64D+AcmVsWJato9AjAwi7UtxN4Oi1ZPGj+H+lVbznwf+CDv3rAMLAMouU7n5r3T/joEIQoB9tR0rWPeMu1dszxvai0p1j6zsCD6sFik/8JZoqA9cEanz2Un72evC9U3NOKds=; 5:DJrZ0pIv1uR/bsAxvJpSPuq+xF/+pfNDsuqbvEb0owIzWxBRyj7fM9ZmRvw5JlYFcdGQwp5IrY25n3m63VbGcBZ+v8gJuS7yEd0T5gg2K+0izfjqVRdMMwWl5bgp7ePSTIHI6f6JKRpxxuhYCgiL7LLxtkKjHKPWhPEIThHz5Rk=; 24:s2QlAtPNcHbaq8pJg3xDlivNq4Z9ZT3RIuexLlg+Aj0gA853PnhLX6a2WpTqYfATQz4fO2bKtXPkSDchG1SgkZGeuhyqISbfaDjTMmGzask=; 7:UbsIL9ieC8fUf/MAsut4wnLymi6xvhUwmb5nK2BrACmY2TV5aN8F7XVBboaNtoZh0pokOcANV9z1LbA/5EC98bXn3Wrkv+kQVgEZvwfTwMRRcBNqbjp4onEo7ev7dH+kEkF7/rwDVSVeLcrH+134xMJ184i3PW6HQkfAUEC11uOY53HObbiLyeqM/fidc6gZSjjqyXlJ7T0RZEvP8sK500n5sv2aGHG+ZG7PH7r7sOkUrEVMacInRlptw9yuKqZM SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Feb 2018 06:03:36.1824 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9e8006e0-56b6-403c-f38c-08d56acbdd77 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN4PR0701MB3677 Subject: [dpdk-dev] [PATCH 1/3] net/qede: fix VF vport creation sequence X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Harish Patil Few adjustments are required to effectively handle VF vport create/delete sequence. The problem is exposed by recent ethdev TX offload changes which requires port to be in down state before applying TX offloads. - Move vport creation from dev_init() to dev_configure() - Force to stop vport if it was already started due to previous run (restart case) - Move link state enable/disable to dev_init() and dev_close() respectively. - For MTU change, recreate vport with new MTU value and restore old config. This is necessary since VF MTU value can be changed only upon vport creation. Fixes: ec94dbc57362 ("qede: add base driver") Cc: stable@dpdk.org Signed-off-by: Harish Patil --- drivers/net/qede/qede_ethdev.c | 159 +++++++++++++++++++--------------------- drivers/net/qede/qede_ethdev.h | 3 +- drivers/net/qede/qede_rxtx.c | 4 + 3 files changed, 83 insertions(+), 83 deletions(-) diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c index 20a1c31..46e0e36 100644 --- a/drivers/net/qede/qede_ethdev.c +++ b/drivers/net/qede/qede_ethdev.c @@ -442,55 +442,59 @@ static void qede_reset_queue_stats(struct qede_dev *qdev, bool xstats) } static int -qede_start_vport(struct qede_dev *qdev, uint16_t mtu) +qede_stop_vport(struct ecore_dev *edev) { - struct ecore_dev *edev = QEDE_INIT_EDEV(qdev); - struct ecore_sp_vport_start_params params; struct ecore_hwfn *p_hwfn; + uint8_t vport_id; int rc; int i; - memset(¶ms, 0, sizeof(params)); - params.vport_id = 0; - params.mtu = mtu; - /* @DPDK - Disable FW placement */ - params.zero_placement_offset = 1; + vport_id = 0; for_each_hwfn(edev, i) { p_hwfn = &edev->hwfns[i]; - params.concrete_fid = p_hwfn->hw_info.concrete_fid; - params.opaque_fid = p_hwfn->hw_info.opaque_fid; - rc = ecore_sp_vport_start(p_hwfn, ¶ms); + rc = ecore_sp_vport_stop(p_hwfn, p_hwfn->hw_info.opaque_fid, + vport_id); if (rc != ECORE_SUCCESS) { - DP_ERR(edev, "Start V-PORT failed %d\n", rc); + DP_ERR(edev, "Stop V-PORT failed rc = %d\n", rc); return rc; } } - ecore_reset_vport_stats(edev); - if (IS_PF(edev)) - qede_reset_queue_stats(qdev, true); - DP_INFO(edev, "VPORT started with MTU = %u\n", mtu); + + DP_INFO(edev, "vport stopped\n"); return 0; } static int -qede_stop_vport(struct ecore_dev *edev) +qede_start_vport(struct qede_dev *qdev, uint16_t mtu) { + struct ecore_dev *edev = QEDE_INIT_EDEV(qdev); + struct ecore_sp_vport_start_params params; struct ecore_hwfn *p_hwfn; - uint8_t vport_id; int rc; int i; - vport_id = 0; + if (qdev->vport_started) + qede_stop_vport(edev); + + memset(¶ms, 0, sizeof(params)); + params.vport_id = 0; + params.mtu = mtu; + /* @DPDK - Disable FW placement */ + params.zero_placement_offset = 1; for_each_hwfn(edev, i) { p_hwfn = &edev->hwfns[i]; - rc = ecore_sp_vport_stop(p_hwfn, p_hwfn->hw_info.opaque_fid, - vport_id); + params.concrete_fid = p_hwfn->hw_info.concrete_fid; + params.opaque_fid = p_hwfn->hw_info.opaque_fid; + rc = ecore_sp_vport_start(p_hwfn, ¶ms); if (rc != ECORE_SUCCESS) { - DP_ERR(edev, "Stop V-PORT failed rc = %d\n", rc); + DP_ERR(edev, "Start V-PORT failed %d\n", rc); return rc; } } + ecore_reset_vport_stats(edev); + qdev->vport_started = true; + DP_INFO(edev, "VPORT started with MTU = %u\n", mtu); return 0; } @@ -1194,6 +1198,8 @@ static int qede_vlan_offload_set(struct rte_eth_dev *eth_dev, int mask) DP_INFO(edev, "No offloads are supported with VLAN Q-in-Q" " and classification is based on outer tag only\n"); + qdev->vlan_offload_mask = mask; + DP_INFO(edev, "vlan offload mask %d vlan-strip %d vlan-filter %d\n", mask, rxmode->hw_vlan_strip, rxmode->hw_vlan_filter); @@ -1267,13 +1273,6 @@ static int qede_dev_start(struct rte_eth_dev *eth_dev) PMD_INIT_FUNC_TRACE(edev); - /* Update MTU only if it has changed */ - if (qdev->mtu != qdev->new_mtu) { - if (qede_update_mtu(eth_dev, qdev->new_mtu)) - goto err; - qdev->mtu = qdev->new_mtu; - } - /* Configure TPA parameters */ if (rxmode->enable_lro) { if (qede_enable_tpa(eth_dev, true)) @@ -1287,6 +1286,9 @@ static int qede_dev_start(struct rte_eth_dev *eth_dev) if (qede_start_queues(eth_dev)) goto err; + if (IS_PF(edev)) + qede_reset_queue_stats(qdev, true); + /* Newer SR-IOV PF driver expects RX/TX queues to be started before * enabling RSS. Hence RSS configuration is deferred upto this point. * Also, we would like to retain similar behavior in PF case, so we @@ -1300,9 +1302,6 @@ static int qede_dev_start(struct rte_eth_dev *eth_dev) if (qede_activate_vport(eth_dev, true)) goto err; - /* Bring-up the link */ - qede_dev_set_link_state(eth_dev, true); - /* Update link status */ qede_link_update(eth_dev, 0); @@ -1337,9 +1336,6 @@ static void qede_dev_stop(struct rte_eth_dev *eth_dev) /* Disable traffic */ ecore_hw_stop_fastpath(edev); /* TBD - loop */ - /* Bring the link down */ - qede_dev_set_link_state(eth_dev, false); - DP_INFO(edev, "Device is stopped\n"); } @@ -1464,20 +1460,11 @@ static int qede_dev_configure(struct rte_eth_dev *eth_dev) if (qede_check_fdir_support(eth_dev)) return -ENOTSUP; - /* Deallocate resources if held previously. It is needed only if the - * queue count has been changed from previous configuration. If its - * going to change then it means RX/TX queue setup will be called - * again and the fastpath pointers will be reinitialized there. - */ - if (qdev->num_tx_queues != eth_dev->data->nb_tx_queues || - qdev->num_rx_queues != eth_dev->data->nb_rx_queues) { - qede_dealloc_fp_resc(eth_dev); - /* Proceed with updated queue count */ - qdev->num_tx_queues = eth_dev->data->nb_tx_queues; - qdev->num_rx_queues = eth_dev->data->nb_rx_queues; - if (qede_alloc_fp_resc(qdev)) - return -ENOMEM; - } + qede_dealloc_fp_resc(eth_dev); + qdev->num_tx_queues = eth_dev->data->nb_tx_queues; + qdev->num_rx_queues = eth_dev->data->nb_rx_queues; + if (qede_alloc_fp_resc(qdev)) + return -ENOMEM; /* If jumbo enabled adjust MTU */ if (eth_dev->data->dev_conf.rxmode.jumbo_frame) @@ -1485,19 +1472,9 @@ static int qede_dev_configure(struct rte_eth_dev *eth_dev) eth_dev->data->dev_conf.rxmode.max_rx_pkt_len - ETHER_HDR_LEN - ETHER_CRC_LEN; - /* VF's MTU has to be set using vport-start where as - * PF's MTU can be updated via vport-update. - */ - if (IS_VF(edev)) { - if (qede_start_vport(qdev, eth_dev->data->mtu)) - return -1; - } else { - if (qede_update_mtu(eth_dev, eth_dev->data->mtu)) - return -1; - } - + if (qede_start_vport(qdev, eth_dev->data->mtu)) + return -1; qdev->mtu = eth_dev->data->mtu; - qdev->new_mtu = qdev->mtu; /* Enable VLAN offloads by default */ ret = qede_vlan_offload_set(eth_dev, ETH_VLAN_STRIP_MASK | @@ -1711,12 +1688,15 @@ static void qede_dev_close(struct rte_eth_dev *eth_dev) qede_dev_stop(eth_dev); qede_stop_vport(edev); + qdev->vport_started = false; qede_fdir_dealloc_resc(eth_dev); qede_dealloc_fp_resc(eth_dev); eth_dev->data->nb_rx_queues = 0; eth_dev->data->nb_tx_queues = 0; + /* Bring the link down */ + qede_dev_set_link_state(eth_dev, false); qdev->ops->common->slowpath_stop(edev); qdev->ops->common->remove(edev); rte_intr_disable(&pci_dev->intr_handle); @@ -2387,8 +2367,6 @@ static int qede_set_mtu(struct rte_eth_dev *dev, uint16_t mtu) int i; PMD_INIT_FUNC_TRACE(edev); - if (IS_VF(edev)) - return -ENOTSUP; qede_dev_info_get(dev, &dev_info); max_rx_pkt_len = mtu + ETHER_HDR_LEN + ETHER_CRC_LEN; frame_size = max_rx_pkt_len + QEDE_ETH_OVERHEAD; @@ -2415,7 +2393,9 @@ static int qede_set_mtu(struct rte_eth_dev *dev, uint16_t mtu) restart = true; } rte_delay_ms(1000); - qdev->new_mtu = mtu; + qede_start_vport(qdev, mtu); /* Recreate vport */ + qdev->mtu = mtu; + /* Fix up RX buf size for all queues of the port */ for_each_rss(i) { fp = &qdev->fp_array[i]; @@ -2429,17 +2409,33 @@ static int qede_set_mtu(struct rte_eth_dev *dev, uint16_t mtu) rx_buf_size = frame_size; rx_buf_size = QEDE_CEIL_TO_CACHE_LINE_SIZE(rx_buf_size); fp->rxq->rx_buf_size = rx_buf_size; - DP_INFO(edev, "buf_size adjusted to %u\n", rx_buf_size); + DP_INFO(edev, "RX buffer size %u\n", rx_buf_size); } } if (max_rx_pkt_len > ETHER_MAX_LEN) dev->data->dev_conf.rxmode.jumbo_frame = 1; else dev->data->dev_conf.rxmode.jumbo_frame = 0; + + /* Restore config lost due to vport stop */ + qede_mac_addr_set(dev, &qdev->primary_mac); + if (dev->data->promiscuous) + qede_promiscuous_enable(dev); + else + qede_promiscuous_disable(dev); + + if (dev->data->all_multicast) + qede_allmulticast_enable(dev); + else + qede_allmulticast_disable(dev); + + qede_vlan_offload_set(dev, qdev->vlan_offload_mask); + if (!dev->data->dev_started && restart) { qede_dev_start(dev); dev->data->dev_started = 1; } + /* update max frame size */ dev->data->dev_conf.rxmode.max_rx_pkt_len = max_rx_pkt_len; /* Reassign back */ @@ -3115,29 +3111,28 @@ static int qede_common_dev_init(struct rte_eth_dev *eth_dev, bool is_vf) do_once = false; } + /* Bring-up the link */ + qede_dev_set_link_state(eth_dev, true); + adapter->num_tx_queues = 0; adapter->num_rx_queues = 0; SLIST_INIT(&adapter->fdir_info.fdir_list_head); SLIST_INIT(&adapter->vlan_list_head); SLIST_INIT(&adapter->uc_list_head); adapter->mtu = ETHER_MTU; - adapter->new_mtu = ETHER_MTU; - if (!is_vf) { - if (qede_start_vport(adapter, adapter->mtu)) - return -1; - } else { - /* VF tunnel offloads is enabled by default in PF driver */ - adapter->vxlan.enable = true; - adapter->vxlan.num_filters = 0; - adapter->vxlan.filter_type = ETH_TUNNEL_FILTER_IMAC | - ETH_TUNNEL_FILTER_IVLAN; - adapter->vxlan.udp_port = QEDE_VXLAN_DEF_PORT; - adapter->geneve.enable = true; - adapter->vxlan.num_filters = 0; - adapter->vxlan.filter_type = ETH_TUNNEL_FILTER_IMAC | - ETH_TUNNEL_FILTER_IVLAN; - adapter->vxlan.udp_port = QEDE_GENEVE_DEF_PORT; - } + adapter->vport_started = false; + + /* VF tunnel offloads is enabled by default in PF driver */ + adapter->vxlan.enable = true; + adapter->vxlan.num_filters = 0; + adapter->vxlan.filter_type = ETH_TUNNEL_FILTER_IMAC | + ETH_TUNNEL_FILTER_IVLAN; + adapter->vxlan.udp_port = QEDE_VXLAN_DEF_PORT; + adapter->geneve.enable = true; + adapter->vxlan.num_filters = 0; + adapter->vxlan.filter_type = ETH_TUNNEL_FILTER_IMAC | + ETH_TUNNEL_FILTER_IVLAN; + adapter->vxlan.udp_port = QEDE_GENEVE_DEF_PORT; DP_INFO(edev, "MAC address : %02x:%02x:%02x:%02x:%02x:%02x\n", adapter->primary_mac.addr_bytes[0], diff --git a/drivers/net/qede/qede_ethdev.h b/drivers/net/qede/qede_ethdev.h index c7bb415..23f7e0e 100644 --- a/drivers/net/qede/qede_ethdev.h +++ b/drivers/net/qede/qede_ethdev.h @@ -187,7 +187,6 @@ struct qede_dev { struct ecore_sb_info *sb_array; struct qede_fastpath *fp_array; uint16_t mtu; - uint16_t new_mtu; bool enable_tx_switching; bool rss_enable; struct rte_eth_rss_conf rss_conf; @@ -211,6 +210,8 @@ struct qede_dev { struct qede_fdir_info fdir_info; bool vlan_strip_flg; char drv_ver[QEDE_PMD_DRV_VER_STR_SIZE]; + bool vport_started; + int vlan_offload_mask; void *ethdev; }; diff --git a/drivers/net/qede/qede_rxtx.c b/drivers/net/qede/qede_rxtx.c index 810f0f3..169ede8 100644 --- a/drivers/net/qede/qede_rxtx.c +++ b/drivers/net/qede/qede_rxtx.c @@ -417,6 +417,8 @@ int qede_alloc_fp_resc(struct qede_dev *qdev) for (sb_idx = 0; sb_idx < QEDE_RXTX_MAX(qdev); sb_idx++) { fp = &qdev->fp_array[sb_idx]; + if (!fp) + continue; fp->sb_info = rte_calloc("sb", 1, sizeof(struct ecore_sb_info), RTE_CACHE_LINE_SIZE); if (!fp->sb_info) { @@ -448,6 +450,8 @@ void qede_dealloc_fp_resc(struct rte_eth_dev *eth_dev) for (sb_idx = 0; sb_idx < QEDE_RXTX_MAX(qdev); sb_idx++) { fp = &qdev->fp_array[sb_idx]; + if (!fp) + continue; DP_INFO(edev, "Free sb_info index 0x%x\n", fp->sb_info->igu_sb_id); if (fp->sb_info) {