get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 62733,
    "url": "https://patches.dpdk.org/api/patches/62733/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20191108043818.27610-3-stephen@networkplumber.org/",
    "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": "<20191108043818.27610-3-stephen@networkplumber.org>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20191108043818.27610-3-stephen@networkplumber.org",
    "date": "2019-11-08T04:38:18",
    "name": "[2/2] pdump: use dynamic logtype",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "a24cd12f295da5f3d2b0b364751840e35cdbe2da",
    "submitter": {
        "id": 27,
        "url": "https://patches.dpdk.org/api/people/27/?format=api",
        "name": "Stephen Hemminger",
        "email": "stephen@networkplumber.org"
    },
    "delegate": {
        "id": 24651,
        "url": "https://patches.dpdk.org/api/users/24651/?format=api",
        "username": "dmarchand",
        "first_name": "David",
        "last_name": "Marchand",
        "email": "david.marchand@redhat.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20191108043818.27610-3-stephen@networkplumber.org/mbox/",
    "series": [
        {
            "id": 7344,
            "url": "https://patches.dpdk.org/api/series/7344/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=7344",
            "date": "2019-11-08T04:38:16",
            "name": "pdump: cleanups",
            "version": 1,
            "mbox": "https://patches.dpdk.org/series/7344/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/62733/comments/",
    "check": "fail",
    "checks": "https://patches.dpdk.org/api/patches/62733/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 dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id CE939A04AB;\n\tFri,  8 Nov 2019 05:38:45 +0100 (CET)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 2C55B1BF8E;\n\tFri,  8 Nov 2019 05:38:35 +0100 (CET)",
            "from mail-pl1-f195.google.com (mail-pl1-f195.google.com\n [209.85.214.195]) by dpdk.org (Postfix) with ESMTP id E775C1BF51\n for <dev@dpdk.org>; Fri,  8 Nov 2019 05:38:31 +0100 (CET)",
            "by mail-pl1-f195.google.com with SMTP id az9so2358576plb.11\n for <dev@dpdk.org>; Thu, 07 Nov 2019 20:38:31 -0800 (PST)",
            "from hermes.lan (204-195-22-127.wavecable.com. [204.195.22.127])\n by smtp.gmail.com with ESMTPSA id y24sm5291303pfr.116.2019.11.07.20.38.29\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Thu, 07 Nov 2019 20:38:29 -0800 (PST)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=networkplumber-org.20150623.gappssmtp.com; s=20150623;\n h=from:to:cc:subject:date:message-id:in-reply-to:references\n :mime-version:content-transfer-encoding;\n bh=djMDG35cjCuB045UhyXyogOlbaXDiaLovHY570h01OE=;\n b=1PyCVKeDdGsB+4kLZwqoNw/LBzUtwTSaGqrPAQF0zQVAhW1z9DI8orh+17LiSsGeWC\n wrBM+6O+XWipt2R9GpiDaNHEYdud3FhR0f6VTGgvHAoNN+TKNjvK8T52FBOvtl9r23g4\n GaktHNJyjvOy/B4zpwIuVN0ahmRQzZJt3mX4Tjb4frz2cw0Efji2r72KekYQ2ERYjXUh\n 4fYAmBLWil3uNGgNXWtaeknpOvea6WTDkPJSfy0vevjT0+RjiF7LeulzcXQ/hmXOARdJ\n 7p1FH27lkqTKyULPn2YHQnCG7iiwqgoyocWvqOOWi/0OyvmLMEYrsLpegfXuPyYFQ7KU\n AgfQ==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20161025;\n h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n :references:mime-version:content-transfer-encoding;\n bh=djMDG35cjCuB045UhyXyogOlbaXDiaLovHY570h01OE=;\n b=ReqgHD0+GJzT7/2H6kXCuAxGiKddcMR8hVeULOjR9NNLzwY5cDKZnzfiYwni9gv2t4\n LqI0Yli5XxCZ4GtoE6vLdlwvkbYp1dgHcPK+Z1jPmP4DeW4QP/ilhyYmttm5gFNqIt5c\n Dl3+btgs63DQ1dd366gsQ6z/SPtoSwkO93Lcj/MtIgFGKqeKCSOCJwHlSK91c2rpI8z1\n KFbPX4sQU7a1dHCnXt5qzLVQDfHyhUMUVr4HdkWz/opAQWAKCwdzlTUSM3Ua/2u1aVtS\n 4Ysa3xcb4tW6VDBYDbL1c8frvaFyOdmRHzPjrOA/HuLnYfKychmq2aOUBZzIQ3awom6r\n 8fPg==",
        "X-Gm-Message-State": "APjAAAUeqhxcr2KvIzdXGFRx/itY/mvRAWYrtqOlL6N3czPfuo2wvJGh\n ZWWIC3KfIJdAb/gvKNrqOdFoDAMxgkcy9A==",
        "X-Google-Smtp-Source": "\n APXvYqyo3WTdTpxgO8nUTjp0335DjcEoWyLq7tR+EFFKdoT+LT4p3Mu6hN/17kOVF2jCdrX4Rs8SbQ==",
        "X-Received": "by 2002:a17:902:6bc1:: with SMTP id\n m1mr8227976plt.67.1573187910425;\n Thu, 07 Nov 2019 20:38:30 -0800 (PST)",
        "From": "Stephen Hemminger <stephen@networkplumber.org>",
        "To": "dev@dpdk.org",
        "Cc": "Stephen Hemminger <stephen@networkplumber.org>",
        "Date": "Thu,  7 Nov 2019 20:38:18 -0800",
        "Message-Id": "<20191108043818.27610-3-stephen@networkplumber.org>",
        "X-Mailer": "git-send-email 2.20.1",
        "In-Reply-To": "<20191108043818.27610-1-stephen@networkplumber.org>",
        "References": "<20191108043818.27610-1-stephen@networkplumber.org>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dpdk-dev] [PATCH 2/2] pdump: use dynamic logtype",
        "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 <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": "The logtype USER1 should not be overloaded for library function.\nInstead use a dynamic log type.\n\nSigned-off-by: Stephen Hemminger <stephen@networkplumber.org>\n---\n lib/librte_pdump/rte_pdump.c | 68 ++++++++++++++++++++----------------\n 1 file changed, 38 insertions(+), 30 deletions(-)",
    "diff": "diff --git a/lib/librte_pdump/rte_pdump.c b/lib/librte_pdump/rte_pdump.c\nindex 7816c7254615..ae25e2a064a4 100644\n--- a/lib/librte_pdump/rte_pdump.c\n+++ b/lib/librte_pdump/rte_pdump.c\n@@ -13,8 +13,12 @@\n #include \"rte_pdump.h\"\n \n #define DEVICE_ID_SIZE 64\n-/* Macros for printing using RTE_LOG */\n-#define RTE_LOGTYPE_PDUMP RTE_LOGTYPE_USER1\n+\n+/* Macro for printing using RTE_LOG */\n+static int pdump_logtype;\n+#define PDUMP_LOG(level, fmt, args...)\t\t\t\t\\\n+\trte_log(RTE_LOG_ ## level, pdump_logtype, \"%s(): \" fmt,\t\\\n+\t\t__func__, ## args)\n \n /* Used for the multi-process communication */\n #define PDUMP_MP\t\"mp_pdump\"\n@@ -88,7 +92,7 @@ pdump_copy(struct rte_mbuf **pkts, uint16_t nb_pkts, void *user_params)\n \n \tring_enq = rte_ring_enqueue_burst(ring, (void *)dup_bufs, d_pkts, NULL);\n \tif (unlikely(ring_enq < d_pkts)) {\n-\t\tRTE_LOG(DEBUG, PDUMP,\n+\t\tPDUMP_LOG(DEBUG,\n \t\t\t\"only %d of packets enqueued to ring\\n\", ring_enq);\n \t\tdo {\n \t\t\trte_pktmbuf_free(dup_bufs[ring_enq]);\n@@ -127,7 +131,7 @@ pdump_register_rx_callbacks(uint16_t end_q, uint16_t port, uint16_t queue,\n \t\tcbs = &rx_cbs[port][qid];\n \t\tif (cbs && operation == ENABLE) {\n \t\t\tif (cbs->cb) {\n-\t\t\t\tRTE_LOG(ERR, PDUMP,\n+\t\t\t\tPDUMP_LOG(ERR,\n \t\t\t\t\t\"failed to add rx callback for port=%d \"\n \t\t\t\t\t\"and queue=%d, callback already exists\\n\",\n \t\t\t\t\tport, qid);\n@@ -138,7 +142,7 @@ pdump_register_rx_callbacks(uint16_t end_q, uint16_t port, uint16_t queue,\n \t\t\tcbs->cb = rte_eth_add_first_rx_callback(port, qid,\n \t\t\t\t\t\t\t\tpdump_rx, cbs);\n \t\t\tif (cbs->cb == NULL) {\n-\t\t\t\tRTE_LOG(ERR, PDUMP,\n+\t\t\t\tPDUMP_LOG(ERR,\n \t\t\t\t\t\"failed to add rx callback, errno=%d\\n\",\n \t\t\t\t\trte_errno);\n \t\t\t\treturn rte_errno;\n@@ -148,7 +152,7 @@ pdump_register_rx_callbacks(uint16_t end_q, uint16_t port, uint16_t queue,\n \t\t\tint ret;\n \n \t\t\tif (cbs->cb == NULL) {\n-\t\t\t\tRTE_LOG(ERR, PDUMP,\n+\t\t\t\tPDUMP_LOG(ERR,\n \t\t\t\t\t\"failed to delete non existing rx \"\n \t\t\t\t\t\"callback for port=%d and queue=%d\\n\",\n \t\t\t\t\tport, qid);\n@@ -156,7 +160,7 @@ pdump_register_rx_callbacks(uint16_t end_q, uint16_t port, uint16_t queue,\n \t\t\t}\n \t\t\tret = rte_eth_remove_rx_callback(port, qid, cbs->cb);\n \t\t\tif (ret < 0) {\n-\t\t\t\tRTE_LOG(ERR, PDUMP,\n+\t\t\t\tPDUMP_LOG(ERR,\n \t\t\t\t\t\"failed to remove rx callback, errno=%d\\n\",\n \t\t\t\t\t-ret);\n \t\t\t\treturn ret;\n@@ -182,7 +186,7 @@ pdump_register_tx_callbacks(uint16_t end_q, uint16_t port, uint16_t queue,\n \t\tcbs = &tx_cbs[port][qid];\n \t\tif (cbs && operation == ENABLE) {\n \t\t\tif (cbs->cb) {\n-\t\t\t\tRTE_LOG(ERR, PDUMP,\n+\t\t\t\tPDUMP_LOG(ERR,\n \t\t\t\t\t\"failed to add tx callback for port=%d \"\n \t\t\t\t\t\"and queue=%d, callback already exists\\n\",\n \t\t\t\t\tport, qid);\n@@ -193,7 +197,7 @@ pdump_register_tx_callbacks(uint16_t end_q, uint16_t port, uint16_t queue,\n \t\t\tcbs->cb = rte_eth_add_tx_callback(port, qid, pdump_tx,\n \t\t\t\t\t\t\t\tcbs);\n \t\t\tif (cbs->cb == NULL) {\n-\t\t\t\tRTE_LOG(ERR, PDUMP,\n+\t\t\t\tPDUMP_LOG(ERR,\n \t\t\t\t\t\"failed to add tx callback, errno=%d\\n\",\n \t\t\t\t\trte_errno);\n \t\t\t\treturn rte_errno;\n@@ -203,7 +207,7 @@ pdump_register_tx_callbacks(uint16_t end_q, uint16_t port, uint16_t queue,\n \t\t\tint ret;\n \n \t\t\tif (cbs->cb == NULL) {\n-\t\t\t\tRTE_LOG(ERR, PDUMP,\n+\t\t\t\tPDUMP_LOG(ERR,\n \t\t\t\t\t\"failed to delete non existing tx \"\n \t\t\t\t\t\"callback for port=%d and queue=%d\\n\",\n \t\t\t\t\tport, qid);\n@@ -211,7 +215,7 @@ pdump_register_tx_callbacks(uint16_t end_q, uint16_t port, uint16_t queue,\n \t\t\t}\n \t\t\tret = rte_eth_remove_tx_callback(port, qid, cbs->cb);\n \t\t\tif (ret < 0) {\n-\t\t\t\tRTE_LOG(ERR, PDUMP,\n+\t\t\t\tPDUMP_LOG(ERR,\n \t\t\t\t\t\"failed to remove tx callback, errno=%d\\n\",\n \t\t\t\t\t-ret);\n \t\t\t\treturn ret;\n@@ -240,7 +244,7 @@ set_pdump_rxtx_cbs(const struct pdump_request *p)\n \t\tret = rte_eth_dev_get_port_by_name(p->data.en_v1.device,\n \t\t\t\t&port);\n \t\tif (ret < 0) {\n-\t\t\tRTE_LOG(ERR, PDUMP,\n+\t\t\tPDUMP_LOG(ERR,\n \t\t\t\t\"failed to get port id for device id=%s\\n\",\n \t\t\t\tp->data.en_v1.device);\n \t\t\treturn -EINVAL;\n@@ -252,7 +256,7 @@ set_pdump_rxtx_cbs(const struct pdump_request *p)\n \t\tret = rte_eth_dev_get_port_by_name(p->data.dis_v1.device,\n \t\t\t\t&port);\n \t\tif (ret < 0) {\n-\t\t\tRTE_LOG(ERR, PDUMP,\n+\t\t\tPDUMP_LOG(ERR,\n \t\t\t\t\"failed to get port id for device id=%s\\n\",\n \t\t\t\tp->data.dis_v1.device);\n \t\t\treturn -EINVAL;\n@@ -277,18 +281,18 @@ set_pdump_rxtx_cbs(const struct pdump_request *p)\n \t\tnb_rx_q = dev_info.nb_rx_queues;\n \t\tnb_tx_q = dev_info.nb_tx_queues;\n \t\tif (nb_rx_q == 0 && flags & RTE_PDUMP_FLAG_RX) {\n-\t\t\tRTE_LOG(ERR, PDUMP,\n+\t\t\tPDUMP_LOG(ERR,\n \t\t\t\t\"number of rx queues cannot be 0\\n\");\n \t\t\treturn -EINVAL;\n \t\t}\n \t\tif (nb_tx_q == 0 && flags & RTE_PDUMP_FLAG_TX) {\n-\t\t\tRTE_LOG(ERR, PDUMP,\n+\t\t\tPDUMP_LOG(ERR,\n \t\t\t\t\"number of tx queues cannot be 0\\n\");\n \t\t\treturn -EINVAL;\n \t\t}\n \t\tif ((nb_tx_q == 0 || nb_rx_q == 0) &&\n \t\t\tflags == RTE_PDUMP_FLAG_RXTX) {\n-\t\t\tRTE_LOG(ERR, PDUMP,\n+\t\t\tPDUMP_LOG(ERR,\n \t\t\t\t\"both tx&rx queues must be non zero\\n\");\n \t\t\treturn -EINVAL;\n \t\t}\n@@ -324,7 +328,7 @@ pdump_server(const struct rte_mp_msg *mp_msg, const void *peer)\n \n \t/* recv client requests */\n \tif (mp_msg->len_param != sizeof(*cli_req)) {\n-\t\tRTE_LOG(ERR, PDUMP, \"failed to recv from client\\n\");\n+\t\tPDUMP_LOG(ERR, \"failed to recv from client\\n\");\n \t\tresp->err_value = -EINVAL;\n \t} else {\n \t\tcli_req = (const struct pdump_request *)mp_msg->param;\n@@ -337,8 +341,8 @@ pdump_server(const struct rte_mp_msg *mp_msg, const void *peer)\n \tmp_resp.len_param = sizeof(*resp);\n \tmp_resp.num_fds = 0;\n \tif (rte_mp_reply(&mp_resp, peer) < 0) {\n-\t\tRTE_LOG(ERR, PDUMP, \"failed to send to client:%s, %s:%d\\n\",\n-\t\t\tstrerror(rte_errno), __func__, __LINE__);\n+\t\tPDUMP_LOG(ERR, \"failed to send to client:%s\\n\",\n+\t\t\t  strerror(rte_errno));\n \t\treturn -1;\n \t}\n \n@@ -366,19 +370,18 @@ static int\n pdump_validate_ring_mp(struct rte_ring *ring, struct rte_mempool *mp)\n {\n \tif (ring == NULL || mp == NULL) {\n-\t\tRTE_LOG(ERR, PDUMP, \"NULL ring or mempool are passed %s:%d\\n\",\n-\t\t\t__func__, __LINE__);\n+\t\tPDUMP_LOG(ERR, \"NULL ring or mempool\\n\");\n \t\trte_errno = EINVAL;\n \t\treturn -1;\n \t}\n \tif (mp->flags & MEMPOOL_F_SP_PUT || mp->flags & MEMPOOL_F_SC_GET) {\n-\t\tRTE_LOG(ERR, PDUMP, \"mempool with either SP or SC settings\"\n+\t\tPDUMP_LOG(ERR, \"mempool with either SP or SC settings\"\n \t\t\" is not valid for pdump, should have MP and MC settings\\n\");\n \t\trte_errno = EINVAL;\n \t\treturn -1;\n \t}\n \tif (ring->prod.single || ring->cons.single) {\n-\t\tRTE_LOG(ERR, PDUMP, \"ring with either SP or SC settings\"\n+\t\tPDUMP_LOG(ERR, \"ring with either SP or SC settings\"\n \t\t\" is not valid for pdump, should have MP and MC settings\\n\");\n \t\trte_errno = EINVAL;\n \t\treturn -1;\n@@ -392,7 +395,7 @@ pdump_validate_flags(uint32_t flags)\n {\n \tif (flags != RTE_PDUMP_FLAG_RX && flags != RTE_PDUMP_FLAG_TX &&\n \t\tflags != RTE_PDUMP_FLAG_RXTX) {\n-\t\tRTE_LOG(ERR, PDUMP,\n+\t\tPDUMP_LOG(ERR,\n \t\t\t\"invalid flags, should be either rx/tx/rxtx\\n\");\n \t\trte_errno = EINVAL;\n \t\treturn -1;\n@@ -407,17 +410,15 @@ pdump_validate_port(uint16_t port, char *name)\n \tint ret = 0;\n \n \tif (port >= RTE_MAX_ETHPORTS) {\n-\t\tRTE_LOG(ERR, PDUMP, \"Invalid port id %u, %s:%d\\n\", port,\n-\t\t\t__func__, __LINE__);\n+\t\tPDUMP_LOG(ERR, \"Invalid port id %u\\n\", port);\n \t\trte_errno = EINVAL;\n \t\treturn -1;\n \t}\n \n \tret = rte_eth_dev_get_name_by_port(port, name);\n \tif (ret < 0) {\n-\t\tRTE_LOG(ERR, PDUMP,\n-\t\t\t\"port id to name mapping failed for port id=%u, %s:%d\\n\",\n-\t\t\tport, __func__, __LINE__);\n+\t\tPDUMP_LOG(ERR, \"port %u to name mapping failed\\n\",\n+\t\t\t  port);\n \t\trte_errno = EINVAL;\n \t\treturn -1;\n \t}\n@@ -472,7 +473,7 @@ pdump_prepare_client_request(char *device, uint16_t queue,\n \t}\n \n \tif (ret < 0)\n-\t\tRTE_LOG(ERR, PDUMP,\n+\t\tPDUMP_LOG(ERR,\n \t\t\t\"client request for pdump enable/disable failed\\n\");\n \treturn ret;\n }\n@@ -559,3 +560,10 @@ rte_pdump_disable_by_deviceid(char *device_id, uint16_t queue,\n \n \treturn ret;\n }\n+\n+RTE_INIT(pdump_log)\n+{\n+\tpdump_logtype = rte_log_register(\"lib.pdump\");\n+\tif (pdump_logtype >= 0)\n+\t\trte_log_set_level(pdump_logtype, RTE_LOG_NOTICE);\n+}\n",
    "prefixes": [
        "2/2"
    ]
}