get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 34050,
    "url": "http://patches.dpdk.org/api/patches/34050/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1516293317-30748-5-git-send-email-matan@mellanox.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": "<1516293317-30748-5-git-send-email-matan@mellanox.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1516293317-30748-5-git-send-email-matan@mellanox.com",
    "date": "2018-01-18T16:35:14",
    "name": "[dpdk-dev,v3,4/7] ethdev: synchronize port allocation",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "cf8f5e038547eed7cd60522ae670bcb0cc1fdcf7",
    "submitter": {
        "id": 796,
        "url": "http://patches.dpdk.org/api/people/796/?format=api",
        "name": "Matan Azrad",
        "email": "matan@mellanox.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/1516293317-30748-5-git-send-email-matan@mellanox.com/mbox/",
    "series": [],
    "comments": "http://patches.dpdk.org/api/patches/34050/comments/",
    "check": "fail",
    "checks": "http://patches.dpdk.org/api/patches/34050/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 EA60A1B384;\n\tThu, 18 Jan 2018 17:35:45 +0100 (CET)",
            "from EUR02-HE1-obe.outbound.protection.outlook.com\n\t(mail-eopbgr10046.outbound.protection.outlook.com [40.107.1.46])\n\tby dpdk.org (Postfix) with ESMTP id C7B151B362\n\tfor <dev@dpdk.org>; Thu, 18 Jan 2018 17:35:38 +0100 (CET)",
            "from mellanox.com (37.142.13.130) by\n\tVI1PR0502MB3806.eurprd05.prod.outlook.com (2603:10a6:803:12::19) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.407.7;\n\tThu, 18 Jan 2018 16:35:36 +0000"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com;\n\ts=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version;\n\tbh=EZ4z/pk6tAmL7zTe7q8DPYT8Ojzld80zQ8/AB6ISUOk=;\n\tb=b6s80CssJoY8tf24LtwPxBfWz2Wew8hexjOKWQCbtLuGnHgOjaN5FWjzRg+7bCsl1VRpxpPCoX92lKpIgR1CSFNSOHrY2Ao3hwQ7Twe2x74s9V1/sMga97kfVv8lleE1uoL2NBKkNrlyVxVxut/kpA3LBN7anRi0VY3/FAnp7pU=",
        "Authentication-Results": "spf=none (sender IP is )\n\tsmtp.mailfrom=matan@mellanox.com; ",
        "From": "Matan Azrad <matan@mellanox.com>",
        "To": "Thomas Monjalon <thomas@monjalon.net>,\n\tGaetan Rivet <gaetan.rivet@6wind.com>,\n\tJingjing Wu <jingjing.wu@intel.com>",
        "Cc": "dev@dpdk.org, Neil Horman <nhorman@tuxdriver.com>,\n\tBruce Richardson <bruce.richardson@intel.com>,\n\tKonstantin Ananyev <konstantin.ananyev@intel.com>",
        "Date": "Thu, 18 Jan 2018 16:35:14 +0000",
        "Message-Id": "<1516293317-30748-5-git-send-email-matan@mellanox.com>",
        "X-Mailer": "git-send-email 1.8.3.1",
        "In-Reply-To": "<1516293317-30748-1-git-send-email-matan@mellanox.com>",
        "References": "<1515318351-4756-1-git-send-email-matan@mellanox.com>\n\t<1516293317-30748-1-git-send-email-matan@mellanox.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[37.142.13.130]",
        "X-ClientProxiedBy": "VI1PR0802CA0021.eurprd08.prod.outlook.com\n\t(2603:10a6:800:aa::31) To VI1PR0502MB3806.eurprd05.prod.outlook.com\n\t(2603:10a6:803:12::19)",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "e079babb-7105-4d12-23f4-08d55e91810c",
        "X-MS-Office365-Filtering-HT": "Tenant",
        "X-Microsoft-Antispam": "UriScan:; BCL:0; PCL:0;\n\tRULEID:(7020095)(4652020)(5600026)(4604075)(48565401081)(2017052603307)(7153060)(7193020);\n\tSRVR:VI1PR0502MB3806; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; VI1PR0502MB3806;\n\t3:DKyHkG8Mxhh4MDGODqOK4zoRYlzB+cHVfAjIv299vesWmP8mGKkTAfXqRvFyU//iOJRWow6jHVUTM60rF9EcWHBisJIHkaUifU60FOb7DafzJg/iQhaCun8R396o9etXjDEx9CurGXKmsAod2coAx6oWTkTKGan33Gu9+dghn3LBH5WYx/57qzLgYgbhlswjXCSt9kTZjPmfbmjLwsM47SAJE0efrSt3gd/SdnTow36cTqil0o856oM0a11PXjN6;\n\t25:MwwqL/IAI1D4SaQoLr3Hlb6NF4EXNubRcdMqbs0jJlo7+JDTFEumC48GTpZHs5XDFQhK8c/2xQ5WsHUE0stv7gdcm5PwJjs+YYw0/9BLs3hvu7UwqoNqn4uBa3BadL1AHo7b/IYGAgTTCOMEtwO9n1W6Jthq/cWFOGGj9+FgQDbvpaBSY2sMWPoAcsRE10LoeNv42LsoqfPLL6KYDhWMyW67c/Bug+fVfNeU1dmx+gESMNvTHHt6tuAxSdE5yesGTqc/4SVCamk5PazEaYEKhFrvB3ta/RAwhQmeX1mbS/kr9fLyYVa1+qD5Iaq7UeXpp/oQT2HUy8pztxqKObLOyQ==;\n\t31:od+edKDq9xeaNtmpKYa6ix7FCrzw+/h07w/V7obr1vJGBppqD3Z4bagKG5p6evjLX2DPpph9R5sVUTSaqYhjRYE/sm38KUm1H9m+jH+xuo2pZTVIFNwDtmFY0fpFmTSALFNuMsGYVXSrCz9jE4c5C5hnkIxVr9Q8H+qvRtVNbX5fHw/sTYlmx/OkwuZdPsnIhLuIuQk8EMUZ23Yq7Sn0BUF0JTAphIgDEbRqUM7cKNw=",
            "1; VI1PR0502MB3806;\n\t20:1p1trpIS7zYQ6qHgH2x7I24II7O2uQvejrzRtGIwQABQfTd8Vi8JWdxdc6RQkAi0UlFfHEmJDN6EMqI6/Vi2ASPrY+2BV/AY2rXqt55qR9Aq6ENdtxezmlgzmj2v38Y2u/eizNpciv8ZDSsDYQKpCMBNas3WJGHDEjJI3HeShCw7/cVyArPF4bIcGtI2f7Fz6+C+owW5z0Hppmn+rhbX+NnKhqukYPtd1t2OcVYD6WdwEVV3FnuCsTYEOU6w1KVyKbR/vfC/fPQ3JtK0GKuboClMSdEDFtgQqKsoKs6E6jsDh2L7qJRXeNr0yB8EOx/zknQ6bUpzkMW6MikkaJv7ixnVdamgkaUKCcnwDEySMIgJT0czTt42Nj6g1HLZbxucJuAMOfX9nKUZWkFIML2PXjei8kMtRQwzeKPaDJpOXinzlq0OAKg7jCIPEL2D9a+VipnxRz/w0kf+FOe8u0UJ2k+f0lTSx6gPMYd8w8r8NW+RkQVPFvFzJ+gDnzw74LSo;\n\t4:o/oUpDb/DnZP0VDPtT9JtQr7rkrOVMTgflfI+5TbdDbRXdbrmSbgL8KtTZ9g6LjTH3kpXbGKD3jSgvDMBMI4mASK3os8X0Bnd2js/fp/3/m/iKEDrAjo50CuOn+SxqXb0RDW03BxGFCh4REw3qWcnBojlrz55kbdYvr6N90OVJvltnTkBxKiFLdNvzYah9MWHf36HszHuJuElWcE7wj/aQXmJopi6FMqJU+z+mIl0iEDwPa6R482XVQw5C/zGcZgKVSB7ACxAj0jpzUyd2RF0a/FiCvJdyeTHhnyNqvSDOgWq61zURDrfAtu8tltbU6D",
            "=?us-ascii?Q?1; VI1PR0502MB3806;\n\t23:Lp8/3yCc5R1cKqS4AI0gxbJ6erlbTifU/IZ4sI4?=\n\t7nLWa6qv76uw+4erdVnnlEFhcjEGsGv1DgXsG/QBnzh/Q9EaBgnKqtEmQitfOgwXF882CQAqlFZml4NIojkJpnDES4NBsqUdGWFZuCb4HdwQOotsl/W8rIDrLj///fD6/X7oe1vrm8PZJpNKesSCAhqTlF7TTKp8id2gkFOeqZP2OFuwwOsNihk+iOv1i0RXyUzgui0UiJNN2hPmWqn2gilSDgylnLjxd1/N5Fv7jgDlZMRnfE/BuwGg1+gA4I9jTieXdX2YzuOA/XekMZVbN1ujYEcIQBjO+5/1BaVs6BmHMQ/8eW4pgCpX2tFzODZIfUMkrXLvdMpmIjgH7eUDsDKwINdPgS3PrM5rrfiR3g6UuqUeKRcoM9djl4wS4DOReteB5N0ukNknvQ21jfvpmInG1Mv6pp+vEmjbeu8N4r33gg0bbHxSpjGz2KyaQq9vxH5BmxzhazlerAtGh5COD7GyfKaC2gFgHNfz+fBFvfQW1G1qKSdov4/mkXiiqqzr/2rB3oycja5w0ryV+NZCZH67CA+Kw5d9SgyW7JFsmUoPdBbZam2lTMV8Ti0eJtUQgyySlCX1+0CBYDMqDrAZQW5cx590lrEvIduxsF37uqO69Io4Onj53hicLlj24Bj+5pYulWH/YaAKEcuoQmf+C3GX5oC83IE84M171pQetV1cCNPs0YvKaxBKVW1LzVL1Uwk8yO38GAVIyl3OqeBQnGH5F7v1sP62ARQnZC9eMgluCxMt1nJI0J3NPg79lHJSorHqMcEQ43S+EIGGN0SV0FNFf6an+pX9s6bQSp+HzZEx83XHgxhiWFvDydwrKHs1T7EFLR4166mwwJy+/q1q7XgQ8yf4wYXGtTMQUpHwDgpqHXwvucCjMMQDa7N942fN4dcufCj7E9Yjm5Hy038Si/pvvLDeabZK2IUXxKEg1JzAvHDWUGTgT9KMD1D8Qh37Z0GZwi5iGgZzkT+riAx3qXPFd18AfAOSY8OpzQ9NMrQWuzntRssLyPtYOUwVSZ9ftX7wRg4cAMOAU6dXOnqKQss6W8rI63wpQSB8IaZBIlo0p3pPDN5u/GMdLm43BhJYWUA8l92P4CXVVhjgurXQML7WSD3SVBzrUKvtkWRBKJpMqZ7v2xfEd0evWOewGliuIBSX4sDAShz32EyIc+/bYYNuJuCfQ8M0ToyL0ZI6LsBHJiA==",
            "1; VI1PR0502MB3806;\n\t6:nFWO6pG1KnypNMre0D+57DObnhvP9gFHE1qOCifJGXQbdptylKxoYRW2ld+ynduxUMdulNY4msrpI0y6OEzPFWggDE2OmRmU5bxQKBiTS8daj8vJDU/i4u35bUciwOOBdUSKLy9bg6TM5MoS2hjg8BbGbITLEQEuz4uQG5AghDswRDka3gaKeeA1A3vZPWdvHR2RryAzoK1K9gd3IV93EBQPhq/t6q0vLsNTpErqE5luE0i6GaZu9iAQF8VzGfvfSGMD7q47Gv+oSmAbnFHnNTI2JifeyFvLwmDuEDtFW8Hgi/mxCFm8SlsHo4Qnnh0kzXVsO5MhxLHo2Z7MQ2Ti0r1G3WTLt0XPGitZzkS3MVI=;\n\t5:HIrexBSumPd17SzTuLjda6O4V21o81In+NGRRXA2C0MpVe5XYcs9NtNt3mX/S/l+aPgO9ZyTeWPD5+iK3i5S33nvctwu0Fs774C4jtpe2QJsaweqwXcyTRt2Z93rUAWOrC2gAyUoS0ZzaBPJebzXvR2Oz+P4/bdRyQvmvn0x/kg=;\n\t24:gYUXOj1N3LfaJUBXehGOg6/SZa9z6gCf5kos4MukXaF/nGOu2ylemL2jq0YRVt6qv87jTnlPS6KXgjYFsNqnAdfEftWDn2ALqbR0SyN0XpA=;\n\t7:9qm+tXRJLbzxiBDmlolpY7O/vG/yh54WPPao9SjwHymC9VO3FnX7Vcz0HDVEHP21bT1APPuNhcPhtGBBp2TMF9Uv9tJCU+mRJ1ERuQDHJxMhFv6eb5IfeSXVwBf2vv/lTMrKn1lyd1yDe0/nAHKA4f9oOHVMY+I3ODWio9QfjTq3z9pz8PI4sL5USpzxuwXYqDkiKUK91H24eYr7LWyUP6Fj7K8pOlfdyEI3gf4tdzyF6/4qtuMqBLArMOApwe+e"
        ],
        "X-MS-TrafficTypeDiagnostic": "VI1PR0502MB3806:",
        "X-LD-Processed": "a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr",
        "X-Microsoft-Antispam-PRVS": "<VI1PR0502MB380615A15B95449D9F26D059D2E80@VI1PR0502MB3806.eurprd05.prod.outlook.com>",
        "X-Exchange-Antispam-Report-Test": "UriScan:(60795455431006);",
        "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(6040470)(2401047)(8121501046)(5005006)(93006095)(93001095)(10201501046)(3002001)(3231023)(2400064)(944501161)(6055026)(6041268)(20161123562045)(20161123558120)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(6072148)(201708071742011);\n\tSRVR:VI1PR0502MB3806; BCL:0; PCL:0;\n\tRULEID:(100000803101)(100110400095); \n\tSRVR:VI1PR0502MB3806; ",
        "X-Forefront-PRVS": "05568D1FF7",
        "X-Forefront-Antispam-Report": "SFV:NSPM;\n\tSFS:(10009020)(346002)(39860400002)(396003)(376002)(39380400002)(366004)(189003)(199004)(2950100002)(47776003)(4720700003)(478600001)(21086003)(50466002)(86362001)(106356001)(5890100001)(7736002)(16586007)(76176011)(305945005)(59450400001)(36756003)(3846002)(25786009)(386003)(52116002)(55016002)(7696005)(4326008)(97736004)(33026002)(51416003)(54906003)(53936002)(68736007)(16526018)(6116002)(316002)(105586002)(110136005)(5660300001)(2906002)(6666003)(66066001)(50226002)(81156014)(81166006)(48376002)(69596002)(8676002)(26005)(8936002);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR0502MB3806; H:mellanox.com; FPR:;\n\tSPF:None; \n\tPTR:InfoNoRecords; MX:1; A:1; LANG:en; ",
        "Received-SPF": "None (protection.outlook.com: mellanox.com does not designate\n\tpermitted sender hosts)",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-OriginatorOrg": "Mellanox.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "18 Jan 2018 16:35:36.3618\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "e079babb-7105-4d12-23f4-08d55e91810c",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-CrossTenant-Id": "a652971c-7d2e-4d9b-a6a4-d149256f461b",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "VI1PR0502MB3806",
        "Subject": "[dpdk-dev] [PATCH v3 4/7] ethdev: synchronize port allocation",
        "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": "Ethernet port allocation was not thread safe, means 2 threads which tried\nto allocate a new port at the same time might get an identical port\nidentifier and caused to memory overwrite.\nActually, all the port configurations were not thread safe from ethdev\npoint of view.\n\nThe port ownership mechanism added to the ethdev is a good point to\nredefine the synchronization rules in ethdev:\n\n1. The port allocation and port release synchronization will be\n   managed by ethdev.\n2. The port usage synchronization will be managed by the port owner.\n3. The port ownership synchronization will be managed by ethdev.\n\nAdd port allocation synchronization to complete the new rules.\n\nSigned-off-by: Matan Azrad <matan@mellanox.com>\n---\n lib/librte_ether/rte_ethdev.c | 43 +++++++++++++++++++++++++++++++------------\n 1 file changed, 31 insertions(+), 12 deletions(-)",
    "diff": "diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c\nindex b740370..b75cbb2 100644\n--- a/lib/librte_ether/rte_ethdev.c\n+++ b/lib/librte_ether/rte_ethdev.c\n@@ -52,6 +52,9 @@\n /* spinlock for add/remove tx callbacks */\n static rte_spinlock_t rte_eth_tx_cb_lock = RTE_SPINLOCK_INITIALIZER;\n \n+/* spinlock for shared data allocation */\n+static rte_spinlock_t rte_eth_share_data_alloc = RTE_SPINLOCK_INITIALIZER;\n+\n /* store statistics names and its offset in stats structure  */\n struct rte_eth_xstats_name_off {\n \tchar name[RTE_ETH_XSTATS_NAME_SIZE];\n@@ -198,21 +201,27 @@ struct rte_eth_dev *\n rte_eth_dev_allocate(const char *name)\n {\n \tuint16_t port_id;\n-\tstruct rte_eth_dev *eth_dev;\n+\tstruct rte_eth_dev *eth_dev = NULL;\n+\n+\t/* Synchronize share data one time allocation between local threads. */\n+\trte_spinlock_lock(&rte_eth_share_data_alloc);\n+\tif (rte_eth_dev_share_data == NULL)\n+\t\trte_eth_dev_share_data_alloc();\n+\trte_spinlock_unlock(&rte_eth_share_data_alloc);\n+\n+\t/* Synchronize port creation between primary and secondary threads. */\n+\trte_spinlock_lock(&rte_eth_dev_share_data->ownership_lock);\n \n \tport_id = rte_eth_dev_find_free_port();\n \tif (port_id == RTE_MAX_ETHPORTS) {\n \t\tRTE_PMD_DEBUG_TRACE(\"Reached maximum number of Ethernet ports\\n\");\n-\t\treturn NULL;\n+\t\tgoto unlock;\n \t}\n \n-\tif (rte_eth_dev_share_data == NULL)\n-\t\trte_eth_dev_share_data_alloc();\n-\n \tif (rte_eth_dev_allocated(name) != NULL) {\n \t\tRTE_PMD_DEBUG_TRACE(\"Ethernet Device with name %s already allocated!\\n\",\n \t\t\t\tname);\n-\t\treturn NULL;\n+\t\tgoto unlock;\n \t}\n \n \teth_dev = eth_dev_get(port_id);\n@@ -220,7 +229,11 @@ struct rte_eth_dev *\n \teth_dev->data->port_id = port_id;\n \teth_dev->data->mtu = ETHER_MTU;\n \n-\t_rte_eth_dev_callback_process(eth_dev, RTE_ETH_EVENT_NEW, NULL);\n+unlock:\n+\trte_spinlock_unlock(&rte_eth_dev_share_data->ownership_lock);\n+\n+\tif (eth_dev != NULL)\n+\t\t_rte_eth_dev_callback_process(eth_dev, RTE_ETH_EVENT_NEW, NULL);\n \n \treturn eth_dev;\n }\n@@ -234,10 +247,16 @@ struct rte_eth_dev *\n rte_eth_dev_attach_secondary(const char *name)\n {\n \tuint16_t i;\n-\tstruct rte_eth_dev *eth_dev;\n+\tstruct rte_eth_dev *eth_dev = NULL;\n \n+\t/* Synchronize share data one time attachment between local threads. */\n+\trte_spinlock_lock(&rte_eth_share_data_alloc);\n \tif (rte_eth_dev_share_data == NULL)\n \t\trte_eth_dev_share_data_alloc();\n+\trte_spinlock_unlock(&rte_eth_share_data_alloc);\n+\n+\t/* Synchronize port attachment to primary port creation and release. */\n+\trte_spinlock_lock(&rte_eth_dev_share_data->ownership_lock);\n \n \tfor (i = 0; i < RTE_MAX_ETHPORTS; i++) {\n \t\tif (strcmp(rte_eth_dev_share_data->data[i].name, name) == 0)\n@@ -247,12 +266,12 @@ struct rte_eth_dev *\n \t\tRTE_PMD_DEBUG_TRACE(\n \t\t\t\"device %s is not driven by the primary process\\n\",\n \t\t\tname);\n-\t\treturn NULL;\n+\t} else {\n+\t\teth_dev = eth_dev_get(i);\n+\t\tRTE_ASSERT(eth_dev->data->port_id == i);\n \t}\n \n-\teth_dev = eth_dev_get(i);\n-\tRTE_ASSERT(eth_dev->data->port_id == i);\n-\n+\trte_spinlock_unlock(&rte_eth_dev_share_data->ownership_lock);\n \treturn eth_dev;\n }\n \n",
    "prefixes": [
        "dpdk-dev",
        "v3",
        "4/7"
    ]
}