get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 26278,
    "url": "https://patches.dpdk.org/api/patches/26278/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20170703191402.3638-24-jerin.jacob@caviumnetworks.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": "<20170703191402.3638-24-jerin.jacob@caviumnetworks.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20170703191402.3638-24-jerin.jacob@caviumnetworks.com",
    "date": "2017-07-03T19:13:51",
    "name": "[dpdk-dev,v2,23/34] app/testeventdev: perf: launch lcores",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "fb250ebfc705d8a41d9793d9528b96c205f5a328",
    "submitter": {
        "id": 305,
        "url": "https://patches.dpdk.org/api/people/305/?format=api",
        "name": "Jerin Jacob",
        "email": "jerin.jacob@caviumnetworks.com"
    },
    "delegate": null,
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20170703191402.3638-24-jerin.jacob@caviumnetworks.com/mbox/",
    "series": [],
    "comments": "https://patches.dpdk.org/api/patches/26278/comments/",
    "check": "warning",
    "checks": "https://patches.dpdk.org/api/patches/26278/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 3E6F87D4A;\n\tMon,  3 Jul 2017 21:16:14 +0200 (CEST)",
            "from NAM02-BL2-obe.outbound.protection.outlook.com\n\t(mail-bl2nam02on0058.outbound.protection.outlook.com [104.47.38.58])\n\tby dpdk.org (Postfix) with ESMTP id 14BB07D31\n\tfor <dev@dpdk.org>; Mon,  3 Jul 2017 21:16:12 +0200 (CEST)",
            "from jerin.domain.name (111.93.218.67) by\n\tBLUPR0701MB1716.namprd07.prod.outlook.com (10.163.85.142) 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; Mon, 3 Jul 2017 19:16:07 +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=BynQ051wjA60Q9Wq8YhhfXjYp3GRPKjipH7F3xlPuAs=;\n\tb=CqZjeC4pW/whKIc7SVJW4Sft8phQaHFL2Ydia0r1ON+vh/jBiwq868FL8oRhjMhGyI4HF5wh2KOgj5JoB1FCOrjC2R3bVuul8ZD5rf8qvmks0wLRNQERIyUfBdia2iQsH5NUZKA8+Vp8yAhuFMXXM59vyH6zLaql7T7k9j9WyqU=",
        "Authentication-Results": "dpdk.org; dkim=none (message not signed)\n\theader.d=none;dpdk.org; dmarc=none action=none\n\theader.from=caviumnetworks.com;",
        "From": "Jerin Jacob <jerin.jacob@caviumnetworks.com>",
        "To": "dev@dpdk.org",
        "Cc": "harry.van.haaren@intel.com, bruce.richardson@intel.com,\n\themant.agrawal@nxp.com, gage.eads@intel.com, nipun.gupta@nxp.com,\n\tnarender.vangati@intel.com, nikhil.rao@intel.com,\n\tgprathyusha@caviumnetworks.com,\n\tJerin Jacob <jerin.jacob@caviumnetworks.com>",
        "Date": "Tue,  4 Jul 2017 00:43:51 +0530",
        "Message-Id": "<20170703191402.3638-24-jerin.jacob@caviumnetworks.com>",
        "X-Mailer": "git-send-email 2.13.2",
        "In-Reply-To": "<20170703191402.3638-1-jerin.jacob@caviumnetworks.com>",
        "References": "<20170528195854.6064-1-jerin.jacob@caviumnetworks.com>\n\t<20170703191402.3638-1-jerin.jacob@caviumnetworks.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[111.93.218.67]",
        "X-ClientProxiedBy": "PN1PR01CA0103.INDPRD01.PROD.OUTLOOK.COM (10.174.144.19) To\n\tBLUPR0701MB1716.namprd07.prod.outlook.com (10.163.85.142)",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "25c370ed-d76d-4188-2f00-08d4c247f72e",
        "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:BLUPR0701MB1716; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; BLUPR0701MB1716;\n\t3:ACIm41UwpXd3p+WAM3tmw6MLFmyAlZmz3SFHqtRBENB6XJ0d/5YcnpFox3aC8HGMmvl2c3lJxv+PAYV7hZ9lp0ccdvjyDxQ5GfeH/60UucYFcFnzSXz5E0kNJVV0XOXQ3xXtxWe3r4K/sqpXCwk02+rZNmAWfIbDOiAtzUkh4hd4+cQQV7FXpmDZ2M2IhHSHKIerAqDtNmCYc5QIwHkL3vBD6twJRdsOslGUJvpcz/d6lPDSEBR5wRKwyEGCW/oiWEWhO8zJ2wMucqgOuA2uKdjv8ycXaWAQJWEF75w6vneog+xXLTQ7tiZxmzksxhS8fOdFemoT6s1dsskEmSNfYbkPt5QDgZu+rveHzGNxN792ao7A+OU0ePgb4ZYvfB0hi5mm28wnr7th1ot3nsVIsB3HqrQzT0HDxprCNUit4TJ2vcb29oPqxNnN0w7HMDl04Iqzv3RHWTY5iPwSn9vRj6f6y38D4QG8ucLjtoJTlHkwbiwBzma7KEFt/c/4meCOP/GacZrHePSog+iZIKeuqGKX8ZsqnIqkWAqFZbY5UjUme8QxiB3H6yUG4D1PWcK34ivTOkbtfpzSydrpSoKhcNp5HNdaHRODXjjjin4zfg1YXZdMeaN9cvJlFmvpngJXgtNCK7rWV1yPAWoOEwWTIS2173L0zib1ZVPMedZaL8wQjWcIuWX6+4413IUWYKveS6UEOMpyNO/slXBpycT3Hc20JpQcARObjlvNLNlYv0I4AI2cMSEUsshH4Lrd2mai",
            "1; BLUPR0701MB1716;\n\t25:hUzcDHrFVh6CIXVMPR+U0wpycRSXUxsBOYHrx4GgQxs0qQA7pZyaB5TDyBFXrLGn6fxvQifn0qJjwOL+eP2MJenXR4Nlb8bRbkAOX7Pt5ILNEJ04RGKPhW/LQcx/h35GqoghbWQfKV1wGlPOXwr3u8ANeYzu18APGCbdAPhOffcLU9gD8xL9akXRMmaqpw/HU6Q3RwNwDm1iRJH/YGdmuj9dVJfhAeSUO2qzTH3AfOH/D7awfD6Z9KSsFx307cC+qpDmLZ5H+qFpW2H8I52egVBsSj4Sfx/I/RtOJwc6yYMZSZ57uWENfIANanF16Wj0eH97rHXUDATjzaKxBmKoeAVmaDWLbW4W+A3AS8i8baDvmW+YVezwGW3T4lnMrrq//gpEHZB4tzgIAixm+9xHGkbecFzi3FBVSuCHeVUpsUJCLxbKWlHo7PZ+Ej1FXcf7nqHlFt6ftomTTNG2mhz2CmGkOVRlqTTwo+ncY2s8IiNZttwQ4sL3ntAmbOaWDrDsOfxNWN2C7P/68YpBdzfFMgIQgck//w3axxlEE/obrjQsEGzvUnZmBB5DLb8SNcjoYj+TD8NuMEQNXdR/NUtjuazi2DTbY5LFZ4FUhMjM10IA0fpf0nthK/fkj8LrXLUU1ZidarJlvYZDT7o2bblC+1//+ecGm6Fjd0o+Fgz95Ti/yWFCTMHquqGUBsBzJvew/dXxSIqe7R5UvBwziPb3q9NqkvMTXkosgFeMPjNNYbcGh3i2es4xugv6Z4nrtIbeWPuuo7KPgZ5TYKIiCpw80Rq6unmVnIec9pPzGZyadyczin3Jtdx7AHfOtv+uogQ8ep8ibTCLuIcc2QqrjYTS+uU8+L1LSVGB5SOS2JJ30BiAhvWvH8wdVlDZuCmSQ/eowitLomrZq76rKg1s+1tghsRl0p2N6eBtr0RT/KXq3dU=",
            "1; BLUPR0701MB1716;\n\t31:uBf8/veCz5QrWYHLvnMzRcoHNRQYFo3Qn/Auqzbv21sngWYOgDcBHgnPAVjWjacUAfPwOUhwZ576Zvgadq2ZmfWiFUxHIZQHpJQaWUNcPF6nwaIi1wPhGMdw7cKb93Xh3NbUxPBnT0DJV1KgNW3FxV5+hU4xKhYX5MUS+7xtlbCFnZJBtVc2JSf6EzsKWGicEU8MawKKa3jEbsRqA0FbhoOx3uDaXi1M2jMS9V6DS/mmI15C1OMnVmT90YdG6aojeKYXzKojD5KK75PqVMbulq1IRArbzxerNaCY5JxaL9//yE6tFXPQZxVtP7MmDKlu0ut9KN5keOHoRff94T+ss180iRYBz4x11fOzkbTwEK56T+C4GEoKS3pgiNt7WvGsTtXuaDWdK0YXLcyMOct1PIfbbnl/M7ODuUiadqh6TB8APkGpZaexHceq02SJcuABVUovBkZSPJd4vJpyCijEiNlugAx1UouNzfRjKQTM/A4nnrLfNPCza1rttoq6TSWnTTz6E8ktiPuPN8oQFhgscfaeYmzSvdCkv76PuI/dLBY0aJLfs6EeuTMSiX19FJyVofu12OpQToFNKw4YS567FARksntl8dkNPEjiArbYdtn9RK2DCkTL50vGTd4FUSOBV9sGwbxRUF2A4AkcrlO51Y7Hee+FRY0ryxT9UJWqoIY=",
            "1; BLUPR0701MB1716;\n\t20:t9yOsNm5p87bbav9K/Sna0de1U3Rf0HhOLgizkaxRigdMVuVidPCzXMyLwj01ZbDKDJJyjN66pARIG33QfMg3tRarIxVuAFEqHdWMsO3k4bYRdEQsGZAQfWFQHknB80k/OGfQxwYqsN3p4+0lrBTxnSOLkzskwbJofyRjUmL1TKBDFaXurGCkQ8XpVgaRWnSbnxis55Jl0Jiqzqm+KfDPSa4eBtYUBAQKEO8/KOA6xEqiizPMvO1bJpsAIfSi8ntPuBKb9zYKuzgTvSKgGQ8QyPZs+g8WNf4xKQr4BCG1wSS9xsi99eKcdLlwvXE9E+Ixb3+nNOGWF36mLrXB+LIT07TgSo5vS6mnvaUmIg45o1p65j9j7OwCOJUKiSNH2MzgbyKB7l+6ndMTcWRdjPJ1nWHgw7LlOYRRsOpacygv/Nx/pz94NneOn3pWD16wNiHcNLeOFR6Iy6V+MMDoiV05XVaFU9CWXe8v3JL3JRcKA1MEsOgaEWyxVQELfON41ggbq8Y2JOQpmc4SmMGrMYYxE1xKN6InYRrJgWtT7N/tNLzzn6+/MtruBAn8K4gr7wi0u01u2sRbi77TtuzfDWz2oaF6jRzu6tlE67y2bgCTKs=",
            "=?us-ascii?Q?1; BLUPR0701MB1716;\n\t4:NEDmX/cs56CMAU134BoztdzaqoERQniAc2iP1hW4?=\n\tKQI2aaO2xp2AtuN2o/EWsCGYEajjbEfeMK/rrbWkV0XbWWxD40JDDRMfywb7ndZm+Vjle9veaoV8vKXt+/4V1ahFVRXO3UmpRBKOvK+K2UckM1fluH2kCbSbSqIUBL3F2zPSgPozW5bwOyso3vVzKtQECnQTobPmWwX/hChIk2A1cBJesr5Ztb34cNJyk84nV8lBxJB2vx7DQ2ywx67SVcf8RSu5+23hTfIAnIo/lB0xqZYrO3ZzXzIGSUtFb1SOueI3O76cvOFODUVDiJKUCjUoOgzU+a9lFcl0R5e4DbL0zq9khGboFfrrQ9UHt+VH/xg51r++6pnkimBzIBivqLZmMUBd8x72HD4un27zhBIhgc4KiZ0LF+4uVSWApJjrvE4d17NCTrE9zmIlabWsXiWBMRo7jLw6m8P33X8HFqOYTmRpLSplQcF0PLGDRKlwXEOB49T8sXYDrMTrDpbZbz/QzocUkwo8i48MZku6M0HPfUIK482K4kDLvIKqIB6oGNxAIbEhpqUtwTmctHUoPArWSGGGBi9t33YZh701yKpzM/5lSxd17M3RUYnQqd2u0S3Cfk6ab8rnOnASb0CepPpaxVp8dEPsQunPZgbdnfu168LLFCvsaFnLPjOXYsGXZcXhoMn7faRl+rvFj2VdbJqzvAUnwzESqdhvRRe7VlHEDI9b8AzoZcQmiO2pqWJdMdiMUqc1mVMnbYMPooaukAcoa+6HyhQ/6MY3EgW+tR9a4diDsmo5vyASLwSlCVCHBdKGI+CQ/Ju9YfKgKYJfIOuhCdpZEOrcgN3rkmdU1az5zMw/xSu86aGrzXzXkth7Nq03n6CLlVM3o7HinRu3wMxnWiWXfuzePTUFWklhL89MKZqzmjgBfEo6l/kigjIis5I4lcfHb5e+kWGZl4cWhvEHul5ofjVoYYjL5uxPOP99O3bZmtoQ496ystqkenvyi/aq2oHC2wsZrhaFRilLkgwbsS2vSKK9mwTWwPYSIvxFsPWePdnjDqW/p5+KIAKlDu2YeFTGMCwc/RuSbjbmHz8eQ9FeRZhUtODxyg54/qpdQrPtVd5/RIzcz23uOJ2/e5f7Emn6OodLAmxd0cx3r/F8wEEZy9MHMAuiL5o2h9ojeEznZzUR2g470O7e2hXADGHG4Xr1jLEIj2Hoyf11QxOucbWvM8ZVW0AXzjBU70LP+m36aSJK/Q9XszKYR6mCvek=",
            "=?us-ascii?Q?1; BLUPR0701MB1716;\n\t23:VJ/ptt6fmp18k8M/GjhIxtjiYYtspEeZTWHY/66?=\n\to0bwOk6Wg/nUSm6JiIUcWiKoPEZ3vvQ1bLiDe9zIZdKUvx+4JF3DHawolzqrIIivdle2XxE057BWXDS1tD9fJ/9bz40XWuzswFdN2nrfa3L6kUwvk+s+BFTYij/R2jmTtV55AJExMDFKJ0JUL7RedrsnmHE84u3xAOkUbLXOEyR1b2GXoiGMoHRaqmwixla6HknHLr7+1gFgYs9K4h3aa1LlTYiMHoeCkSi06iO/KDUEMR9AI0kUwpLbV8KXNmOSERQLbwVdgWdrByPM2H/WwHiIrj6L5h9if3w5/12014R9mTTaCeN9haZlUjQ8PomJr1J1ntKyUxTD8A3/5kiD0aWMuXQABt8DoFL3rNR5JcGgwalwgUYSrm6nIJHwhO1kJd0W5umUAgvtJnj3DVFxoElsh2PCK0FdCHCBN6E4ini4MPZvKk2aOlGpiTzoNTcG0xsqSeYTFXUChImpStkjtIZxVjvDpsVUw2PlCeddLRG3/jg/utqLheWIXlRHDNaHOibHjH5SnX+p3q8TWnUomjenNmPhMrB5PoNcjOmY/3chk6ZpOirRM7A7w/Kl5tPLV6dBioGtRYBRqr7lT5Fi6fpWNc1jJxjOumE+TwbDGQ6b5DQGFIgtCD4rwVhBG+hVk8v0j0b8qC6FgTcsGVl05VYQD2WZoTAqrGRbOHSVFH2OxOOchRnwO+grjm7h+icvRlmmVDVpcvE/E2ZVQBlJmKq+1qv8qAwo3FR/ckTw0S/di5g7vrZ1iroWIGVTN1/XHimsMU8VMCGZhRotRLg4pWFu97tnDa4645HmoX09upsRtPpEsFqQlh8IiWKLsUpA/UBae5O/5GgbbJIvUIBO089Ky6/obvpJAKBMrAv8TOuUhL7FI7/UzhV60Y2Dfo3uQjdyg26dTS9qfCpEHcxGGq5e8BTfOp7vr7eLZ1b4fafWmnTRAwbQ8iz+xYAbc+ixQXSwC2qpTep4SobS5LhoNsZxnKGQ3kBeOWWvMO1xZpQJo+M1BCrTdVfKprYMDoVcyYCSnjIU+ozYwGSBb9+jWm5dwAzfgWDhvxJl3YpIgyN8L5uJ6dz5BcUbu4mfWHUF42RXGhoJvdTsvWWUtdLCVfsotzp/28FJhoZlaqgl/NFKRkg==",
            "=?us-ascii?Q?1; BLUPR0701MB1716;\n\t6:SrxFQQmlmalIWnDAx981u4N6pdfsCww8hplk+OGE?=\n\tMmwbl7lEQ+abRvMv73fuYjLc6MZnFSw1Y6AmgLr/u/hTCK8ZpGEq5B11C1SAgE13AX9rj3gcGWRORLqMkz4mbJpXYvXorxToeM4egnLgNPzrBFQpIZZmozSIEbCd0M0u0qPgX0wRP0Mnag9kfFvf/g9DUGUCtUbHYwleKvPkv+abfuust0R6UrtGDpJjk1DmnvVfxFrk2xmnO4eglpzAKtT03hFFjpXkIwzyKWF6/4lrXrVBxDS1SFDGv5N9gYSfe1qLyL6O/b9M1NhRI1rwnveqQD8W3aRn9c7eg92j8HvXk5Ei/viKpIej0Zd7ebcOgI1IcPz8GLpd4qTEn5Nwn/h1LZG/NZ9l0TKLD8hy1F9ePTdu48GNCIepcIJ2Rr19/t/s/W6jYkTWGn9pTcqJM3n0oxlUOkhMeSvwxFcKL8o7dEQrG0jOed8hfqBZdbrvTzb/aNHRWD/Caz09g/DKHsKyLIk5MFsYW2nSohSCW+PdNeorDbxCbPwuf6aI3E+9LrnW8xYUD5NqFj+3XQdR4l/8zJnn+SnrCu9wdVWXgs0hciJ3jRXN8sjD+3PUocxlbHIYhiF2ecEtfhHHV06BWGHoa1+VTmQ/HMJ0Q+tGJb8fPZgpeQAQ6LK6KaKFlktkWarcn9pVWb8Q6qs/4PGRmOLOUAbFpstFB+CU2ByLX9cXegpN7ouS7ep+5SioTFNIpl/D185HIShcqIaSHN1DAu6S82NIPqvtoSwJ7mL3BPTPaVMUq9LLM3VfZ6suerSOaeKcuzSc4oq5uUkjaWFvaRUrzK0ZwZddltD1Vr0IUDleanU3uTAbaxHqqEjGJpwAiYXTfwLT28h3m9CCf/Rabf542ORDnxVYQBSQoDsSfOBMTNTHVX7z13M6f/LGR7XhAKzIpK7CtFneQZBMXIQqRaADNAhmaqzJo9FmlH1uoyw6fdap7DCkZaXKoPfNL67Jpks=",
            "1; BLUPR0701MB1716;\n\t5:5PVEwrxwxG9TtS+bnHAr4W3cr43GAy6GHc/2uFglTLXIVtFHchZkLH7cdHy2aXxRoaSAxDbM3E2VCR8cQtarS8YYK9EfHfQfwV9dVmbOLtpyjJKXu0XJoQ2SCWuVXDvJRzLd3P80jgMFcBNw96KyUvzUmL49KJcR93gpXhOzDxgU5XEF+LgFUpiOEewlQib5X9opk0SD69Sk1CmHlnXP0Z3Yu2bthbdfzh5DlI6XMpHKlduwVWezOLC7wCdSoB2EFXtWwTFo+AEhs5s82MdHnRtBaR2RwSSfLAvlX7BxPlmUxOlgzP5msn3ZI/SFO1JCjVpYHlzmL030sLe4zCh0hbitnkBlUpEfqxZ4k5OG7BAiBqybpHIDbVFd0yxbqWybA70aAHP9/qsRm6mHGIOkwA34yZ9DVeMufF1MPfU0uZMODiK6iRZqI65Q46ig/LC43vyNKEWJrT4xySh9usA2PzzgDTavg7eKC9Ks27JOYi0ZPEXCe1NZs+ueKCV++vsc;\n\t24:TTI/pPiCybDB+eAMaaFHi8SYJexdxqMQN+mX+umTP1M0E2dbXxenJNewVciAoeAgwp+HeRpbJUcJB2jBxDMZxbJxN/D74oZ94/7jXYUbPBk=",
            "1; BLUPR0701MB1716;\n\t7:wLKiHt7fp6SZdZLWAiTjYaXgyDOiddY2afyUjZM+KGGh78spGek5g9x4/BraGfM/lr+vx7e3PgsdDBvy15/vQ49Z4rhlMuEFyCwsxTF6eL0Oin1Wr+xOgg5j3smelJz/GjGdfR+Sax5x/CAv35dcc5/albkd3cTEpArXwre7E5vdpyeq4RqkMhuCJFqvLHgqijyG7OdIXUHgH4OwnH6s4r5Gu6PNHbpPJbranmowoI77ECEjho9uUKOXUSMC6Xm0IIcCmvs7egD2Bx798mxRJFO8TB2bDkWB+PCRPatt1bCwafoqtTV7NXBHznEHFlUwo0bT55a4JF1utfyRrJVsSQdMGyEin+i2VuXf2jXMun5lNiRMtnSt9xG49as/mwnyVnxYBfVWRUrjH9ZbSEvrYu2JoCU1CavXs4O4xTxjSELpEA/xWM7Km4Gzy33JyA07+KiiChmp/d9uVkSSlFFJx5WUv4qh2RdCIV/k0w/lG0NNFzE+JNqXAdVWZk7G9xqs/Kd/wgNRtpa5pjY5BQRvYWxuH/dOo8S6fP7g/9Qfx9TVhKePiIyRBuBDODqtyr3HCNh6kz1r29qlRusncFJLbVidI3ied/QbGr6ZTML1skcRAPr/BGXLP/JeVM/bdNijFe/RacjHO1mZcgfgXYyNgLb1lbTL/rSMB9nRRYmDqCvmuf82z0NrP6qYMw52Ijq91dpAKPCG7lpctHGV+tx/wwrvgViMZCE+338Q6Ctl+43yGubWLgyUr+dlKl0Ts5zpsj2xZoDugX9EjMcuYZC0041kNFtbShjwVerId0ruE6Y="
        ],
        "X-MS-TrafficTypeDiagnostic": "BLUPR0701MB1716:",
        "X-Microsoft-Antispam-PRVS": "<BLUPR0701MB1716DBFFD686872E7A17494AE3D60@BLUPR0701MB1716.namprd07.prod.outlook.com>",
        "X-Exchange-Antispam-Report-Test": "UriScan:(236129657087228)(148574349560750)(228905959029699); ",
        "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(93006095)(3002001)(10201501046)(100000703101)(100105400095)(6041248)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(20161123560025)(20161123555025)(20161123564025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095);\n\tSRVR:BLUPR0701MB1716; BCL:0; PCL:0;\n\tRULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);\n\tSRVR:BLUPR0701MB1716; ",
        "X-Forefront-PRVS": "035748864E",
        "X-Forefront-Antispam-Report": "SFV:NSPM;\n\tSFS:(10009020)(4630300001)(6009001)(39850400002)(39840400002)(39400400002)(39410400002)(39450400003)(7736002)(478600001)(53416004)(72206003)(38730400002)(110136004)(107886003)(42186005)(8656002)(50986999)(76176999)(36756003)(6512007)(53936002)(4326008)(25786009)(5003940100001)(6916009)(42882006)(2950100002)(66066001)(5009440100003)(6666003)(2351001)(2361001)(6486002)(6116002)(189998001)(305945005)(33646002)(5660300001)(81166006)(8676002)(3846002)(47776003)(1076002)(2906002)(50466002)(48376002);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:BLUPR0701MB1716; H:jerin.domain.name;\n\tFPR:; SPF:None; MLV:sfv; LANG:en; ",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-OriginatorOrg": "caviumnetworks.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "03 Jul 2017 19:16:07.8265\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "BLUPR0701MB1716",
        "Subject": "[dpdk-dev] [PATCH v2 23/34] app/testeventdev: perf: launch lcores",
        "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": "The event producer and master lcore's test termination and\nthe logic to print the mpps and latency are common for the\nqueue and all types queue test.\n\nMove them as the common function.\n\nSigned-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>\nAcked-by: Harry van Haaren <harry.van.haaren@intel.com>\n---\n app/test-eventdev/test_perf_common.c | 199 +++++++++++++++++++++++++++++++++++\n app/test-eventdev/test_perf_common.h |   2 +\n 2 files changed, 201 insertions(+)",
    "diff": "diff --git a/app/test-eventdev/test_perf_common.c b/app/test-eventdev/test_perf_common.c\nindex 46dd05704..91bb48dae 100644\n--- a/app/test-eventdev/test_perf_common.c\n+++ b/app/test-eventdev/test_perf_common.c\n@@ -41,6 +41,203 @@ perf_test_result(struct evt_test *test, struct evt_options *opt)\n \treturn t->result;\n }\n \n+static inline int\n+perf_producer(void *arg)\n+{\n+\tstruct prod_data *p  = arg;\n+\tstruct test_perf *t = p->t;\n+\tstruct evt_options *opt = t->opt;\n+\tconst uint8_t dev_id = p->dev_id;\n+\tconst uint8_t port = p->port_id;\n+\tstruct rte_mempool *pool = t->pool;\n+\tconst uint64_t nb_pkts = t->nb_pkts;\n+\tconst uint32_t nb_flows = t->nb_flows;\n+\tuint32_t flow_counter = 0;\n+\tuint64_t count = 0;\n+\tstruct perf_elt *m;\n+\tstruct rte_event ev;\n+\n+\tif (opt->verbose_level > 1)\n+\t\tprintf(\"%s(): lcore %d dev_id %d port=%d queue %d\\n\", __func__,\n+\t\t\t\trte_lcore_id(), dev_id, port, p->queue_id);\n+\n+\tev.event = 0;\n+\tev.op = RTE_EVENT_OP_NEW;\n+\tev.queue_id = p->queue_id;\n+\tev.sched_type = t->opt->sched_type_list[0];\n+\tev.priority = RTE_EVENT_DEV_PRIORITY_NORMAL;\n+\tev.event_type =  RTE_EVENT_TYPE_CPU;\n+\tev.sub_event_type = 0; /* stage 0 */\n+\n+\twhile (count < nb_pkts && t->done == false) {\n+\t\tif (rte_mempool_get(pool, (void **)&m) < 0)\n+\t\t\tcontinue;\n+\n+\t\tev.flow_id = flow_counter++ % nb_flows;\n+\t\tev.event_ptr = m;\n+\t\tm->timestamp = rte_get_timer_cycles();\n+\t\twhile (rte_event_enqueue_burst(dev_id, port, &ev, 1) != 1) {\n+\t\t\tif (t->done)\n+\t\t\t\tbreak;\n+\t\t\trte_pause();\n+\t\t\tm->timestamp = rte_get_timer_cycles();\n+\t\t}\n+\t\tcount++;\n+\t}\n+\n+\treturn 0;\n+}\n+\n+static inline int\n+scheduler(void *arg)\n+{\n+\tstruct test_perf *t = arg;\n+\tconst uint8_t dev_id = t->opt->dev_id;\n+\n+\twhile (t->done == false)\n+\t\trte_event_schedule(dev_id);\n+\n+\treturn 0;\n+}\n+\n+static inline uint64_t\n+processed_pkts(struct test_perf *t)\n+{\n+\tuint8_t i;\n+\tuint64_t total = 0;\n+\n+\trte_smp_rmb();\n+\tfor (i = 0; i < t->nb_workers; i++)\n+\t\ttotal += t->worker[i].processed_pkts;\n+\n+\treturn total;\n+}\n+\n+static inline uint64_t\n+total_latency(struct test_perf *t)\n+{\n+\tuint8_t i;\n+\tuint64_t total = 0;\n+\n+\trte_smp_rmb();\n+\tfor (i = 0; i < t->nb_workers; i++)\n+\t\ttotal += t->worker[i].latency;\n+\n+\treturn total;\n+}\n+\n+\n+int\n+perf_launch_lcores(struct evt_test *test, struct evt_options *opt,\n+\t\tint (*worker)(void *))\n+{\n+\tint ret, lcore_id;\n+\tstruct test_perf *t = evt_test_priv(test);\n+\n+\tint port_idx = 0;\n+\t/* launch workers */\n+\tRTE_LCORE_FOREACH_SLAVE(lcore_id) {\n+\t\tif (!(opt->wlcores[lcore_id]))\n+\t\t\tcontinue;\n+\n+\t\tret = rte_eal_remote_launch(worker,\n+\t\t\t\t &t->worker[port_idx], lcore_id);\n+\t\tif (ret) {\n+\t\t\tevt_err(\"failed to launch worker %d\", lcore_id);\n+\t\t\treturn ret;\n+\t\t}\n+\t\tport_idx++;\n+\t}\n+\n+\t/* launch producers */\n+\tRTE_LCORE_FOREACH_SLAVE(lcore_id) {\n+\t\tif (!(opt->plcores[lcore_id]))\n+\t\t\tcontinue;\n+\n+\t\tret = rte_eal_remote_launch(perf_producer, &t->prod[port_idx],\n+\t\t\t\t\t lcore_id);\n+\t\tif (ret) {\n+\t\t\tevt_err(\"failed to launch perf_producer %d\", lcore_id);\n+\t\t\treturn ret;\n+\t\t}\n+\t\tport_idx++;\n+\t}\n+\n+\t/* launch scheduler */\n+\tif (!evt_has_distributed_sched(opt->dev_id)) {\n+\t\tret = rte_eal_remote_launch(scheduler, t, opt->slcore);\n+\t\tif (ret) {\n+\t\t\tevt_err(\"failed to launch sched %d\", opt->slcore);\n+\t\t\treturn ret;\n+\t\t}\n+\t}\n+\n+\tconst uint64_t total_pkts = opt->nb_pkts *\n+\t\t\tevt_nr_active_lcores(opt->plcores);\n+\n+\tuint64_t dead_lock_cycles = rte_get_timer_cycles();\n+\tint64_t dead_lock_remaining  =  total_pkts;\n+\tconst uint64_t dead_lock_sample = rte_get_timer_hz() * 5;\n+\n+\tuint64_t perf_cycles = rte_get_timer_cycles();\n+\tint64_t perf_remaining  = total_pkts;\n+\tconst uint64_t perf_sample = rte_get_timer_hz();\n+\n+\tstatic float total_mpps;\n+\tstatic uint64_t samples;\n+\n+\tconst uint64_t freq_mhz = rte_get_timer_hz() / 1000000;\n+\tint64_t remaining = t->outstand_pkts - processed_pkts(t);\n+\n+\twhile (t->done == false) {\n+\t\tconst uint64_t new_cycles = rte_get_timer_cycles();\n+\n+\t\tif ((new_cycles - perf_cycles) > perf_sample) {\n+\t\t\tconst uint64_t latency = total_latency(t);\n+\t\t\tconst uint64_t pkts = processed_pkts(t);\n+\n+\t\t\tremaining = t->outstand_pkts - pkts;\n+\t\t\tfloat mpps = (float)(perf_remaining - remaining)/1000000;\n+\n+\t\t\tperf_remaining = remaining;\n+\t\t\tperf_cycles = new_cycles;\n+\t\t\ttotal_mpps += mpps;\n+\t\t\t++samples;\n+\t\t\tif (opt->fwd_latency) {\n+\t\t\t\tprintf(CLGRN\"\\r%.3f mpps avg %.3f mpps [avg fwd latency %.3f us] \"CLNRM,\n+\t\t\t\t\tmpps, total_mpps/samples,\n+\t\t\t\t\t(float)(latency/pkts)/freq_mhz);\n+\t\t\t} else {\n+\t\t\t\tprintf(CLGRN\"\\r%.3f mpps avg %.3f mpps\"CLNRM,\n+\t\t\t\t\tmpps, total_mpps/samples);\n+\t\t\t}\n+\t\t\tfflush(stdout);\n+\n+\t\t\tif (remaining <= 0) {\n+\t\t\t\tt->done = true;\n+\t\t\t\tt->result = EVT_TEST_SUCCESS;\n+\t\t\t\trte_smp_wmb();\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t}\n+\n+\t\tif (new_cycles - dead_lock_cycles > dead_lock_sample) {\n+\t\t\tremaining = t->outstand_pkts - processed_pkts(t);\n+\t\t\tif (dead_lock_remaining == remaining) {\n+\t\t\t\trte_event_dev_dump(opt->dev_id, stdout);\n+\t\t\t\tevt_err(\"No schedules for seconds, deadlock\");\n+\t\t\t\tt->done = true;\n+\t\t\t\trte_smp_wmb();\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t\tdead_lock_remaining = remaining;\n+\t\t\tdead_lock_cycles = new_cycles;\n+\t\t}\n+\t}\n+\tprintf(\"\\n\");\n+\treturn 0;\n+}\n+\n int\n perf_event_dev_port_setup(struct evt_test *test, struct evt_options *opt,\n \t\t\t\tuint8_t stride, uint8_t nb_queues)\n@@ -195,6 +392,8 @@ perf_opt_check(struct evt_options *opt, uint64_t nb_queues)\n \t\tevt_info(\"enabled queue priority for latency measurement\");\n \t\topt->q_priority = 1;\n \t}\n+\tif (opt->nb_pkts == 0)\n+\t\topt->nb_pkts = INT64_MAX/evt_nr_active_lcores(opt->plcores);\n \n \treturn 0;\n }\ndiff --git a/app/test-eventdev/test_perf_common.h b/app/test-eventdev/test_perf_common.h\nindex 06e887b98..f8246953a 100644\n--- a/app/test-eventdev/test_perf_common.h\n+++ b/app/test-eventdev/test_perf_common.h\n@@ -99,6 +99,8 @@ int perf_test_setup(struct evt_test *test, struct evt_options *opt);\n int perf_mempool_setup(struct evt_test *test, struct evt_options *opt);\n int perf_event_dev_port_setup(struct evt_test *test, struct evt_options *opt,\n \t\t\t\tuint8_t stride, uint8_t nb_queues);\n+int perf_launch_lcores(struct evt_test *test, struct evt_options *opt,\n+\t\tint (*worker)(void *));\n void perf_opt_dump(struct evt_options *opt, uint8_t nb_queues);\n void perf_test_destroy(struct evt_test *test, struct evt_options *opt);\n void perf_eventdev_destroy(struct evt_test *test, struct evt_options *opt);\n",
    "prefixes": [
        "dpdk-dev",
        "v2",
        "23/34"
    ]
}