get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 132361,
    "url": "http://patches.dpdk.org/api/patches/132361/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/MN0PR21MB312032657144AC028C9F0D58B5C9A@MN0PR21MB3120.namprd21.prod.outlook.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": "<MN0PR21MB312032657144AC028C9F0D58B5C9A@MN0PR21MB3120.namprd21.prod.outlook.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/MN0PR21MB312032657144AC028C9F0D58B5C9A@MN0PR21MB3120.namprd21.prod.outlook.com",
    "date": "2023-10-06T20:09:09",
    "name": "[v2] net/netvsc: add support for mtu_set",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "0ae5be209b0f6587de328128d7230fbb03f0a7a9",
    "submitter": {
        "id": 3205,
        "url": "http://patches.dpdk.org/api/people/3205/?format=api",
        "name": "Sam Andrew",
        "email": "samandrew@microsoft.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/MN0PR21MB312032657144AC028C9F0D58B5C9A@MN0PR21MB3120.namprd21.prod.outlook.com/mbox/",
    "series": [
        {
            "id": 29755,
            "url": "http://patches.dpdk.org/api/series/29755/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=29755",
            "date": "2023-10-06T20:09:09",
            "name": "[v2] net/netvsc: add support for mtu_set",
            "version": 2,
            "mbox": "http://patches.dpdk.org/series/29755/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/132361/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/132361/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 7BAD8426D6;\n\tFri,  6 Oct 2023 22:09:14 +0200 (CEST)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 6623440685;\n\tFri,  6 Oct 2023 22:09:14 +0200 (CEST)",
            "from DM5PR00CU002.outbound.protection.outlook.com\n (mail-centralusazon11021026.outbound.protection.outlook.com [52.101.62.26])\n by mails.dpdk.org (Postfix) with ESMTP id 87A32402E1\n for <dev@dpdk.org>; Fri,  6 Oct 2023 22:09:13 +0200 (CEST)",
            "from MN0PR21MB3120.namprd21.prod.outlook.com (2603:10b6:208:374::18)\n by PH7PR21MB3356.namprd21.prod.outlook.com (2603:10b6:510:1dc::9)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6886.15; Fri, 6 Oct\n 2023 20:09:10 +0000",
            "from MN0PR21MB3120.namprd21.prod.outlook.com\n ([fe80::5e3d:e9ea:72b1:393b]) by MN0PR21MB3120.namprd21.prod.outlook.com\n ([fe80::5e3d:e9ea:72b1:393b%6]) with mapi id 15.20.6886.016; Fri, 6 Oct 2023\n 20:09:10 +0000"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=Q2+4UMu5AAd1BjWnWYK08HCbPmTXjtQUV/uIJN7tU0ZqM1OWD9SGueL0X6qS8QCptyMWOvSsRt4ZQvK9XItZLTltOTTu8sRckV7AS2030Wvro4Jh2J5auit9oUHwZ8lGBquGTREkMGd4Yn9FPKjj1CSiHbZBNZhsG9zu7ckmexCGVdcazr0FDUzyPoM/ShsbIHPJgddbhrl/eVWxdJ1jqQSaP1jJCGkAAj2Sc45P9voM4S1CJAiw9YfiZGSaeTZUb3Lwu+WRnW7uHDJ1dSpyyoF0ilS700C+Mu4ozKW72v7sBdDcwtL5M6aYm3WC0tEPI++17RrEe9wjzpFi6zS+Ug==",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector9901;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=Lot9nT4Rcthd48RvtglmBjcIM5DlKXxQ8wpu00QunEA=;\n b=dKYzd9Tmyr7ivLyqHAVM/kAdj7q3j2nSUEW6iPQsE7VFQM3kbyax6fO57pSuc3vC9WBGtGipd2pvWpsmfdJqhVWEnVeAG4cka3+f3xh89p6O5GTAT2R2oVI0pZucrMFlaq3mn1s4aglP1Q4ma2Qj/cEEJ5KuN9Jr5AIOoFIRn602nOhu6mookxpWrg/RdBMbn8YVUIkSR40RZkpdMxESy/fZxyAcBAoxGLrXukCY30lwyROgyEbE7s2h0ngZjpXPg5yW2ZV3UcApgVGNe+UEhP/X1cg5XwIxjOnnhz+CLKvF2LsMiXeH2NbGSGBycxoErbeJ211BMed3py2bgawUow==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=microsoft.com; dmarc=pass action=none\n header.from=microsoft.com; dkim=pass header.d=microsoft.com; arc=none",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=selector2;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=Lot9nT4Rcthd48RvtglmBjcIM5DlKXxQ8wpu00QunEA=;\n b=NW3lWNa224pfCukiR0yhMQZMwQ0cO3Zf48DQxxS529XY2GCUwQnB/zwojykXdyH3sCUqJ0H55oHbIL6H0O+xylPlkzJetD+Zcsvy6fQv75KlBwtgYlw9jOkIUIy5zb2OE9Zs9nEWtEMqChmPKBIpkw3mbF3/vIebBxjW+GSA2vY=",
        "From": "Sam Andrew <samandrew@microsoft.com>",
        "To": "\"dev@dpdk.org\" <dev@dpdk.org>, \"ferruh.yigit@amd.com\"\n <ferruh.yigit@amd.com>, \"andrew.rybchenko@oktetlabs.ru\"\n <andrew.rybchenko@oktetlabs.ru>, Long Li <longli@microsoft.com>",
        "Subject": "[PATCH v2] net/netvsc: add support for mtu_set",
        "Thread-Topic": "[PATCH v2] net/netvsc: add support for mtu_set",
        "Thread-Index": "AQHZ+JD3DK4OrtnD50+1ZRScBu5UrA==",
        "Date": "Fri, 6 Oct 2023 20:09:09 +0000",
        "Message-ID": "\n <MN0PR21MB312032657144AC028C9F0D58B5C9A@MN0PR21MB3120.namprd21.prod.outlook.com>",
        "References": "\n <MN0PR21MB3120FDA48E7C122E74FF58F0B5CAA@MN0PR21MB3120.namprd21.prod.outlook.com>",
        "In-Reply-To": "\n <MN0PR21MB3120FDA48E7C122E74FF58F0B5CAA@MN0PR21MB3120.namprd21.prod.outlook.com>",
        "Accept-Language": "en-US",
        "Content-Language": "en-US",
        "X-MS-Has-Attach": "",
        "X-MS-TNEF-Correlator": "",
        "msip_labels": "\n MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_ActionId=bcee6afe-e6b0-45e8-b277-eff8a22f3d92;\n MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_ContentBits=0;\n MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Enabled=true;\n MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Method=Standard;\n MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Name=Internal;\n MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_SetDate=2023-10-05T23:13:52Z;\n MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_SiteId=72f988bf-86f1-41af-91ab-2d7cd011db47;",
        "authentication-results": "dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=microsoft.com;",
        "x-ms-publictraffictype": "Email",
        "x-ms-traffictypediagnostic": "MN0PR21MB3120:EE_|PH7PR21MB3356:EE_",
        "x-ms-office365-filtering-correlation-id": "e49d423f-b616-4b26-c794-08dbc6a81a26",
        "x-ms-exchange-senderadcheck": "1",
        "x-ms-exchange-antispam-relay": "0",
        "x-microsoft-antispam": "BCL:0;",
        "x-microsoft-antispam-message-info": "\n 1jlpj+1OmKVdsh/lGu+vl0mJA6V13DV7aPlR0tkYqn6lPzmq57COyaL4TYCMX3rI6xQ1giMwLiaEPOlsdsff5vm4QU0A6g3NOzQ46+FeDicTeuw+oe0GE5AdA83UXyRr5wKQEpGkV9hnIIHhTa+e7OfvBpXqRIDFyWdEAKbOxDqxAbrhwoy5ILUz4OuYtZNpYjeuH/m32FR9vxho0nLkWZO9HIvC6f3hfxHqxb2KjxWiQ7ch63bIW7NpCE2RpzQP+TjB8v+FcXa+Om6GrGSBlD6R2xASn26pPo+5EBInu9Js7z4SLkjrdi2HvgGr7t+tAf+ngSg8HPtmgYRxsvCgF4L4tukIKGIB5ZZWdneDAHIxFNG25XohEoFR33W34iS5qZRCxlDGeMx6ArhYxH9Bm1KGVag77PPskbqy9tCSVAoep6DbHgE8PnV5Cw0L7C3czcAtISeoPO0wTBM6lxlF3iSn/q7+IrEBhY+PH/p7RnmFdo816qcMMWCEUlqMnNZdJkL2MIf2qnJaV7PUka9jTeVaTPO1LwMUD48mrNBPc6r1sNcY/3m3v4Unp+27/eOzH7A21S9TfxijY5kc4Urt/04Prcmzl3QnbN1BMnLziTh2Dd6++LrRsWY6F7JvKDB7xyCPkiC6jKdF38tOLrXap8x/dqJLQ49//2AMQL1ug7k=",
        "x-forefront-antispam-report": "CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;\n IPV:NLI; SFV:NSPM; H:MN0PR21MB3120.namprd21.prod.outlook.com; PTR:; CAT:NONE;\n SFS:(13230031)(376002)(396003)(366004)(346002)(136003)(39860400002)(230922051799003)(186009)(64100799003)(1800799009)(451199024)(6506007)(7696005)(10290500003)(478600001)(71200400001)(83380400001)(9686003)(2906002)(26005)(30864003)(8990500004)(316002)(41300700001)(6636002)(76116006)(66476007)(66556008)(66946007)(66446008)(5660300002)(52536014)(8676002)(8936002)(64756008)(110136005)(33656002)(122000001)(38070700005)(38100700002)(86362001)(82960400001)(82950400001)(55016003);\n DIR:OUT; SFP:1102;",
        "x-ms-exchange-antispam-messagedata-chunkcount": "1",
        "x-ms-exchange-antispam-messagedata-0": "\n zc23JyvFXNKrVE2XwVOLIZhEPTzN08Df9eG24tUWKNBF1EQyT99AR6s3lpVKGS05pVRlVPbnXg4Qpeka1nu7J9jpVgGLnK1Kudve+lbOV3zul60KxHJlMpVgzBAF7kl8pntJi/APMw2rmyQ7jv2vGDEE9DTGEHl2zA0doYE9NG+s766pn7owWPq/xOBmd+Xa5tXUiN0oe+b2yvpwoNcMZtKhtJmSXCyBANhngg1S20ow3IYhDllupbQJlHlbkWlkNP28OLYeRRNU31iYkEy3DH74tG1l17nqOkmDAR5ckXzuj8boitEG8iKVfICswuIl1AfyVZq4S6KPNnIjX1ty13hWEK5pC8iELz0ahv/KTRc8LnRJGDgqGj0FtfL26s+I6SGINtPMCEXbfG25B+CCJMLU9rr5n0BNMrrsGNdTfOpPuZqMXZQHflMEVrxjm84lvd10xmDgX7XXae9mNYPH1qUqjXsdukQ6jp+Qv4SQyEqivR+Y1uO/DYkC05R6OrzON3Z/t9u+tIws2T/bX5f7gnm/zgfEfWLBEm8jZoUCrTh3ydA8A2VN6FPY9qrnp9XfynHTtgKYvWdGs6hqGZXfRtdumrypwCUpZGdr2m1MEq+IAl9ftn+ucEF5bHgAxBtZfdjQIME4rpzzmkT9Es+dsqlTpX0CF1FTpb/Nuz0ndWAZH/4vC93nJyIajYlw3yf+xM+KLj5wxXKduvvW7RBDNDrCDBpC2ezo85sScnBhLT9ebTdlWiO9U34LWEaX/rlmSIxRkjVoh5GRoQPySD3bEUeh38+o69pTRyb7gUu3reIShNW2nelQ5lDgYxmUr5gdKKaD2nYzaZMvcJidfZadta0htcG5MOERnlxtKtd+J0g2E59TjAWdOzkuzm7B76+yaxJFylT4p1JV7Fb5R5RgxjppDUOHVFGKsGGnvmgkCbSrbcbjPASrBg+sim2zUuCcEsTq75ataEIC8QLo96oprcIu/c5AKh2zVHrz1X1uVqCdy7hM3R6n9+m2X57z2mtNAO6CKO1IF8AqYWGw3MBBqOq9ipJVzRz0RZbjzjfhSiSyPFXUem+YODUmBTNyHB1tBthRijXvmcmuxt+52z0OVpDXSI5iCBaxYCvPCYhBlXX72ts3mnG8cbE9pMqCOTXCnAYfiKf2YKdzclnyQfFFU882Kj4N2dP3G4RivtGBZj6LnWiBb5Tb6zVKbOWcPSbMSJcjrt14dwky8wooJCDv37vXOOaC0V7o7LY8fZW2uRQ5LnrS6aUn+2/J3mBMK2S9p8Sv2N/aZQuvY5UH7YAsFs5RHJGFWLw1RmWpZ5oTl3ALtl6x2MveIEYlMpH8hV1nVOsPDrjQsBWhN5/OTaj0WDTmPSRzpr7XERNUa3rbUCUbA1i1ZT8h/BL4UM5eW/OEgNkNuoAuOdOUi/+KUZOiNuP44rq5zLijP36i1hbxkO8q8AskxMinz6Z/Np7Ke/fWx/uXI+YRYJEXeDit1yREnujjf8rQnkalIPKX7VRL0c0q6CPApE9663B2h7bQ7l3D",
        "Content-Type": "text/plain; charset=\"us-ascii\"",
        "Content-Transfer-Encoding": "quoted-printable",
        "MIME-Version": "1.0",
        "X-OriginatorOrg": "microsoft.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Internal",
        "X-MS-Exchange-CrossTenant-AuthSource": "MN0PR21MB3120.namprd21.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n e49d423f-b616-4b26-c794-08dbc6a81a26",
        "X-MS-Exchange-CrossTenant-originalarrivaltime": "06 Oct 2023 20:09:09.8132 (UTC)",
        "X-MS-Exchange-CrossTenant-fromentityheader": "Hosted",
        "X-MS-Exchange-CrossTenant-id": "72f988bf-86f1-41af-91ab-2d7cd011db47",
        "X-MS-Exchange-CrossTenant-mailboxtype": "HOSTED",
        "X-MS-Exchange-CrossTenant-userprincipalname": "\n 9Su2li1jm2aY1rOZWar+FRtkr6//1I7CfMeOKmFcHyetnZXlUUE0hVqBkFFjeHq8Rqbl9A+8sq6lzGNuGV5q9w==",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "PH7PR21MB3356",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org"
    },
    "content": "Add support for changing the netvsc MTU. The MTU can only be set at nvs\ninitialization, therefore to change the MTU the underlying vmbus\nchannel(s) are torn down and the vmbus device unmapped and remapped. The\nexisting rx and tx queue(s) are reconnected to the new vmbus channel(s).\n\nSigned-off-by: Sam Andrew <samandrew@microsoft.com>\n---\nv2: Fix coding style issue\n---\n drivers/bus/vmbus/vmbus_common.c |   4 +-\n drivers/net/netvsc/hn_ethdev.c   | 185 +++++++++++++++++++++++++------\n drivers/net/netvsc/hn_rndis.c    |   7 ++\n drivers/net/netvsc/hn_rndis.h    |   1 +\n drivers/net/netvsc/hn_var.h      |   3 +-\n drivers/net/netvsc/hn_vf.c       |  23 +++-\n 6 files changed, 188 insertions(+), 35 deletions(-)",
    "diff": "diff --git a/drivers/bus/vmbus/vmbus_common.c b/drivers/bus/vmbus/vmbus_common.c\nindex 95f3ad78bc..fd205e8ac3 100644\n--- a/drivers/bus/vmbus/vmbus_common.c\n+++ b/drivers/bus/vmbus/vmbus_common.c\n@@ -39,7 +39,9 @@ vmbus_map_resource(void *requested_addr, int fd, off_t offset, size_t size,\n \t\t\t  \"mmap(%d, %p, %zu, %ld) failed: %s\",\n \t\t\t  fd, requested_addr, size, (long)offset,\n \t\t\t  strerror(errno));\n-\t}\n+\t} else\n+\t\tVMBUS_LOG(DEBUG, \"  VMBUS memory mapped at %p\",\n+\t\t\t  mapaddr);\n \treturn mapaddr;\n }\n \ndiff --git a/drivers/net/netvsc/hn_ethdev.c b/drivers/net/netvsc/hn_ethdev.c\nindex d0bbc0a4c0..f3419add3e 100644\n--- a/drivers/net/netvsc/hn_ethdev.c\n+++ b/drivers/net/netvsc/hn_ethdev.c\n@@ -1059,37 +1059,6 @@ hn_dev_close(struct rte_eth_dev *dev)\n \treturn ret;\n }\n \n-static const struct eth_dev_ops hn_eth_dev_ops = {\n-\t.dev_configure\t\t= hn_dev_configure,\n-\t.dev_start\t\t= hn_dev_start,\n-\t.dev_stop\t\t= hn_dev_stop,\n-\t.dev_close\t\t= hn_dev_close,\n-\t.dev_infos_get\t\t= hn_dev_info_get,\n-\t.txq_info_get\t\t= hn_dev_tx_queue_info,\n-\t.rxq_info_get\t\t= hn_dev_rx_queue_info,\n-\t.dev_supported_ptypes_get = hn_vf_supported_ptypes,\n-\t.promiscuous_enable     = hn_dev_promiscuous_enable,\n-\t.promiscuous_disable    = hn_dev_promiscuous_disable,\n-\t.allmulticast_enable    = hn_dev_allmulticast_enable,\n-\t.allmulticast_disable   = hn_dev_allmulticast_disable,\n-\t.set_mc_addr_list\t= hn_dev_mc_addr_list,\n-\t.reta_update\t\t= hn_rss_reta_update,\n-\t.reta_query             = hn_rss_reta_query,\n-\t.rss_hash_update\t= hn_rss_hash_update,\n-\t.rss_hash_conf_get      = hn_rss_hash_conf_get,\n-\t.tx_queue_setup\t\t= hn_dev_tx_queue_setup,\n-\t.tx_queue_release\t= hn_dev_tx_queue_release,\n-\t.tx_done_cleanup        = hn_dev_tx_done_cleanup,\n-\t.rx_queue_setup\t\t= hn_dev_rx_queue_setup,\n-\t.rx_queue_release\t= hn_dev_rx_queue_release,\n-\t.link_update\t\t= hn_dev_link_update,\n-\t.stats_get\t\t= hn_dev_stats_get,\n-\t.stats_reset            = hn_dev_stats_reset,\n-\t.xstats_get\t\t= hn_dev_xstats_get,\n-\t.xstats_get_names\t= hn_dev_xstats_get_names,\n-\t.xstats_reset\t\t= hn_dev_xstats_reset,\n-};\n-\n /*\n  * Setup connection between PMD and kernel.\n  */\n@@ -1129,12 +1098,158 @@ hn_detach(struct hn_data *hv)\n \thn_rndis_detach(hv);\n }\n \n+/*\n+ * Connects EXISTING rx/tx queues to NEW vmbus channel(s), and\n+ * re-initializes NDIS and RNDIS, including re-sending initial\n+ * NDIS/RNDIS configuration. To be used after the underlying vmbus\n+ * has been un- and re-mapped, e.g. as must happen when the device\n+ * MTU is changed.\n+ */\n+static int\n+hn_reinit(struct rte_eth_dev *dev, uint16_t mtu)\n+{\n+\tstruct hn_data *hv = dev->data->dev_private;\n+\tstruct hn_rx_queue **rxqs = (struct hn_rx_queue **)dev->data->rx_queues;\n+\tstruct hn_tx_queue **txqs = (struct hn_tx_queue **)dev->data->tx_queues;\n+\tint i, ret = 0;\n+\n+\t/* Point primary queues at new primary channel */\n+\trxqs[0]->chan = hv->channels[0];\n+\ttxqs[0]->chan = hv->channels[0];\n+\n+\tret = hn_attach(hv, mtu);\n+\tif (ret)\n+\t\treturn ret;\n+\n+\t/* Create vmbus subchannels, additional RNDIS configuration */\n+\tret = hn_dev_configure(dev);\n+\tif (ret)\n+\t\treturn ret;\n+\n+\t/* Point any additional queues at new subchannels */\n+\tfor (i = 1; i < dev->data->nb_rx_queues; i++)\n+\t\trxqs[i]->chan = hv->channels[i];\n+\tfor (i = 1; i < dev->data->nb_tx_queues; i++)\n+\t\ttxqs[i]->chan = hv->channels[i];\n+\n+\treturn ret;\n+}\n+\n+static int\n+hn_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)\n+{\n+\tstruct hn_data *hv = dev->data->dev_private;\n+\tunsigned int orig_mtu = dev->data->mtu;\n+\tuint32_t rndis_mtu;\n+\tint ret = 0;\n+\tint i;\n+\n+\tif (dev->data->dev_started) {\n+\t\tPMD_DRV_LOG(ERR, \"Device must be stopped before changing MTU\");\n+\t\treturn -EIO;\n+\t}\n+\n+\t/* Change MTU of underlying VF dev first, if it exists */\n+\tret = hn_vf_mtu_set(dev, mtu);\n+\tif (ret)\n+\t\treturn ret;\n+\n+\t/* Release channel resources */\n+\thn_detach(hv);\n+\n+\t/* Close any secondary vmbus channels */\n+\tfor (i = 1; i < hv->num_queues; i++)\n+\t\trte_vmbus_chan_close(hv->channels[i]);\n+\n+\t/* Close primary vmbus channel */\n+\trte_free(hv->channels[0]);\n+\n+\t/* Unmap and re-map vmbus device */\n+\trte_vmbus_unmap_device(hv->vmbus);\n+\tret = rte_vmbus_map_device(hv->vmbus);\n+\tif (ret) {\n+\t\t/* This is a catastrophic error - the device is unusable */\n+\t\tPMD_DRV_LOG(ERR, \"Could not re-map vmbus device!\");\n+\t\treturn ret;\n+\t}\n+\n+\t/* Update pointers to re-mapped UIO resources */\n+\thv->rxbuf_res = hv->vmbus->resource[HV_RECV_BUF_MAP];\n+\thv->chim_res  = hv->vmbus->resource[HV_SEND_BUF_MAP];\n+\n+\t/* Re-open the primary vmbus channel */\n+\tret = rte_vmbus_chan_open(hv->vmbus, &hv->channels[0]);\n+\tif (ret) {\n+\t\t/* This is a catastrophic error - the device is unusable */\n+\t\tPMD_DRV_LOG(ERR, \"Could not re-open vmbus channel!\");\n+\t\treturn ret;\n+\t}\n+\n+\trte_vmbus_set_latency(hv->vmbus, hv->channels[0], hv->latency);\n+\n+\tret = hn_reinit(dev, mtu);\n+\tif (!ret)\n+\t\tgoto out;\n+\n+\t/* In case of error, attempt to restore original MTU */\n+\tret = hn_reinit(dev, orig_mtu);\n+\tif (ret)\n+\t\tPMD_DRV_LOG(ERR, \"Restoring original MTU failed for netvsc\");\n+\n+\tret = hn_vf_mtu_set(dev, orig_mtu);\n+\tif (ret)\n+\t\tPMD_DRV_LOG(ERR, \"Restoring original MTU failed for VF\");\n+\n+out:\n+\tif (hn_rndis_get_mtu(hv, &rndis_mtu)) {\n+\t\tPMD_DRV_LOG(ERR, \"Could not get MTU via RNDIS\");\n+\t} else {\n+\t\tdev->data->mtu = (uint16_t)rndis_mtu;\n+\t\tPMD_DRV_LOG(DEBUG, \"RNDIS MTU is %u\", dev->data->mtu);\n+\t}\n+\n+\treturn ret;\n+}\n+\n+static const struct eth_dev_ops hn_eth_dev_ops = {\n+\t.dev_configure\t\t= hn_dev_configure,\n+\t.dev_start\t\t= hn_dev_start,\n+\t.dev_stop\t\t= hn_dev_stop,\n+\t.dev_close\t\t= hn_dev_close,\n+\t.dev_infos_get\t\t= hn_dev_info_get,\n+\t.txq_info_get\t\t= hn_dev_tx_queue_info,\n+\t.rxq_info_get\t\t= hn_dev_rx_queue_info,\n+\t.dev_supported_ptypes_get = hn_vf_supported_ptypes,\n+\t.promiscuous_enable     = hn_dev_promiscuous_enable,\n+\t.promiscuous_disable    = hn_dev_promiscuous_disable,\n+\t.allmulticast_enable    = hn_dev_allmulticast_enable,\n+\t.allmulticast_disable   = hn_dev_allmulticast_disable,\n+\t.set_mc_addr_list\t= hn_dev_mc_addr_list,\n+\t.mtu_set                = hn_dev_mtu_set,\n+\t.reta_update\t\t= hn_rss_reta_update,\n+\t.reta_query             = hn_rss_reta_query,\n+\t.rss_hash_update\t= hn_rss_hash_update,\n+\t.rss_hash_conf_get      = hn_rss_hash_conf_get,\n+\t.tx_queue_setup\t\t= hn_dev_tx_queue_setup,\n+\t.tx_queue_release\t= hn_dev_tx_queue_release,\n+\t.tx_done_cleanup        = hn_dev_tx_done_cleanup,\n+\t.rx_queue_setup\t\t= hn_dev_rx_queue_setup,\n+\t.rx_queue_release\t= hn_dev_rx_queue_release,\n+\t.link_update\t\t= hn_dev_link_update,\n+\t.stats_get\t\t= hn_dev_stats_get,\n+\t.stats_reset            = hn_dev_stats_reset,\n+\t.xstats_get\t\t= hn_dev_xstats_get,\n+\t.xstats_get_names\t= hn_dev_xstats_get_names,\n+\t.xstats_reset\t\t= hn_dev_xstats_reset,\n+};\n+\n static int\n eth_hn_dev_init(struct rte_eth_dev *eth_dev)\n {\n \tstruct hn_data *hv = eth_dev->data->dev_private;\n \tstruct rte_device *device = eth_dev->device;\n \tstruct rte_vmbus_device *vmbus;\n+\tuint32_t mtu;\n \tunsigned int rxr_cnt;\n \tint err, max_chan;\n \n@@ -1218,6 +1333,12 @@ eth_hn_dev_init(struct rte_eth_dev *eth_dev)\n \tif (err)\n \t\tgoto failed;\n \n+\terr = hn_rndis_get_mtu(hv, &mtu);\n+\tif (err)\n+\t\tgoto failed;\n+\teth_dev->data->mtu = (uint16_t)mtu;\n+\tPMD_INIT_LOG(DEBUG, \"RNDIS MTU is %u\", eth_dev->data->mtu);\n+\n \terr = hn_rndis_get_eaddr(hv, eth_dev->data->mac_addrs->addr_bytes);\n \tif (err)\n \t\tgoto failed;\n@@ -1272,7 +1393,7 @@ eth_hn_dev_uninit(struct rte_eth_dev *eth_dev)\n \n \thn_detach(hv);\n \thn_chim_uninit(eth_dev);\n-\trte_vmbus_chan_close(hv->primary->chan);\n+\trte_vmbus_chan_close(hv->channels[0]);\n \trte_free(hv->primary);\n \tret = rte_eth_dev_owner_delete(hv->owner.id);\n \tif (ret != 0)\ndiff --git a/drivers/net/netvsc/hn_rndis.c b/drivers/net/netvsc/hn_rndis.c\nindex 29c6009b2c..778f86f2bf 100644\n--- a/drivers/net/netvsc/hn_rndis.c\n+++ b/drivers/net/netvsc/hn_rndis.c\n@@ -1111,6 +1111,13 @@ hn_rndis_get_eaddr(struct hn_data *hv, uint8_t *eaddr)\n \treturn 0;\n }\n \n+int\n+hn_rndis_get_mtu(struct hn_data *hv, uint32_t *mtu)\n+{\n+\treturn hn_rndis_query(hv, OID_GEN_MAXIMUM_FRAME_SIZE, NULL, 0,\n+\t\t\t       mtu, sizeof(uint32_t));\n+}\n+\n int\n hn_rndis_get_linkstatus(struct hn_data *hv)\n {\ndiff --git a/drivers/net/netvsc/hn_rndis.h b/drivers/net/netvsc/hn_rndis.h\nindex 9a8251fc2f..7f40f6221d 100644\n--- a/drivers/net/netvsc/hn_rndis.h\n+++ b/drivers/net/netvsc/hn_rndis.h\n@@ -10,6 +10,7 @@ void\thn_rndis_link_status(struct rte_eth_dev *dev, const void *msg);\n int\thn_rndis_attach(struct hn_data *hv);\n void\thn_rndis_detach(struct hn_data *hv);\n int\thn_rndis_get_eaddr(struct hn_data *hv, uint8_t *eaddr);\n+int\thn_rndis_get_mtu(struct hn_data *hv, uint32_t *mtu);\n int\thn_rndis_get_linkstatus(struct hn_data *hv);\n int\thn_rndis_get_linkspeed(struct hn_data *hv);\n int\thn_rndis_set_rxfilter(struct hn_data *hv, uint32_t filter);\ndiff --git a/drivers/net/netvsc/hn_var.h b/drivers/net/netvsc/hn_var.h\nindex e1f8e69a28..e37946804d 100644\n--- a/drivers/net/netvsc/hn_var.h\n+++ b/drivers/net/netvsc/hn_var.h\n@@ -13,7 +13,7 @@\n  * Tunable ethdev params\n  */\n #define HN_MIN_RX_BUF_SIZE\t1024\n-#define HN_MAX_XFER_LEN\t\t2048\n+#define HN_MAX_XFER_LEN\t\tRTE_ETHER_MAX_JUMBO_FRAME_LEN\n #define\tHN_MAX_MAC_ADDRS\t1\n #define HN_MAX_CHANNELS\t\t64\n \n@@ -287,6 +287,7 @@ int\thn_vf_rss_hash_update(struct rte_eth_dev *dev,\n int\thn_vf_reta_hash_update(struct rte_eth_dev *dev,\n \t\t\t       struct rte_eth_rss_reta_entry64 *reta_conf,\n \t\t\t       uint16_t reta_size);\n+int hn_vf_mtu_set(struct rte_eth_dev *dev, uint16_t mtu);\n int\thn_eth_rmv_event_callback(uint16_t port_id,\n \t\t\t\t  enum rte_eth_event_type event __rte_unused,\n \t\t\t\t  void *cb_arg, void *out __rte_unused);\ndiff --git a/drivers/net/netvsc/hn_vf.c b/drivers/net/netvsc/hn_vf.c\nindex 782395d805..90cb6f6923 100644\n--- a/drivers/net/netvsc/hn_vf.c\n+++ b/drivers/net/netvsc/hn_vf.c\n@@ -239,7 +239,7 @@ int hn_vf_add(struct rte_eth_dev *dev, struct hn_data *hv)\n \n \tport = hv->vf_ctx.vf_port;\n \n-\t/* If the primary device has started, this is a VF host add.\n+\t/* If the primary device has started, this is a VF hot add.\n \t * Configure and start VF device.\n \t */\n \tif (dev->data->dev_started) {\n@@ -264,6 +264,12 @@ int hn_vf_add(struct rte_eth_dev *dev, struct hn_data *hv)\n \t\t\tgoto exit;\n \t\t}\n \n+\t\tret = hn_vf_mtu_set(dev, dev->data->mtu);\n+\t\tif (ret) {\n+\t\t\tPMD_DRV_LOG(ERR, \"Failed to set VF MTU\");\n+\t\t\tgoto exit;\n+\t\t}\n+\n \t\tPMD_DRV_LOG(NOTICE, \"Starting VF port %d\", port);\n \t\tret = rte_eth_dev_start(port);\n \t\tif (ret) {\n@@ -778,3 +784,18 @@ int hn_vf_reta_hash_update(struct rte_eth_dev *dev,\n \n \treturn ret;\n }\n+\n+int hn_vf_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)\n+{\n+\tstruct hn_data *hv = dev->data->dev_private;\n+\tstruct rte_eth_dev *vf_dev;\n+\tint ret = 0;\n+\n+\trte_rwlock_read_lock(&hv->vf_lock);\n+\tvf_dev = hn_get_vf_dev(hv);\n+\tif (hv->vf_ctx.vf_vsc_switched && vf_dev)\n+\t\tret = vf_dev->dev_ops->mtu_set(vf_dev, mtu);\n+\trte_rwlock_read_unlock(&hv->vf_lock);\n+\n+\treturn ret;\n+}\n",
    "prefixes": [
        "v2"
    ]
}