get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 27123,
    "url": "http://patches.dpdk.org/api/patches/27123/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20170724084004.25542-6-santosh.shukla@caviumnetworks.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": "<20170724084004.25542-6-santosh.shukla@caviumnetworks.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20170724084004.25542-6-santosh.shukla@caviumnetworks.com",
    "date": "2017-07-24T08:39:57",
    "name": "[dpdk-dev,v5,05/12] linuxapp/eal_pci: get iommu class",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "afb419a39992032d8a0ac5e80fb86f3e2449ef3b",
    "submitter": {
        "id": 480,
        "url": "http://patches.dpdk.org/api/people/480/?format=api",
        "name": "Santosh Shukla",
        "email": "santosh.shukla@caviumnetworks.com"
    },
    "delegate": null,
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20170724084004.25542-6-santosh.shukla@caviumnetworks.com/mbox/",
    "series": [],
    "comments": "http://patches.dpdk.org/api/patches/27123/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/27123/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 37F0D7CBF;\n\tMon, 24 Jul 2017 10:42:28 +0200 (CEST)",
            "from NAM02-SN1-obe.outbound.protection.outlook.com\n\t(mail-sn1nam02on0063.outbound.protection.outlook.com [104.47.36.63])\n\tby dpdk.org (Postfix) with ESMTP id 46B417CBD\n\tfor <dev@dpdk.org>; Mon, 24 Jul 2017 10:42:26 +0200 (CEST)",
            "from localhost.localdomain (223.180.24.9) by\n\tDM5PR07MB3097.namprd07.prod.outlook.com (10.172.85.7) with Microsoft\n\tSMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id\n\t15.1.1282.10; Mon, 24 Jul 2017 08:42:21 +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=0mIwC0LQYmxKWU4r2K7f5vTw/Mmu8yyIc+OWuxRbU/g=;\n\tb=j7ckgTt1Oe0GFYLgVeEifkg5T/okGPAsxAnnz0laDtwnQPfSjXD6LgYxkVo1TLi+BFpqJfnFjCtuIxzXTwfRpRmXrtO2TMweOWfvf49R2qdm5lNz58Q0LUR1HftMYJ6l1mXuDUEKPM3nfcyQtLkXr38Jqp/ZunF/wNJQ55fV/iI=",
        "Authentication-Results": "spf=none (sender IP is )\n\tsmtp.mailfrom=Santosh.Shukla@cavium.com; ",
        "From": "Santosh Shukla <santosh.shukla@caviumnetworks.com>",
        "To": "thomas@monjalon.net,\n\tdev@dpdk.org",
        "Cc": "hemant.agrawal@nxp.com, bruce.richardson@intel.com,\n\tjerin.jacob@caviumnetworks.com, shreyansh.jain@nxp.com,\n\tgaetan.rivet@6wind.com, sergio.gonzalez.monroy@intel.com,\n\tanatoly.burakov@intel.com, stephen@networkplumber.org,\n\tmaxime.coquelin@redhat.com, olivier.matz@6wind.com,\n\tSantosh Shukla <santosh.shukla@caviumnetworks.com>",
        "Date": "Mon, 24 Jul 2017 14:09:57 +0530",
        "Message-Id": "<20170724084004.25542-6-santosh.shukla@caviumnetworks.com>",
        "X-Mailer": "git-send-email 2.11.0",
        "In-Reply-To": "<20170724084004.25542-1-santosh.shukla@caviumnetworks.com>",
        "References": "<20170718055950.10208-1-santosh.shukla@caviumnetworks.com>\n\t<20170724084004.25542-1-santosh.shukla@caviumnetworks.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[223.180.24.9]",
        "X-ClientProxiedBy": "SG2PR06CA0085.apcprd06.prod.outlook.com (10.170.138.11) To\n\tDM5PR07MB3097.namprd07.prod.outlook.com (10.172.85.7)",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "0def7dd1-3edc-422f-cab8-08d4d26fe8fb",
        "X-Microsoft-Antispam": "UriScan:; BCL:0; PCL:0;\n\tRULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(300000503095)(300135400095)(201703131423075)(201703031133081)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);\n\tSRVR:DM5PR07MB3097; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; DM5PR07MB3097;\n\t3:qxZjhWqhG80J8gmQNta2Q5GizaY9u+6HxdOJxRfV2RnHGm0TIt9A+kAQTswsEEIBK29nQCBpOJV7lm0gfmHeolLUxr/lvF87at+FEQNkfZbJF08SrP3HYMPEsUKvrWZTlso/5NfMO54xE5mN9JGgqC5WJS5EYLiWti1SZKFQxS3oNVTymjXRSuM1hk8xsTtR3P+HM539nmMN2LcQdzK9VK+j2mzlHBpbvWVVwNvMkj1mK6ICKN3mW/VuCnaKWnp/AFJBn0JxNCFTenLk9EFt+rFR1NhSf6DRrnqZUL+Pqbm12jZhyCqDOQw5IhEoNj7esU2DUgxeN6xpiMtL0uYa+m7dC7Sbt0p/12FeXrN+Hlinzz3cOHwtf39Ejvars/atQyu+OUs5UGRRye0mZki9T7/nx2HDhBeIV7AgShp+tUlE0ZJ5q9/JJ1yhnNYG+GbYTTclVVjs0OTM7oEMWvRo2XVS4WLQ372bcrVCH5kJmcieUz/hKBXzkiFKCtq4jkcBusbYpLf44Yh6XMj8q9EM35BImaRHNLZK9zFhcWm3YoO7ig660/Nv3cKm6agL4dE8Lmcj92TlsaNBJ+L/f2/kUiF65M985r9bcWpoljHiGzrLi/DPTjS1lx20TBP+pOz+vPvVo4UQEizk84wVaBxVP3LpoOoqtB3wHJ4wFkbZb+EPzk2tuKNj3lK1GlrIZ7XjtuXT08219ZLhbDOOKm2X4Ii0XbdXKh11jw0TXkRkILs=",
            "1; DM5PR07MB3097;\n\t25:owPMMIqWPnKGjQzmDbp5/7S7h+paLABfuGSzqQpO3y10AHFT+VGZSDIjgeMek5euRu1jZHxmnPimT5hDG3Dm1F2ApV6mNy5gPaiPy0l/26B7GUNm6DeJ387zpFBZgWjGax7SnTVXOaDGf+xxTNjpfeoDDcazw1lPypZFHnwYpQksQPYBuxWmjoTNZA+6QCHW2aQwPoi+pJ/ECd3xxQalj4x11KB8Dxq4SNwCEkrsY5RXzrcQPBH2Xuhd7iE2HnSO5YbOmH0MN3ZzQiKV837vlkVwn/fu9V1ifaHQbUOJZWa/TdqhNnpmPa0X78dFtVFMya6UrCDXoKBTerfMW88nD9PtKinjjIHMv3F7cmETFBoHAeIOQB/H3JehZlXqZJWdS8SL27NJdVn9O2MM2vy16/gv71bI3a3Zn6HIahEd3GSo/IYwfD3T/Vt53QkjolFclORUnWemffHP1na2qe9yrmElNsT6MuKVCQScyNeD23P/5E7q5N9SHGq1Eq73O2vdg/3F+nvP5hiZCZJcI3tm64P8IfcgA+q8S6cQRPH5CFMRM/fO2gQX2uJAmVCDOBZK5RXCl7b1ucWGVhsv99SDdq9AoLHCHs1L1HZ/6F53neorh+eWxji/Z6gCbDx7xg4iYX8YPg97nLstr2GiZyTwUWzriz7s9NsMC7d0t6TkmyHiO4ElnT9gPov6aq+ScNMYAZQ4YX+Mg1N2vKqRMp0l0mNpiRlBkYBdK8p6NWkubFbOKp8/HgSV4Alkdg9HA/YfjwGRKgMbKGIHWytoAUjSC9dXKMY1iOuTE+WrJtnNfbtEC8NvuVQd67yrOlxFFQ394uteAKLGBxxXRI/V4/3Hyltju+vSgNxkCqCYvCYoC4fG3rHzCj2bkIFy6vfHompT/Hj9chvB63CXEwkhq8ReopJTwp1HJfOujG+3WquCE+w=",
            "1; DM5PR07MB3097;\n\t31:w459cZw3BvQpOSujxaLhs/PgCvVLVbGv/QLe+WM+iGqWE7sGHrVVWxWg3Nd1DW/W/JkA49JdH6l/eTFaHEeZtedzi3rZY/VXdfjd5qS/uwW8dZqitF9doy2XUsEUJazav4+C+xjom7jz3d4+enyHqqUa186fRdA8t7gcV+1t5y8ubQoHGdyYk7x5zzIrfRwggBLeoGpWnK8rqd9WPd91wO+E2Cgqx2g6EQirUfliHN7fuF3eRJoBYLnRc3RWJ5NQDN4Mgyv0I3Kb7yALGsXge3Wr7Byc70F+yLFc9VoKssVKGOEef956OoigRoDWAo6bKMtwL/qlE15TPe16sws+kORohZ6ZV7dhwQEARJCcLgOXWQtcwEOMFmuLz7yVgYdSfnCjyThL4mW3G0W56RDCb1G59lJR/H5fWtLDZHR3g904+4x53xomf5gWdiEjOuk77N+0bhDEajgC8zyr1NXDuCDjzpyFlJVM675rSBdGXmHOK1jKEEqZnRo5aEuwkRUve/53R7a+mByzUvct8uOidlk8MXTQ8vHy2R5nIhf7Q6RJLkGXhtOMdFsAURnJPLSrHixZP2OxlZmfFOfpTY6cDkQKzT3HvwmX9oRa1vDjGBJ13ESOiqpCjTs39m66CHsyxa4eK0FRmvIUYDiRCxB0HJICIO7DD6WP+D7T94AecF8=",
            "1; DM5PR07MB3097;\n\t20:Clln/zuIGWeTrFPEThjoIfnNwHYtC7AWkzXrln2CGj7z04eXLh7/RL2JuwK0B8DzQxqZgF6RyLW2v+RwT2Jokp6IqekduFq1DZF3ExzNtQHA3FqKr59p+JSWNHSEXApcog+0RmX0QDxoqI4BRf9rpWyTeqqSbAQo/1ox9GV/P+m8ZV7kizX9EeGxFcrEqZr9iYY2chJzPJ+7/LG8PGy8oq/V9WyHDQ2jwSeXp3uTZp6pJUh4egAFfRWtULyIkkfiE2bbucc/T3ugcgLgnNIzeQELd2rrRZYnMkgcFRnEmmQb28nhqsNz+o8s7tSdmqo79fZjyYTlt/oK6rKo7P79e+hxzU5GgZ5x0+eFiVfnqEPrqxfInXhdOCWr6rINecqx66guLCOT4ovbc5UHnR6o0JjU7jMnFcmLAnKK3i5DGUgQnGWk2y7hCtnTBSXY/gBlDbfz27IJsSsnPByEaIqE2TqVb+f/hWnbzt28zU7GJ20pBIIJzk8aFaEwDBhPv2kj4pUQwrNx2rIQUIZ2Q0/PyscaEPm3GYrbAHdZC0UMcK+RhLNbfzY3PgFAv0csyMuaxAblkSfWQozdlJ32FPCxanUoJ6EG1FBvU5kE3jYu8iE=",
            "=?us-ascii?Q?1; DM5PR07MB3097;\n\t4:AaTlRvPE/8jOgHdCH/uJPIPQ0FL6HO5cGwCVk8fjNl?=\n\tscGhKXcImlu9RPUXzZtcWH4sPlDyZ4PQcFQQ1IPGsnL7RHWgCmdK7pZQNl7Z+3rEZAdH9NHQE4oFGbbyERInRT/kKcviDd/x/1IXMmlm7Kl3E/VAePLB4Irn3yDjHK9nlDzR2Czqy4EAnzxKq71vQTHdp7hdoCdP/Pyx4xRqwkcnCekuJY9pW6sIaOCvv1RSqg8v53Lvr+uqexZnGzHDT5N/ZjjvnViuOqQLYCVsL5uSFD9E6B2JrLQciN99RxDuhJEPiz76Juu8B3Vuj/pKEEukdbDpwGx8mVAVijoCLcQEUqC4MjMyGuQWLROlLGwuymvxPjwDfTF0DCMcPOV63FwT6eoaN1/cICa7Pr1i+MyTduYxH0lBdT09XhUqhuQszrZNdjlpSHwZv2TsIJfdLDAGDSSO7fU998mlrFEaF2zJ8nT0r07PvuzR8rN/Fuy4oyPUFtXXQoTPKbmWhFsZYvnvVXVAaH6uMHgySRnVeFXHOpZc232hgK5cx8jBtsBmBqIv8CUgre68BIpmc9XiMb1byPHc3VGu9IuKMzLUncjIVNy5LZzXGxFsisZ+7SFCQA5t9iLrb0WZhyeiEKfLEohjbrK5rG9FFCEUXF/+AFtALR0IKRGAsfKJz5dnfg1eX7RDcsJkqs7cBrksLsn2/LJLibG8AFmfxowmFdgXQl9B+BB9F1Xo2HcW1vYAUb96qGju6cywRqYCwx+chdDcIjdyyTZTX6ERGQ5xgPv4TUmKzg5SWHAqatxzSXt8Au1cQ8o4LDR/y7v0vfimdSf6hxAHR5qVWBE3GEP7uRMmZxltEyInjzGZYI93Wcgly1dZ6dUyTxBMQbgrYuElS+xGuYjddbTsPE6gBp48nD57Fy5N+Tzw8AU6tTl9PfA9IceioruwsJ73aGwfs4BvqaD5Sr1hDn4TZl9xo8jVegYTa4/iQA/F2AY6vGHd/YQW3xUadGs0QaTWp4QbXEb3cHHyigsZgeN0vNEi4910cDOcdSFKCkNATyTulJfgl/KwcPvb5s8YmTJAk7tXVKKN1BRJRRDG2WA/3RdZZcquqHzuWCIAQAdP9tslUe7NYKFghIpYV/sRZPqNcNONz0rWtdm7nTAYB5tRjq/9m5fb/9IJnEKbGoH+RpVxEaGq5rsehajdaH92z17IISnJv4smk+IW8N",
            "=?us-ascii?Q?1; DM5PR07MB3097;\n\t23:8XkE9PLNhTwRppMwF84/IlGKAG6jRn8POgWCw+D0H?=\n\tTSDKnO+E4sTj3/pKNYXPTUH/0fvq2JbVckaSQaa8BGxmTqFQdO+mD2Fqg7hjP6ROiAA29PhnuCLDNR6KOY1TdAq0hdo27ImaX6dEheZvVBTYHdUxJ9JqFbq7imVx0vPgJa26GAHC7GPfHEBdjy/s5IN1Zjy3kNJDOP9QU4dmXI0tp0IteizmvSUh4gCl+AVW9M/LurkONOWuUKwXA7ep/KSoaaCbYs4B1vdtCF0kRuaFSTcJNsM6Tz1FvvapjaklR2zCWa3MYLnssRFdA31Rmr4J3tKcYuvKi24SWjnwQ1VY3t6jIf9d7SNx4iR+hZSVRZ6it7pkrZMjBxmNf5G4VEMOip5YtqBMIlvt3grDB4rr76w5Ap7TpYoPuQ5EpGYsbuENnT3Mq0E9BYVo5fqrSQwYIDmov9jdFj2cI/OhZbfXLTyORDWeb4+Cogcp/I5Ve6ZMrrUi7wr7Vs2Vyq6Nb9RhzYUJLc23ht9OolIk1y3qRDYIaVv2SVcaIopwzZFwZHaXDsMnm5GtwVgqA3i52IsLK1E2HuhED+vkGgirGSIpXOaY850X8d1UClKmc/e0mi4Q/Fpr1lCOdTYZ367sFfM4WMy/oZfjoPvnugGJpVLXqfF9qVEKs80In74ZnN271fTTnRwRBgnjM9IBXt2IG7viu46i8spG8q6nXm4bnOtNnR/zUO7uSZV7c8lYdN+4cUhAckln4IqeKozQKMXByG2tRaowlUf/lh2/eSsk1O6WCmDUVDMP9HoH8sS9Tr5sHMP9Gs3Sq6Z2urBZhVY/Ami5/LQpCu/DdVI6Z0r2I8uJoSViXgAh6zzrn553pbmVQn85kQ/BzA6l7uAL+wzz1Qfp6SzRIbILPiyqXu+6V6mJl8Dp2GPV7tHiLMW6ZDqkPaJvkNVcjHW04z4Vw6FX2dlaIgCimJqHLVsPPjiwBWmm2ouXerNREO4Ciy0nAH5jO5wIGMaRh3zmHCKLHl3VmRM+8ELIq+u+v3Qvbgsu817Zca+O+sGvIf91hECXyhB3lyuuZ+qfu0n5uzvvacC33LVDH/9ptK4aP8l8OiTdkT0mYlq/Irubq0PUBro+04HpaMBV1D7rWuIV01fsHTZiGb2QvF17KTMC4lmWpw4Mo83oabeH0Zoz78chPhoh0NQTzG7y9iS6IAg4Z3r75jJF56/zpcs0rXScVbwcFmcwrQ4JCj74U6IeTMmbsj7rUZOWW7eFAH07JZTTHQgd6ua03KMb/oesSMRXlox6yJs3N8K0rOAovKPCXGHSuzqb8JyzlS46oOhb3W4wgEwEMuoXvJUVFcE9RY+HW6basLcfnlKx5mMNwEG+jriPJzkQacHkHWMCZ3UoIf4xHSZIE3f5zcq",
            "=?us-ascii?Q?1; DM5PR07MB3097;\n\t6:UhnwNToaEyjgvfx5E6wpGUbMLYzcmcY3lABFTyVTsU?=\n\tIwdwUvKvHaqxcgIG6fr7U86m+Ke3SRyGwEXOxNbzXDDoqkOuSG/rvLdXrEmFk+VA21BmPMNmXgM/MfNtcKA3DdPcR2y3hTHdwbxU0OF5yvR5DdNqPEa9Vt5pLA33sym0PkWkJvzrO5h5ByM1VigA3sFx91yazYCGGk8Kk+bTMpfLVpXjEX5Lf8z5Rzg4OkorRHwHIcAIdVkHDJYFibuezDrO1AaXtfMQ8YskQG0sivRxmoTWZcxoWYxLrpOFgUsb25LqpP/XPw1FURg4ncdJ7dB4NAppelv9kmq3yomfuskkpicZ/lz/0F0Qku7B4JbkZ6e5lgFoJuiNLa0iGP65lH3GTdfYb/tDrvvJacIU/UXtX3Yi7EhKnUcgmC2M0/5B7Kz1l44Yf4NXyIJiYl7wiJJv4UfuQJTTKw9FCdiSd3Yj3WPhOxGm7QSpsys5iNa31s8WRA3l0pjsKjco76yyHu0VVIfI1WFyPISm7MbEsX3lI5BtSWZB0kaPD959238BSKksUqg+VMIj2cYU410pm4+Z4DUj4TC+bHWG0W4Rl93OPhT3z2sIYigIQLE2EQ6yxuWQmUPEYzZ0z19eVVuiCA2CZbWleChHMfKOddsDjimfaR9ESNdfhaK2IXk/aROzvDNB9KrzpfP6DobBf74+0bpRH88BoXhlAziknhTBc4LWfCBRRyrS3aq5JCpG9yFckXZMeud/E0C0T5LEzAh7NwMtX31IKkJiF/IdUFFXqxHSoL6L9PV3DBL7fACYZqAaE4IBT5aGrsCAJwWBCqmBSwvT+Htio/7WTgwGeB7VXD4SH+okmg7HANKfoyQTjpDmngbX/lP8jrqqF2HDQg/kaDqZWhtKoaFnsh5s2Lc7C1rlxue2Wr5RwvWSKhg8deRSn4z+foj5PyNqCjiyIN8dYa4DP1UbbeIR4aL/T7k9O+iUeskOJ0p7xqTXAQ+8hWWYY=",
            "1; DM5PR07MB3097;\n\t5:4ryN6jNMQUk6BTOht0Kt0VDrp8yZiDO9JcYbM0IXzh9CCMCFZmp2SESdIOlWxM3YKmS+dAJtoyiUU+9bXalLaaBiLG94o/SnX6dbCBYrHwyEEgwoO7cIbOVEARWVleCmcomndgo02kkFapBXRdJbaZdMf16FuIfD+RGE/XB0Jrxmz+pGox1eVj82nYG5eGhSo7+e0JDFWmDFUu09WWEX3vxlRYcwUemOd1qrLCtSBo88hiWSpK6A2HpNSvHBrpFZAH4+5jmZVGn92cIDQ4sIOacXuU0ucQhNo0VIq9K9h+7lKVZ0WWsSME3zfAWJsAhrrBSOS8UxhboPgF7lVmcoQDZa9swJbKvm6IiQN2jaDiFq6lLYMB/WJkH6qA+JVM0S8dnoI9RJ9+1CtYZg/D4zovo7cU588lafR7Vi/z7WVtpVhQ+OLYcOn9KPks4mpTiFwbd5LnvC8AXLmRv4o5bUoreki2vWonpS2ufXgc2iwJa6htGa5Cj+MzP4e/TtdPBM;\n\t24:dXx9MEI36Thn0K8C08JqcHvcoRgT596/1/Eaf/9BopmO4Ri6QilGJNZhvaIvh7UN5WUz8/+hYEFC8J1AgdIjfKQa0lf2d+0HacM8Ig6xmDk=",
            "1; DM5PR07MB3097;\n\t7:uSe+wlgdeeqxIVaip3D/GUB+GHMNx/UfMEj5vFg1wAXe64H3G9lbQLvt+4EMsU+dQMCLHmEqtBrIZc8XDQwYKrMKHfi1xgRQXZA0qcBQWKvEomlpl2VbS1aCdQHUxoMOUq/nInqvCQ6zH2U+W+YAEi0/m80Hzk6GCui33eR55xsN9hSSJouHCcYJHJURrh0GK+sO4ZHPJyQHf5rIGZaOQeugStMtvUminYLjbz1CTJU1XXBivTdKy6QOLuemMwR7yj+ujaucMQISOR5vXVovomt8CXBcgJZpYUbsKhF1wXJLiU2as9jU5W4zdj0TvUbag2zrt11CTYjKA/rJO6ls3whFM8eA/4EQthPzvftIOeGOS8HpqTkX3zk5bEDkC6uYrHUUpVoysZPxApmm8iaUoR/RcoNufpRrvvTqfZqmXwgQ1V6jsvxz1BDHBYXAyPcC18CbFBFhM5gJcBmxZdxOUHK8ndqvzB9UtK89ACZwsyOJu2r2GcR5AMC7qdAJLRDXR/mqixBZBeHrQodZ6EbgGWvVmGzWw0DsdMzKYcxxtKHbO2Y5pd4Rj79Yur2Su2PTpGGxkhGxhuhWO2Cq5eKkyBp25oXIN3dKyL440Kbphe4YeJRNLDgTKMtU3nKJ/uM1y82xkrGLfo/kas8R6cb6/eIdhIrohRjfh5sq1enqJ8SnQl2K9PwigvTXL94xrBmnlMf32+G4WJkqWeu09LVJdvBHvEQ1ZUykUFbsgxDMFYzb7JGz5fKAdgMcf0FxqIC8HQvHBk/XixnLzauEaT4tHverKYEUMd8bA3LVtMarM3k="
        ],
        "X-MS-TrafficTypeDiagnostic": "DM5PR07MB3097:",
        "X-Exchange-Antispam-Report-Test": "UriScan:(185117386973197)(278021516957215); ",
        "X-Microsoft-Antispam-PRVS": "<DM5PR07MB3097F6E382EE1B2098AB0F9BEABB0@DM5PR07MB3097.namprd07.prod.outlook.com>",
        "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(5005006)(8121501046)(10201501046)(100000703101)(100105400095)(3002001)(93006095)(6041248)(20161123564025)(20161123555025)(20161123560025)(20161123558100)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(6072148)(100000704101)(100105200095)(100000705101)(100105500095);\n\tSRVR:DM5PR07MB3097; BCL:0; PCL:0;\n\tRULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);\n\tSRVR:DM5PR07MB3097; ",
        "X-Forefront-PRVS": "0378F1E47A",
        "X-Forefront-Antispam-Report": "SFV:NSPM;\n\tSFS:(10009020)(7370300001)(4630300001)(6009001)(6069001)(39850400002)(39400400002)(39410400002)(39840400002)(39450400003)(189002)(199003)(47776003)(6116002)(38730400002)(42186005)(2950100002)(72206003)(36756003)(42882006)(5660300001)(6666003)(3846002)(4326008)(68736007)(110136004)(107886003)(2906002)(966005)(478600001)(5003940100001)(6486002)(6306002)(33646002)(81156014)(8676002)(81166006)(97736004)(106356001)(1076002)(5890100001)(8656003)(53936002)(6506006)(66066001)(6512007)(7350300001)(189998001)(101416001)(7736002)(7416002)(50466002)(50986999)(50226002)(76176999)(105586002)(25786009)(305945005)(48376002);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:DM5PR07MB3097; H:localhost.localdomain;\n\tFPR:; \n\tSPF:None; PTR: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": "caviumnetworks.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "24 Jul 2017 08:42:21.2281\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "DM5PR07MB3097",
        "Subject": "[dpdk-dev] [PATCH v5 05/12] linuxapp/eal_pci: get iommu class",
        "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": "Get iommu class of PCI device on the bus and returns preferred iova\nmapping mode for that bus.\n\nAlgorithm for iova scheme selection for PCI bus:\n0. If no device bound then return with RTE_IOVA_DC mapping mode,\nelse goto 1).\n1. Look for device attached to vfio kdrv and has .drv_flag set\nto RTE_PCI_DRV_IOVA_AS_VA.\n2. Look for any device attached to UIO class of driver.\n3. Check for vfio-noiommu mode enabled.\n\nIf 2) & 3) is false and 1) is true then select\nmapping scheme as RTE_IOVA_VA. Otherwise use default\nmapping scheme (RTE_IOVA_PA).\n\nSigned-off-by: Santosh Shukla <santosh.shukla@caviumnetworks.com>\nSigned-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>\nReviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>\nAcked-by: Hemant Agrawal <hemant.agrawal@nxp.com>\n---\nv3 --> v4 :\n- Reworded WARNING message (suggested by Maxime)\n- Added pci_device_is_bound func to check for no device case\n  (suggested by Hemant).\n- Added ifdef vfio_present.\n\nv1 --> v2:\n- Removed Linux version check in vfio_noiommu func. Refer [1].\n  - Extending autodetction logic for _iommu_class.\n    Refer [2].\n\n[1] https://www.mail-archive.com/dev@dpdk.org/msg70108.html\n[2] https://www.mail-archive.com/dev@dpdk.org/msg70279.html\n\n lib/librte_eal/linuxapp/eal/eal_pci.c           | 95 +++++++++++++++++++++++++\n lib/librte_eal/linuxapp/eal/eal_vfio.c          | 19 +++++\n lib/librte_eal/linuxapp/eal/eal_vfio.h          |  4 ++\n lib/librte_eal/linuxapp/eal/rte_eal_version.map |  1 +\n 4 files changed, 119 insertions(+)",
    "diff": "diff --git a/lib/librte_eal/linuxapp/eal/eal_pci.c b/lib/librte_eal/linuxapp/eal/eal_pci.c\nindex 2041d5f34..81d980817 100644\n--- a/lib/librte_eal/linuxapp/eal/eal_pci.c\n+++ b/lib/librte_eal/linuxapp/eal/eal_pci.c\n@@ -45,6 +45,7 @@\n #include \"eal_filesystem.h\"\n #include \"eal_private.h\"\n #include \"eal_pci_init.h\"\n+#include \"eal_vfio.h\"\n \n /**\n  * @file\n@@ -483,6 +484,100 @@ rte_pci_scan(void)\n \treturn -1;\n }\n \n+/*\n+ * Is pci device bound to any kdrv\n+ */\n+static inline int\n+pci_device_is_bound(void)\n+{\n+\tstruct rte_pci_device *dev = NULL;\n+\tint ret = 0;\n+\n+\tFOREACH_DEVICE_ON_PCIBUS(dev) {\n+\t\tif (dev->kdrv == RTE_KDRV_UNKNOWN ||\n+\t\t    dev->kdrv == RTE_KDRV_NONE) {\n+\t\t\tcontinue;\n+\t\t} else {\n+\t\t\tret = 1;\n+\t\t\tbreak;\n+\t\t}\n+\t}\n+\treturn ret;\n+}\n+\n+/*\n+ * Any one of the device bound to uio\n+ */\n+static inline int\n+pci_device_bound_uio(void)\n+{\n+\tstruct rte_pci_device *dev = NULL;\n+\n+\tFOREACH_DEVICE_ON_PCIBUS(dev) {\n+\t\tif (dev->kdrv == RTE_KDRV_IGB_UIO ||\n+\t\t   dev->kdrv == RTE_KDRV_UIO_GENERIC) {\n+\t\t\treturn 1;\n+\t\t}\n+\t}\n+\treturn 0;\n+}\n+\n+/*\n+ * Any one of the device has iova as va\n+ */\n+static inline int\n+pci_device_has_iova_va(void)\n+{\n+\tstruct rte_pci_device *dev = NULL;\n+\tstruct rte_pci_driver *drv = NULL;\n+\n+\tFOREACH_DRIVER_ON_PCIBUS(drv) {\n+\t\tif (drv && drv->drv_flags & RTE_PCI_DRV_IOVA_AS_VA) {\n+\t\t\tFOREACH_DEVICE_ON_PCIBUS(dev) {\n+\t\t\t\tif (dev->kdrv == RTE_KDRV_VFIO &&\n+\t\t\t\t    rte_pci_match(drv, dev))\n+\t\t\t\t\treturn 1;\n+\t\t\t}\n+\t\t}\n+\t}\n+\treturn 0;\n+}\n+\n+/*\n+ * Get iommu class of PCI devices on the bus.\n+ */\n+enum rte_iova_mode\n+rte_pci_get_iommu_class(void)\n+{\n+\tbool is_bound;\n+\tbool is_vfio_noiommu_enabled = true;\n+\tbool has_iova_va;\n+\tbool is_bound_uio;\n+\n+\tis_bound = pci_device_is_bound();\n+\tif (!is_bound)\n+\t\treturn RTE_IOVA_DC;\n+\n+\thas_iova_va = pci_device_has_iova_va();\n+\tis_bound_uio = pci_device_bound_uio();\n+#ifdef VFIO_PRESENT\n+\tis_vfio_noiommu_enabled = vfio_noiommu_is_enabled() == 1 ? 1 : 0;\n+#endif\n+\n+\tif (has_iova_va && !is_bound_uio && !is_vfio_noiommu_enabled)\n+\t\treturn RTE_IOVA_VA;\n+\n+\tif (has_iova_va) {\n+\t\tRTE_LOG(WARNING, EAL, \"Some devices want iova as va but pa will be used because.. \");\n+\t\tif (is_vfio_noiommu_enabled)\n+\t\t\tRTE_LOG(WARNING, EAL, \"vfio-noiommu mode configured\\n\");\n+\t\tif (is_bound_uio)\n+\t\t\tRTE_LOG(WARNING, EAL, \"few device bound to UIO\\n\");\n+\t}\n+\n+\treturn RTE_IOVA_PA;\n+}\n+\n /* Read PCI config space. */\n int rte_pci_read_config(const struct rte_pci_device *device,\n \t\tvoid *buf, size_t len, off_t offset)\ndiff --git a/lib/librte_eal/linuxapp/eal/eal_vfio.c b/lib/librte_eal/linuxapp/eal/eal_vfio.c\nindex 946df7e31..c8a97b7e7 100644\n--- a/lib/librte_eal/linuxapp/eal/eal_vfio.c\n+++ b/lib/librte_eal/linuxapp/eal/eal_vfio.c\n@@ -816,4 +816,23 @@ vfio_noiommu_dma_map(int __rte_unused vfio_container_fd)\n \treturn 0;\n }\n \n+int\n+vfio_noiommu_is_enabled(void)\n+{\n+\tint fd, ret, cnt __rte_unused;\n+\tchar c;\n+\n+\tret = -1;\n+\tfd = open(VFIO_NOIOMMU_MODE, O_RDONLY);\n+\tif (fd < 0)\n+\t\treturn -1;\n+\n+\tcnt = read(fd, &c, 1);\n+\tif (c == 'Y')\n+\t\tret = 1;\n+\n+\tclose(fd);\n+\treturn ret;\n+}\n+\n #endif\ndiff --git a/lib/librte_eal/linuxapp/eal/eal_vfio.h b/lib/librte_eal/linuxapp/eal/eal_vfio.h\nindex 5ff63e5d7..26ea8e119 100644\n--- a/lib/librte_eal/linuxapp/eal/eal_vfio.h\n+++ b/lib/librte_eal/linuxapp/eal/eal_vfio.h\n@@ -150,6 +150,8 @@ struct vfio_config {\n #define VFIO_NOIOMMU_GROUP_FMT \"/dev/vfio/noiommu-%u\"\n #define VFIO_GET_REGION_ADDR(x) ((uint64_t) x << 40ULL)\n #define VFIO_GET_REGION_IDX(x) (x >> 40)\n+#define VFIO_NOIOMMU_MODE      \\\n+\t\"/sys/module/vfio/parameters/enable_unsafe_noiommu_mode\"\n \n /* DMA mapping function prototype.\n  * Takes VFIO container fd as a parameter.\n@@ -210,6 +212,8 @@ int pci_vfio_is_enabled(void);\n \n int vfio_mp_sync_setup(void);\n \n+int vfio_noiommu_is_enabled(void);\n+\n #define SOCKET_REQ_CONTAINER 0x100\n #define SOCKET_REQ_GROUP 0x200\n #define SOCKET_CLR_GROUP 0x300\ndiff --git a/lib/librte_eal/linuxapp/eal/rte_eal_version.map b/lib/librte_eal/linuxapp/eal/rte_eal_version.map\nindex 7d7fff496..bf68f02bc 100644\n--- a/lib/librte_eal/linuxapp/eal/rte_eal_version.map\n+++ b/lib/librte_eal/linuxapp/eal/rte_eal_version.map\n@@ -246,5 +246,6 @@ DPDK_17.11 {\n \tglobal:\n \n \trte_pci_match;\n+\trte_pci_get_iommu_class;\n \n } DPDK_17.08;\n",
    "prefixes": [
        "dpdk-dev",
        "v5",
        "05/12"
    ]
}