get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 139613,
    "url": "http://patchwork.dpdk.org/api/patches/139613/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/20240422152336.147553-3-stephen@networkplumber.org/",
    "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": "<20240422152336.147553-3-stephen@networkplumber.org>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20240422152336.147553-3-stephen@networkplumber.org",
    "date": "2024-04-22T15:21:32",
    "name": "[v5,2/9] latencystats: handle fractional cycles per ns",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "69e7e87d0123380ab84ab24ca116217ce9b52a0b",
    "submitter": {
        "id": 27,
        "url": "http://patchwork.dpdk.org/api/people/27/?format=api",
        "name": "Stephen Hemminger",
        "email": "stephen@networkplumber.org"
    },
    "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/20240422152336.147553-3-stephen@networkplumber.org/mbox/",
    "series": [
        {
            "id": 31803,
            "url": "http://patchwork.dpdk.org/api/series/31803/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=31803",
            "date": "2024-04-22T15:21:30",
            "name": "latencystats: improve algorithms and tests",
            "version": 5,
            "mbox": "http://patchwork.dpdk.org/series/31803/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/139613/comments/",
    "check": "success",
    "checks": "http://patchwork.dpdk.org/api/patches/139613/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 664F943EDB;\n\tMon, 22 Apr 2024 17:23:59 +0200 (CEST)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 84273406B8;\n\tMon, 22 Apr 2024 17:23:52 +0200 (CEST)",
            "from mail-pf1-f179.google.com (mail-pf1-f179.google.com\n [209.85.210.179])\n by mails.dpdk.org (Postfix) with ESMTP id E0655406B7\n for <dev@dpdk.org>; Mon, 22 Apr 2024 17:23:48 +0200 (CEST)",
            "by mail-pf1-f179.google.com with SMTP id\n d2e1a72fcca58-6ed20fb620fso3771960b3a.2\n for <dev@dpdk.org>; Mon, 22 Apr 2024 08:23:48 -0700 (PDT)",
            "from hermes.local (204-195-96-226.wavecable.com. [204.195.96.226])\n by smtp.gmail.com with ESMTPSA id\n cb17-20020a056a02071100b0060063c4be3bsm1402783pgb.14.2024.04.22.08.23.47\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Mon, 22 Apr 2024 08:23:47 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=networkplumber-org.20230601.gappssmtp.com; s=20230601; t=1713799428;\n x=1714404228; darn=dpdk.org;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:from:to:cc:subject:date\n :message-id:reply-to;\n bh=ocyY0DhAG7lN0AWqTRQZr22OaiU0tcYLefQmVVvcZvc=;\n b=CD8udf6cPqQAUrskSbGzVcMt//Q3aGmSFqZWrB5SZnFTHsfvrLXx8Nah2sdJ881DQi\n 6CRr0ZLKaEE8pcffqjPM0O2A0BFulGOYkkFyixkbrNGzFsMpRf2z7rYFGOvl8odtS4er\n TR+WCPhFpcPfgWzyCz6CBnipK8R4FsARkQCt1r3jtUYgB4PZuRG4jbFwSN/a+HxfdfcZ\n vPobNpkcTFmcMkwxg9PK5PtMN+IUz8+ZjALTpq38ZnV+ZuC19WVsX1/XUHzEZczAicNN\n aIWsWm4x1vw+bXAIE+H6QLnGsB/uqfb/Ut2bD1W1945sVH+xuZZhvh+imFAcGPT0iVuH\n IAwg==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20230601; t=1713799428; x=1714404228;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc\n :subject:date:message-id:reply-to;\n bh=ocyY0DhAG7lN0AWqTRQZr22OaiU0tcYLefQmVVvcZvc=;\n b=Hf0V4I7yXHU3tNVkBY9ye4Fo1bODfvI9Ej9qmXSDrDlW2q4Z+lz4Q61Lmfp1QI08AJ\n AWYYX3Vo1RGk8fgJG5ggaaTJrh13zwAgJ+VxlxBO46isAqcye5KRZVG6VApwySGyrK4+\n bGqLmqsb/E3eU6SQJoOfJNtprjwC28uHar4guh58Hd2PulWXMPUbsl+AHK9HJDHdlgu/\n uA2cjmskS+o12XPqJulj3SYaOrkC6QyAHsH5iVsjS2Yw7DydOKFlv+oZx30deZn9YNvl\n /+BAu4ASuGp/RcS/xHk4Ey9V47cNZ1zQXbRzuGr50pxm+pLJxXxmO4b1XJjK88BWl1Hg\n ygZA==",
        "X-Gm-Message-State": "AOJu0YxBPKBCNS2dfs1L2NTmBF3wRagM3qgXWHsB1SSeNZY9tS3MKqhu\n ljAmtLDIfYya0rIV/n5ClPDN3VrS9f+cq0gBL/nwz8jcSbTAUygW2qnKAgQ/TiNWPkv8+NYBQt+\n q",
        "X-Google-Smtp-Source": "\n AGHT+IHf/IPgv7Fr7fG1/16WlMz7j3a6w8IGahgPyD7+3uV5lNlJRQ30BKNIt1/u7Az2yknaMK5Xbw==",
        "X-Received": "by 2002:a05:6a20:c70e:b0:1a9:c214:b7d with SMTP id\n hi14-20020a056a20c70e00b001a9c2140b7dmr10458338pzb.2.1713799428106;\n Mon, 22 Apr 2024 08:23:48 -0700 (PDT)",
        "From": "Stephen Hemminger <stephen@networkplumber.org>",
        "To": "dev@dpdk.org",
        "Cc": "Stephen Hemminger <stephen@networkplumber.org>,\n Reshma Pattan <reshma.pattan@intel.com>",
        "Subject": "[PATCH v5 2/9] latencystats: handle fractional cycles per ns",
        "Date": "Mon, 22 Apr 2024 08:21:32 -0700",
        "Message-ID": "<20240422152336.147553-3-stephen@networkplumber.org>",
        "X-Mailer": "git-send-email 2.43.0",
        "In-Reply-To": "<20240422152336.147553-1-stephen@networkplumber.org>",
        "References": "<20240408195036.182545-1-stephen@networkplumber.org>\n <20240422152336.147553-1-stephen@networkplumber.org>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "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"
    },
    "content": "The TSC frequency is not always an integral number of nanoseconds.\nFor examples, cycles per nanoseconds on my test system is 2.8.\nFix by using floating point where needed and calculate value once.\n\nSigned-off-by: Stephen Hemminger <stephen@networkplumber.org>\n---\n lib/latencystats/rte_latencystats.c | 17 ++++++-----------\n 1 file changed, 6 insertions(+), 11 deletions(-)",
    "diff": "diff --git a/lib/latencystats/rte_latencystats.c b/lib/latencystats/rte_latencystats.c\nindex 9b345bfb33..3152256066 100644\n--- a/lib/latencystats/rte_latencystats.c\n+++ b/lib/latencystats/rte_latencystats.c\n@@ -18,12 +18,7 @@\n /** Nano seconds per second */\n #define NS_PER_SEC 1E9\n \n-/** Clock cycles per nano second */\n-static uint64_t\n-latencystat_cycles_per_ns(void)\n-{\n-\treturn rte_get_timer_hz() / NS_PER_SEC;\n-}\n+static double cycles_per_ns;\n \n RTE_LOG_REGISTER_DEFAULT(latencystat_logtype, INFO);\n #define RTE_LOGTYPE_LATENCY_STATS latencystat_logtype\n@@ -89,8 +84,7 @@ rte_latencystats_update(void)\n \tfor (i = 0; i < NUM_LATENCY_STATS; i++) {\n \t\tstats_ptr = RTE_PTR_ADD(glob_stats,\n \t\t\t\tlat_stats_strings[i].offset);\n-\t\tvalues[i] = (uint64_t)floor((*stats_ptr)/\n-\t\t\t\tlatencystat_cycles_per_ns());\n+\t\tvalues[i] = floor(*stats_ptr / cycles_per_ns);\n \t}\n \n \tret = rte_metrics_update_values(RTE_METRICS_GLOBAL,\n@@ -112,8 +106,7 @@ rte_latencystats_fill_values(struct rte_metric_value *values)\n \t\tstats_ptr = RTE_PTR_ADD(glob_stats,\n \t\t\t\tlat_stats_strings[i].offset);\n \t\tvalues[i].key = i;\n-\t\tvalues[i].value = (uint64_t)floor((*stats_ptr)/\n-\t\t\t\t\t\tlatencystat_cycles_per_ns());\n+\t\tvalues[i].value = floor(*stats_ptr / cycles_per_ns);\n \t}\n }\n \n@@ -235,9 +228,11 @@ rte_latencystats_init(uint64_t app_samp_intvl,\n \t\treturn -ENOMEM;\n \t}\n \n+\tcycles_per_ns = (double)rte_get_tsc_hz() / NS_PER_SEC;\n+\n \tglob_stats = mz->addr;\n \trte_spinlock_init(&glob_stats->lock);\n-\tsamp_intvl = app_samp_intvl * latencystat_cycles_per_ns();\n+\tsamp_intvl = (uint64_t)(app_samp_intvl * cycles_per_ns);\n \n \t/** Register latency stats with stats library */\n \tfor (i = 0; i < NUM_LATENCY_STATS; i++)\n",
    "prefixes": [
        "v5",
        "2/9"
    ]
}