get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 21201,
    "url": "https://patches.dpdk.org/api/patches/21201/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/1488545223-25739-36-git-send-email-hemant.agrawal@nxp.com/",
    "project": {
        "id": 1,
        "url": "https://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": "<1488545223-25739-36-git-send-email-hemant.agrawal@nxp.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1488545223-25739-36-git-send-email-hemant.agrawal@nxp.com",
    "date": "2017-03-03T12:46:52",
    "name": "[dpdk-dev,PATCHv8,35/46] net/dpaa2: link status update",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "625d8e30f4ae5b47f1d374d6d94ad9ca9c48d060",
    "submitter": {
        "id": 477,
        "url": "https://patches.dpdk.org/api/people/477/?format=api",
        "name": "Hemant Agrawal",
        "email": "hemant.agrawal@nxp.com"
    },
    "delegate": {
        "id": 319,
        "url": "https://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/1488545223-25739-36-git-send-email-hemant.agrawal@nxp.com/mbox/",
    "series": [],
    "comments": "https://patches.dpdk.org/api/patches/21201/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/21201/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 [IPv6:::1])\n\tby dpdk.org (Postfix) with ESMTP id 7C144FAE6;\n\tFri,  3 Mar 2017 08:15:09 +0100 (CET)",
            "from NAM01-BN3-obe.outbound.protection.outlook.com\n\t(mail-bn3nam01on0080.outbound.protection.outlook.com [104.47.33.80])\n\tby dpdk.org (Postfix) with ESMTP id AB613FA84\n\tfor <dev@dpdk.org>; Fri,  3 Mar 2017 08:14:55 +0100 (CET)",
            "from BLUPR0301CA0017.namprd03.prod.outlook.com (10.162.113.155) by\n\tCY1PR0301MB0730.namprd03.prod.outlook.com (10.160.159.148) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.933.12;\n\tFri, 3 Mar 2017 07:14:54 +0000",
            "from BL2FFO11FD049.protection.gbl (2a01:111:f400:7c09::148) by\n\tBLUPR0301CA0017.outlook.office365.com (2a01:111:e400:5259::27) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.947.12 via\n\tFrontend Transport; Fri, 3 Mar 2017 07:14:53 +0000",
            "from tx30smr01.am.freescale.net (192.88.168.50) by\n\tBL2FFO11FD049.mail.protection.outlook.com (10.173.161.211) with\n\tMicrosoft\n\tSMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id\n\t15.1.933.11 via Frontend Transport; Fri, 3 Mar 2017 07:14:53 +0000",
            "from bf-netperf1.idc ([10.232.134.28])\n\tby tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id\n\tv237D50c005035; Fri, 3 Mar 2017 00:14:50 -0700"
        ],
        "Authentication-Results": "spf=fail (sender IP is 192.88.168.50)\n\tsmtp.mailfrom=nxp.com; caviumnetworks.com;\n\tdkim=none (message not signed)\n\theader.d=none; caviumnetworks.com;\n\tdmarc=fail action=none header.from=nxp.com; ",
        "Received-SPF": "Fail (protection.outlook.com: domain of nxp.com does not\n\tdesignate 192.88.168.50 as permitted sender)\n\treceiver=protection.outlook.com; \n\tclient-ip=192.88.168.50; helo=tx30smr01.am.freescale.net;",
        "From": "Hemant Agrawal <hemant.agrawal@nxp.com>",
        "To": "<dev@dpdk.org>",
        "CC": "<thomas.monjalon@6wind.com>, <bruce.richardson@intel.com>,\n\t<shreyansh.jain@nxp.com>, <john.mcnamara@intel.com>,\n\t<ferruh.yigit@intel.com>, <jerin.jacob@caviumnetworks.com>",
        "Date": "Fri, 3 Mar 2017 18:16:52 +0530",
        "Message-ID": "<1488545223-25739-36-git-send-email-hemant.agrawal@nxp.com>",
        "X-Mailer": "git-send-email 1.9.1",
        "In-Reply-To": "<1488545223-25739-1-git-send-email-hemant.agrawal@nxp.com>",
        "References": "<1487205586-6785-1-git-send-email-hemant.agrawal@nxp.com>\n\t<1488545223-25739-1-git-send-email-hemant.agrawal@nxp.com>",
        "X-EOPAttributedMessage": "0",
        "X-Matching-Connectors": "131329988937978509;\n\t(91ab9b29-cfa4-454e-5278-08d120cd25b8); ()",
        "X-Forefront-Antispam-Report": "CIP:192.88.168.50; IPV:NLI; CTRY:US; EFV:NLI;\n\tSFV:NSPM;\n\tSFS:(10009020)(6009001)(7916002)(336005)(39840400002)(39850400002)(39860400002)(39380400002)(39400400002)(39410400002)(39450400003)(2980300002)(1109001)(1110001)(339900001)(199003)(189002)(9170700003)(626004)(104016004)(105606002)(4326008)(50466002)(48376002)(5003940100001)(110136004)(85426001)(2351001)(86362001)(38730400002)(54906002)(53936002)(81166006)(92566002)(106466001)(8676002)(15650500001)(33646002)(305945005)(50986999)(189998001)(8656002)(36756003)(6916009)(2950100002)(2906002)(76176999)(77096006)(356003)(50226002)(47776003)(8936002)(5660300001);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR0301MB0730;\n\tH:tx30smr01.am.freescale.net; \n\tFPR:; SPF:Fail; MLV:ovrnspm; A:1; MX:1; PTR:InfoDomainNonexistent;\n\tLANG:en; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; BL2FFO11FD049;\n\t1:DqAQ3f3iR8F5l04L7VeO/qj8NTDt9DlDL974kcc4Qny7COqYSJ72T9PB/nOE0rGo7kH3R5GaNaDDscDHGek9EZDpoOEmhLN6qWZv6pfYvzoegC2A0uJ8NnHlAywNekHa2nbSEg7ZjnvvdSVPLLGBfyVy8khsJbZHNOGZP3/oOnsGT3ou/nMy2iWEP+r9TnjmPzm1avEiut36tcdWyNDqVojbxg1gNGQjdPXELLZK5Uls8TEtlGxlI5G7ZxzkmiEWtyMUawTeA8kGC431DbhuMfJ9oI+X41evJSvyQ3cmJdIvsCvBZ0xK4bZP6B7/x2xpPV8GUkT6/3cnA9o7s7SmxiF/YuHB8TAB7FrZZ0KAbZhYVPthUnRCHwc/m6SCaHN+miqPpMTfksOeLB92s2Tv0Ah6ozdY5ZK+nD8PZ5JW5y1dwDZcQP2rYUxr2FB3d7AzpxAmrjthsFi3sPx/BYl0w9bD4QrI7Xj2kjdRYD1laM07Vn1p4b2kni2K68MTFnN74BA+e/JnntZiT9GxmvL8IVqQtILlSmzPT8rddiJyIhfv9iWQCgGbyYVZPGSGoVtX7AXn12A1Z0iY6yYHwFxyD+odv6IqFpQJebcCs5yd1aYD8mMm/91WNsuVxBwnmkCu2BVUqM+5Ddr4rrur1ldGmg==",
            "1; CY1PR0301MB0730;\n\t3:Jn05JkJu9E7QklVLbMveNEL9A9jMzwMbMRUZsbTfFLeI96opJ12USQnpDrb8DChF1/zW08kAXO2PysWwpiLfjhI+tpuZewOxIMVXmJ0uQ9j2sRJkV08VUgAkai2KmRuF5MYpN5Jv6a8S88vnoJnLkyUzWKMyU1LIQibKy/FE3yux+7dwCd6tFx0mfFvDUV0hGNgtJxxd2G/JPlk6uEy9EPhxR2j/cr5u+0le7BpdIaJx6xP5jRxPts070U9OKdH677+dYKhA8ul1XrO3GD4TfCvNS0uUtKzrT+VYNz+t1pzut20GwDT2LZA7T+XAp5X0u0dgAtWlMAV0iY3Vuvi87ecW4LlhhyvsBEBT26zY7fWNs0K1GESXjNgM/dQgLjRG;\n\t25:DKYoNHfRnCa1nUA5l/jIc0Y3uDA8MlRkzMYOWfyPpsv/ZF8MxanYpG3WiL/B9cCKPDYlpwoAFTLAC0QP7JdplcIR/9tSsatqNVJ0+kfcYXLCmjKMeEwVc9EiwnVaqUAqkuNG4oxHJkMYF5NkoTZtnhNDO+R0dFThTSykjOkZBBPaYJGReYoUQC2sadoubj/pTI3taR+4998rcWgXngxs1fPgMR2WzYAxuZVGZ//0fti4HPwbYCgOPKFeDwPEsVAgg6WL6yxWPRZqqfqxJ7HVcZXMimZwAJ/eKHl8LE1HGJ6D441Ter3RnVUh16xNAqL3W2QmGoflf7nFoeDyKBuQoFFQzyz4aklIeWi7At5+7HY5yLMd1+FS5vggTabXQ8ZeO8pGhCZrnvHetBxvWrhBqqIHU//s8J0tEjvyCCSsJFkse8BknqacDQyLd+YLDxPJpXFwaFEZgjY9K/oalfsuOA==",
            "1; CY1PR0301MB0730;\n\t31:w6bPQhrU2s9vv+k+q9/G5oK3r+9kVKrmx8WpXrNtHSmknJP1CrkQbt7jTyMJ6rBTzCjTeyLKYQnLoJyO+G0GpE1qkV8xeuJHmXccTWNvHtl9K5n6AOjnZtCboXCCoOat01MmBhJ95r9q5asoEHZMonUG+KaEVt3uop5udPZpSN4t2Cvf7UNFPyjaf+6IDr2BEhJ/JGaza0jnxf02OcJtNZ/vew7PY20BwbnnrIm0p0pznnXH/vjVT3ahk8kuh9FBWcjbDaEX63duUe5e9xynOw==",
            "1; CY1PR0301MB0730;\n\t4:MFHwGUAUVrikXEcqYb0AZN8pJa2QzcaLCqevoEyrMOxGZOq+SH0CZKBgymq8tU+AmvxlvmnhpdEBdkT46VJDMkoA71WUnYXNZh2nQDR+IshbAWXA+yF090+vRoEPcOExiyBC+cWq2tq6rHazAs0UwiW033hPZ1J3T28QQoMSx7IMGgjmn/Z8RZ7KBtdMWdKaHnKA3T2xF63yNMIKSVcLHzEfLrUGswNiCpX/3CDOztrKDNoopc381KA2vsEhlpGIpfoSMsmzS0XdfsIZxBaFU3Ec2KnrUioacW/Tq4zVF+j2pTV5Xix4Cskl3rVm7rNos22HnxBR3AJZ6ITjCxLzRdbK9jCod7DdbHvJzllqosmSlu9gjF6d2DMG2m0SiR3urZGyC1Po6KaTPBB62sGJO6A00cFo2PRjzLmZBMTN18c4shK7TSn3VghNW7jgDfhb7YDY8whTMAZn9XEszM6IwTomPWB0U3ozg754YHVkArqql0/3yhKTHhdtdqStngfCVrqh7I5dFLlwvkPmAg9asnJdEU/7+iyWN5syDF4g8MjRX3ehhs7zrYRpE2fWB5UsjAx1mY+mEdGqp0lWnXrDMQwaEGQZZCCnkzaWP/mbYS2Ctwul9CR2DH3eNI+K5X+T+/6YcuXVEZ9CE+i1b+aXqhwz1CTf/NwUTNac1BvfKQtnld7U0C3N0bReRDbBmHoeVbofARCGCH7/xYYcLqBPsBDWE50GHnUNbJB2I7j2RM2/OGXEf1oObGXPwVNGhHep",
            "=?us-ascii?Q?1; CY1PR0301MB0730;\n\t23:RYype66lHFjjG50wg2PEh+3q5oWAkmsd/0YHm9Z?=\n\tJRYmbqhEbebeV52WwK6N8KucOmra8IwSStA/4nFA5skfmX6Z/wNqGqfr88rX+9re8Z0qGBNF3PzdPFWGxlejhtxGyrlJsvzmqGRK8ksLCo7N9jKJ0cPFUsmhNuOxO/DnYV+AOASj4DovE9z9I95XlH5IBH/b/JwgCWO3dXKUsqrtDf6gJ+1R9wOyh+ixj0qHiPsny6LUe7yGBs7/MWmifxC75pFQ4RmMlrSn25vY6Y7TfFXSBUQY+CcFpxQsyX2HIIRhm31WEUNbOaOTBQ1YPIv4E6To3Ual8V1GAiyFbPy3FWG7T13vJ9FWEAZDGcoYU+mXbT1l5hWNNbZtCgoQGmyQKNFvWotPVuix89Ho4R2N5UsHuadDh4OGzTT638Mo1ojGZm0OxAMeXVDzaD2z5nvtp3M2/+Y8QLkz2E/fYyQ99/TGMy3LIl5W4wBVepB94Si5jYn82XIv3Q99dAz1G9H5djRqoX/+n6BjLM7oQSR/ArdK2gJHcgj19dEyxmJJu4hgCF/fV8r9J9UUkBWG6yVuxJVrk6GrZ+BUT9YpycZMZjTxDZ12CqZldmORSdo72Bh+lb0Gdv+i8P5qAIBsrKdP52Z8+qMPmu+p8ayAPHjxoO/zhI7HemHcy5v6bQs286RYecbriMPsjAZWbbE/kBVmt3EaTPU9WpbNzMM2dGxjJeYmfrPxNEg43Ftt/LwCkY31uN41CZWsAwBpHYH/gRnLJUMeJn98YoQuJt8t00E6zMqqta5/wbKYk8RbzlNvSHGa+1AFxZkb37hz6LHwk29UVJiX7fYuUg86unb635hEhcE1lWVj/h0jJ+eByFdSesrvev3S7iRRgfFHlirmMr+G0XEQd9pfWnVoLm/TAhbL344SYMZwkfAlMxgAGVnVAvfphHCJdtGpcqB9WfCGOd8cMuxu1E3nxVf1t8MdTXgnaHzsG0EHEaLVnPNdyvOSMteVlRA4+XjSZgH8jp1QDjZR+ESuaABUqPfwg44p23u1L6+YWsSzRF/doTr4tyDCP/nlLV2qhGv7R6Ve52mAT+Q6v1mg4G5L+AV0xOnwhLfCffVo1h8PlCQOIpFXg/MiBIRr1JL2vp9WLiJj/pBJfPtI5VRMqmj1ffI3zoX5ANA90SXG+Uu2ml39QNEefYmpCYvXNzV2HIOqMD3M8FK6sbwwMcBhRkQKlLu+ubyPzI2ldPyk7RWnvL2og63wiWmElnsIXNB1HF5/svzJZanuyXie/",
            "1; CY1PR0301MB0730;\n\t6:TWc4/tyFWGGT8kMVjoYcEA/F5Yo9LtSfMz/v9PefFe5gR6fiioOeIOlber8K6qIclq8oruVAt30Eo6hJb5FSVrU4TCjSb5+1Rx3RnJDGU8bd04+WgeQMJ1EhQ3dDDaq8815IsNS4QKt/jZoFJJmG8/bCU2zPrHOLwGzlNPQX1Mf8fjtKLlO/u/J2SNfyzNFnr265V46Vk4unh2QQ8ETki+BPqADt2HSKj+Kh12pRDPYBa0k3qIR6XUhxYVyUGmT/pQA3jMkL0k51bTSdTAMtqC0TwwZxeDhCuE7sqelmQ/8gtlVH8I6rfPyVyk9EiFONeQlfO1hhN9zxZLolnByNn7nwzxzuEZe8Roc93RfMT2nl8cWvt7qC9uROqU5TE2vv3Zo3B4YiaxJze1++E2eKi1IK2a53Il8N/I6X+JySGjM=;\n\t5:FHywj5Y8MMq0rswOh7UAVTM+sy0U6Bw7N1Ma0zSk96NdXazGJukwcoP9GvdXV6pjo9QMohKin7IXKCzR40lpq+p+uuLn7Roey2EY0SoBHQBSV6u99mIWnYfyEUaK26mTcxGBN2ibg51zx4WS/xpjXWbLZC5BF80MbW5ftg3/4jx3QeZS9aXvwECWkc4QXtDB;\n\t24:jti4jpcA2NdFktszdERhTsDE3Y7pCo5zZx2ICIa6kctokc47SUJrAJkz46tSoFz3wSvJ09LNdwSrkwhHawplX1cfp+Oxq6okh1QybGb4Abs=",
            "1; CY1PR0301MB0730;\n\t7:mNB/LQVZRA2lCJpDelJfXm0x7pIKCMk3zd2AIcpP4UKMW3eryDeMb74TC851Ze7DsYyg676tXxAVOq1eNZwojDszymm03rhzw8PauqaWQpRCgomNQgIFCF5igu4bV7baoVgiZ48xD2uzQmhGZ8jGaXuFggfdw1fZFBbKuOmSndTMXOUQwt9jsZ/GfaVG42LFMThu6QRlPHu4wi3+eUaJZBsEahYwbJ1Ii/kAMjnwD+BVPH7C9u/7+cUsfhehFVmsRz4NZZFA3PwUgIIjt/35XiF5p5guxBvt7nicO0GfTNCKcgF1bb8fDVv1wKO8hoRXbuoMPq33WmDSx093hKhDlA=="
        ],
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-MS-Office365-Filtering-Correlation-Id": "6d811e17-64a4-4b40-b13e-08d46204fd75",
        "X-Microsoft-Antispam": "UriScan:; BCL:0; PCL:0; RULEID:(22001);\n\tSRVR:CY1PR0301MB0730; ",
        "X-Microsoft-Antispam-PRVS": "<CY1PR0301MB07301C39DD2644C7BF4B1704892B0@CY1PR0301MB0730.namprd03.prod.outlook.com>",
        "X-Exchange-Antispam-Report-Test": "UriScan:(185117386973197);",
        "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(6095060)(601004)(2401047)(8121501046)(5005006)(13015025)(13017025)(13024025)(13018025)(13023025)(10201501046)(3002001)(6055026)(6096035)(20161123559025)(20161123565025)(20161123561025)(20161123556025)(20161123563025);\n\tSRVR:CY1PR0301MB0730; BCL:0; PCL:0; RULEID:(400006);\n\tSRVR:CY1PR0301MB0730; ",
        "X-Forefront-PRVS": "0235CBE7D0",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "03 Mar 2017 07:14:53.6106\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-Id": "5afe0b00-7697-4969-b663-5eab37d5f47e",
        "X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp": "TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e;\n\tIp=[192.88.168.50]; \n\tHelo=[tx30smr01.am.freescale.net]",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "CY1PR0301MB0730",
        "Subject": "[dpdk-dev] [PATCHv8 35/46] net/dpaa2: link status update",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<http://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": "<http://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": "Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>\n---\n doc/guides/nics/features/dpaa2.ini |   1 +\n drivers/net/dpaa2/dpaa2_ethdev.c   | 107 +++++++++++++++++++++++++++++++++++++\n 2 files changed, 108 insertions(+)",
    "diff": "diff --git a/doc/guides/nics/features/dpaa2.ini b/doc/guides/nics/features/dpaa2.ini\nindex 0746d4b..0660cab 100644\n--- a/doc/guides/nics/features/dpaa2.ini\n+++ b/doc/guides/nics/features/dpaa2.ini\n@@ -4,6 +4,7 @@\n ; Refer to default.ini for the full list of available PMD features.\n ;\n [Features]\n+Link status          = Y\n Queue start/stop     = Y\n MTU update           = Y\n Promiscuous mode     = Y\ndiff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c\nindex c4131e1..14b9654 100644\n--- a/drivers/net/dpaa2/dpaa2_ethdev.c\n+++ b/drivers/net/dpaa2/dpaa2_ethdev.c\n@@ -54,6 +54,58 @@\n \n static struct rte_dpaa2_driver rte_dpaa2_pmd;\n \n+/**\n+ * Atomically reads the link status information from global\n+ * structure rte_eth_dev.\n+ *\n+ * @param dev\n+ *   - Pointer to the structure rte_eth_dev to read from.\n+ *   - Pointer to the buffer to be saved with the link status.\n+ *\n+ * @return\n+ *   - On success, zero.\n+ *   - On failure, negative value.\n+ */\n+static inline int\n+dpaa2_dev_atomic_read_link_status(struct rte_eth_dev *dev,\n+\t\t\t\t  struct rte_eth_link *link)\n+{\n+\tstruct rte_eth_link *dst = link;\n+\tstruct rte_eth_link *src = &dev->data->dev_link;\n+\n+\tif (rte_atomic64_cmpset((uint64_t *)dst, *(uint64_t *)dst,\n+\t\t\t\t*(uint64_t *)src) == 0)\n+\t\treturn -1;\n+\n+\treturn 0;\n+}\n+\n+/**\n+ * Atomically writes the link status information into global\n+ * structure rte_eth_dev.\n+ *\n+ * @param dev\n+ *   - Pointer to the structure rte_eth_dev to read from.\n+ *   - Pointer to the buffer to be saved with the link status.\n+ *\n+ * @return\n+ *   - On success, zero.\n+ *   - On failure, negative value.\n+ */\n+static inline int\n+dpaa2_dev_atomic_write_link_status(struct rte_eth_dev *dev,\n+\t\t\t\t   struct rte_eth_link *link)\n+{\n+\tstruct rte_eth_link *dst = &dev->data->dev_link;\n+\tstruct rte_eth_link *src = link;\n+\n+\tif (rte_atomic64_cmpset((uint64_t *)dst, *(uint64_t *)dst,\n+\t\t\t\t*(uint64_t *)src) == 0)\n+\t\treturn -1;\n+\n+\treturn 0;\n+}\n+\n static void\n dpaa2_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)\n {\n@@ -430,6 +482,7 @@\n \tstruct dpaa2_dev_priv *priv = dev->data->dev_private;\n \tstruct fsl_mc_io *dpni = (struct fsl_mc_io *)priv->hw;\n \tint ret;\n+\tstruct rte_eth_link link;\n \n \tPMD_INIT_FUNC_TRACE();\n \n@@ -439,6 +492,10 @@\n \t\t\t     ret, priv->hw_id);\n \t\treturn;\n \t}\n+\n+\t/* clear the recorded link status */\n+\tmemset(&link, 0, sizeof(link));\n+\tdpaa2_dev_atomic_write_link_status(dev, &link);\n }\n \n static void\n@@ -531,6 +588,55 @@\n \treturn 0;\n }\n \n+/* return 0 means link status changed, -1 means not changed */\n+static int\n+dpaa2_dev_link_update(struct rte_eth_dev *dev,\n+\t\t\tint wait_to_complete __rte_unused)\n+{\n+\tint ret;\n+\tstruct dpaa2_dev_priv *priv = dev->data->dev_private;\n+\tstruct fsl_mc_io *dpni = (struct fsl_mc_io *)priv->hw;\n+\tstruct rte_eth_link link, old;\n+\tstruct dpni_link_state state = {0};\n+\n+\tPMD_INIT_FUNC_TRACE();\n+\n+\tif (dpni == NULL) {\n+\t\tRTE_LOG(ERR, PMD, \"error : dpni is NULL\");\n+\t\treturn 0;\n+\t}\n+\tmemset(&old, 0, sizeof(old));\n+\tdpaa2_dev_atomic_read_link_status(dev, &old);\n+\n+\tret = dpni_get_link_state(dpni, CMD_PRI_LOW, priv->token, &state);\n+\tif (ret < 0) {\n+\t\tRTE_LOG(ERR, PMD, \"error: dpni_get_link_state %d\", ret);\n+\t\treturn -1;\n+\t}\n+\n+\tif ((old.link_status == state.up) && (old.link_speed == state.rate)) {\n+\t\tRTE_LOG(DEBUG, PMD, \"No change in status\\n\");\n+\t\treturn -1;\n+\t}\n+\n+\tmemset(&link, 0, sizeof(struct rte_eth_link));\n+\tlink.link_status = state.up;\n+\tlink.link_speed = state.rate;\n+\n+\tif (state.options & DPNI_LINK_OPT_HALF_DUPLEX)\n+\t\tlink.link_duplex = ETH_LINK_HALF_DUPLEX;\n+\telse\n+\t\tlink.link_duplex = ETH_LINK_FULL_DUPLEX;\n+\n+\tdpaa2_dev_atomic_write_link_status(dev, &link);\n+\n+\tif (link.link_status)\n+\t\tPMD_DRV_LOG(INFO, \"Port %d Link is Up\\n\", dev->data->port_id);\n+\telse\n+\t\tPMD_DRV_LOG(INFO, \"Port %d Link is Down\\n\", dev->data->port_id);\n+\treturn 0;\n+}\n+\n static struct eth_dev_ops dpaa2_ethdev_ops = {\n \t.dev_configure\t  = dpaa2_eth_dev_configure,\n \t.dev_start\t      = dpaa2_dev_start,\n@@ -538,6 +644,7 @@\n \t.dev_close\t      = dpaa2_dev_close,\n \t.promiscuous_enable   = dpaa2_dev_promiscuous_enable,\n \t.promiscuous_disable  = dpaa2_dev_promiscuous_disable,\n+\t.link_update\t   = dpaa2_dev_link_update,\n \t.dev_infos_get\t   = dpaa2_dev_info_get,\n \t.dev_supported_ptypes_get = dpaa2_supported_ptypes_get,\n \t.mtu_set           = dpaa2_dev_mtu_set,\n",
    "prefixes": [
        "dpdk-dev",
        "PATCHv8",
        "35/46"
    ]
}