get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/34903/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 34903,
    "url": "http://patches.dpdk.org/api/patches/34903/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1517637799-15390-1-git-send-email-rasesh.mody@cavium.com/",
    "project": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<1517637799-15390-1-git-send-email-rasesh.mody@cavium.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1517637799-15390-1-git-send-email-rasesh.mody@cavium.com",
    "date": "2018-02-03T06:03:17",
    "name": "[dpdk-dev,1/3] net/qede: fix VF vport creation sequence",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "ddb8a5b73ba89a6e85db38d1c692b3ab19993b8f",
    "submitter": {
        "id": 569,
        "url": "http://patches.dpdk.org/api/people/569/?format=api",
        "name": "Mody, Rasesh",
        "email": "rasesh.mody@cavium.com"
    },
    "delegate": {
        "id": 319,
        "url": "http://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/1517637799-15390-1-git-send-email-rasesh.mody@cavium.com/mbox/",
    "series": [],
    "comments": "http://patches.dpdk.org/api/patches/34903/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/34903/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id ECFFF293C;\n\tSat,  3 Feb 2018 07:03:40 +0100 (CET)",
            "from NAM03-DM3-obe.outbound.protection.outlook.com\n\t(mail-dm3nam03on0041.outbound.protection.outlook.com [104.47.41.41])\n\tby dpdk.org (Postfix) with ESMTP id 2C7C411DC;\n\tSat,  3 Feb 2018 07:03:38 +0100 (CET)",
            "from cavium.com (198.186.0.2) by\n\tSN4PR0701MB3677.namprd07.prod.outlook.com (2603:10b6:803:4d::19) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.444.14;\n\tSat, 3 Feb 2018 06:03:36 +0000"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version;\n\tbh=i9cMPAaZduvUq/KkJP9R0tnDN1rrpxnlcfDKmHmAY0Q=;\n\tb=h1MAD6gs8xTiUHf3E0Bw42HP0OEbwBWLt7miiQn2ypK0FWmcl0Hv+26ibFP1C+rjl1sTXqEFciqJrksnVszH7m/nu9rj2Dd0ZsoQbZwFyjQsMEOsCOn1GywTvEudBGiCvSNoJa1Yx2LPyIdqkRG6V4GRp3mn7G6bgB29D0IRVu0=",
        "Authentication-Results": "spf=none (sender IP is )\n\tsmtp.mailfrom=Rasesh.Mody@cavium.com; ",
        "From": "Rasesh Mody <rasesh.mody@cavium.com>",
        "To": "dev@dpdk.org",
        "Cc": "Harish Patil <harish.patil@cavium.com>, ferruh.yigit@intel.com,\n\tDept-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",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[198.186.0.2]",
        "X-ClientProxiedBy": "BN6PR1301CA0018.namprd13.prod.outlook.com\n\t(2603:10b6:405:29::31) To SN4PR0701MB3677.namprd07.prod.outlook.com\n\t(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;\n\tRULEID:(7020095)(4652020)(4534165)(4627221)(201703031133081)(201702281549075)(5600026)(4604075)(2017052603307)(7153060)(7193020);\n\tSRVR:SN4PR0701MB3677; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; SN4PR0701MB3677;\n\t3:Kq2SB+S51zRuzN53oiHmhTJjF9NWD9dWpQoTac5ByfCzp0D2hXCezfH+iGGGv4if1oNah2LWRtY0dHMoLXmeWdQMOOev7NgmXjMvco12kCH/f8xLCHac5aSsdf1BttzZMNRzHViBEcR2RzqC7cy8kT/pdFmuWHCnPQHUmciJg2DidlrFHcFvMU/8JH+no+ekVC3V6WMDIkkwUyYUQFwOoS3bZY2HssXMWVxqbUL9D1VwUOAh/dNTO4801SCfdEwG;\n\t25:zl6hCPu6n2w0OzV22Iq34q17Xs3+d5GdDHnyf/d2j0AuhjyPMBIyOJz49CKFITAD9fv/xtyxQpShRjTHFi8JgLi2s7Hr6NtL74lAQvPswwjflZP9IDQkyWO5Ll2/zBWAkaD9UW18zXHg5IRdwwbFEX4DUIdmsULjLOn7KZaNZyvHQK5DsTXC09YZ/9FcB9IuDlikEU9PG+rwoAPM1XrgwxwNL2++zq4C43HpPq4DS6YI1nDPhw0yskPcpj/ZfPf+x609Va6mOF+JfenoVF8OLgzNjq6+rXVm0aWzUs1mm7h5qtKTj1z+LeKYlirXDg7+wgEznpgLvslMgqUJSLYFiw==;\n\t31:hON/NNnEj2AE8czO1j+cjuk9bZ4BeB1ZPDrNVAx/NC3SgiTG1HXL1/mBK4MzYJNncVDsY5W69cBdaC+85qRFIa9dHCewzEC9h23k6OUvyKuIQMwp4PXGvZCw0seAfxrPUx1a2Rg7Q6Ke3maJ/7+6P7+kETdZA/WWfevK5MvP2libJyt9IqHOE1TcGPR0zOihyMYLoafpONvPqb91Esp+njVcXGiefIZVbzMJYsdC0JM=",
            "1; SN4PR0701MB3677;\n\t20:rJrO8u53EjbLYiOu2a3iC0+DGSLboOV+4omYUHS3zbTZbI6/+OVfXltDuolI6Uth/QPF0If3cYBd2LrC4rtYmmPSvcmm9XDFT0uf4a3lsS2ELG2r9RbM/SSZUYukRLvuq0B+ApvxsRP3Xjg2HoxmntNh4u2fHhVIYdwQw0eEQQaDLALArHt8SqbVGzjfpHUdxJCaAwZL1OqIBKHhVVctcdkiYKpuWOahcXIKQG+t1lP5NWXi3lSJFu4cuVy0GICPX/RJZ7X6Rhz0CiFZsh75BfSUnE2QXF/iRDAtphB3a2wa7vIQ+jRodAhVEALF1sNvP8rHWaQQDveRrn8XWxA978UxxtUYq4rcnsfsXaqiYsLAoe2xV73NHyBL+hhAjU9WY60zU24jDMUlGgdTBLQD9M4deO646gc8lPZo6cSTXTl46Dn9BVo27afOaD8LNo3mqchC7l1bka95kZKUNwYtp9LkkFCgizfoC9acSSgeOHyTm4VtR4HzpMv1o+6d3DUE;\n\t4:cL0hnXD6WtH3UVGPt//ZYpTcjuYAR5qZ2wFq9Z++ihRJmGWA77bpLvXvPQw/E6+d0wMQCZnX1JjQmHQ3kPlV2+PY515naeZ2Sbhl4pGWSTG5g86X1mgclofOTOstAGcumWgalnaOFQHw9ZzUu1fpPLojo+3yTzD7DZVpsQnxKP3P53wKkDTUph+/uGK6TY8mjuG8JhRbQhLfBIZUm4aOM2zM1s8wht78nhrx55W1v0BFCLAPo7PydN33CA7ghiOfQWlG7M0aPJIDCnIqwuOj+g==",
            "=?us-ascii?Q?1; SN4PR0701MB3677;\n\t23:9nDyiwwCi71FHqThBGRO/3+QxnNEzX1+QuH7TJi?=\n\tM2gnplxecyuV3Ue74yy2W6V6O3nV/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==",
            "1; SN4PR0701MB3677;\n\t6:UntzFaGfsTSQAa7VEiNoSPlQ8rh5Copuft/fDIGKqTYKgf8sIGjcvCd8rxGj5RWw9PxPTZzg2Xty+2ASE0F53BRqcHbcuxzjm9AqXDhb01rlHT+AFOZ2GoADXNIai0Q8OEbC/FdpBEGHKuSHdFndIw4uMJ5YEymF8yaHiGfdB33zW0xh5mLnSWXQAz8ohlHa8w25seMLE3MRbVwJebALcsWKnw7HD8ghhLmEE7E64D+AcmVsWJato9AjAwi7UtxN4Oi1ZPGj+H+lVbznwf+CDv3rAMLAMouU7n5r3T/joEIQoB9tR0rWPeMu1dszxvai0p1j6zsCD6sFik/8JZoqA9cEanz2Un72evC9U3NOKds=;\n\t5:DJrZ0pIv1uR/bsAxvJpSPuq+xF/+pfNDsuqbvEb0owIzWxBRyj7fM9ZmRvw5JlYFcdGQwp5IrY25n3m63VbGcBZ+v8gJuS7yEd0T5gg2K+0izfjqVRdMMwWl5bgp7ePSTIHI6f6JKRpxxuhYCgiL7LLxtkKjHKPWhPEIThHz5Rk=;\n\t24:s2QlAtPNcHbaq8pJg3xDlivNq4Z9ZT3RIuexLlg+Aj0gA853PnhLX6a2WpTqYfATQz4fO2bKtXPkSDchG1SgkZGeuhyqISbfaDjTMmGzask=;\n\t7:UbsIL9ieC8fUf/MAsut4wnLymi6xvhUwmb5nK2BrACmY2TV5aN8F7XVBboaNtoZh0pokOcANV9z1LbA/5EC98bXn3Wrkv+kQVgEZvwfTwMRRcBNqbjp4onEo7ev7dH+kEkF7/rwDVSVeLcrH+134xMJ184i3PW6HQkfAUEC11uOY53HObbiLyeqM/fidc6gZSjjqyXlJ7T0RZEvP8sK500n5sv2aGHG+ZG7PH7r7sOkUrEVMacInRlptw9yuKqZM"
        ],
        "X-MS-TrafficTypeDiagnostic": "SN4PR0701MB3677:",
        "X-Microsoft-Antispam-PRVS": "<SN4PR0701MB3677C31052F920A9DBE9EFC39FF80@SN4PR0701MB3677.namprd07.prod.outlook.com>",
        "X-Exchange-Antispam-Report-Test": "UriScan:;",
        "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(6040501)(2401047)(8121501046)(5005006)(3002001)(10201501046)(3231101)(2400082)(944501161)(93006095)(93001095)(6041288)(20161123564045)(20161123560045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(6072148)(201708071742011);\n\tSRVR:SN4PR0701MB3677; BCL:0; PCL:0; RULEID:; SRVR:SN4PR0701MB3677; ",
        "X-Forefront-PRVS": "05724A8921",
        "X-Forefront-Antispam-Report": "SFV:NSPM;\n\tSFS:(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);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:SN4PR0701MB3677; H:cavium.com; FPR:;\n\tSPF:None; \n\tPTR:InfoNoRecords; MX:1; A:1; LANG:en; ",
        "Received-SPF": "None (protection.outlook.com: cavium.com does not designate\n\tpermitted sender hosts)",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-OriginatorOrg": "cavium.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "03 Feb 2018 06:03:36.1824\n\t(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 <dev.dpdk.org>",
        "List-Unsubscribe": "<https://dpdk.org/ml/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://dpdk.org/ml/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://dpdk.org/ml/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "From: Harish Patil <harish.patil@cavium.com>\n\nFew adjustments are required to effectively handle VF vport create/delete\nsequence. The problem is exposed by recent ethdev TX offload changes\nwhich requires port to be in down state before applying TX offloads.\n\n - Move vport creation from dev_init() to dev_configure()\n - Force to stop vport if it was already started due to previous run\n   (restart case)\n - Move link state enable/disable to dev_init() and dev_close()\n   respectively.\n - For MTU change, recreate vport with new MTU value and restore old\n   config. This is necessary since VF MTU value can be changed only upon\n   vport creation.\n\nFixes: ec94dbc57362 (\"qede: add base driver\")\nCc: stable@dpdk.org\n\nSigned-off-by: Harish Patil <harish.patil@cavium.com>\n---\n drivers/net/qede/qede_ethdev.c |  159 +++++++++++++++++++---------------------\n drivers/net/qede/qede_ethdev.h |    3 +-\n drivers/net/qede/qede_rxtx.c   |    4 +\n 3 files changed, 83 insertions(+), 83 deletions(-)",
    "diff": "diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c\nindex 20a1c31..46e0e36 100644\n--- a/drivers/net/qede/qede_ethdev.c\n+++ b/drivers/net/qede/qede_ethdev.c\n@@ -442,55 +442,59 @@ static void qede_reset_queue_stats(struct qede_dev *qdev, bool xstats)\n }\n \n static int\n-qede_start_vport(struct qede_dev *qdev, uint16_t mtu)\n+qede_stop_vport(struct ecore_dev *edev)\n {\n-\tstruct ecore_dev *edev = QEDE_INIT_EDEV(qdev);\n-\tstruct ecore_sp_vport_start_params params;\n \tstruct ecore_hwfn *p_hwfn;\n+\tuint8_t vport_id;\n \tint rc;\n \tint i;\n \n-\tmemset(&params, 0, sizeof(params));\n-\tparams.vport_id = 0;\n-\tparams.mtu = mtu;\n-\t/* @DPDK - Disable FW placement */\n-\tparams.zero_placement_offset = 1;\n+\tvport_id = 0;\n \tfor_each_hwfn(edev, i) {\n \t\tp_hwfn = &edev->hwfns[i];\n-\t\tparams.concrete_fid = p_hwfn->hw_info.concrete_fid;\n-\t\tparams.opaque_fid = p_hwfn->hw_info.opaque_fid;\n-\t\trc = ecore_sp_vport_start(p_hwfn, &params);\n+\t\trc = ecore_sp_vport_stop(p_hwfn, p_hwfn->hw_info.opaque_fid,\n+\t\t\t\t\t vport_id);\n \t\tif (rc != ECORE_SUCCESS) {\n-\t\t\tDP_ERR(edev, \"Start V-PORT failed %d\\n\", rc);\n+\t\t\tDP_ERR(edev, \"Stop V-PORT failed rc = %d\\n\", rc);\n \t\t\treturn rc;\n \t\t}\n \t}\n-\tecore_reset_vport_stats(edev);\n-\tif (IS_PF(edev))\n-\t\tqede_reset_queue_stats(qdev, true);\n-\tDP_INFO(edev, \"VPORT started with MTU = %u\\n\", mtu);\n+\n+\tDP_INFO(edev, \"vport stopped\\n\");\n \n \treturn 0;\n }\n \n static int\n-qede_stop_vport(struct ecore_dev *edev)\n+qede_start_vport(struct qede_dev *qdev, uint16_t mtu)\n {\n+\tstruct ecore_dev *edev = QEDE_INIT_EDEV(qdev);\n+\tstruct ecore_sp_vport_start_params params;\n \tstruct ecore_hwfn *p_hwfn;\n-\tuint8_t vport_id;\n \tint rc;\n \tint i;\n \n-\tvport_id = 0;\n+\tif (qdev->vport_started)\n+\t\tqede_stop_vport(edev);\n+\n+\tmemset(&params, 0, sizeof(params));\n+\tparams.vport_id = 0;\n+\tparams.mtu = mtu;\n+\t/* @DPDK - Disable FW placement */\n+\tparams.zero_placement_offset = 1;\n \tfor_each_hwfn(edev, i) {\n \t\tp_hwfn = &edev->hwfns[i];\n-\t\trc = ecore_sp_vport_stop(p_hwfn, p_hwfn->hw_info.opaque_fid,\n-\t\t\t\t\t vport_id);\n+\t\tparams.concrete_fid = p_hwfn->hw_info.concrete_fid;\n+\t\tparams.opaque_fid = p_hwfn->hw_info.opaque_fid;\n+\t\trc = ecore_sp_vport_start(p_hwfn, &params);\n \t\tif (rc != ECORE_SUCCESS) {\n-\t\t\tDP_ERR(edev, \"Stop V-PORT failed rc = %d\\n\", rc);\n+\t\t\tDP_ERR(edev, \"Start V-PORT failed %d\\n\", rc);\n \t\t\treturn rc;\n \t\t}\n \t}\n+\tecore_reset_vport_stats(edev);\n+\tqdev->vport_started = true;\n+\tDP_INFO(edev, \"VPORT started with MTU = %u\\n\", mtu);\n \n \treturn 0;\n }\n@@ -1194,6 +1198,8 @@ static int qede_vlan_offload_set(struct rte_eth_dev *eth_dev, int mask)\n \t\tDP_INFO(edev, \"No offloads are supported with VLAN Q-in-Q\"\n \t\t\t\" and classification is based on outer tag only\\n\");\n \n+\tqdev->vlan_offload_mask = mask;\n+\n \tDP_INFO(edev, \"vlan offload mask %d vlan-strip %d vlan-filter %d\\n\",\n \t\tmask, rxmode->hw_vlan_strip, rxmode->hw_vlan_filter);\n \n@@ -1267,13 +1273,6 @@ static int qede_dev_start(struct rte_eth_dev *eth_dev)\n \n \tPMD_INIT_FUNC_TRACE(edev);\n \n-\t/* Update MTU only if it has changed */\n-\tif (qdev->mtu != qdev->new_mtu) {\n-\t\tif (qede_update_mtu(eth_dev, qdev->new_mtu))\n-\t\t\tgoto err;\n-\t\tqdev->mtu = qdev->new_mtu;\n-\t}\n-\n \t/* Configure TPA parameters */\n \tif (rxmode->enable_lro) {\n \t\tif (qede_enable_tpa(eth_dev, true))\n@@ -1287,6 +1286,9 @@ static int qede_dev_start(struct rte_eth_dev *eth_dev)\n \tif (qede_start_queues(eth_dev))\n \t\tgoto err;\n \n+\tif (IS_PF(edev))\n+\t\tqede_reset_queue_stats(qdev, true);\n+\n \t/* Newer SR-IOV PF driver expects RX/TX queues to be started before\n \t * enabling RSS. Hence RSS configuration is deferred upto this point.\n \t * Also, we would like to retain similar behavior in PF case, so we\n@@ -1300,9 +1302,6 @@ static int qede_dev_start(struct rte_eth_dev *eth_dev)\n \tif (qede_activate_vport(eth_dev, true))\n \t\tgoto err;\n \n-\t/* Bring-up the link */\n-\tqede_dev_set_link_state(eth_dev, true);\n-\n \t/* Update link status */\n \tqede_link_update(eth_dev, 0);\n \n@@ -1337,9 +1336,6 @@ static void qede_dev_stop(struct rte_eth_dev *eth_dev)\n \t/* Disable traffic */\n \tecore_hw_stop_fastpath(edev); /* TBD - loop */\n \n-\t/* Bring the link down */\n-\tqede_dev_set_link_state(eth_dev, false);\n-\n \tDP_INFO(edev, \"Device is stopped\\n\");\n }\n \n@@ -1464,20 +1460,11 @@ static int qede_dev_configure(struct rte_eth_dev *eth_dev)\n \tif (qede_check_fdir_support(eth_dev))\n \t\treturn -ENOTSUP;\n \n-\t/* Deallocate resources if held previously. It is needed only if the\n-\t * queue count has been changed from previous configuration. If its\n-\t * going to change then it means RX/TX queue setup will be called\n-\t * again and the fastpath pointers will be reinitialized there.\n-\t */\n-\tif (qdev->num_tx_queues != eth_dev->data->nb_tx_queues ||\n-\t    qdev->num_rx_queues != eth_dev->data->nb_rx_queues) {\n-\t\tqede_dealloc_fp_resc(eth_dev);\n-\t\t/* Proceed with updated queue count */\n-\t\tqdev->num_tx_queues = eth_dev->data->nb_tx_queues;\n-\t\tqdev->num_rx_queues = eth_dev->data->nb_rx_queues;\n-\t\tif (qede_alloc_fp_resc(qdev))\n-\t\t\treturn -ENOMEM;\n-\t}\n+\tqede_dealloc_fp_resc(eth_dev);\n+\tqdev->num_tx_queues = eth_dev->data->nb_tx_queues;\n+\tqdev->num_rx_queues = eth_dev->data->nb_rx_queues;\n+\tif (qede_alloc_fp_resc(qdev))\n+\t\treturn -ENOMEM;\n \n \t/* If jumbo enabled adjust MTU */\n \tif (eth_dev->data->dev_conf.rxmode.jumbo_frame)\n@@ -1485,19 +1472,9 @@ static int qede_dev_configure(struct rte_eth_dev *eth_dev)\n \t\t\t\teth_dev->data->dev_conf.rxmode.max_rx_pkt_len -\n \t\t\t\tETHER_HDR_LEN - ETHER_CRC_LEN;\n \n-\t/* VF's MTU has to be set using vport-start where as\n-\t * PF's MTU can be updated via vport-update.\n-\t */\n-\tif (IS_VF(edev)) {\n-\t\tif (qede_start_vport(qdev, eth_dev->data->mtu))\n-\t\t\treturn -1;\n-\t} else {\n-\t\tif (qede_update_mtu(eth_dev, eth_dev->data->mtu))\n-\t\t\treturn -1;\n-\t}\n-\n+\tif (qede_start_vport(qdev, eth_dev->data->mtu))\n+\t\treturn -1;\n \tqdev->mtu = eth_dev->data->mtu;\n-\tqdev->new_mtu = qdev->mtu;\n \n \t/* Enable VLAN offloads by default */\n \tret = qede_vlan_offload_set(eth_dev, ETH_VLAN_STRIP_MASK  |\n@@ -1711,12 +1688,15 @@ static void qede_dev_close(struct rte_eth_dev *eth_dev)\n \t\tqede_dev_stop(eth_dev);\n \n \tqede_stop_vport(edev);\n+\tqdev->vport_started = false;\n \tqede_fdir_dealloc_resc(eth_dev);\n \tqede_dealloc_fp_resc(eth_dev);\n \n \teth_dev->data->nb_rx_queues = 0;\n \teth_dev->data->nb_tx_queues = 0;\n \n+\t/* Bring the link down */\n+\tqede_dev_set_link_state(eth_dev, false);\n \tqdev->ops->common->slowpath_stop(edev);\n \tqdev->ops->common->remove(edev);\n \trte_intr_disable(&pci_dev->intr_handle);\n@@ -2387,8 +2367,6 @@ static int qede_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)\n \tint i;\n \n \tPMD_INIT_FUNC_TRACE(edev);\n-\tif (IS_VF(edev))\n-\t\treturn -ENOTSUP;\n \tqede_dev_info_get(dev, &dev_info);\n \tmax_rx_pkt_len = mtu + ETHER_HDR_LEN + ETHER_CRC_LEN;\n \tframe_size = max_rx_pkt_len + QEDE_ETH_OVERHEAD;\n@@ -2415,7 +2393,9 @@ static int qede_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)\n \t\trestart = true;\n \t}\n \trte_delay_ms(1000);\n-\tqdev->new_mtu = mtu;\n+\tqede_start_vport(qdev, mtu); /* Recreate vport */\n+\tqdev->mtu = mtu;\n+\n \t/* Fix up RX buf size for all queues of the port */\n \tfor_each_rss(i) {\n \t\tfp = &qdev->fp_array[i];\n@@ -2429,17 +2409,33 @@ static int qede_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)\n \t\t\t\trx_buf_size = frame_size;\n \t\t\trx_buf_size = QEDE_CEIL_TO_CACHE_LINE_SIZE(rx_buf_size);\n \t\t\tfp->rxq->rx_buf_size = rx_buf_size;\n-\t\t\tDP_INFO(edev, \"buf_size adjusted to %u\\n\", rx_buf_size);\n+\t\t\tDP_INFO(edev, \"RX buffer size %u\\n\", rx_buf_size);\n \t\t}\n \t}\n \tif (max_rx_pkt_len > ETHER_MAX_LEN)\n \t\tdev->data->dev_conf.rxmode.jumbo_frame = 1;\n \telse\n \t\tdev->data->dev_conf.rxmode.jumbo_frame = 0;\n+\n+\t/* Restore config lost due to vport stop */\n+\tqede_mac_addr_set(dev, &qdev->primary_mac);\n+\tif (dev->data->promiscuous)\n+\t\tqede_promiscuous_enable(dev);\n+\telse\n+\t\tqede_promiscuous_disable(dev);\n+\n+\tif (dev->data->all_multicast)\n+\t\tqede_allmulticast_enable(dev);\n+\telse\n+\t\tqede_allmulticast_disable(dev);\n+\n+\tqede_vlan_offload_set(dev, qdev->vlan_offload_mask);\n+\n \tif (!dev->data->dev_started && restart) {\n \t\tqede_dev_start(dev);\n \t\tdev->data->dev_started = 1;\n \t}\n+\n \t/* update max frame size */\n \tdev->data->dev_conf.rxmode.max_rx_pkt_len = max_rx_pkt_len;\n \t/* Reassign back */\n@@ -3115,29 +3111,28 @@ static int qede_common_dev_init(struct rte_eth_dev *eth_dev, bool is_vf)\n \t\tdo_once = false;\n \t}\n \n+\t/* Bring-up the link */\n+\tqede_dev_set_link_state(eth_dev, true);\n+\n \tadapter->num_tx_queues = 0;\n \tadapter->num_rx_queues = 0;\n \tSLIST_INIT(&adapter->fdir_info.fdir_list_head);\n \tSLIST_INIT(&adapter->vlan_list_head);\n \tSLIST_INIT(&adapter->uc_list_head);\n \tadapter->mtu = ETHER_MTU;\n-\tadapter->new_mtu = ETHER_MTU;\n-\tif (!is_vf) {\n-\t\tif (qede_start_vport(adapter, adapter->mtu))\n-\t\t\treturn -1;\n-\t} else {\n-\t\t/* VF tunnel offloads is enabled by default in PF driver */\n-\t\tadapter->vxlan.enable = true;\n-\t\tadapter->vxlan.num_filters = 0;\n-\t\tadapter->vxlan.filter_type = ETH_TUNNEL_FILTER_IMAC |\n-\t\t\t\t\t     ETH_TUNNEL_FILTER_IVLAN;\n-\t\tadapter->vxlan.udp_port = QEDE_VXLAN_DEF_PORT;\n-\t\tadapter->geneve.enable = true;\n-\t\tadapter->vxlan.num_filters = 0;\n-\t\tadapter->vxlan.filter_type = ETH_TUNNEL_FILTER_IMAC |\n-\t\t\t\t\t     ETH_TUNNEL_FILTER_IVLAN;\n-\t\tadapter->vxlan.udp_port = QEDE_GENEVE_DEF_PORT;\n-\t}\n+\tadapter->vport_started = false;\n+\n+\t/* VF tunnel offloads is enabled by default in PF driver */\n+\tadapter->vxlan.enable = true;\n+\tadapter->vxlan.num_filters = 0;\n+\tadapter->vxlan.filter_type = ETH_TUNNEL_FILTER_IMAC |\n+\t\t\t\t     ETH_TUNNEL_FILTER_IVLAN;\n+\tadapter->vxlan.udp_port = QEDE_VXLAN_DEF_PORT;\n+\tadapter->geneve.enable = true;\n+\tadapter->vxlan.num_filters = 0;\n+\tadapter->vxlan.filter_type = ETH_TUNNEL_FILTER_IMAC |\n+\t\t\t\t     ETH_TUNNEL_FILTER_IVLAN;\n+\tadapter->vxlan.udp_port = QEDE_GENEVE_DEF_PORT;\n \n \tDP_INFO(edev, \"MAC address : %02x:%02x:%02x:%02x:%02x:%02x\\n\",\n \t\tadapter->primary_mac.addr_bytes[0],\ndiff --git a/drivers/net/qede/qede_ethdev.h b/drivers/net/qede/qede_ethdev.h\nindex c7bb415..23f7e0e 100644\n--- a/drivers/net/qede/qede_ethdev.h\n+++ b/drivers/net/qede/qede_ethdev.h\n@@ -187,7 +187,6 @@ struct qede_dev {\n \tstruct ecore_sb_info *sb_array;\n \tstruct qede_fastpath *fp_array;\n \tuint16_t mtu;\n-\tuint16_t new_mtu;\n \tbool enable_tx_switching;\n \tbool rss_enable;\n \tstruct rte_eth_rss_conf rss_conf;\n@@ -211,6 +210,8 @@ struct qede_dev {\n \tstruct qede_fdir_info fdir_info;\n \tbool vlan_strip_flg;\n \tchar drv_ver[QEDE_PMD_DRV_VER_STR_SIZE];\n+\tbool vport_started;\n+\tint vlan_offload_mask;\n \tvoid *ethdev;\n };\n \ndiff --git a/drivers/net/qede/qede_rxtx.c b/drivers/net/qede/qede_rxtx.c\nindex 810f0f3..169ede8 100644\n--- a/drivers/net/qede/qede_rxtx.c\n+++ b/drivers/net/qede/qede_rxtx.c\n@@ -417,6 +417,8 @@ int qede_alloc_fp_resc(struct qede_dev *qdev)\n \n \tfor (sb_idx = 0; sb_idx < QEDE_RXTX_MAX(qdev); sb_idx++) {\n \t\tfp = &qdev->fp_array[sb_idx];\n+\t\tif (!fp)\n+\t\t\tcontinue;\n \t\tfp->sb_info = rte_calloc(\"sb\", 1, sizeof(struct ecore_sb_info),\n \t\t\t\tRTE_CACHE_LINE_SIZE);\n \t\tif (!fp->sb_info) {\n@@ -448,6 +450,8 @@ void qede_dealloc_fp_resc(struct rte_eth_dev *eth_dev)\n \n \tfor (sb_idx = 0; sb_idx < QEDE_RXTX_MAX(qdev); sb_idx++) {\n \t\tfp = &qdev->fp_array[sb_idx];\n+\t\tif (!fp)\n+\t\t\tcontinue;\n \t\tDP_INFO(edev, \"Free sb_info index 0x%x\\n\",\n \t\t\t\tfp->sb_info->igu_sb_id);\n \t\tif (fp->sb_info) {\n",
    "prefixes": [
        "dpdk-dev",
        "1/3"
    ]
}