get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 26081,
    "url": "http://patches.dpdk.org/api/patches/26081/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1498812875-6945-20-git-send-email-nipun.gupta@nxp.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": "<1498812875-6945-20-git-send-email-nipun.gupta@nxp.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1498812875-6945-20-git-send-email-nipun.gupta@nxp.com",
    "date": "2017-06-30T08:54:33",
    "name": "[dpdk-dev,19/21,v5] bus/fslmc: enable portal interrupt handling",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "0b1161905c4436c627400cceb02d66b995613854",
    "submitter": {
        "id": 471,
        "url": "http://patches.dpdk.org/api/people/471/?format=api",
        "name": "Nipun Gupta",
        "email": "nipun.gupta@nxp.com"
    },
    "delegate": {
        "id": 310,
        "url": "http://patches.dpdk.org/api/users/310/?format=api",
        "username": "jerin",
        "first_name": "Jerin",
        "last_name": "Jacob",
        "email": "jerinj@marvell.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/1498812875-6945-20-git-send-email-nipun.gupta@nxp.com/mbox/",
    "series": [],
    "comments": "http://patches.dpdk.org/api/patches/26081/comments/",
    "check": "warning",
    "checks": "http://patches.dpdk.org/api/patches/26081/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 D13737CD5;\n\tFri, 30 Jun 2017 10:56:05 +0200 (CEST)",
            "from NAM01-SN1-obe.outbound.protection.outlook.com\n\t(mail-sn1nam01on0045.outbound.protection.outlook.com [104.47.32.45])\n\tby dpdk.org (Postfix) with ESMTP id 7D5055689\n\tfor <dev@dpdk.org>; Fri, 30 Jun 2017 10:55:48 +0200 (CEST)",
            "from DM5PR03CA0043.namprd03.prod.outlook.com (10.174.189.160) by\n\tBY2PR0301MB0599.namprd03.prod.outlook.com (10.160.125.21) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id\n\t15.1.1220.11; Fri, 30 Jun 2017 08:55:46 +0000",
            "from BY2FFO11FD037.protection.gbl (2a01:111:f400:7c0c::103) by\n\tDM5PR03CA0043.outlook.office365.com (2603:10b6:4:3b::32) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id\n\t15.1.1178.14 via Frontend Transport; Fri, 30 Jun 2017 08:55:46 +0000",
            "from tx30smr01.am.freescale.net (192.88.168.50) by\n\tBY2FFO11FD037.mail.protection.outlook.com (10.1.14.222) with\n\tMicrosoft SMTP Server (version=TLS1_0,\n\tcipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.1199.9\n\tvia Frontend Transport; Fri, 30 Jun 2017 08:55:46 +0000",
            "from b27504-OptiPlex-790.ap.freescale.net\n\t(b27504-OptiPlex-790.ap.freescale.net [10.232.132.60])\n\tby tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id\n\tv5U8sfKD032271; Fri, 30 Jun 2017 01:55:42 -0700"
        ],
        "Authentication-Results": "spf=fail (sender IP is 192.88.168.50)\n\tsmtp.mailfrom=nxp.com; nxp.com; dkim=none (message not signed)\n\theader.d=none;nxp.com; dmarc=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": "Nipun Gupta <nipun.gupta@nxp.com>",
        "To": "<dev@dpdk.org>",
        "CC": "<hemant.agrawal@nxp.com>, <jerin.jacob@caviumnetworks.com>,\n\t<harry.van.haaren@intel.com>, <bruce.richardson@intel.com>,\n\t<gage.eads@intel.com>, <shreyansh.jain@nxp.com>, Nipun Gupta\n\t<nipun.gupta@nxp.com>",
        "Date": "Fri, 30 Jun 2017 14:24:33 +0530",
        "Message-ID": "<1498812875-6945-20-git-send-email-nipun.gupta@nxp.com>",
        "X-Mailer": "git-send-email 1.9.1",
        "In-Reply-To": "<1498812875-6945-1-git-send-email-nipun.gupta@nxp.com>",
        "References": "<1495735361-4840-1-git-send-email-nipun.gupta@nxp.com>\n\t<1498812875-6945-1-git-send-email-nipun.gupta@nxp.com>",
        "X-EOPAttributedMessage": "0",
        "X-Matching-Connectors": "131432865463811923;\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)(336005)(39860400002)(39380400002)(39400400002)(39450400003)(39840400002)(39850400002)(39410400002)(2980300002)(1110001)(1109001)(339900001)(199003)(189002)(9170700003)(498600001)(6666003)(54906002)(81166006)(356003)(86362001)(104016004)(76176999)(50986999)(8656002)(110136004)(105606002)(53936002)(551934003)(8676002)(47776003)(48376002)(50466002)(2351001)(50226002)(106466001)(38730400002)(36756003)(5003940100001)(189998001)(77096006)(33646002)(85426001)(305945005)(4326008)(2906002)(5660300001)(6916009)(8936002)(2950100002);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:BY2PR0301MB0599;\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": [
            "=?us-ascii?Q?1; BY2FFO11FD037;\n\t1:WNZJ2X13o5e67FYiB/1l0tQoxJbv/4P8BTL3Lzghgq?=\n\tWgMx68Biq6vJKrtyGF6FeczwbzeFM2eeuG5y4RQU+EUAGj2DcVT5IKaIXBqjtMZZUgF8MZQbDVu89SJEiC6rzlGB0Q7akOh9cKFzfbe0WQbJDAU7YWfhCrV/Nu4B6Rd0MgiCukiRjHlt8GljwgRXMQ1by1VtXYgvUP8rFOE6eNPYp0IbKQV8uFfAEse5jlMklvusq7FQfQYwPBDS7GCb8gjDgVZw+bN6YD+mfFcgAj9AJWbe/waxxTL3U0IMOTG6V7puOdDhhmsyD0AatGyPkkBgbqH2Qfis/jGySY5qrYl3nY/GD95QpdH3EPSxjHX53lYefURxdwr837TKFzsAt0MjCHPJaXp9KRUzT3I189iKs95pydtwIyo+JkhNwelYDrGflMI1u49CxBGzbMyK8aBigEFCL2pIAh7O90gBUc174CmGirRTeM8zLfCI5jx/BAD494QsDp65lJvvKUL/lgSi66PKXf6yYdNm2C9R5H/u5hz2uiHtLqzBQlbRL1vpnkYXgrkPFN9SU/ceNj6YHLDiEAZ6QuP9KG+qBxwHDDUGaRv/yhBx8aDDFvr/51vRwOR37O2uYzPN4S6Te5Pb1o6mtCYJtRojJ27DfXO4D5pXSjpXEN1rpJB4Q5UhjvpSuuqBi9/ZluaT01xw/MiBQUskDaiPS0IceFXdXotjN45ev3bq6180eTulHXG6stZ3bj047730y6HctowLIp62SlkB/dXJlGXt5GywpDpGvsS/LYU5XD8EDRpbtWaokdBaKBQMyZwiWG/JsyF0Ml1P3kwIR+Vo33+h4wz1Ps8dkbi2mXKiXsLhjeuJkYlXTUbq5BAYczGEEofEbE6x54RZCLxn6u8Y1wzCjb17OjvUu0sP/Sj+1vgiT0SWIajp6IMMMXgKV962BQbpCLk4URwtzjCEAcZyKEE/xtypGkEPwaksrjdGRt/iuNYTZ/cap/ctGrIhGO/GZjLZ8zUuKxvSa/j6shlogSbfRTi6fs/jS5VAAO1ECNXaWr2NIkoMIShMgRsFimKDwbhfhya9yc5mHBstIujsdTyXQ0xotMhV1u9w==",
            "1; BY2PR0301MB0599;\n\t3:/bYNRotRmuoVrx5YQPfbhL25eknxgsoEDpy6IwocRngTE7HhQ+pyN3BLmxk1gdvQwQHZYZEd1b9uckbVvyNpAAF359spLOX1PUvRB4d/3QgVV6QCr/JkcV2Z+M/yrb4FdcuMvCzC5jq/umno4G6RzVCKbqhrFHBvDD4DZFEYvhsoFCKvDSmah8ueL1D9BqoHt3QmpIVrDkwgOFMHJj+2e1orZ6QfVgxTYepnoWVwND/c0sSthj7wllswWkIpTHxAS0ryBP1FmG5H9LlJLv9jiHgG2AJFjh67Kwt0rZCXwMbiubGzl5H7bx+gjLp1G9Gj1nECT0Vtu+3smMOflvgt0eXVzNE+HCZZkoAqVrubRoeYtUJhAVrvoW68kq/y0vqk79Z354gzCk3zwjWQ5pvp6dncO7X8ddviV7JokxYwSdxH73rTAEu6P0fZbahdodncCijwTzQFiBVbNv0aBUXqx0oA9YDhTjp+PYHafps61EETwDTBL1ppNVA8cRr5HQP3ym5XIPpjR3Cb+EUpMkua1hO9DFo0bdqBo7hRE1NasQ/HJV7UYq2LJ0vPnAHG8Vi9PGr5/7fuqKW3CQSaUQmq2Pjst/wlMpNr8ED7TmOgc1aDI2fZaDjFoEc94YBnGxAy+dn9MssKj1dEOpgK45l1OwQLS3M8rylrUb3z9NnQRz3+R0mMjdrGplPZ2Cgu2aR64XDBkfjs/lzkA/6fDKGNkG232F/qNdBI1DgdTaigwY/LS0VwcOKZw8PZxNyyY9TjXsI0NlnF4yLNV+1YyFpNz/HhwXYZolqDv/4UZFhRsm1lXymwiWyAbTpM+m4wYozSwBOtM+U+nZgHV27XPcckjv0ZhaFZhkTVbJ+Y2B1y8Z4ly3NjTsqdI0pwrpmIRgsN",
            "1; BY2PR0301MB0599;\n\t25:eTzrp7s5tG14azyTiTL1SzXCM4zsQ8Ayo8yviTGJC0PdX8n1NChbtCVk4EqZrBJceVJ/WRNm8zLX/75XgRh7U2vBworPLm18AwoFVuTUJXVogJG6VRiUBwifARXnaL1j0KNxo3WnOEeRebHN0cWGGrawIxJanonIkeB28Ln9wh1k8XDuJeQOYJ6WMcKThRanXvwuW0ZOGbBHDDupTIF5yvZ+3bJMWlZM8MvpRcNGw2hWBip/OXKK+XBahftcysXNYUBi9NACVOpXcJ5AXpVXQrZHgqh4E1hN9Y3cqX2JFfTbFkA9ePP8cgNveeguHDBzntAsv2ep2j1dRAPm5JpQTqTIDndmhHugyM04Rl5v+LcUV+aTerhuckfxhIAJxO/y5oJ/TxpC5NdyAdUmlfxMqgOIpJUD5hchR+9kfmh2s1yK7pcE0MB63SkMDDRx10BRKmeGVFVcjmahsubCmv8jW4/34bnvqcxkMCxSLkZzZs1dyCEa+KchAOCks35DdNhjs4cPe0N6Y9tDtmqpEACyzRqDNQvYBNvs7KYJD8NBpnP9vrVFVNrYPwXbNQXcxR4ViNhiLTQg1xXswmqHN6WZHuBXYW0isp2QxTVenvRS16i6I/zqIf1M8jw4Kn3o0pPpo5W0MEHrD8CuLGa2yVJyZ3sp2K5UcYMifd5MaDc8Ch5NVByKrCCP9yvnUkkVQvs0rwSv8l+j0PQBsm4etdcb9TGtl4INHrIMJ122bqmqLzBfnHbFlC/Qqh+yya7q4JvDtkWOyb4MAGjQrjVoxBytneuIwhInDLLvtLbJsZV8UZDhJk3gcdII+vgCC4hHSAJNca3qRD9FsrJsV6r0eKeb0fgH69QEY7sC7abq0uW7RvHtXCWR5UMhuxNROKcsWi/zCndxqmju5hfZoweVNGktwceHLFKmzgMPH/rEcP6FHWI=",
            "1; BY2PR0301MB0599;\n\t31:671S3GyKDCwv5Xa5RK5ZMTVmDcKRbjipIB5XrbtaldnAhyaF/ZgwVUbgDAapw7slSkMq+WXoAGuVxej/93Jkf9FNOgsl+SYK+Q6SE5PKFUrXXjXIQtBzkXCxyKuCtqFYXsJGcuU8umPEN3d1ojF/jJHSQNCyU7fL9C9QUAUonaZSwPmI/OF6nZAw5YB4Dz6tv2qE0FjBNMyTgF38GM1au9uxTMRABe5dD1AEeSFeTNBB36fqP6PFavodrcbVN7Q9AAhONzTd4M7Xj8lHvFAQwfNvae+BF1LedUrlH4/mM6eQxaHiNJgaHvQtSjuDp/CNrJMMZLC6Nv3RHA+KsTibMAaRrPskDsyVu9mE4TZevT0WaiCgdjV38/Mc5QyPszRdvF5/WNHT0IkAHRRV5QQN3ew4fQmYn48j1nHeJkOsFq8ulRZeis0HDvxwnUhTuJvzuAjF9Xyzh9IZFwfMq3Ziqc1brey+Hq4Lj553WC+ktbVYcI/JXA6RTwfItuVsfSHS8Iymx0HkGpAc5xl5LdJGsLOEiF6E/k8TRhspSOZFVLemTvYVoucXiFKUvjAh5iJ4S+Uei1zm+/Qb7ywN0yIlpqFDIKeuifaqMPM4sX3aAfS4Dnn2dt5pW4dsY8nFtF15PaRc6ZkiI1izXmVKjXgjl0q7dEDLSSiBSL3wed64MKmm6BAPCZAN6nJ0CgUFUrnybL9kEFNxLDK1JNXS6n85ag==",
            "=?us-ascii?Q?1; BY2PR0301MB0599;\n\t4:1f9K3KIolmoL7bDbHGyGA8uusmgYYZ68KEPVVoHE?=\n\tqG4gyEzZ5rXc4lobGIiXC4ms4I52Vy40FRCide5gZ+T7pnc+ibup9nApDnxi/HMlCyR1hNeCVJZeZ3AnvN/Gd87E8b7ScuX3xerACWgyM6IJbskvOApglF4gw3uY28WFTyZmMDzvh5czsBVkQDB57AdpSCaBO0EbWTgMFvCW5wyJ0lRk7cJxOAJPRPktU/aoS6D6MLv5twpXw5m1dCWJyE2+JZV4/v4+bSNoPJ1tgfGPgRca2l5ZvfbxNjtp4PusmuLx3IzMm5aGyQgWh6xFewckEru13KjfuNu9OjuolSqAoHy9QaUcgy6Oy96rR+FZQKEf2xbZSRtMFtR51astyHyfwJwqkAcRPSx93YsMb0N8+qUNVyl5iXowUKmi2SarTl6NkJW7631cskkbXjMwuGn+qSFJXQq6Bam1mgUoJQlHjvEtTtWUwKuxxWCccTFA/cRQeHtsyYsg9q8mpI6e20ufNfcnEnxbaojxCABXPxVEPW2JfMwHzpKeKo2q1kmCE0TbkepnoUWjnoAQkhyWx38II+Jd/HlVAEODtrnu2W2PkSz7qmRxxQrnhlWmHO98uFKTXXLwklkDoYGD3ZdRGa9v7Ol1DDTOTkvTrAP0OU0H9+cwJ0liyOkgNGTudVhgFx6Hlnt8AglztbGr+T0VNCPD0E14Q0IYDZIgJbmP9rveSJFPVqSKp3nit1b/56vYqXgcNcfuY1PRW9ehY1hLgR2k97HF0hSNb9DfnlKxiImeOb69E858MJeSTZUOfCznGNByRGDySaPfNa8twBy4rFgn0iilLHFpvFRtHCK0AYbktwN48wnUVvfz3q/eg+73hVipUSsk3r9gNT250nfpw39nqGFTGfufoia3aa3qKrxcjNG8gLe0vxJ2A6SOIsmCZkxg0ussUtEacsNz4lJny7Gdk/ZhGX20XfFM+1Mv/DeL6bxB/WMWW8SWFo3lIiOPNksjo9m+r5sulURki0K0x1qd+kdpJqUldGfaoIXOVlWVldB+q5twEshbvu8eL4O5eXe8QiuYuj9jiWRw8IMFIKqoPe3BAoXUu+WYwJ2WatAioGsZcWmwNuTxi6Q0QmEOuQfmP3jz7wJgiSluRtHqaNRfZRdI/dxcZ1/fC54nH3BAwwmTNK7tT+j4Pqj2RIRjn16br/VCUkKpLV9lF3qsNDvshIc9RZiCJHVwmydP+MyU8cXeEFZySooVaspPPqMh6xsUX/KewffQWirZY2iM/1fTTVLO6vphEXkqV41epnXMUlQpEZ+HMm8SOHhC5a8dCnH+/MRHDVmoHjeW+GZV2QIo",
            "=?us-ascii?Q?1; BY2PR0301MB0599;\n\t23:9/FZ16dl/GXUreDcYDrp+q5B5rN05mXgd+x9Caw?=\n\tWydCHHRDM2I3EJagTNiNiCPfhsFSQx4HzyJqz7Mi6p8HnKwP7YmavbZdOmkhAHIVqOgAggr1AHhYcelXOUiwO+x7bvod5I4k3humuAy2e5VeRZa9N/lqAwnymttzv8RjnUijNQj6G4fc5gZj5FBsWj7Hm/nGsjjFbKbX7amgJdo/W8weSoWgXJwaUZuXxtM3PWIUC5AyEVhOg6aeGAn82jZG+RwpTvimZZS0XrczNY1+O8wHJyqzGILy1KbfZ9y00egiAUof+viWUvwpUowfBO5TXinYFNMmI31LkMFEo6kGS2Lt4xlu/aUMPaCUdgPbnwa0Vi2xXDCAW8Q/RF2M8JEBHZ5hQuFaUi8E6eayn2E3dzlRQeZ+lmHBSAEJKC/rT7AZi1tPQ/OvMdh1BFLp0hx3jB+zGRbPvmnLgQdUDxXN42gFipXVsqhJvQRySBNM05geuRaJtJoXc01ukuKRCVX9zjtrQz5oPm2t0ePW6JL8F99M2pZfeLRD0BTSjgcMoa/DdcqNxBGrbIbu76j1xAoRvvxv621ad8TyerZof3/Px7iYU8cXcjDHuEcHrgQlEk+E5jWeWeP4PjamOw7DJWRpqLZ/ebmvancDpCC+oKiuFHaKGcRAq2B2bJIPEq/9u5AoqMdj0EC8bKAoxTlarCENzN9E/Nb5eHGhaBAwyheDHe42uuiYe62Z84MAJS9wRExF8OibcD+M2soHtFO958fM1mIhs49iy3wUuHZwQtU3g7XibI+zQHpdHR+TkNrd9/HoL6h0e+mGsS+/W86IHgSiPegeWNxvsuvnUhTATdZtpJgk5uGPtu5thjh/0y2eahWo+56r6bmF+VLfFpLb/FnqW241OSWvBtJ7vKz+WhfIeyQKruG+zeEgf1NyYLNT469ZeQEhscZCrzx6mVFxcIj7jsAOKf4yIFcx/E+Sag+mHsYeabQn1Mu0PgHXPqvAiqgMrplgveZPvdvCLKvRUqN+G7SpBTHbbkaOzD1Y8yPDzvq3MafLtJ7ZRuqcNvAaYB6lQqIbrVK+HkbWN+0X9ipfOGfZHUvR2rAUBnOg+ygYgXqcjnrj6/pEWCD9U2YUp1qWwiA2TSjOaxhFB7HouD/2ocO3DWdGQpude6i03qP5yzSy/RHZWEX8fy0SwJNnHZJ4W++1dilOrM5xktmIYPOxHPDqRIL+ZLQkSy/vAkJCVSex6T7tbqvh0RC7pU/2etjJ6XyEJBvVZc+9jAAbWgfQj",
            "=?us-ascii?Q?1; BY2PR0301MB0599;\n\t6:4BQ39bqR5nnhNBHbIwDFmXmUyBYTR4j3ekqaPsVf?=\n\tNTnJJWe9WViJttQSGSFFNH1vm4lr7bh8kvK+2a2cUhgz5ewf0x9qDqu5aqBmH4g8EJSaZCql/LjP+GcRO2qNFqa194MRlvY8PTeNf0c4zNucZ9JZCh9aeLQY2Bus9d3UMn/kA6vJffrcW6NPgHjaR27Z7XnY/lF53Zqjz6vnpB9g2SnlroAzp0lMZWDOlbnHL8cXwc9sOfvWzBOssu8Hu0FZgXmqfttxdoBcds/FD50Frs6OPumgc66EzdF4RirecBOVFQq+UA85dM/a7zBZbs4WlAXqWcyke7XagWi/Yzypdx8cRCSu0f4jCMO9n3TW4rZmUVt9Fkot/wvSmyjLi4QgdbUwnZB/YnMz8L8DIlhEEWRHyrhLFZfL1v/QIehM1kF+ekVJzw8mvnaECoOOXXNNXAaFeRA+1prTDyAtC2Le3BrQ3PmbV1A3R+BvEAKzQQwMqKExODXjoXi/NLSppB4wIN0Ek1FLAF9xihPBtN0bqFkXByYURaEb2DZR2UgXyLA2glzRFN2wL53haXRXhj4hsV6w6IMA6IxILc0U0mHsmeZi6lyQjuo0vcfijGzKrhDW+2lERauKe/ZQwoDE1rxkobST3Hg+uV5SLmWPxP/oXT3Onr1r+6SGSlU+TYGQJOD38Tux/2lZ1BvD3HP1ZJcfGGwAKZRb5N61FqWoWWZfhHmUNTAwdmM3CxngrpKI+ZJwPNSRGBCQdqABS2bSsEb8uGE3Fx9Jag2EZOkbo0kxxXRo4DggC02arSxfmYp5DTlzErJMjGRvJ0UU962AunHNxc3k/qb1FQFRPv6W52p37kI0zF6tW8xAPJOhGm7bb8jLGOjcHcAaxiC6ZX43/3UoPCnMRXcJD9UEFd4yj2NQqo/BELu2TVdUmb6Teq/PCIOjI8Nt+j6spSXtlmP3xPsaL1VBWBRp2cI6vw4/HxKDLA==",
            "1; BY2PR0301MB0599;\n\t5:1UTQK4qdmm1bTS/2F14qBC/4guuMrLiP+pvf5SaggXYUKvk5pUd450P1HrXLojs11jEwtDJPZ187QMzVd/QC0MqjMDuMhTH5jzlp7i1Xut9pv69zBpZrZYakGr0LnhpjMR4A4M2cIxWRKwtRS+Dt/7o16kskKwBj5IWdmFzPgwV6+sDnQ3I4BRedU/kUgF6tYSAcWI6nuDIHJF+lo7aQmEaY3eOngQbJtKNDBomMhKeaXJysaJfFidxg6YW4g0jDWP5+XkrUkyr9AStj5lLX2BrLHeH4mKb+DTZRS7+uuix7WkB9iLohkJroY5hLDLkCZoLepbeFXZ5HEivNJhY6achuQg6FvQSBNn5hNBZPXeyllGzEjDOmy88/KPmaew8FxgrNDsD452h5Ae5zipaQxMR8PUTgUbe7hSAj4x4fiCgU5D9grMtQI3DtROQUksvtaIMI9ww4+zanlliiKn+PF1r3rqrbwAI3z180QOox1cl280rN5vBTe6EdnmFsBQzw+Lnx/MKpzcu7jfgHcxEFiQ==;\n\t24:sOYJj7Iy22/0xtNBmtWLMFFNbujwpNNJ0SP4Ivvx9zAuMpXvKiiyLxYu4Hdh53C97o8W3772giCxqfbXvobfkE8TnFFu4oaUvTpNUrB8rGQ=",
            "1; BY2PR0301MB0599;\n\t7:l0nRyjg8Xktp2ouXeoj7fhjxffA0Klqcnev84+9NZU7KjpDEUmURa/WRmqGRI+5+1thaBLtUJ9sV89IHsTB7GPm54K2xdWxorukrBd1gmYZDWVKUG14p4Gik/sTtCyUUQ31obhn3N1dy3/EMWRC/cgZynQKBbunW61lHtIwdiukzE1yZ917sJ4mMvnCi60gKlUWXHJ7wrYOWtzfLXN9boxROR6gEJx0W93KMmgeJEVXmuVxe/cMilTeBLAo+EYSdGSBgLwB154pakte9ZB81wo4YBFff60s6AeuWS8WPHKnIrkYYtchvT+u8GzsnZxAYHGrX2nK65duMfYK2yt0NyTQQ8I9/KaWSUa0azfuNTxmxaxykPb9WZ9Q/jdOQl0wWBUXwkTonZttRshnQJyKgy43OSLcfuqpSu9+xnp+xgE1xAPJWrF6nbFmYg5ivoiV9xZ87KtsLGJLAr/vRmJ6q7VpiXAD0/YmvLWJFD8vPykMFLBg2wb2uR/qpjpvIRC4VlRZgYe+H6U3LWz9Gi0n93cG+I4V16vFll5tF4ROnDkLAyr9snnvz5KuBW09gvqL0WOHYWg6mZVpqZ17nR4V9kiOd6x6bcM3fdxsfQNGEyVDSRJ0B6NbTJ0vx8qpkwGcmZhbbDcC4jrYRCk2XbGgaAqLIPMv51bh0zhJ7YzaWA0vAqRF+YpkUZhB11/AkC7jmtiJ6Lf572Q4tNszELEXv4e6+Bn3EJRQaZQ5ZMvn2XX4WO1fyGb7xFxHeFxGD0ynbF4oJMoBgVkhnaYbftzhx2nLl6CUpvXsvgOeA9P6j8Ck="
        ],
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "46e2863c-6bcf-44fd-d2e1-08d4bf95cc29",
        "X-Microsoft-Antispam": "UriScan:; BCL:0; PCL:0;\n\tRULEID:(300000500095)(300135000095)(300000501095)(300135300095)(300000502095)(300135100095)(22001)(300000503095)(300135400095)(2017052603031)(201703131430075)(201703131517081)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);\n\tSRVR:BY2PR0301MB0599; ",
        "X-MS-TrafficTypeDiagnostic": "BY2PR0301MB0599:",
        "X-Microsoft-Antispam-PRVS": "<BY2PR0301MB0599CCA2667789F5653EEE83E6D30@BY2PR0301MB0599.namprd03.prod.outlook.com>",
        "X-Exchange-Antispam-Report-Test": "UriScan:(236129657087228)(185117386973197)(275809806118684); ",
        "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6095135)(601004)(2401047)(13016025)(5005006)(13018025)(8121501046)(100000703101)(100105400095)(93006095)(93001095)(10201501046)(3002001)(6055026)(6096035)(20161123563025)(20161123556025)(20161123561025)(20161123559100)(201703131430075)(201703131433075)(201703131448075)(201703161259150)(201703151042153)(20161123565025)(100000704101)(100105200095)(100000705101)(100105500095);\n\tSRVR:BY2PR0301MB0599; BCL:0; PCL:0;\n\tRULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(400006)(100000804101)(100110200095)(100000805101)(100110500095);\n\tSRVR:BY2PR0301MB0599; ",
        "X-Forefront-PRVS": "0354B4BED2",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "30 Jun 2017 08:55:46.0067\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": "BY2PR0301MB0599",
        "Subject": "[dpdk-dev] [PATCH 19/21 v5] bus/fslmc: enable portal interrupt\n\thandling",
        "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": "Eventdev requires portal interrupts to handle timeout in the\nevent dequeue. This patch provides mechanism to enable the\nportal interrupts.\n\nSigned-off-by: Nipun Gupta <nipun.gupta@nxp.com>\n---\n drivers/bus/fslmc/portal/dpaa2_hw_dpio.c           | 108 ++++++++++++++++++++-\n drivers/bus/fslmc/portal/dpaa2_hw_pvt.h            |   3 +-\n drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h |  30 ++++++\n drivers/bus/fslmc/qbman/qbman_portal.c             |  22 +++++\n drivers/bus/fslmc/rte_bus_fslmc_version.map        |   1 +\n 5 files changed, 158 insertions(+), 6 deletions(-)",
    "diff": "diff --git a/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c b/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c\nindex 63378f0..5d53342 100644\n--- a/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c\n+++ b/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c\n@@ -46,6 +46,8 @@\n #include <sys/stat.h>\n #include <sys/mman.h>\n #include <sys/syscall.h>\n+#include <sys/epoll.h>\n+#include<sys/eventfd.h>\n \n #include <rte_mbuf.h>\n #include <rte_ethdev.h>\n@@ -106,6 +108,95 @@\n \treturn dpaa2_core_cluster_base + x;\n }\n \n+static void dpaa2_affine_dpio_intr_to_respective_core(int32_t dpio_id)\n+{\n+#define STRING_LEN\t28\n+#define COMMAND_LEN\t50\n+\tuint32_t cpu_mask = 1;\n+\tint ret;\n+\tsize_t len = 0;\n+\tchar *temp = NULL, *token = NULL;\n+\tchar string[STRING_LEN], command[COMMAND_LEN];\n+\tFILE *file;\n+\n+\tsnprintf(string, STRING_LEN, \"dpio.%d\", dpio_id);\n+\tfile = fopen(\"/proc/interrupts\", \"r\");\n+\tif (!file) {\n+\t\tPMD_DRV_LOG(WARN, \"Failed to open /proc/interrupts file\\n\");\n+\t\treturn;\n+\t}\n+\twhile (getline(&temp, &len, file) != -1) {\n+\t\tif ((strstr(temp, string)) != NULL) {\n+\t\t\ttoken = strtok(temp, \":\");\n+\t\t\tbreak;\n+\t\t}\n+\t}\n+\n+\tif (!token) {\n+\t\tPMD_DRV_LOG(WARN, \"Failed to get interrupt id for dpio.%d\\n\",\n+\t\t\t    dpio_id);\n+\t\tif (temp)\n+\t\t\tfree(temp);\n+\t\tfclose(file);\n+\t\treturn;\n+\t}\n+\n+\tcpu_mask = cpu_mask << rte_lcore_id();\n+\tsnprintf(command, COMMAND_LEN, \"echo %X > /proc/irq/%s/smp_affinity\",\n+\t\t cpu_mask, token);\n+\tret = system(command);\n+\tif (ret < 0)\n+\t\tPMD_DRV_LOG(WARN,\n+\t\t\t\"Failed to affine interrupts on respective core\\n\");\n+\telse\n+\t\tPMD_DRV_LOG(WARN, \" %s command is executed\\n\", command);\n+\n+\tfree(temp);\n+\tfclose(file);\n+}\n+\n+static int dpaa2_dpio_intr_init(struct dpaa2_dpio_dev *dpio_dev)\n+{\n+\tstruct epoll_event epoll_ev;\n+\tint eventfd, dpio_epoll_fd, ret;\n+\tint threshold = 0x3, timeout = 0xFF;\n+\n+\tdpio_epoll_fd = epoll_create(1);\n+\tret = rte_dpaa2_intr_enable(&dpio_dev->intr_handle, 0);\n+\tif (ret) {\n+\t\tPMD_DRV_LOG(ERR, \"Interrupt registeration failed\\n\");\n+\t\treturn -1;\n+\t}\n+\n+\tif (getenv(\"DPAA2_PORTAL_INTR_THRESHOLD\"))\n+\t\tthreshold = atoi(getenv(\"DPAA2_PORTAL_INTR_THRESHOLD\"));\n+\n+\tif (getenv(\"DPAA2_PORTAL_INTR_TIMEOUT\"))\n+\t\tsscanf(getenv(\"DPAA2_PORTAL_INTR_TIMEOUT\"), \"%x\", &timeout);\n+\n+\tqbman_swp_interrupt_set_trigger(dpio_dev->sw_portal,\n+\t\t\t\t\tQBMAN_SWP_INTERRUPT_DQRI);\n+\tqbman_swp_interrupt_clear_status(dpio_dev->sw_portal, 0xffffffff);\n+\tqbman_swp_interrupt_set_inhibit(dpio_dev->sw_portal, 0);\n+\tqbman_swp_dqrr_thrshld_write(dpio_dev->sw_portal, threshold);\n+\tqbman_swp_intr_timeout_write(dpio_dev->sw_portal, timeout);\n+\n+\teventfd = dpio_dev->intr_handle.fd;\n+\tepoll_ev.events = EPOLLIN | EPOLLPRI | EPOLLET;\n+\tepoll_ev.data.fd = eventfd;\n+\n+\tret = epoll_ctl(dpio_epoll_fd, EPOLL_CTL_ADD, eventfd, &epoll_ev);\n+\tif (ret < 0) {\n+\t\tPMD_DRV_LOG(ERR, \"epoll_ctl failed\\n\");\n+\t\treturn -1;\n+\t}\n+\tdpio_dev->epoll_fd = dpio_epoll_fd;\n+\n+\tdpaa2_affine_dpio_intr_to_respective_core(dpio_dev->hw_id);\n+\n+\treturn 0;\n+}\n+\n static int\n configure_dpio_qbman_swp(struct dpaa2_dpio_dev *dpio_dev)\n {\n@@ -215,6 +306,11 @@\n \t\treturn -1;\n \t}\n \n+\tif (dpaa2_dpio_intr_init(dpio_dev)) {\n+\t\tPMD_DRV_LOG(ERR, \"Interrupt registration failed for dpio\\n\");\n+\t\treturn -1;\n+\t}\n+\n \treturn 0;\n }\n \n@@ -339,6 +435,7 @@ struct dpaa2_dpio_dev *dpaa2_get_qbman_swp(int cpu_id)\n {\n \tstruct dpaa2_dpio_dev *dpio_dev;\n \tstruct vfio_region_info reg_info = { .argsz = sizeof(reg_info)};\n+\tint vfio_dev_fd;\n \n \tif (obj_info->num_regions < NUM_DPIO_REGIONS) {\n \t\tPMD_INIT_LOG(ERR, \"ERROR, Not sufficient number \"\n@@ -355,13 +452,14 @@ struct dpaa2_dpio_dev *dpaa2_get_qbman_swp(int cpu_id)\n \n \tdpio_dev->dpio = NULL;\n \tdpio_dev->hw_id = object_id;\n-\tdpio_dev->vfio_fd = vdev->fd;\n+\tdpio_dev->intr_handle.vfio_dev_fd = vdev->fd;\n \trte_atomic16_init(&dpio_dev->ref_count);\n \t/* Using single portal  for all devices */\n \tdpio_dev->mc_portal = rte_mcp_ptr_list[MC_PORTAL_INDEX];\n \n \treg_info.index = 0;\n-\tif (ioctl(dpio_dev->vfio_fd, VFIO_DEVICE_GET_REGION_INFO, &reg_info)) {\n+\tvfio_dev_fd = dpio_dev->intr_handle.vfio_dev_fd;\n+\tif (ioctl(vfio_dev_fd, VFIO_DEVICE_GET_REGION_INFO, &reg_info)) {\n \t\tPMD_INIT_LOG(ERR, \"vfio: error getting region info\\n\");\n \t\trte_free(dpio_dev);\n \t\treturn -1;\n@@ -370,7 +468,7 @@ struct dpaa2_dpio_dev *dpaa2_get_qbman_swp(int cpu_id)\n \tdpio_dev->ce_size = reg_info.size;\n \tdpio_dev->qbman_portal_ce_paddr = (uint64_t)mmap(NULL, reg_info.size,\n \t\t\t\tPROT_WRITE | PROT_READ, MAP_SHARED,\n-\t\t\t\tdpio_dev->vfio_fd, reg_info.offset);\n+\t\t\t\tvfio_dev_fd, reg_info.offset);\n \n \t/* Create Mapping for QBMan Cache Enabled area. This is a fix for\n \t * SMMU fault for DQRR statshing transaction.\n@@ -383,7 +481,7 @@ struct dpaa2_dpio_dev *dpaa2_get_qbman_swp(int cpu_id)\n \t}\n \n \treg_info.index = 1;\n-\tif (ioctl(dpio_dev->vfio_fd, VFIO_DEVICE_GET_REGION_INFO, &reg_info)) {\n+\tif (ioctl(vfio_dev_fd, VFIO_DEVICE_GET_REGION_INFO, &reg_info)) {\n \t\tPMD_INIT_LOG(ERR, \"vfio: error getting region info\\n\");\n \t\trte_free(dpio_dev);\n \t\treturn -1;\n@@ -392,7 +490,7 @@ struct dpaa2_dpio_dev *dpaa2_get_qbman_swp(int cpu_id)\n \tdpio_dev->ci_size = reg_info.size;\n \tdpio_dev->qbman_portal_ci_paddr = (uint64_t)mmap(NULL, reg_info.size,\n \t\t\t\tPROT_WRITE | PROT_READ, MAP_SHARED,\n-\t\t\t\tdpio_dev->vfio_fd, reg_info.offset);\n+\t\t\t\tvfio_dev_fd, reg_info.offset);\n \n \tif (configure_dpio_qbman_swp(dpio_dev)) {\n \t\tPMD_INIT_LOG(ERR,\ndiff --git a/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h b/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h\nindex 975e431..f5644b9 100644\n--- a/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h\n+++ b/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h\n@@ -101,7 +101,8 @@ struct dpaa2_dpio_dev {\n \tuintptr_t qbman_portal_ci_paddr;\n \t\t/**< Physical address of Cache Inhibit Area */\n \tuintptr_t ci_size; /**< Size of the CI region */\n-\tint32_t\tvfio_fd; /**< File descriptor received via VFIO */\n+\tstruct rte_intr_handle intr_handle; /* Interrupt related info */\n+\tint32_t\tepoll_fd; /**< File descriptor created for interrupt polling */\n \tint32_t hw_id; /**< An unique ID of this DPIO device instance */\n \tuint64_t dqrr_held;\n \tuint8_t dqrr_size;\ndiff --git a/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h b/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h\nindex 06bd063..9e9047e 100644\n--- a/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h\n+++ b/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h\n@@ -124,6 +124,36 @@\n void qbman_swp_interrupt_clear_status(struct qbman_swp *p, uint32_t mask);\n \n /**\n+ * qbman_swp_dqrr_thrshld_read_status() - Get the data in software portal\n+ * DQRR interrupt threshold register.\n+ * @p: the given software portal object.\n+ */\n+uint32_t qbman_swp_dqrr_thrshld_read_status(struct qbman_swp *p);\n+\n+/**\n+ * qbman_swp_dqrr_thrshld_write() - Set the data in software portal\n+ * DQRR interrupt threshold register.\n+ * @p: the given software portal object.\n+ * @mask: The value to set in SWP_DQRR_ITR register.\n+ */\n+void qbman_swp_dqrr_thrshld_write(struct qbman_swp *p, uint32_t mask);\n+\n+/**\n+ * qbman_swp_intr_timeout_read_status() - Get the data in software portal\n+ * Interrupt Time-Out period register.\n+ * @p: the given software portal object.\n+ */\n+uint32_t qbman_swp_intr_timeout_read_status(struct qbman_swp *p);\n+\n+/**\n+ * qbman_swp_intr_timeout_write() - Set the data in software portal\n+ * Interrupt Time-Out period register.\n+ * @p: the given software portal object.\n+ * @mask: The value to set in SWP_ITPR register.\n+ */\n+void qbman_swp_intr_timeout_write(struct qbman_swp *p, uint32_t mask);\n+\n+/**\n  * qbman_swp_interrupt_get_trigger() - Get the data in software portal\n  * interrupt enable register.\n  * @p: the given software portal object.\ndiff --git a/drivers/bus/fslmc/qbman/qbman_portal.c b/drivers/bus/fslmc/qbman/qbman_portal.c\nindex 8002690..dd62e9a 100644\n--- a/drivers/bus/fslmc/qbman/qbman_portal.c\n+++ b/drivers/bus/fslmc/qbman/qbman_portal.c\n@@ -44,6 +44,8 @@\n #define QBMAN_CINH_SWP_IER     0xe40\n #define QBMAN_CINH_SWP_ISDR    0xe80\n #define QBMAN_CINH_SWP_IIR     0xec0\n+#define QBMAN_CINH_SWP_DQRR_ITR    0xa80\n+#define QBMAN_CINH_SWP_ITPR    0xf40\n \n /* CENA register offsets */\n #define QBMAN_CENA_SWP_EQCR(n) (0x000 + ((uint32_t)(n) << 6))\n@@ -218,6 +220,26 @@ void qbman_swp_interrupt_clear_status(struct qbman_swp *p, uint32_t mask)\n \tqbman_cinh_write(&p->sys, QBMAN_CINH_SWP_ISR, mask);\n }\n \n+uint32_t qbman_swp_dqrr_thrshld_read_status(struct qbman_swp *p)\n+{\n+\treturn qbman_cinh_read(&p->sys, QBMAN_CINH_SWP_DQRR_ITR);\n+}\n+\n+void qbman_swp_dqrr_thrshld_write(struct qbman_swp *p, uint32_t mask)\n+{\n+\tqbman_cinh_write(&p->sys, QBMAN_CINH_SWP_DQRR_ITR, mask);\n+}\n+\n+uint32_t qbman_swp_intr_timeout_read_status(struct qbman_swp *p)\n+{\n+\treturn qbman_cinh_read(&p->sys, QBMAN_CINH_SWP_ITPR);\n+}\n+\n+void qbman_swp_intr_timeout_write(struct qbman_swp *p, uint32_t mask)\n+{\n+\tqbman_cinh_write(&p->sys, QBMAN_CINH_SWP_ITPR, mask);\n+}\n+\n uint32_t qbman_swp_interrupt_get_trigger(struct qbman_swp *p)\n {\n \treturn qbman_cinh_read(&p->sys, QBMAN_CINH_SWP_IER);\ndiff --git a/drivers/bus/fslmc/rte_bus_fslmc_version.map b/drivers/bus/fslmc/rte_bus_fslmc_version.map\nindex 9950557..3cdf14e 100644\n--- a/drivers/bus/fslmc/rte_bus_fslmc_version.map\n+++ b/drivers/bus/fslmc/rte_bus_fslmc_version.map\n@@ -70,6 +70,7 @@ DPDK_17.08 {\n \tqbman_swp_dqrr_consume;\n \tqbman_swp_dqrr_next;\n \tqbman_swp_enqueue_multiple_eqdesc;\n+\tqbman_swp_interrupt_clear_status;\n \tqbman_swp_push_set;\n \trte_dpaa2_alloc_dpci_dev;\n \trte_fslmc_object_register;\n",
    "prefixes": [
        "dpdk-dev",
        "19/21",
        "v5"
    ]
}