get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 44173,
    "url": "http://patches.dpdk.org/api/patches/44173/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20180903144615eucas1p1d7377fa285a86f522f29c2a9528a638e~Q6xtl-i3s2361123611eucas1p1Q@eucas1p1.samsung.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": "<20180903144615eucas1p1d7377fa285a86f522f29c2a9528a638e~Q6xtl-i3s2361123611eucas1p1Q@eucas1p1.samsung.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20180903144615eucas1p1d7377fa285a86f522f29c2a9528a638e~Q6xtl-i3s2361123611eucas1p1Q@eucas1p1.samsung.com",
    "date": "2018-09-03T14:47:42",
    "name": "[v1,1/2] eal: add nanosleep based delay function",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "b63324737b331af13b77b8ee75b31b1964e92ab3",
    "submitter": {
        "id": 323,
        "url": "http://patches.dpdk.org/api/people/323/?format=api",
        "name": "Ilya Maximets",
        "email": "i.maximets@samsung.com"
    },
    "delegate": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/users/1/?format=api",
        "username": "tmonjalo",
        "first_name": "Thomas",
        "last_name": "Monjalon",
        "email": "thomas@monjalon.net"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20180903144615eucas1p1d7377fa285a86f522f29c2a9528a638e~Q6xtl-i3s2361123611eucas1p1Q@eucas1p1.samsung.com/mbox/",
    "series": [
        {
            "id": 1163,
            "url": "http://patches.dpdk.org/api/series/1163/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=1163",
            "date": "2018-09-03T14:44:31",
            "name": "CPU non-blocking delay",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/1163/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/44173/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/44173/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 [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 356CC5F33;\n\tMon,  3 Sep 2018 16:46:20 +0200 (CEST)",
            "from mailout2.w1.samsung.com (mailout2.w1.samsung.com\n\t[210.118.77.12]) by dpdk.org (Postfix) with ESMTP id 8419A5F2E\n\tfor <dev@dpdk.org>; Mon,  3 Sep 2018 16:46:18 +0200 (CEST)",
            "from eucas1p2.samsung.com (unknown [182.198.249.207])\n\tby mailout2.w1.samsung.com (KnoxPortal) with ESMTP id\n\t20180903144617euoutp02455b9242b6a8600ed29c50af30e3e98c~Q6xvFSb4i0226802268euoutp02V\n\tfor <dev@dpdk.org>; Mon,  3 Sep 2018 14:46:17 +0000 (GMT)",
            "from eusmges1new.samsung.com (unknown [203.254.199.242]) by\n\teucas1p1.samsung.com (KnoxPortal) with ESMTP id\n\t20180903144616eucas1p1cb5501c3c1d3e189010d7bf73ac2072b~Q6xuc4LNg1414514145eucas1p17;\n\tMon,  3 Sep 2018 14:46:16 +0000 (GMT)",
            "from eucas1p2.samsung.com ( [182.198.249.207]) by\n\teusmges1new.samsung.com (EUCPMTA) with SMTP id 1D.D2.04441.8394D8B5;\n\tMon,  3 Sep 2018 15:46:16 +0100 (BST)",
            "from eusmtrp1.samsung.com (unknown [182.198.249.138]) by\n\teucas1p1.samsung.com (KnoxPortal) with ESMTPA id\n\t20180903144615eucas1p1d7377fa285a86f522f29c2a9528a638e~Q6xtl-i3s2361123611eucas1p1Q;\n\tMon,  3 Sep 2018 14:46:15 +0000 (GMT)",
            "from eusmgms2.samsung.com (unknown [182.198.249.180]) by\n\teusmtrp1.samsung.com (KnoxPortal) with ESMTP id\n\t20180903144615eusmtrp16a7d3562fd23c99163796d9088a49a09~Q6xtTnQUa1765817658eusmtrp1W;\n\tMon,  3 Sep 2018 14:46:15 +0000 (GMT)",
            "from eusmtip2.samsung.com ( [203.254.199.222]) by\n\teusmgms2.samsung.com (EUCPMTA) with SMTP id EF.C7.04128.7394D8B5;\n\tMon,  3 Sep 2018 15:46:15 +0100 (BST)",
            "from imaximets.rnd.samsung.ru (unknown [106.109.129.180]) by\n\teusmtip2.samsung.com (KnoxPortal) with ESMTPA id\n\t20180903144614eusmtip250cb6f54c77977fa1d04b72cdbcb3461~Q6xspiPTR0651306513eusmtip2E;\n\tMon,  3 Sep 2018 14:46:14 +0000 (GMT)"
        ],
        "DKIM-Filter": "OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com\n\t20180903144617euoutp02455b9242b6a8600ed29c50af30e3e98c~Q6xvFSb4i0226802268euoutp02V",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com;\n\ts=mail20170921; t=1535985977;\n\tbh=AHXkTKWAMEGt6H5X0LCekT+rZUu+9Rd/UFakd5yqq6E=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=b/l/C3/6ehXnhNWgQl9uIXlqWIIQj8PfDxsBIzDeNAYGjzS29zcWT34iQoP1Hsb+r\n\tMgHV0o/N/go4XxYdl0w05H+RpLfVUkYlEVEfPU3cEb2nfyYhDz3Vfa70cQ5B1z9icb\n\traM5f3G41HYwYBc3LocB5MeFt78080hFBRDz0iRE=",
        "X-AuditID": "cbfec7f2-5e3ff70000001159-42-5b8d4938a8da",
        "From": "Ilya Maximets <i.maximets@samsung.com>",
        "To": "dev@dpdk.org",
        "Cc": "Jingjing Wu <jingjing.wu@intel.com>, Konstantin Ananyev\n\t<konstantin.ananyev@intel.com>, Wenzhuo Lu <wenzhuo.lu@intel.com>, Beilei\n\tXing <beilei.xing@intel.com>, Qi Zhang <qi.z.zhang@intel.com>, Xiao Wang\n\t<xiao.w.wang@intel.com>, Bruce Richardson <bruce.richardson@intel.com>,\n\tIlya Maximets <i.maximets@samsung.com>",
        "Date": "Mon,  3 Sep 2018 17:47:42 +0300",
        "X-Mailer": "git-send-email 2.17.1",
        "In-Reply-To": "<20180903144311eucas1p2b6499c49dbd0d54334e973113cdc5ad6~Q6vBsFYRm1033710337eucas1p2D@eucas1p2.samsung.com>",
        "X-Brightmail-Tracker": [
            "H4sIAAAAAAAAA+NgFvrNIsWRmVeSWpSXmKPExsWy7djP87oWnr3RBjPOSlh0f2hhsrixyt7i\n\t3aftTBZX2n+yW8xc8JnR4v2fRSwW0zf0s1lsPfOX0WL/88PsDpwevxYsZfVYvOclk0ffllWM\n\tAcxRXDYpqTmZZalF+nYJXBmbny1hLbiiU/Fv/znGBsZWlS5GTg4JAROJZX13WEBsIYEVjBIT\n\t/3hD2F8YJV6/ju9i5AKyPzNK7HsxhQmmYfHvG2wQieWMEg/e/GKEcH4wSkzo+cYOUsUmoCNx\n\tavURRhBbREBA4nPnYrAOZoGjTBLXuqYzgySEBewl7qz/D1bEIqAqMWnqHFaIFfISqzccAKvh\n\tFCiXuH75ONgGCYH3bBLft78C28ArUCbxffEtNogGF4nr208zQtjCEq+Ob2GHsGUkTk/uYYGw\n\t6yXut7yEGtTBKDH90D+oh+wltrw+B9TAAXSepsT6XfoQYUeJ9iMgizmAbD6JG28FQcLMQOak\n\tbSD3g4R5JTrahCCqVSR+H1zODGFLSdx89xnqAg+Jiyd+MUMC6BSjxM/pO9knMMrPQli2gJFx\n\tFaN4amlxbnpqsWFearlecWJucWleul5yfu4mRmCSOP3v+KcdjF8vJR1iFOBgVOLhDTDojRZi\n\tTSwrrsw9xCjBwawkwtvoDhTiTUmsrEotyo8vKs1JLT7EKM3BoiTOy6eVFi0kkJ5YkpqdmlqQ\n\tWgSTZeLglGpgdM94r979q0GpPuF1jNQ795LmJ6+TLPU3Nzx4s/PL5OSIc9Y52kaqWap8LPVl\n\tLTx1mytWcR5ff+aa8N0tF62Y2idE3y2Lb3C8WRzlZ32y0MDhaMT/26c3z/FaMyUg5IBm0/qv\n\tl9vmLokzEVYR+G/DMaP8p/IPFVOGypOB78s21uScM7k72adWiaU4I9FQi7moOBEAkzlBeg4D\n\tAAA=",
            "H4sIAAAAAAAAA+NgFrrHLMWRmVeSWpSXmKPExsVy+t/xe7rmnr3RBq+fSlp0f2hhsrixyt7i\n\t3aftTBZX2n+yW8xc8JnR4v2fRSwW0zf0s1lsPfOX0WL/88PsDpwevxYsZfVYvOclk0ffllWM\n\tAcxRejZF+aUlqQoZ+cUltkrRhhZGeoaWFnpGJpZ6hsbmsVZGpkr6djYpqTmZZalF+nYJehmb\n\tny1hLbiiU/Fv/znGBsZWlS5GTg4JAROJxb9vsHUxcnEICSxllPj24yQ7REJK4sevC6wQtrDE\n\tn2tdUEXfGCUW/NjKCJJgE9CROLX6CJgtIiAg8blzMVgRs8BpJokDazcxgySEBewl7qz/D1bE\n\tIqAqMWnqHLCpvALWEudv9rBBbJCXWL3hAFg9p0C5xPXLx8HqhQTKJM7Nfss2gZFvASPDKkaR\n\t1NLi3PTcYiO94sTc4tK8dL3k/NxNjMCw3Xbs55YdjF3vgg8xCnAwKvHw/tDtjRZiTSwrrsw9\n\txCjBwawkwtvoDhTiTUmsrEotyo8vKs1JLT7EaAp01ERmKdHkfGBM5ZXEG5oamltYGpobmxub\n\tWSiJ8543qIwSEkhPLEnNTk0tSC2C6WPi4JRqYNxV7tL889SxHOHZZz8miCnkcr3Z/OVlrJ7J\n\tGaXr7DPvfz+UslQ6szJh0sqNb7M3Fn9/blt0wf6B/pz6WlaxG9eulwS9lI2ZVPN1q7AXH2/W\n\tguojy/5u8N252HdzS4Tz1Tf/4nls5b6L/ysM4c+z9DnxZrW+4nqvUxbNvXdSGJbweKvmGP5X\n\tTFNiKc5INNRiLipOBAB6VCGucQIAAA=="
        ],
        "Message-Id": "<20180903144615eucas1p1d7377fa285a86f522f29c2a9528a638e~Q6xtl-i3s2361123611eucas1p1Q@eucas1p1.samsung.com>",
        "X-CMS-MailID": "20180903144615eucas1p1d7377fa285a86f522f29c2a9528a638e",
        "X-Msg-Generator": "CA",
        "Content-Type": "text/plain; charset=\"utf-8\"",
        "X-RootMTR": "20180903144615eucas1p1d7377fa285a86f522f29c2a9528a638e",
        "X-EPHeader": "CA",
        "CMS-TYPE": "201P",
        "X-CMS-RootMailID": "20180903144615eucas1p1d7377fa285a86f522f29c2a9528a638e",
        "References": "<20180903144311eucas1p2b6499c49dbd0d54334e973113cdc5ad6~Q6vBsFYRm1033710337eucas1p2D@eucas1p2.samsung.com>\n\t<CGME20180903144615eucas1p1d7377fa285a86f522f29c2a9528a638e@eucas1p1.samsung.com>",
        "Subject": "[dpdk-dev] [PATCH v1 1/2] eal: add nanosleep based delay function",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n\t<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\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "Add a new rte_delay_us_sleep() function that uses nanosleep().\nThis function can be used by applications to not implement\ntheir own nanosleep() based callback and by internal DPDK\ncode if CPU non-blocking delay needed.\n\nSigned-off-by: Ilya Maximets <i.maximets@samsung.com>\n---\n lib/librte_eal/common/eal_common_timer.c      | 19 +++++++\n .../common/include/generic/rte_cycles.h       | 11 ++++\n lib/librte_eal/rte_eal_version.map            |  1 +\n test/test/autotest_data.py                    |  6 +++\n test/test/meson.build                         |  1 +\n test/test/test_cycles.c                       | 51 ++++++++++++++-----\n 6 files changed, 75 insertions(+), 14 deletions(-)",
    "diff": "diff --git a/lib/librte_eal/common/eal_common_timer.c b/lib/librte_eal/common/eal_common_timer.c\nindex 2e2b770fb..4a00525ca 100644\n--- a/lib/librte_eal/common/eal_common_timer.c\n+++ b/lib/librte_eal/common/eal_common_timer.c\n@@ -7,9 +7,11 @@\n #include <unistd.h>\n #include <inttypes.h>\n #include <sys/types.h>\n+#include <time.h>\n #include <errno.h>\n \n #include <rte_common.h>\n+#include <rte_compat.h>\n #include <rte_log.h>\n #include <rte_cycles.h>\n #include <rte_pause.h>\n@@ -31,6 +33,23 @@ rte_delay_us_block(unsigned int us)\n \t\trte_pause();\n }\n \n+void __rte_experimental\n+rte_delay_us_sleep(unsigned int us)\n+{\n+\tstruct timespec wait[2];\n+\tint ind = 0;\n+\n+\twait[0].tv_sec = 0;\n+\tif (us >= US_PER_S) {\n+\t\twait[0].tv_sec = us / US_PER_S;\n+\t\tus -= wait[0].tv_sec * US_PER_S;\n+\t}\n+\twait[0].tv_nsec = 1000 * us;\n+\n+\twhile (nanosleep(&wait[ind], &wait[1 - ind]) == EINTR)\n+\t\tind = 1 - ind;\n+}\n+\n uint64_t\n rte_get_tsc_hz(void)\n {\ndiff --git a/lib/librte_eal/common/include/generic/rte_cycles.h b/lib/librte_eal/common/include/generic/rte_cycles.h\nindex 0ff1af504..ac379e878 100644\n--- a/lib/librte_eal/common/include/generic/rte_cycles.h\n+++ b/lib/librte_eal/common/include/generic/rte_cycles.h\n@@ -13,6 +13,7 @@\n  */\n \n #include <stdint.h>\n+#include <rte_compat.h>\n #include <rte_debug.h>\n #include <rte_atomic.h>\n \n@@ -157,6 +158,16 @@ rte_delay_ms(unsigned ms)\n  */\n void rte_delay_us_block(unsigned int us);\n \n+/**\n+ * Delay function that uses system sleep.\n+ * Does not block the CPU core.\n+ *\n+ * @param us\n+ *   Number of microseconds to wait.\n+ */\n+void __rte_experimental\n+rte_delay_us_sleep(unsigned int us);\n+\n /**\n  * Replace rte_delay_us with user defined function.\n  *\ndiff --git a/lib/librte_eal/rte_eal_version.map b/lib/librte_eal/rte_eal_version.map\nindex 344a43d32..d68777ce0 100644\n--- a/lib/librte_eal/rte_eal_version.map\n+++ b/lib/librte_eal/rte_eal_version.map\n@@ -270,6 +270,7 @@ EXPERIMENTAL {\n \trte_class_register;\n \trte_class_unregister;\n \trte_ctrl_thread_create;\n+\trte_delay_us_sleep;\n \trte_dev_event_callback_register;\n \trte_dev_event_callback_unregister;\n \trte_dev_event_monitor_start;\ndiff --git a/test/test/autotest_data.py b/test/test/autotest_data.py\nindex f68d9b111..874d0cb53 100644\n--- a/test/test/autotest_data.py\n+++ b/test/test/autotest_data.py\n@@ -278,6 +278,12 @@\n         \"Func\":    default_autotest,\n         \"Report\":  None,\n     },\n+    {\n+        \"Name\":    \"Sleep delay\",\n+        \"Command\": \"delay_us_sleep_autotest\",\n+        \"Func\":    default_autotest,\n+        \"Report\":  None,\n+    },\n     {\n         \"Name\":    \"Rawdev autotest\",\n         \"Command\": \"rawdev_autotest\",\ndiff --git a/test/test/meson.build b/test/test/meson.build\nindex b1dd6eca2..0078aea30 100644\n--- a/test/test/meson.build\n+++ b/test/test/meson.build\n@@ -143,6 +143,7 @@ test_names = [\n \t'cryptodev_dpaa_sec_autotest',\n \t'cycles_autotest',\n \t'debug_autotest',\n+\t'delay_us_sleep_autotest',\n \t'devargs_autotest',\n \t'distributor_autotest',\n \t'distributor_perf_autotest',\ndiff --git a/test/test/test_cycles.c b/test/test/test_cycles.c\nindex 149f60b07..c78e6a5b1 100644\n--- a/test/test/test_cycles.c\n+++ b/test/test/test_cycles.c\n@@ -23,6 +23,30 @@\n  *   of cycles is correct with regard to the frequency of the timer.\n  */\n \n+static int\n+check_wait_one_second(void)\n+{\n+\tuint64_t cycles, prev_cycles;\n+\tuint64_t hz = rte_get_timer_hz();\n+\tuint64_t max_inc = (hz / 100); /* 10 ms max between 2 reads */\n+\n+\t/* check that waiting 1 second is precise */\n+\tprev_cycles = rte_get_timer_cycles();\n+\trte_delay_us(1000000);\n+\tcycles = rte_get_timer_cycles();\n+\n+\tif ((uint64_t)(cycles - prev_cycles) > (hz + max_inc)) {\n+\t\tprintf(\"delay_us is not accurate: too long\\n\");\n+\t\treturn -1;\n+\t}\n+\tif ((uint64_t)(cycles - prev_cycles) < (hz - max_inc)) {\n+\t\tprintf(\"delay_us is not accurate: too short\\n\");\n+\t\treturn -1;\n+\t}\n+\n+\treturn 0;\n+}\n+\n static int\n test_cycles(void)\n {\n@@ -43,24 +67,23 @@ test_cycles(void)\n \t\tprev_cycles = cycles;\n \t}\n \n-\t/* check that waiting 1 second is precise */\n-\tprev_cycles = rte_get_timer_cycles();\n-\trte_delay_us(1000000);\n-\tcycles = rte_get_timer_cycles();\n+\treturn check_wait_one_second();\n+}\n \n-\tif ((uint64_t)(cycles - prev_cycles) > (hz + max_inc)) {\n-\t\tprintf(\"delay_us is not accurate: too long\\n\");\n-\t\treturn -1;\n-\t}\n-\tif ((uint64_t)(cycles - prev_cycles) < (hz - max_inc)) {\n-\t\tprintf(\"delay_us is not accurate: too short\\n\");\n-\t\treturn -1;\n-\t}\n+REGISTER_TEST_COMMAND(cycles_autotest, test_cycles);\n \n-\treturn 0;\n+/*\n+ * One second precision test with rte_delay_us_sleep.\n+ */\n+\n+static int\n+test_delay_us_sleep(void)\n+{\n+\trte_delay_us_callback_register(rte_delay_us_sleep);\n+\treturn check_wait_one_second();\n }\n \n-REGISTER_TEST_COMMAND(cycles_autotest, test_cycles);\n+REGISTER_TEST_COMMAND(delay_us_sleep_autotest, test_delay_us_sleep);\n \n /*\n  * rte_delay_us_callback test\n",
    "prefixes": [
        "v1",
        "1/2"
    ]
}