get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 56553,
    "url": "https://patches.dpdk.org/api/patches/56553/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20190716134327.0d4e641b@hermes.lan/",
    "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": "<20190716134327.0d4e641b@hermes.lan>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20190716134327.0d4e641b@hermes.lan",
    "date": "2019-07-16T20:43:27",
    "name": "[RFC] net/ena: use dynamic log type for debug logging",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "37a675cd43b3ab66855e1e19e2ecb7c64f4ec5b0",
    "submitter": {
        "id": 27,
        "url": "https://patches.dpdk.org/api/people/27/?format=api",
        "name": "Stephen Hemminger",
        "email": "stephen@networkplumber.org"
    },
    "delegate": {
        "id": 319,
        "url": "https://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20190716134327.0d4e641b@hermes.lan/mbox/",
    "series": [
        {
            "id": 5547,
            "url": "https://patches.dpdk.org/api/series/5547/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=5547",
            "date": "2019-07-16T20:43:27",
            "name": "[RFC] net/ena: use dynamic log type for debug logging",
            "version": 1,
            "mbox": "https://patches.dpdk.org/series/5547/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/56553/comments/",
    "check": "fail",
    "checks": "https://patches.dpdk.org/api/patches/56553/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 4F1472BC7;\n\tTue, 16 Jul 2019 22:43:37 +0200 (CEST)",
            "from mail-pg1-f196.google.com (mail-pg1-f196.google.com\n\t[209.85.215.196]) by dpdk.org (Postfix) with ESMTP id 0EBF52BAB\n\tfor <dev@dpdk.org>; Tue, 16 Jul 2019 22:43:35 +0200 (CEST)",
            "by mail-pg1-f196.google.com with SMTP id l21so10014456pgm.3\n\tfor <dev@dpdk.org>; Tue, 16 Jul 2019 13:43:34 -0700 (PDT)",
            "from hermes.lan (204-195-22-127.wavecable.com. [204.195.22.127])\n\tby smtp.gmail.com with ESMTPSA id\n\te5sm26000257pfd.56.2019.07.16.13.43.33\n\t(version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256);\n\tTue, 16 Jul 2019 13:43:33 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=networkplumber-org.20150623.gappssmtp.com; s=20150623;\n\th=date:from:to:cc:subject:message-id:mime-version\n\t:content-transfer-encoding;\n\tbh=fcOqY9t1a4YCY0lvrWl9emU3+YzlybOY+hGMmICfLrU=;\n\tb=SV13FtkeDm4/m2hHkUUz17393Yz/xm7yEWnRf92B09EC7/vMkuD12MluqE4YWf/GfP\n\tUj/HlbdFN655i4qkpITN+JRIVtoNxBFLU2521GEFQqTMBdD0Gv0RbiJrZhbsROt4YXCO\n\tizXY+Z5cHZawj0VElpVKELvFNVGKIlqc5jsKwIWziIgtMsgEkdzB3FInZoX0ljqF53KS\n\t4FuHcEil1JWIUoqYeIyTHP3dBjnpiTn9tSSL1xcWnX4GXjw/uv4OvMyemM4NSU95G50X\n\t2PHvxbFYivY2gipM288w1pysbR003W1XwlRfIFYMfFT8fxHBVmlwLFOc0reqdIW/4C9P\n\t55cA==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:date:from:to:cc:subject:message-id:mime-version\n\t:content-transfer-encoding;\n\tbh=fcOqY9t1a4YCY0lvrWl9emU3+YzlybOY+hGMmICfLrU=;\n\tb=tK6ai7EfoDsjghug7RF6sqIlPk3XlRZ0wCxQTkoGiiQklo2pt7AACsn0Zk4RU0Ua7j\n\tS9ow/WeZ1IvPq6QA81pFeXiWVCxOEK88++k5JSSZ5qPqSHDQYjHtjTERvfvB98THQJt6\n\tDk8EzuWp4NlT+P95EHVYcAWAlqAF0qo98XMeJgzJgemviK5pp7pYcyogRKpg89yiuXjX\n\tYLyw7h1scqYp3TgGg/w7tJxuo6JDIP/UNDUKSiTleFAnIqX9npnVsRcqkX4mCkUZPQwl\n\tKdsu+9IsvN3ZhwMzT0mMvcXiD0Hy9HaLya3485iYxo58WNZyp486gRNd0GusqDPazzKF\n\tHIOA==",
        "X-Gm-Message-State": "APjAAAU/SvFmxOH2z1CdHf47pJJWXpyvF31xLPdTDA7Besz1xMMz0TPI\n\t8WW4H2EMTtzPS0WrxrN+lqtGVG3b",
        "X-Google-Smtp-Source": "APXvYqyAtsjAGfyql39WvUXVjz5Q6TW/il0vgFjVtmryh/hqvNY097iN60SiH/Baub4b54IuBQaTnw==",
        "X-Received": "by 2002:a63:ff66:: with SMTP id\n\ts38mr36771214pgk.363.1563309813815; \n\tTue, 16 Jul 2019 13:43:33 -0700 (PDT)",
        "Date": "Tue, 16 Jul 2019 13:43:27 -0700",
        "From": "Stephen Hemminger <stephen@networkplumber.org>",
        "To": "mw@semihalf.com, mk@semihalf.com, gtzalik@amazon.com, evgenys@amazon.com",
        "Cc": "dev@dpdk.org",
        "Message-ID": "<20190716134327.0d4e641b@hermes.lan>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=US-ASCII",
        "Content-Transfer-Encoding": "7bit",
        "Subject": "[dpdk-dev] [RFC] net/ena: use dynamic log type for debug logging",
        "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": "The generic RTE_LOGTYPE_PMD is a historical relic and should\nnot be used. Every driver must use dynamic logtypes.\n\nCompile tested only!\n\nSigned-off-by: Stephen Hemminger <stephen@networkplumber.org>\n---\n drivers/net/ena/base/ena_plat_dpdk.h |  20 ++--\n drivers/net/ena/ena_ethdev.c         | 167 ++++++++++++++++-----------\n drivers/net/ena/ena_logs.h           |  18 ++-\n 3 files changed, 125 insertions(+), 80 deletions(-)",
    "diff": "diff --git a/drivers/net/ena/base/ena_plat_dpdk.h b/drivers/net/ena/base/ena_plat_dpdk.h\nindex 902d91efbe38..0909bfc4835d 100644\n--- a/drivers/net/ena/base/ena_plat_dpdk.h\n+++ b/drivers/net/ena/base/ena_plat_dpdk.h\n@@ -98,11 +98,13 @@ typedef uint64_t dma_addr_t;\n #define ENA_GET_SYSTEM_USECS()\t\t\t\t\t\t\\\n \t(rte_get_timer_cycles() * US_PER_S / rte_get_timer_hz())\n \n+extern int ena_logtype_com;\n #if RTE_LOG_DP_LEVEL >= RTE_LOG_DEBUG\n #define ENA_ASSERT(cond, format, arg...)\t\t\t\t\\\n \tdo {\t\t\t\t\t\t\t\t\\\n \t\tif (unlikely(!(cond))) {\t\t\t\t\\\n-\t\t\tRTE_LOG(ERR, PMD, format, ##arg);\t\t\\\n+\t\t\trte_log(RTE_LOGTYPE_ERR, ena_logtype_com,\t\\\n+\t\t\t\tformat, ##arg);\t\t\t\t\\\n \t\t\trte_panic(\"line %d\\tassert \\\"\" #cond \"\\\"\"\t\\\n \t\t\t\t\t\"failed\\n\", __LINE__);\t\t\\\n \t\t}\t\t\t\t\t\t\t\\\n@@ -127,14 +129,14 @@ typedef uint64_t dma_addr_t;\n \t\t\t  (~0ULL >> (BITS_PER_LONG_LONG - 1 - (h))))\n \n #ifdef RTE_LIBRTE_ENA_COM_DEBUG\n-#define ena_trc_dbg(format, arg...)\t\t\t\t\t\\\n-\tRTE_LOG(DEBUG, PMD, \"[ENA_COM: %s] \" format, __func__, ##arg)\n-#define ena_trc_info(format, arg...)\t\t\t\t\t\\\n-\tRTE_LOG(INFO, PMD, \"[ENA_COM: %s] \" format, __func__, ##arg)\n-#define ena_trc_warn(format, arg...)\t\t\t\t\t\\\n-\tRTE_LOG(ERR, PMD, \"[ENA_COM: %s] \" format, __func__, ##arg)\n-#define ena_trc_err(format, arg...)\t\t\t\t\t\\\n-\tRTE_LOG(ERR, PMD, \"[ENA_COM: %s] \" format, __func__, ##arg)\n+#define ena_trc_log(level, fmt, arg...) \\\n+\trte_log(RTE_LOG_ ## level, ena_logtype_com, \\\n+\t\t\"[ENA_COM: %s]\" fmt, __func__, ##arg)\n+\n+#define ena_trc_dbg(format, arg...)\tena_trc_log(DEBUG, format, ##arg)\n+#define ena_trc_info(format, arg...)\tena_trc_log(INFO, format, ##arg)\n+#define ena_trc_warn(format, arg...)\tena_trc_log(WARNING, format, ##arg)\n+#define ena_trc_err(format, arg...)\tena_trc_log(ERR, format, ##arg)\n #else\n #define ena_trc_dbg(format, arg...) do { } while (0)\n #define ena_trc_info(format, arg...) do { } while (0)\ndiff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c\nindex f5833408044c..4a67298e9d1f 100644\n--- a/drivers/net/ena/ena_ethdev.c\n+++ b/drivers/net/ena/ena_ethdev.c\n@@ -178,6 +178,19 @@ static const struct ena_stats ena_stats_rx_strings[] = {\n int ena_logtype_init;\n int ena_logtype_driver;\n \n+#ifdef RTE_LIBRTE_ENA_DEBUG_RX\n+int ena_logtype_rx;\n+#endif\n+#ifdef RTE_LIBRTE_ENA_DEBUG_TX\n+int ena_logtype_tx;\n+#endif\n+#ifdef RTE_LIBRTE_ENA_DEBUG_TX_FREE\n+int ena_logtype_tx_free;\n+#endif\n+#ifdef RTE_LIBRTE_ENA_COM_DEBUG\n+int ena_logtype_com;\n+#endif\n+\n static const struct rte_pci_id pci_id_ena_map[] = {\n \t{ RTE_PCI_DEVICE(PCI_VENDOR_ID_AMAZON, PCI_DEVICE_ID_ENA_VF) },\n \t{ RTE_PCI_DEVICE(PCI_VENDOR_ID_AMAZON, PCI_DEVICE_ID_ENA_LLQ_VF) },\n@@ -358,7 +371,7 @@ static inline int validate_rx_req_id(struct ena_ring *rx_ring, uint16_t req_id)\n \tif (likely(req_id < rx_ring->ring_size))\n \t\treturn 0;\n \n-\tRTE_LOG(ERR, PMD, \"Invalid rx req_id: %hu\\n\", req_id);\n+\tPMD_DRV_LOG(ERR, \"Invalid rx req_id: %hu\\n\", req_id);\n \n \trx_ring->adapter->reset_reason = ENA_REGS_RESET_INV_RX_REQ_ID;\n \trx_ring->adapter->trigger_reset = true;\n@@ -378,9 +391,9 @@ static int validate_tx_req_id(struct ena_ring *tx_ring, u16 req_id)\n \t}\n \n \tif (tx_info)\n-\t\tRTE_LOG(ERR, PMD, \"tx_info doesn't have valid mbuf\\n\");\n+\t\tPMD_DRV_LOG(ERR, \"tx_info doesn't have valid mbuf\\n\");\n \telse\n-\t\tRTE_LOG(ERR, PMD, \"Invalid req_id: %hu\\n\", req_id);\n+\t\tPMD_DRV_LOG(ERR, \"Invalid req_id: %hu\\n\", req_id);\n \n \t/* Trigger device reset */\n \t++tx_ring->tx_stats.bad_req_id;\n@@ -397,7 +410,7 @@ static void ena_config_host_info(struct ena_com_dev *ena_dev)\n \t/* Allocate only the host info */\n \trc = ena_com_allocate_host_info(ena_dev);\n \tif (rc) {\n-\t\tRTE_LOG(ERR, PMD, \"Cannot allocate host info\\n\");\n+\t\tPMD_DRV_LOG(ERR, \"Cannot allocate host info\\n\");\n \t\treturn;\n \t}\n \n@@ -420,9 +433,9 @@ static void ena_config_host_info(struct ena_com_dev *ena_dev)\n \trc = ena_com_set_host_attributes(ena_dev);\n \tif (rc) {\n \t\tif (rc == -ENA_COM_UNSUPPORTED)\n-\t\t\tRTE_LOG(WARNING, PMD, \"Cannot set host attributes\\n\");\n+\t\t\tPMD_DRV_LOG(WARNING, \"Cannot set host attributes\\n\");\n \t\telse\n-\t\t\tRTE_LOG(ERR, PMD, \"Cannot set host attributes\\n\");\n+\t\t\tPMD_DRV_LOG(ERR, \"Cannot set host attributes\\n\");\n \n \t\tgoto err;\n \t}\n@@ -453,16 +466,16 @@ static void ena_config_debug_area(struct ena_adapter *adapter)\n \n \trc = ena_com_allocate_debug_area(&adapter->ena_dev, debug_area_size);\n \tif (rc) {\n-\t\tRTE_LOG(ERR, PMD, \"Cannot allocate debug area\\n\");\n+\t\tPMD_DRV_LOG(ERR, \"Cannot allocate debug area\\n\");\n \t\treturn;\n \t}\n \n \trc = ena_com_set_host_attributes(&adapter->ena_dev);\n \tif (rc) {\n \t\tif (rc == -ENA_COM_UNSUPPORTED)\n-\t\t\tRTE_LOG(WARNING, PMD, \"Cannot set host attributes\\n\");\n+\t\t\tPMD_DRV_LOG(WARNING, \"Cannot set host attributes\\n\");\n \t\telse\n-\t\t\tRTE_LOG(ERR, PMD, \"Cannot set host attributes\\n\");\n+\t\t\tPMD_DRV_LOG(ERR, \"Cannot set host attributes\\n\");\n \n \t\tgoto err;\n \t}\n@@ -528,7 +541,7 @@ static int ena_rss_reta_update(struct rte_eth_dev *dev,\n \t\treturn -EINVAL;\n \n \tif (reta_size > ENA_RX_RSS_TABLE_SIZE) {\n-\t\tRTE_LOG(WARNING, PMD,\n+\t\tPMD_DRV_LOG(WARNING,\n \t\t\t\"indirection table %d is bigger than supported (%d)\\n\",\n \t\t\treta_size, ENA_RX_RSS_TABLE_SIZE);\n \t\treturn -EINVAL;\n@@ -548,7 +561,7 @@ static int ena_rss_reta_update(struct rte_eth_dev *dev,\n \t\t\t\t\t\t\t       i,\n \t\t\t\t\t\t\t       entry_value);\n \t\t\tif (unlikely(rc && rc != ENA_COM_UNSUPPORTED)) {\n-\t\t\t\tRTE_LOG(ERR, PMD,\n+\t\t\t\tPMD_DRV_LOG(ERR,\n \t\t\t\t\t\"Cannot fill indirect table\\n\");\n \t\t\t\treturn rc;\n \t\t\t}\n@@ -557,11 +570,11 @@ static int ena_rss_reta_update(struct rte_eth_dev *dev,\n \n \trc = ena_com_indirect_table_set(ena_dev);\n \tif (unlikely(rc && rc != ENA_COM_UNSUPPORTED)) {\n-\t\tRTE_LOG(ERR, PMD, \"Cannot flush the indirect table\\n\");\n+\t\tPMD_DRV_LOG(ERR, \"Cannot flush the indirect table\\n\");\n \t\treturn rc;\n \t}\n \n-\tRTE_LOG(DEBUG, PMD, \"%s(): RSS configured %d entries  for port %d\\n\",\n+\tPMD_DRV_LOG(DEBUG, \"%s(): RSS configured %d entries  for port %d\\n\",\n \t\t__func__, reta_size, adapter->rte_dev->data->port_id);\n \n \treturn 0;\n@@ -586,7 +599,7 @@ static int ena_rss_reta_query(struct rte_eth_dev *dev,\n \n \trc = ena_com_indirect_table_get(ena_dev, indirect_table);\n \tif (unlikely(rc && rc != ENA_COM_UNSUPPORTED)) {\n-\t\tRTE_LOG(ERR, PMD, \"cannot get indirect table\\n\");\n+\t\tPMD_DRV_LOG(ERR, \"cannot get indirect table\\n\");\n \t\treturn -ENOTSUP;\n \t}\n \n@@ -610,7 +623,7 @@ static int ena_rss_init_default(struct ena_adapter *adapter)\n \n \trc = ena_com_rss_init(ena_dev, ENA_RX_RSS_TABLE_LOG_SIZE);\n \tif (unlikely(rc)) {\n-\t\tRTE_LOG(ERR, PMD, \"Cannot init indirect table\\n\");\n+\t\tPMD_DRV_LOG(ERR, \"Cannot init indirect table\\n\");\n \t\tgoto err_rss_init;\n \t}\n \n@@ -619,7 +632,7 @@ static int ena_rss_init_default(struct ena_adapter *adapter)\n \t\trc = ena_com_indirect_table_fill_entry(ena_dev, i,\n \t\t\t\t\t\t       ENA_IO_RXQ_IDX(val));\n \t\tif (unlikely(rc && (rc != ENA_COM_UNSUPPORTED))) {\n-\t\t\tRTE_LOG(ERR, PMD, \"Cannot fill indirect table\\n\");\n+\t\t\tPMD_DRV_LOG(ERR, \"Cannot fill indirect table\\n\");\n \t\t\tgoto err_fill_indir;\n \t\t}\n \t}\n@@ -627,22 +640,22 @@ static int ena_rss_init_default(struct ena_adapter *adapter)\n \trc = ena_com_fill_hash_function(ena_dev, ENA_ADMIN_CRC32, NULL,\n \t\t\t\t\tENA_HASH_KEY_SIZE, 0xFFFFFFFF);\n \tif (unlikely(rc && (rc != ENA_COM_UNSUPPORTED))) {\n-\t\tRTE_LOG(INFO, PMD, \"Cannot fill hash function\\n\");\n+\t\tPMD_DRV_LOG(INFO, \"Cannot fill hash function\\n\");\n \t\tgoto err_fill_indir;\n \t}\n \n \trc = ena_com_set_default_hash_ctrl(ena_dev);\n \tif (unlikely(rc && (rc != ENA_COM_UNSUPPORTED))) {\n-\t\tRTE_LOG(INFO, PMD, \"Cannot fill hash control\\n\");\n+\t\tPMD_DRV_LOG(INFO, \"Cannot fill hash control\\n\");\n \t\tgoto err_fill_indir;\n \t}\n \n \trc = ena_com_indirect_table_set(ena_dev);\n \tif (unlikely(rc && (rc != ENA_COM_UNSUPPORTED))) {\n-\t\tRTE_LOG(ERR, PMD, \"Cannot flush the indirect table\\n\");\n+\t\tPMD_DRV_LOG(ERR, \"Cannot flush the indirect table\\n\");\n \t\tgoto err_fill_indir;\n \t}\n-\tRTE_LOG(DEBUG, PMD, \"RSS configured for port %d\\n\",\n+\tPMD_DRV_LOG(DEBUG, \"RSS configured for port %d\\n\",\n \t\tadapter->rte_dev->data->port_id);\n \n \treturn 0;\n@@ -693,7 +706,7 @@ static void ena_rx_queue_release(void *queue)\n \n \tring->configured = 0;\n \n-\tRTE_LOG(NOTICE, PMD, \"RX Queue %d:%d released\\n\",\n+\tPMD_DRV_LOG(NOTICE, \"RX Queue %d:%d released\\n\",\n \t\tring->port_id, ring->id);\n }\n \n@@ -717,7 +730,7 @@ static void ena_tx_queue_release(void *queue)\n \n \tring->configured = 0;\n \n-\tRTE_LOG(NOTICE, PMD, \"TX Queue %d:%d released\\n\",\n+\tPMD_DRV_LOG(NOTICE, \"TX Queue %d:%d released\\n\",\n \t\tring->port_id, ring->id);\n }\n \n@@ -929,7 +942,7 @@ static int ena_stats_get(struct rte_eth_dev *dev,\n \tmemset(&ena_stats, 0, sizeof(ena_stats));\n \trc = ena_com_get_dev_basic_stats(ena_dev, &ena_stats);\n \tif (unlikely(rc)) {\n-\t\tRTE_LOG(ERR, PMD, \"Could not retrieve statistics from ENA\\n\");\n+\t\tPMD_DRV_LOG(ERR, \"Could not retrieve statistics from ENA\\n\");\n \t\treturn rc;\n \t}\n \n@@ -986,7 +999,7 @@ static int ena_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)\n \tena_assert_msg(ena_dev != NULL, \"Uninitialized device\\n\");\n \n \tif (mtu > ena_get_mtu_conf(adapter) || mtu < ENA_MIN_MTU) {\n-\t\tRTE_LOG(ERR, PMD,\n+\t\tPMD_DRV_LOG(ERR,\n \t\t\t\"Invalid MTU setting. new_mtu: %d \"\n \t\t\t\"max mtu: %d min mtu: %d\\n\",\n \t\t\tmtu, ena_get_mtu_conf(adapter), ENA_MIN_MTU);\n@@ -995,9 +1008,9 @@ static int ena_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)\n \n \trc = ena_com_set_dev_mtu(ena_dev, mtu);\n \tif (rc)\n-\t\tRTE_LOG(ERR, PMD, \"Could not set MTU: %d\\n\", mtu);\n+\t\tPMD_DRV_LOG(ERR, \"Could not set MTU: %d\\n\", mtu);\n \telse\n-\t\tRTE_LOG(NOTICE, PMD, \"Set MTU: %d\\n\", mtu);\n+\t\tPMD_DRV_LOG(NOTICE, \"Set MTU: %d\\n\", mtu);\n \n \treturn rc;\n }\n@@ -1061,7 +1074,7 @@ static void ena_stop(struct rte_eth_dev *dev)\n \tif (adapter->trigger_reset) {\n \t\trc = ena_com_dev_reset(ena_dev, adapter->reset_reason);\n \t\tif (rc)\n-\t\t\tRTE_LOG(ERR, PMD, \"Device reset failed rc=%d\\n\", rc);\n+\t\t\tPMD_DRV_LOG(ERR, \"Device reset failed rc=%d\\n\", rc);\n \t}\n \n \t++adapter->dev_stats.dev_stop;\n@@ -1103,7 +1116,7 @@ static int ena_create_io_queue(struct ena_ring *ring)\n \n \trc = ena_com_create_io_queue(ena_dev, &ctx);\n \tif (rc) {\n-\t\tRTE_LOG(ERR, PMD,\n+\t\tPMD_DRV_LOG(ERR,\n \t\t\t\"failed to create io queue #%d (qid:%d) rc: %d\\n\",\n \t\t\tring->id, ena_qid, rc);\n \t\treturn rc;\n@@ -1113,7 +1126,7 @@ static int ena_create_io_queue(struct ena_ring *ring)\n \t\t\t\t     &ring->ena_com_io_sq,\n \t\t\t\t     &ring->ena_com_io_cq);\n \tif (rc) {\n-\t\tRTE_LOG(ERR, PMD,\n+\t\tPMD_DRV_LOG(ERR,\n \t\t\t\"Failed to get io queue handlers. queue num %d rc: %d\\n\",\n \t\t\tring->id, rc);\n \t\tena_com_destroy_io_queue(ena_dev, ena_qid);\n@@ -1206,21 +1219,21 @@ static int ena_tx_queue_setup(struct rte_eth_dev *dev,\n \ttxq = &adapter->tx_ring[queue_idx];\n \n \tif (txq->configured) {\n-\t\tRTE_LOG(CRIT, PMD,\n+\t\tPMD_DRV_LOG(CRIT,\n \t\t\t\"API violation. Queue %d is already configured\\n\",\n \t\t\tqueue_idx);\n \t\treturn ENA_COM_FAULT;\n \t}\n \n \tif (!rte_is_power_of_2(nb_desc)) {\n-\t\tRTE_LOG(ERR, PMD,\n+\t\tPMD_DRV_LOG(ERR,\n \t\t\t\"Unsupported size of TX queue: %d is not a power of 2.\\n\",\n \t\t\tnb_desc);\n \t\treturn -EINVAL;\n \t}\n \n \tif (nb_desc > adapter->tx_ring_size) {\n-\t\tRTE_LOG(ERR, PMD,\n+\t\tPMD_DRV_LOG(ERR,\n \t\t\t\"Unsupported size of TX queue (max size: %d)\\n\",\n \t\t\tadapter->tx_ring_size);\n \t\treturn -EINVAL;\n@@ -1240,7 +1253,7 @@ static int ena_tx_queue_setup(struct rte_eth_dev *dev,\n \t\t\t\t\t  txq->ring_size,\n \t\t\t\t\t  RTE_CACHE_LINE_SIZE);\n \tif (!txq->tx_buffer_info) {\n-\t\tRTE_LOG(ERR, PMD, \"failed to alloc mem for tx buffer info\\n\");\n+\t\tPMD_DRV_LOG(ERR, \"failed to alloc mem for tx buffer info\\n\");\n \t\treturn -ENOMEM;\n \t}\n \n@@ -1248,7 +1261,7 @@ static int ena_tx_queue_setup(struct rte_eth_dev *dev,\n \t\t\t\t\t sizeof(u16) * txq->ring_size,\n \t\t\t\t\t RTE_CACHE_LINE_SIZE);\n \tif (!txq->empty_tx_reqs) {\n-\t\tRTE_LOG(ERR, PMD, \"failed to alloc mem for tx reqs\\n\");\n+\t\tPMD_DRV_LOG(ERR, \"failed to alloc mem for tx reqs\\n\");\n \t\trte_free(txq->tx_buffer_info);\n \t\treturn -ENOMEM;\n \t}\n@@ -1258,7 +1271,7 @@ static int ena_tx_queue_setup(struct rte_eth_dev *dev,\n \t\t\t    txq->tx_max_header_size,\n \t\t\t    RTE_CACHE_LINE_SIZE);\n \tif (!txq->push_buf_intermediate_buf) {\n-\t\tRTE_LOG(ERR, PMD, \"failed to alloc push buff for LLQ\\n\");\n+\t\tPMD_DRV_LOG(ERR, \"failed to alloc push buff for LLQ\\n\");\n \t\trte_free(txq->tx_buffer_info);\n \t\trte_free(txq->empty_tx_reqs);\n \t\treturn -ENOMEM;\n@@ -1291,7 +1304,7 @@ static int ena_rx_queue_setup(struct rte_eth_dev *dev,\n \n \trxq = &adapter->rx_ring[queue_idx];\n \tif (rxq->configured) {\n-\t\tRTE_LOG(CRIT, PMD,\n+\t\tPMD_DRV_LOG(CRIT,\n \t\t\t\"API violation. Queue %d is already configured\\n\",\n \t\t\tqueue_idx);\n \t\treturn ENA_COM_FAULT;\n@@ -1301,14 +1314,14 @@ static int ena_rx_queue_setup(struct rte_eth_dev *dev,\n \t\tnb_desc = adapter->rx_ring_size;\n \n \tif (!rte_is_power_of_2(nb_desc)) {\n-\t\tRTE_LOG(ERR, PMD,\n+\t\tPMD_DRV_LOG(ERR,\n \t\t\t\"Unsupported size of RX queue: %d is not a power of 2.\\n\",\n \t\t\tnb_desc);\n \t\treturn -EINVAL;\n \t}\n \n \tif (nb_desc > adapter->rx_ring_size) {\n-\t\tRTE_LOG(ERR, PMD,\n+\t\tPMD_DRV_LOG(ERR,\n \t\t\t\"Unsupported size of RX queue (max size: %d)\\n\",\n \t\t\tadapter->rx_ring_size);\n \t\treturn -EINVAL;\n@@ -1325,7 +1338,7 @@ static int ena_rx_queue_setup(struct rte_eth_dev *dev,\n \t\t\t\t\t  sizeof(struct rte_mbuf *) * nb_desc,\n \t\t\t\t\t  RTE_CACHE_LINE_SIZE);\n \tif (!rxq->rx_buffer_info) {\n-\t\tRTE_LOG(ERR, PMD, \"failed to alloc mem for rx buffer info\\n\");\n+\t\tPMD_DRV_LOG(ERR, \"failed to alloc mem for rx buffer info\\n\");\n \t\treturn -ENOMEM;\n \t}\n \n@@ -1334,7 +1347,7 @@ static int ena_rx_queue_setup(struct rte_eth_dev *dev,\n \t\t\t\t\t    RTE_CACHE_LINE_SIZE);\n \n \tif (!rxq->rx_refill_buffer) {\n-\t\tRTE_LOG(ERR, PMD, \"failed to alloc mem for rx refill buffer\\n\");\n+\t\tPMD_DRV_LOG(ERR, \"failed to alloc mem for rx refill buffer\\n\");\n \t\trte_free(rxq->rx_buffer_info);\n \t\trxq->rx_buffer_info = NULL;\n \t\treturn -ENOMEM;\n@@ -1344,7 +1357,7 @@ static int ena_rx_queue_setup(struct rte_eth_dev *dev,\n \t\t\t\t\t sizeof(uint16_t) * nb_desc,\n \t\t\t\t\t RTE_CACHE_LINE_SIZE);\n \tif (!rxq->empty_rx_reqs) {\n-\t\tRTE_LOG(ERR, PMD, \"failed to alloc mem for empty rx reqs\\n\");\n+\t\tPMD_DRV_LOG(ERR, \"failed to alloc mem for empty rx reqs\\n\");\n \t\trte_free(rxq->rx_buffer_info);\n \t\trxq->rx_buffer_info = NULL;\n \t\trte_free(rxq->rx_refill_buffer);\n@@ -1408,7 +1421,7 @@ static int ena_populate_rx_queue(struct ena_ring *rxq, unsigned int count)\n \t\trc = ena_com_add_single_rx_desc(rxq->ena_com_io_sq,\n \t\t\t\t\t\t&ebuf, req_id);\n \t\tif (unlikely(rc)) {\n-\t\t\tRTE_LOG(WARNING, PMD, \"failed adding rx desc\\n\");\n+\t\t\tPMD_DRV_LOG(WARNING, \"failed adding rx desc\\n\");\n \t\t\trxq->rx_buffer_info[req_id] = NULL;\n \t\t\tbreak;\n \t\t}\n@@ -1416,7 +1429,7 @@ static int ena_populate_rx_queue(struct ena_ring *rxq, unsigned int count)\n \t}\n \n \tif (unlikely(i < count)) {\n-\t\tRTE_LOG(WARNING, PMD, \"refilled rx qid %d with only %d \"\n+\t\tPMD_DRV_LOG(WARNING, \"refilled rx qid %d with only %d \"\n \t\t\t\"buffers (from %d)\\n\", rxq->id, i, count);\n \t\trte_mempool_put_bulk(rxq->mb_pool, (void **)(&mbufs[i]),\n \t\t\t\t     count - i);\n@@ -1450,7 +1463,7 @@ static int ena_device_init(struct ena_com_dev *ena_dev,\n \t/* Initialize mmio registers */\n \trc = ena_com_mmio_reg_read_request_init(ena_dev);\n \tif (rc) {\n-\t\tRTE_LOG(ERR, PMD, \"failed to init mmio read less\\n\");\n+\t\tPMD_DRV_LOG(ERR, \"failed to init mmio read less\\n\");\n \t\treturn rc;\n \t}\n \n@@ -1465,14 +1478,14 @@ static int ena_device_init(struct ena_com_dev *ena_dev,\n \t/* reset device */\n \trc = ena_com_dev_reset(ena_dev, ENA_REGS_RESET_NORMAL);\n \tif (rc) {\n-\t\tRTE_LOG(ERR, PMD, \"cannot reset device\\n\");\n+\t\tPMD_DRV_LOG(ERR, \"cannot reset device\\n\");\n \t\tgoto err_mmio_read_less;\n \t}\n \n \t/* check FW version */\n \trc = ena_com_validate_version(ena_dev);\n \tif (rc) {\n-\t\tRTE_LOG(ERR, PMD, \"device version is too low\\n\");\n+\t\tPMD_DRV_LOG(ERR, \"device version is too low\\n\");\n \t\tgoto err_mmio_read_less;\n \t}\n \n@@ -1481,7 +1494,7 @@ static int ena_device_init(struct ena_com_dev *ena_dev,\n \t/* ENA device administration layer init */\n \trc = ena_com_admin_init(ena_dev, &aenq_handlers);\n \tif (rc) {\n-\t\tRTE_LOG(ERR, PMD,\n+\t\tPMD_DRV_LOG(ERR,\n \t\t\t\"cannot initialize ena admin queue with device\\n\");\n \t\tgoto err_mmio_read_less;\n \t}\n@@ -1497,7 +1510,7 @@ static int ena_device_init(struct ena_com_dev *ena_dev,\n \t/* Get Device Attributes and features */\n \trc = ena_com_get_dev_attr_feat(ena_dev, get_feat_ctx);\n \tif (rc) {\n-\t\tRTE_LOG(ERR, PMD,\n+\t\tPMD_DRV_LOG(ERR,\n \t\t\t\"cannot get attribute for ena device rc= %d\\n\", rc);\n \t\tgoto err_admin_init;\n \t}\n@@ -1511,7 +1524,7 @@ static int ena_device_init(struct ena_com_dev *ena_dev,\n \taenq_groups &= get_feat_ctx->aenq.supported_groups;\n \trc = ena_com_set_aenq_config(ena_dev, aenq_groups);\n \tif (rc) {\n-\t\tRTE_LOG(ERR, PMD, \"Cannot configure aenq groups rc: %d\\n\", rc);\n+\t\tPMD_DRV_LOG(ERR, \"Cannot configure aenq groups rc: %d\\n\", rc);\n \t\tgoto err_admin_init;\n \t}\n \n@@ -1548,7 +1561,7 @@ static void check_for_missing_keep_alive(struct ena_adapter *adapter)\n \n \tif (unlikely((rte_get_timer_cycles() - adapter->timestamp_wd) >=\n \t    adapter->keep_alive_timeout)) {\n-\t\tRTE_LOG(ERR, PMD, \"Keep alive timeout\\n\");\n+\t\tPMD_DRV_LOG(ERR, \"Keep alive timeout\\n\");\n \t\tadapter->reset_reason = ENA_REGS_RESET_KEEP_ALIVE_TO;\n \t\tadapter->trigger_reset = true;\n \t\t++adapter->dev_stats.wd_expired;\n@@ -1559,7 +1572,7 @@ static void check_for_missing_keep_alive(struct ena_adapter *adapter)\n static void check_for_admin_com_state(struct ena_adapter *adapter)\n {\n \tif (unlikely(!ena_com_get_admin_running_state(&adapter->ena_dev))) {\n-\t\tRTE_LOG(ERR, PMD, \"ENA admin queue is not in running state!\\n\");\n+\t\tPMD_DRV_LOG(ERR, \"ENA admin queue is not in running state!\\n\");\n \t\tadapter->reset_reason = ENA_REGS_RESET_ADMIN_TO;\n \t\tadapter->trigger_reset = true;\n \t}\n@@ -1575,7 +1588,7 @@ static void ena_timer_wd_callback(__rte_unused struct rte_timer *timer,\n \tcheck_for_admin_com_state(adapter);\n \n \tif (unlikely(adapter->trigger_reset)) {\n-\t\tRTE_LOG(ERR, PMD, \"Trigger reset is on\\n\");\n+\t\tPMD_DRV_LOG(ERR, \"Trigger reset is on\\n\");\n \t\t_rte_eth_dev_callback_process(dev, RTE_ETH_EVENT_INTR_RESET,\n \t\t\tNULL);\n \t}\n@@ -1603,7 +1616,7 @@ ena_set_queues_placement_policy(struct ena_adapter *adapter,\n \n \tllq_feature_mask = 1 << ENA_ADMIN_LLQ;\n \tif (!(ena_dev->supported_features & llq_feature_mask)) {\n-\t\tRTE_LOG(INFO, PMD,\n+\t\tPMD_DRV_LOG(INFO,\n \t\t\t\"LLQ is not supported. Fallback to host mode policy.\\n\");\n \t\tena_dev->tx_mem_queue_type = ENA_ADMIN_PLACEMENT_POLICY_HOST;\n \t\treturn 0;\n@@ -1622,7 +1635,7 @@ ena_set_queues_placement_policy(struct ena_adapter *adapter,\n \t\treturn 0;\n \n \tif (!adapter->dev_mem_base) {\n-\t\tRTE_LOG(ERR, PMD, \"Unable to access LLQ bar resource. \"\n+\t\tPMD_DRV_LOG(ERR, \"Unable to access LLQ bar resource. \"\n \t\t\t\"Fallback to host mode policy.\\n.\");\n \t\tena_dev->tx_mem_queue_type = ENA_ADMIN_PLACEMENT_POLICY_HOST;\n \t\treturn 0;\n@@ -1663,7 +1676,7 @@ static int ena_calc_io_queue_num(struct ena_com_dev *ena_dev,\n \tio_queue_num = RTE_MIN(io_queue_num, io_tx_cq_num);\n \n \tif (unlikely(io_queue_num == 0)) {\n-\t\tRTE_LOG(ERR, PMD, \"Number of IO queues should not be 0\\n\");\n+\t\tPMD_DRV_LOG(ERR, \"Number of IO queues should not be 0\\n\");\n \t\treturn -EFAULT;\n \t}\n \n@@ -1747,7 +1760,7 @@ static int eth_ena_dev_init(struct rte_eth_dev *eth_dev)\n \t\tqueue_type_str = \"Regular\";\n \telse\n \t\tqueue_type_str = \"Low latency\";\n-\tRTE_LOG(INFO, PMD, \"Placement policy: %s\\n\", queue_type_str);\n+\tPMD_DRV_LOG(INFO, \"Placement policy: %s\\n\", queue_type_str);\n \n \tcalc_queue_ctx.ena_dev = ena_dev;\n \tcalc_queue_ctx.get_feat_ctx = &get_feat_ctx;\n@@ -1799,7 +1812,7 @@ static int eth_ena_dev_init(struct rte_eth_dev *eth_dev)\n \t\t\t\t\t sizeof(*adapter->drv_stats),\n \t\t\t\t\t RTE_CACHE_LINE_SIZE);\n \tif (!adapter->drv_stats) {\n-\t\tRTE_LOG(ERR, PMD, \"failed to alloc mem for adapter stats\\n\");\n+\t\tPMD_DRV_LOG(ERR, \"failed to alloc mem for adapter stats\\n\");\n \t\trc = -ENOMEM;\n \t\tgoto err_delete_debug_area;\n \t}\n@@ -2004,7 +2017,7 @@ static uint16_t eth_ena_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,\n \n \t/* Check adapter state */\n \tif (unlikely(rx_ring->adapter->state != ENA_ADAPTER_STATE_RUNNING)) {\n-\t\tRTE_LOG(ALERT, PMD,\n+\t\tPMD_DRV_LOG(ALERT,\n \t\t\t\"Trying to receive pkts while device is NOT running\\n\");\n \t\treturn 0;\n \t}\n@@ -2024,7 +2037,7 @@ static uint16_t eth_ena_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,\n \t\t\t\t    rx_ring->ena_com_io_sq,\n \t\t\t\t    &ena_rx_ctx);\n \t\tif (unlikely(rc)) {\n-\t\t\tRTE_LOG(ERR, PMD, \"ena_com_rx_pkt error %d\\n\", rc);\n+\t\t\tPMD_DRV_LOG(ERR, \"ena_com_rx_pkt error %d\\n\", rc);\n \t\t\trx_ring->adapter->reset_reason =\n \t\t\t\tENA_REGS_RESET_TOO_MANY_RX_DESCS;\n \t\t\trx_ring->adapter->trigger_reset = true;\n@@ -2214,7 +2227,7 @@ static int ena_check_and_linearize_mbuf(struct ena_ring *tx_ring,\n \t++tx_ring->tx_stats.linearize;\n \trc = rte_pktmbuf_linearize(mbuf);\n \tif (unlikely(rc)) {\n-\t\tRTE_LOG(WARNING, PMD, \"Mbuf linearize failed\\n\");\n+\t\tPMD_DRV_LOG(WARNING, \"Mbuf linearize failed\\n\");\n \t\trte_atomic64_inc(&tx_ring->adapter->drv_stats->ierrors);\n \t\t++tx_ring->tx_stats.linearize_failed;\n \t\treturn rc;\n@@ -2245,7 +2258,7 @@ static uint16_t eth_ena_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,\n \n \t/* Check adapter state */\n \tif (unlikely(tx_ring->adapter->state != ENA_ADAPTER_STATE_RUNNING)) {\n-\t\tRTE_LOG(ALERT, PMD,\n+\t\tPMD_DRV_LOG(ALERT,\n \t\t\t\"Trying to xmit pkts while device is NOT running\\n\");\n \t\treturn 0;\n \t}\n@@ -2342,7 +2355,7 @@ static uint16_t eth_ena_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,\n \n \t\tif (ena_com_is_doorbell_needed(tx_ring->ena_com_io_sq,\n \t\t\t\t\t       &ena_tx_ctx)) {\n-\t\t\tRTE_LOG(DEBUG, PMD, \"llq tx max burst size of queue %d\"\n+\t\t\tPMD_DRV_LOG(DEBUG, \"llq tx max burst size of queue %d\"\n \t\t\t\t\" achieved, writing doorbell to send burst\\n\",\n \t\t\t\ttx_ring->id);\n \t\t\trte_wmb();\n@@ -2601,6 +2614,30 @@ RTE_INIT(ena_init_log)\n \tena_logtype_driver = rte_log_register(\"pmd.net.ena.driver\");\n \tif (ena_logtype_driver >= 0)\n \t\trte_log_set_level(ena_logtype_driver, RTE_LOG_NOTICE);\n+\n+#ifdef RTE_LIBRTE_ENA_DEBUG_RX\n+\tena_logtype_rx = rte_log_register(\"pmd.net.ena.rx\");\n+\tif (ena_logtype_rx >= 0)\n+\t\trte_log_set_level(ena_logtype_rx, RTE_LOG_NOTICE);\n+#endif\n+\n+#ifdef RTE_LIBRTE_ENA_DEBUG_TX\n+\tena_logtype_tx = rte_log_register(\"pmd.net.ena.tx\");\n+\tif (ena_logtype_tx >= 0)\n+\t\trte_log_set_level(ena_logtype_tx, RTE_LOG_NOTICE);\n+#endif\n+\n+#ifdef RTE_LIBRTE_ENA_DEBUG_TX_FREE\n+\tena_logtype_tx_free = rte_log_register(\"pmd.net.ena.tx_free\");\n+\tif (ena_logtype_tx_free >= 0)\n+\t\trte_log_set_level(ena_logtype_tx_free, RTE_LOG_NOTICE);\n+#endif\n+\n+#ifdef RTE_LIBRTE_ENA_COM_DEBUG\n+\tena_logtype_com = rte_log_register(\"pmd.net.ena.com\");\n+\tif (ena_logtype_com >= 0)\n+\t\trte_log_set_level(ena_logtype_com, RTE_LOG_NOTICE);\n+#endif\n }\n \n /******************************************************************************\n@@ -2632,7 +2669,7 @@ static void ena_notification(void *data,\n \tstruct ena_admin_ena_hw_hints *hints;\n \n \tif (aenq_e->aenq_common_desc.group != ENA_ADMIN_NOTIFICATION)\n-\t\tRTE_LOG(WARNING, PMD, \"Invalid group(%x) expected %x\\n\",\n+\t\tPMD_DRV_LOG(WARNING, \"Invalid group(%x) expected %x\\n\",\n \t\t\taenq_e->aenq_common_desc.group,\n \t\t\tENA_ADMIN_NOTIFICATION);\n \n@@ -2643,7 +2680,7 @@ static void ena_notification(void *data,\n \t\tena_update_hints(adapter, hints);\n \t\tbreak;\n \tdefault:\n-\t\tRTE_LOG(ERR, PMD, \"Invalid aenq notification link state %d\\n\",\n+\t\tPMD_DRV_LOG(ERR, \"Invalid aenq notification link state %d\\n\",\n \t\t\taenq_e->aenq_common_desc.syndrom);\n \t}\n }\n@@ -2668,7 +2705,7 @@ static void ena_keep_alive(void *adapter_data,\n static void unimplemented_aenq_handler(__rte_unused void *data,\n \t\t\t\t       __rte_unused struct ena_admin_aenq_entry *aenq_e)\n {\n-\tRTE_LOG(ERR, PMD, \"Unknown event was received or event with \"\n+\tPMD_DRV_LOG(ERR, \"Unknown event was received or event with \"\n \t\t\t  \"unimplemented handler\\n\");\n }\n \ndiff --git a/drivers/net/ena/ena_logs.h b/drivers/net/ena/ena_logs.h\nindex 2c0e91b656ac..fb7fb1fc143b 100644\n--- a/drivers/net/ena/ena_logs.h\n+++ b/drivers/net/ena/ena_logs.h\n@@ -40,22 +40,28 @@ extern int ena_logtype_init;\n \t\t\"%s(): \" fmt \"\\n\", __func__, ## args)\n \n #ifdef RTE_LIBRTE_ENA_DEBUG_RX\n-#define PMD_RX_LOG(level, fmt, args...) \\\n-\tRTE_LOG(level, PMD, \"%s(): \" fmt \"\\n\", __func__, ## args)\n+extern int ena_logtype_rx;\n+#define PMD_RX_LOG(level, fmt, args...)\t\t\t\\\n+\trte_log(RTE_LOG_ ## level, ena_logtype_rx,\t\\\n+\t\t\"%s(): \" fmt \"\\n\", __func__, ## args)\n #else\n #define PMD_RX_LOG(level, fmt, args...) do { } while (0)\n #endif\n \n #ifdef RTE_LIBRTE_ENA_DEBUG_TX\n-#define PMD_TX_LOG(level, fmt, args...) \\\n-\tRTE_LOG(level, PMD, \"%s(): \" fmt \"\\n\", __func__, ## args)\n+extern int ena_logtype_tx;\n+#define PMD_TX_LOG(level, fmt, args...)\t\t\t\\\n+\trte_log(RTE_LOG_ ## level, ena_logtype_tx,\t\\\n+\t\t\"%s(): \" fmt \"\\n\", __func__, ## args)\n #else\n #define PMD_TX_LOG(level, fmt, args...) do { } while (0)\n #endif\n \n #ifdef RTE_LIBRTE_ENA_DEBUG_TX_FREE\n-#define PMD_TX_FREE_LOG(level, fmt, args...) \\\n-\tRTE_LOG(level, PMD, \"%s(): \" fmt \"\\n\", __func__, ## args)\n+extern int ena_logtype_tx_free;\n+#define PMD_TX_FREE_LOG(level, fmt, args...)\t\t\t\\\n+\trte_log(RTE_LOG_ ## level, ena_logtype_tx_free,\t\\\n+\t\t\"%s(): \" fmt \"\\n\", __func__, ## args)\n #else\n #define PMD_TX_FREE_LOG(level, fmt, args...) do { } while (0)\n #endif\n",
    "prefixes": [
        "RFC"
    ]
}