get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 23218,
    "url": "https://patches.dpdk.org/api/patches/23218/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20170404164040.24132-9-olivier.matz@6wind.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": "<20170404164040.24132-9-olivier.matz@6wind.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20170404164040.24132-9-olivier.matz@6wind.com",
    "date": "2017-04-04T16:40:40",
    "name": "[dpdk-dev,v3,8/8] net/i40e: use dynamic log type for control logs",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "484f5427024b5c350811a45973776ce232f9b343",
    "submitter": {
        "id": 8,
        "url": "https://patches.dpdk.org/api/people/8/?format=api",
        "name": "Olivier Matz",
        "email": "olivier.matz@6wind.com"
    },
    "delegate": {
        "id": 1,
        "url": "https://patches.dpdk.org/api/users/1/?format=api",
        "username": "tmonjalo",
        "first_name": "Thomas",
        "last_name": "Monjalon",
        "email": "thomas@monjalon.net"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20170404164040.24132-9-olivier.matz@6wind.com/mbox/",
    "series": [],
    "comments": "https://patches.dpdk.org/api/patches/23218/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/23218/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 7FC5B5424;\n\tTue,  4 Apr 2017 18:45:08 +0200 (CEST)",
            "from proxy.6wind.com (host.76.145.23.62.rev.coltfrance.com\n\t[62.23.145.76]) by dpdk.org (Postfix) with ESMTP id 34A73377A\n\tfor <dev@dpdk.org>; Tue,  4 Apr 2017 18:44:48 +0200 (CEST)",
            "from glumotte.dev.6wind.com (unknown [10.16.0.195])\n\tby proxy.6wind.com (Postfix) with ESMTP id 9AD8C2590B;\n\tTue,  4 Apr 2017 18:44:42 +0200 (CEST)"
        ],
        "From": "Olivier Matz <olivier.matz@6wind.com>",
        "To": "dev@dpdk.org",
        "Cc": "david.marchand@6wind.com, bruce.richardson@intel.com,\n\tthomas.monjalon@6wind.com, keith.wiles@intel.com,\n\tstephen@networkplumber.org",
        "Date": "Tue,  4 Apr 2017 18:40:40 +0200",
        "Message-Id": "<20170404164040.24132-9-olivier.matz@6wind.com>",
        "X-Mailer": "git-send-email 2.11.0",
        "In-Reply-To": "<20170404164040.24132-1-olivier.matz@6wind.com>",
        "References": "<20170329155323.4760-1-olivier.matz@6wind.com>\n\t<20170404164040.24132-1-olivier.matz@6wind.com>",
        "Subject": "[dpdk-dev] [PATCH v3 8/8] net/i40e: use dynamic log type for\n\tcontrol logs",
        "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": "This is an example of how a dynamic log type can be used in a\nPMD.\n\nSigned-off-by: Olivier Matz <olivier.matz@6wind.com>\n---\n config/common_base             |  2 --\n drivers/net/i40e/i40e_ethdev.c | 18 ++++++++++++++++--\n drivers/net/i40e/i40e_fdir.c   |  4 ----\n drivers/net/i40e/i40e_logs.h   | 17 ++++++-----------\n 4 files changed, 22 insertions(+), 19 deletions(-)",
    "diff": "diff --git a/config/common_base b/config/common_base\nindex 41191c878..d29808c7a 100644\n--- a/config/common_base\n+++ b/config/common_base\n@@ -179,11 +179,9 @@ CONFIG_RTE_IXGBE_RX_OLFLAGS_ENABLE=y\n # Compile burst-oriented I40E PMD driver\n #\n CONFIG_RTE_LIBRTE_I40E_PMD=y\n-CONFIG_RTE_LIBRTE_I40E_DEBUG_INIT=n\n CONFIG_RTE_LIBRTE_I40E_DEBUG_RX=n\n CONFIG_RTE_LIBRTE_I40E_DEBUG_TX=n\n CONFIG_RTE_LIBRTE_I40E_DEBUG_TX_FREE=n\n-CONFIG_RTE_LIBRTE_I40E_DEBUG_DRIVER=n\n CONFIG_RTE_LIBRTE_I40E_RX_ALLOW_BULK_ALLOC=y\n CONFIG_RTE_LIBRTE_I40E_INC_VECTOR=y\n CONFIG_RTE_LIBRTE_I40E_RX_OLFLAGS_ENABLE=y\ndiff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c\nindex 8b5fd54e7..a6de86280 100644\n--- a/drivers/net/i40e/i40e_ethdev.c\n+++ b/drivers/net/i40e/i40e_ethdev.c\n@@ -40,6 +40,7 @@\n #include <inttypes.h>\n #include <assert.h>\n \n+#include <rte_eal.h>\n #include <rte_string_fns.h>\n #include <rte_pci.h>\n #include <rte_ether.h>\n@@ -419,6 +420,9 @@ static void i40e_ethertype_filter_restore(struct i40e_pf *pf);\n static void i40e_tunnel_filter_restore(struct i40e_pf *pf);\n static void i40e_filter_restore(struct i40e_pf *pf);\n \n+int i40e_logtype_init;\n+int i40e_logtype_driver;\n+\n static const struct rte_pci_id pci_id_i40e_map[] = {\n \t{ RTE_PCI_DEVICE(I40E_INTEL_VENDOR_ID, I40E_DEV_ID_SFP_XL710) },\n \t{ RTE_PCI_DEVICE(I40E_INTEL_VENDOR_ID, I40E_DEV_ID_QEMU) },\n@@ -5790,7 +5794,6 @@ i40e_dev_interrupt_handler(struct rte_intr_handle *intr_handle,\n \t\tPMD_DRV_LOG(INFO, \"No interrupt event\");\n \t\tgoto done;\n \t}\n-#ifdef RTE_LIBRTE_I40E_DEBUG_DRIVER\n \tif (icr0 & I40E_PFINT_ICR0_ECC_ERR_MASK)\n \t\tPMD_DRV_LOG(ERR, \"ICR0: unrecoverable ECC error\");\n \tif (icr0 & I40E_PFINT_ICR0_MAL_DETECT_MASK)\n@@ -5805,7 +5808,6 @@ i40e_dev_interrupt_handler(struct rte_intr_handle *intr_handle,\n \t\tPMD_DRV_LOG(ERR, \"ICR0: HMC error\");\n \tif (icr0 & I40E_PFINT_ICR0_PE_CRITERR_MASK)\n \t\tPMD_DRV_LOG(ERR, \"ICR0: protocol engine critical error\");\n-#endif /* RTE_LIBRTE_I40E_DEBUG_DRIVER */\n \n \tif (icr0 & I40E_PFINT_ICR0_VFLR_MASK) {\n \t\tPMD_DRV_LOG(INFO, \"ICR0: VF reset detected\");\n@@ -11214,3 +11216,15 @@ rte_pmd_i40e_reset_vf_stats(uint8_t port,\n \n \treturn 0;\n }\n+\n+RTE_INIT(i40e_init_log);\n+static void\n+i40e_init_log(void)\n+{\n+\ti40e_logtype_init = rte_log_register(\"pmd.i40e.init\");\n+\tif (i40e_logtype_init >= 0)\n+\t\trte_log_set_level(i40e_logtype_init, RTE_LOG_NOTICE);\n+\ti40e_logtype_driver = rte_log_register(\"pmd.i40e.driver\");\n+\tif (i40e_logtype_driver >= 0)\n+\t\trte_log_set_level(i40e_logtype_driver, RTE_LOG_NOTICE);\n+}\ndiff --git a/drivers/net/i40e/i40e_fdir.c b/drivers/net/i40e/i40e_fdir.c\nindex 0700253b1..32d3b1910 100644\n--- a/drivers/net/i40e/i40e_fdir.c\n+++ b/drivers/net/i40e/i40e_fdir.c\n@@ -1592,17 +1592,14 @@ i40e_fdir_filter_restore(struct i40e_pf *pf)\n \tstruct rte_eth_dev *dev = I40E_VSI_TO_ETH_DEV(pf->main_vsi);\n \tstruct i40e_fdir_filter_list *fdir_list = &pf->fdir.fdir_list;\n \tstruct i40e_fdir_filter *f;\n-#ifdef RTE_LIBRTE_I40E_DEBUG_DRIVER\n \tstruct i40e_hw *hw = I40E_PF_TO_HW(pf);\n \tuint32_t fdstat;\n \tuint32_t guarant_cnt;  /**< Number of filters in guaranteed spaces. */\n \tuint32_t best_cnt;     /**< Number of filters in best effort spaces. */\n-#endif /* RTE_LIBRTE_I40E_DEBUG_DRIVER */\n \n \tTAILQ_FOREACH(f, fdir_list, rules)\n \t\ti40e_add_del_fdir_filter(dev, &f->fdir, TRUE);\n \n-#ifdef RTE_LIBRTE_I40E_DEBUG_DRIVER\n \tfdstat = I40E_READ_REG(hw, I40E_PFQF_FDSTAT);\n \tguarant_cnt =\n \t\t(uint32_t)((fdstat & I40E_PFQF_FDSTAT_GUARANT_CNT_MASK) >>\n@@ -1610,7 +1607,6 @@ i40e_fdir_filter_restore(struct i40e_pf *pf)\n \tbest_cnt =\n \t\t(uint32_t)((fdstat & I40E_PFQF_FDSTAT_BEST_CNT_MASK) >>\n \t\t\t   I40E_PFQF_FDSTAT_BEST_CNT_SHIFT);\n-#endif /* RTE_LIBRTE_I40E_DEBUG_DRIVER */\n \n \tPMD_DRV_LOG(INFO, \"FDIR: Guarant count: %d,  Best count: %d\",\n \t\t    guarant_cnt, best_cnt);\ndiff --git a/drivers/net/i40e/i40e_logs.h b/drivers/net/i40e/i40e_logs.h\nindex e042e2429..8e99cd52a 100644\n--- a/drivers/net/i40e/i40e_logs.h\n+++ b/drivers/net/i40e/i40e_logs.h\n@@ -34,14 +34,11 @@\n #ifndef _I40E_LOGS_H_\n #define _I40E_LOGS_H_\n \n+extern int i40e_logtype_init;\n #define PMD_INIT_LOG(level, fmt, args...) \\\n-\tRTE_LOG(level, PMD, \"%s(): \" fmt \"\\n\", __func__, ##args)\n-\n-#ifdef RTE_LIBRTE_I40E_DEBUG_INIT\n+\trte_log(RTE_LOG_ ## level, i40e_logtype_init, \"%s(): \" fmt \"\\n\", \\\n+\t\t__func__, ##args)\n #define PMD_INIT_FUNC_TRACE() PMD_INIT_LOG(DEBUG, \" >>\")\n-#else\n-#define PMD_INIT_FUNC_TRACE() do { } while(0)\n-#endif\n \n #ifdef RTE_LIBRTE_I40E_DEBUG_RX\n #define PMD_RX_LOG(level, fmt, args...) \\\n@@ -64,12 +61,10 @@\n #define PMD_TX_FREE_LOG(level, fmt, args...) do { } while(0)\n #endif\n \n-#ifdef RTE_LIBRTE_I40E_DEBUG_DRIVER\n+extern int i40e_logtype_driver;\n #define PMD_DRV_LOG_RAW(level, fmt, args...) \\\n-\tRTE_LOG(level, PMD, \"%s(): \" fmt, __func__, ## args)\n-#else\n-#define PMD_DRV_LOG_RAW(level, fmt, args...) do { } while (0)\n-#endif\n+\trte_log(RTE_LOG_ ## level, i40e_logtype_driver, \"%s(): \" fmt, \\\n+\t\t__func__, ## args)\n \n #define PMD_DRV_LOG(level, fmt, args...) \\\n \tPMD_DRV_LOG_RAW(level, fmt \"\\n\", ## args)\n",
    "prefixes": [
        "dpdk-dev",
        "v3",
        "8/8"
    ]
}