get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 86316,
    "url": "http://patchwork.dpdk.org/api/patches/86316/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/c5fe376170d48bfa3a85fede4369a67de023333d.1610377084.git.anatoly.burakov@intel.com/",
    "project": {
        "id": 1,
        "url": "http://patchwork.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": "<c5fe376170d48bfa3a85fede4369a67de023333d.1610377084.git.anatoly.burakov@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/c5fe376170d48bfa3a85fede4369a67de023333d.1610377084.git.anatoly.burakov@intel.com",
    "date": "2021-01-11T14:58:47",
    "name": "[v15,02/11] eal: avoid invalid API usage in power intrinsics",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "10c6df89cdc88ba6e793a0ac3fa67554f370f2c0",
    "submitter": {
        "id": 4,
        "url": "http://patchwork.dpdk.org/api/people/4/?format=api",
        "name": "Anatoly Burakov",
        "email": "anatoly.burakov@intel.com"
    },
    "delegate": {
        "id": 1,
        "url": "http://patchwork.dpdk.org/api/users/1/?format=api",
        "username": "tmonjalo",
        "first_name": "Thomas",
        "last_name": "Monjalon",
        "email": "thomas@monjalon.net"
    },
    "mbox": "http://patchwork.dpdk.org/project/dpdk/patch/c5fe376170d48bfa3a85fede4369a67de023333d.1610377084.git.anatoly.burakov@intel.com/mbox/",
    "series": [
        {
            "id": 14637,
            "url": "http://patchwork.dpdk.org/api/series/14637/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=14637",
            "date": "2021-01-11T14:58:45",
            "name": "Add PMD power management",
            "version": 15,
            "mbox": "http://patchwork.dpdk.org/series/14637/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/86316/comments/",
    "check": "success",
    "checks": "http://patchwork.dpdk.org/api/patches/86316/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 2B5AEA09FF;\n\tMon, 11 Jan 2021 15:59:18 +0100 (CET)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 4137F140EA1;\n\tMon, 11 Jan 2021 15:59:06 +0100 (CET)",
            "from mga17.intel.com (mga17.intel.com [192.55.52.151])\n by mails.dpdk.org (Postfix) with ESMTP id BFFDB140E92\n for <dev@dpdk.org>; Mon, 11 Jan 2021 15:59:03 +0100 (CET)",
            "from orsmga001.jf.intel.com ([10.7.209.18])\n by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 11 Jan 2021 06:59:03 -0800",
            "from silpixa00399498.ir.intel.com (HELO\n silpixa00399498.ger.corp.intel.com) ([10.237.222.179])\n by orsmga001.jf.intel.com with ESMTP; 11 Jan 2021 06:59:01 -0800"
        ],
        "IronPort-SDR": [
            "\n etv5PWl9oPYuvhLYz+/i0WZb4/LY2UPZAL+My9XEGhstUPIx3SxyO0Z7pJiCnxOE5eQISliq/s\n JUJHkf7E0q/Q==",
            "\n P2FS/RA47mrdoPI537Qb1dbyh1cSuVpWzDhSAr/sSxm9HPQSTzRujxqTNfls7IYVa44uW2VgC+\n 636qbKqT2Jng=="
        ],
        "X-IronPort-AV": [
            "E=McAfee;i=\"6000,8403,9860\"; a=\"157652991\"",
            "E=Sophos;i=\"5.79,338,1602572400\"; d=\"scan'208\";a=\"157652991\"",
            "E=Sophos;i=\"5.79,338,1602572400\"; d=\"scan'208\";a=\"423816537\""
        ],
        "X-ExtLoop1": "1",
        "From": "Anatoly Burakov <anatoly.burakov@intel.com>",
        "To": "dev@dpdk.org",
        "Cc": "Bruce Richardson <bruce.richardson@intel.com>,\n Konstantin Ananyev <konstantin.ananyev@intel.com>, thomas@monjalon.net,\n timothy.mcdaniel@intel.com, david.hunt@intel.com, chris.macnamara@intel.com",
        "Date": "Mon, 11 Jan 2021 14:58:47 +0000",
        "Message-Id": "\n <c5fe376170d48bfa3a85fede4369a67de023333d.1610377084.git.anatoly.burakov@intel.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "In-Reply-To": "<cover.1610377084.git.anatoly.burakov@intel.com>",
        "References": "<cover.1610375528.git.anatoly.burakov@intel.com>\n <cover.1610377084.git.anatoly.burakov@intel.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dpdk-dev] [PATCH v15 02/11] eal: avoid invalid API usage in power\n intrinsics",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "Currently, the API documentation mandates that if the user wants to use\nthe power management intrinsics, they need to call the\n`rte_cpu_get_intrinsics_support` API and check support for specific\nintrinsics.\n\nHowever, if the user does not do that, it is possible to get illegal\ninstruction error because we're using raw instruction opcodes, which may\nor may not be supported at runtime.\n\nNow that we have everything in a C file, we can check for support at\nstartup and prevent the user from possibly encountering illegal\ninstruction errors.\n\nSigned-off-by: Anatoly Burakov <anatoly.burakov@intel.com>\n---\n\nNotes:\n    v15:\n    - Remove accidental whitespace changes\n    \n    v14:\n    - Replace uint8_t with bool\n    \n    v14:\n    - Replace uint8_t with bool\n\n .../include/generic/rte_power_intrinsics.h    |  3 ---\n lib/librte_eal/x86/rte_power_intrinsics.c     | 25 +++++++++++++++++++\n 2 files changed, 25 insertions(+), 3 deletions(-)",
    "diff": "diff --git a/lib/librte_eal/include/generic/rte_power_intrinsics.h b/lib/librte_eal/include/generic/rte_power_intrinsics.h\nindex 67977bd511..ffa72f7578 100644\n--- a/lib/librte_eal/include/generic/rte_power_intrinsics.h\n+++ b/lib/librte_eal/include/generic/rte_power_intrinsics.h\n@@ -34,7 +34,6 @@\n  *\n  * @warning It is responsibility of the user to check if this function is\n  *   supported at runtime using `rte_cpu_get_intrinsics_support()` API call.\n- *   Failing to do so may result in an illegal CPU instruction error.\n  *\n  * @param p\n  *   Address to monitor for changes.\n@@ -75,7 +74,6 @@ void rte_power_monitor(const volatile void *p,\n  *\n  * @warning It is responsibility of the user to check if this function is\n  *   supported at runtime using `rte_cpu_get_intrinsics_support()` API call.\n- *   Failing to do so may result in an illegal CPU instruction error.\n  *\n  * @param p\n  *   Address to monitor for changes.\n@@ -111,7 +109,6 @@ void rte_power_monitor_sync(const volatile void *p,\n  *\n  * @warning It is responsibility of the user to check if this function is\n  *   supported at runtime using `rte_cpu_get_intrinsics_support()` API call.\n- *   Failing to do so may result in an illegal CPU instruction error.\n  *\n  * @param tsc_timestamp\n  *   Maximum TSC timestamp to wait for. Note that the wait behavior is\ndiff --git a/lib/librte_eal/x86/rte_power_intrinsics.c b/lib/librte_eal/x86/rte_power_intrinsics.c\nindex 34c5fd9c3e..a164ad55fc 100644\n--- a/lib/librte_eal/x86/rte_power_intrinsics.c\n+++ b/lib/librte_eal/x86/rte_power_intrinsics.c\n@@ -4,6 +4,8 @@\n \n #include \"rte_power_intrinsics.h\"\n \n+static bool wait_supported;\n+\n static inline uint64_t\n __get_umwait_val(const volatile void *p, const uint8_t sz)\n {\n@@ -35,6 +37,11 @@ rte_power_monitor(const volatile void *p, const uint64_t expected_value,\n {\n \tconst uint32_t tsc_l = (uint32_t)tsc_timestamp;\n \tconst uint32_t tsc_h = (uint32_t)(tsc_timestamp >> 32);\n+\n+\t/* prevent user from running this instruction if it's not supported */\n+\tif (!wait_supported)\n+\t\treturn;\n+\n \t/*\n \t * we're using raw byte codes for now as only the newest compiler\n \t * versions support this instruction natively.\n@@ -72,6 +79,11 @@ rte_power_monitor_sync(const volatile void *p, const uint64_t expected_value,\n {\n \tconst uint32_t tsc_l = (uint32_t)tsc_timestamp;\n \tconst uint32_t tsc_h = (uint32_t)(tsc_timestamp >> 32);\n+\n+\t/* prevent user from running this instruction if it's not supported */\n+\tif (!wait_supported)\n+\t\treturn;\n+\n \t/*\n \t * we're using raw byte codes for now as only the newest compiler\n \t * versions support this instruction natively.\n@@ -112,9 +124,22 @@ rte_power_pause(const uint64_t tsc_timestamp)\n \tconst uint32_t tsc_l = (uint32_t)tsc_timestamp;\n \tconst uint32_t tsc_h = (uint32_t)(tsc_timestamp >> 32);\n \n+\t/* prevent user from running this instruction if it's not supported */\n+\tif (!wait_supported)\n+\t\treturn;\n+\n \t/* execute TPAUSE */\n \tasm volatile(\".byte 0x66, 0x0f, 0xae, 0xf7;\"\n \t\t\t: /* ignore rflags */\n \t\t\t: \"D\"(0), /* enter C0.2 */\n \t\t\t\"a\"(tsc_l), \"d\"(tsc_h));\n }\n+\n+RTE_INIT(rte_power_intrinsics_init) {\n+\tstruct rte_cpu_intrinsics i;\n+\n+\trte_cpu_get_intrinsics_support(&i);\n+\n+\tif (i.power_monitor && i.power_pause)\n+\t\twait_supported = 1;\n+}\n",
    "prefixes": [
        "v15",
        "02/11"
    ]
}