get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 93201,
    "url": "https://patches.dpdk.org/api/patches/93201/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20210512101346.24803-3-mk@semihalf.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": "<20210512101346.24803-3-mk@semihalf.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20210512101346.24803-3-mk@semihalf.com",
    "date": "2021-05-12T10:13:45",
    "name": "[v5,2/3] net/ena: make ethdev references multiprocess safe",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "504a694a67a1a5cafe95b5cc4efda03e3e0874f7",
    "submitter": {
        "id": 786,
        "url": "https://patches.dpdk.org/api/people/786/?format=api",
        "name": "Michal Krawczyk",
        "email": "mk@semihalf.com"
    },
    "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/20210512101346.24803-3-mk@semihalf.com/mbox/",
    "series": [
        {
            "id": 16955,
            "url": "https://patches.dpdk.org/api/series/16955/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=16955",
            "date": "2021-05-12T10:13:43",
            "name": "net/ena: update ENA PMD to v2.3.0",
            "version": 5,
            "mbox": "https://patches.dpdk.org/series/16955/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/93201/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/93201/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 509ADA0C43;\n\tWed, 12 May 2021 12:14:35 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 619E041108;\n\tWed, 12 May 2021 12:14:27 +0200 (CEST)",
            "from mail-lf1-f49.google.com (mail-lf1-f49.google.com\n [209.85.167.49]) by mails.dpdk.org (Postfix) with ESMTP id B366C410E3\n for <dev@dpdk.org>; Wed, 12 May 2021 12:14:24 +0200 (CEST)",
            "by mail-lf1-f49.google.com with SMTP id z13so32969150lft.1\n for <dev@dpdk.org>; Wed, 12 May 2021 03:14:24 -0700 (PDT)",
            "from DESKTOP-U5LNN3J.localdomain (89-79-189-199.dynamic.chello.pl.\n [89.79.189.199])\n by smtp.gmail.com with ESMTPSA id d26sm2892244lfa.118.2021.05.12.03.14.22\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Wed, 12 May 2021 03:14:23 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=semihalf-com.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=TmWh8Wp2qjam8VbJM6dqam/gokaKg1o7pgexaceylcI=;\n b=YCB6/d5xWtJgobZz6qZRv9R7M33R3Co0qwf4Gly5vOQkBxFtk1Q3bTWQjl8mybw/MJ\n 5ZlhLxwdq2vNiLhNQx6I7IcvIGC78Wljvyo9X9AwEk6S2MWGTxG2we58QDk5wCAARp4K\n 3qqKb/+qHObtf653bwxZ5Ilxck9MEE+qXpqMwCpILwiLAA2PlU6fJ5eYJiHoGrXW1lkr\n SN3G0uYJcOcltsZNyeVgFGVjxgq4tNLsGaEouUu1/dZN8i4NI4rnk0OotTPXpaQnPFiK\n 0qj8pIAEDkDRX/lKoj2gVYJctDI9VPnvSZ6r0Leg/7oUq9Z+0HKQGNnpQ76Q10SkPszg\n 3jGQ==",
        "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=TmWh8Wp2qjam8VbJM6dqam/gokaKg1o7pgexaceylcI=;\n b=a2D+DLeklqXIi4+dAa1Fa9JneF1Dp54zdoe+zZSW4toGIP0zEdYz5hCcJlBn22sBgN\n gtQnx2jq5Q9FP2IhwKyN4VX6X4/R3vBghjttCewNq/vn7KJTRw868+z+8HL53TxmhAXb\n 2rQd7uKfY4MXb0k+lkOngaVni8GdWhQxTF/g1EAn0H3epE+y/KmrrZjdmjQr9aH6Z4Ru\n fpyUgF9XWgpB/y9E1F+qEGUrw/PRmnkXlkDQVQ6unCu1sRLU3JtoY8jotWRN5Zh9Ygf8\n G2Sd630TQSKWJpiROWGTsaTB5c+6mRRH12278np6fpNCMF1V7X5WUganDkYBvmI5iYnx\n VKgg==",
        "X-Gm-Message-State": "AOAM531RgntnOYaM+9r2d7HHDT4/GhGgRWCzJfdua1KKiTbRLxXl8IXw\n pWAQZFKHa405RyVeKge3gLA0HA==",
        "X-Google-Smtp-Source": "\n ABdhPJyN6qYg4+b85g5IMZIXSJ8/peQeT62BXEv8M3ODzFA8wzJRsuAjNanZVSlwZSwHJCG7IeHgbg==",
        "X-Received": "by 2002:ac2:57c1:: with SMTP id k1mr24978454lfo.453.1620814464382;\n Wed, 12 May 2021 03:14:24 -0700 (PDT)",
        "From": "Michal Krawczyk <mk@semihalf.com>",
        "To": "ferruh.yigit@intel.com",
        "Cc": "dev@dpdk.org, ndagan@amazon.com, gtzalik@amazon.com, igorch@amazon.com,\n upstream@semihalf.com, Stanislaw Kardach <kda@semihalf.com>,\n Michal Krawczyk <mk@semihalf.com>, Shay Agroskin <shayagr@amazon.com>",
        "Date": "Wed, 12 May 2021 12:13:45 +0200",
        "Message-Id": "<20210512101346.24803-3-mk@semihalf.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "In-Reply-To": "<20210512101346.24803-1-mk@semihalf.com>",
        "References": "\n <CAJMMOfMq4oXsn5+BiP3RNbntunCpA1b0-zXQV9+oLk4qdPSM=A@mail.gmail.com>\n <20210512101346.24803-1-mk@semihalf.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dpdk-dev] [PATCH v5 2/3] net/ena: make ethdev references\n multiprocess safe",
        "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",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "From: Stanislaw Kardach <kda@semihalf.com>\n\nrte_pci_device and rte_eth_dev are process-local structures. Therefore\nena_adapter::pdev and ena_adapter::rte_dev cannot be used universally.\n\nBoth ena_timer_wd_callback and ena_interrupt_handler_rte needs access to\nthe rte_eth_dev, but as they are being setup and executed in the primary\nprocess, it is safe to pass there the same pointer, which is used for\nthe device configuration.\n\nIn all other cases, except the eth_ena_dev_init(), the rte_eth_dev_data\nis used instead.\n\nSigned-off-by: Stanislaw Kardach <kda@semihalf.com>\nSigned-off-by: Michal Krawczyk <mk@semihalf.com>\nReviewed-by: Igor Chauskin <igorch@amazon.com>\nReviewed-by: Shay Agroskin <shayagr@amazon.com>\n---\nv5:\n* Remove adapter::port_id field.\n* Update commit log.\n\nv4:\n* Remove access to the \"rte_eth_devices\" and instead pass rte_eth_dev as an\n  argument to all the primary process callbacks.\n* Fix commit heading style.\n\n drivers/net/ena/ena_ethdev.c | 70 ++++++++++++++++++------------------\n drivers/net/ena/ena_ethdev.h |  4 +--\n 2 files changed, 36 insertions(+), 38 deletions(-)",
    "diff": "diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c\nindex fb2b19cfdb..e310e7ae8c 100644\n--- a/drivers/net/ena/ena_ethdev.c\n+++ b/drivers/net/ena/ena_ethdev.c\n@@ -164,6 +164,7 @@ static const struct rte_pci_id pci_id_ena_map[] = {\n static struct ena_aenq_handlers aenq_handlers;\n \n static int ena_device_init(struct ena_com_dev *ena_dev,\n+\t\t\t   struct rte_pci_device *pdev,\n \t\t\t   struct ena_com_dev_get_features_ctx *get_feat_ctx,\n \t\t\t   bool *wd_state);\n static int ena_dev_configure(struct rte_eth_dev *dev);\n@@ -457,11 +458,11 @@ static void ena_config_host_info(struct ena_com_dev *ena_dev)\n }\n \n /* This function calculates the number of xstats based on the current config */\n-static unsigned int ena_xstats_calc_num(struct rte_eth_dev *dev)\n+static unsigned int ena_xstats_calc_num(struct rte_eth_dev_data *data)\n {\n \treturn ENA_STATS_ARRAY_GLOBAL + ENA_STATS_ARRAY_ENI +\n-\t\t(dev->data->nb_tx_queues * ENA_STATS_ARRAY_TX) +\n-\t\t(dev->data->nb_rx_queues * ENA_STATS_ARRAY_RX);\n+\t\t(data->nb_tx_queues * ENA_STATS_ARRAY_TX) +\n+\t\t(data->nb_rx_queues * ENA_STATS_ARRAY_RX);\n }\n \n static void ena_config_debug_area(struct ena_adapter *adapter)\n@@ -469,7 +470,7 @@ static void ena_config_debug_area(struct ena_adapter *adapter)\n \tu32 debug_area_size;\n \tint rc, ss_count;\n \n-\tss_count = ena_xstats_calc_num(adapter->rte_dev);\n+\tss_count = ena_xstats_calc_num(adapter->edev_data);\n \n \t/* allocate 32 bytes for each string and 64bit for the value */\n \tdebug_area_size = ss_count * ETH_GSTRING_LEN + sizeof(u64) * ss_count;\n@@ -518,7 +519,7 @@ static int ena_close(struct rte_eth_dev *dev)\n \trte_intr_disable(intr_handle);\n \trte_intr_callback_unregister(intr_handle,\n \t\t\t\t     ena_interrupt_handler_rte,\n-\t\t\t\t     adapter);\n+\t\t\t\t     dev);\n \n \t/*\n \t * MAC is not allocated dynamically. Setting NULL should prevent from\n@@ -593,7 +594,7 @@ static int ena_rss_reta_update(struct rte_eth_dev *dev,\n \t}\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+\t\t__func__, reta_size, dev->data->port_id);\n \n \treturn 0;\n }\n@@ -637,7 +638,7 @@ static int ena_rss_reta_query(struct rte_eth_dev *dev,\n static int ena_rss_init_default(struct ena_adapter *adapter)\n {\n \tstruct ena_com_dev *ena_dev = &adapter->ena_dev;\n-\tuint16_t nb_rx_queues = adapter->rte_dev->data->nb_rx_queues;\n+\tuint16_t nb_rx_queues = adapter->edev_data->nb_rx_queues;\n \tint rc, i;\n \tu32 val;\n \n@@ -676,7 +677,7 @@ static int ena_rss_init_default(struct ena_adapter *adapter)\n \t\tgoto err_fill_indir;\n \t}\n \tPMD_DRV_LOG(DEBUG, \"RSS configured for port %d\\n\",\n-\t\tadapter->rte_dev->data->port_id);\n+\t\tadapter->edev_data->port_id);\n \n \treturn 0;\n \n@@ -847,10 +848,10 @@ static uint32_t ena_get_mtu_conf(struct ena_adapter *adapter)\n {\n \tuint32_t max_frame_len = adapter->max_mtu;\n \n-\tif (adapter->rte_eth_dev_data->dev_conf.rxmode.offloads &\n+\tif (adapter->edev_data->dev_conf.rxmode.offloads &\n \t    DEV_RX_OFFLOAD_JUMBO_FRAME)\n \t\tmax_frame_len =\n-\t\t\tadapter->rte_eth_dev_data->dev_conf.rxmode.max_rx_pkt_len;\n+\t\t\tadapter->edev_data->dev_conf.rxmode.max_rx_pkt_len;\n \n \treturn max_frame_len;\n }\n@@ -1070,8 +1071,8 @@ static int ena_start(struct rte_eth_dev *dev)\n \tif (rc)\n \t\tgoto err_start_tx;\n \n-\tif (adapter->rte_dev->data->dev_conf.rxmode.mq_mode &\n-\t    ETH_MQ_RX_RSS_FLAG && adapter->rte_dev->data->nb_rx_queues > 0) {\n+\tif (adapter->edev_data->dev_conf.rxmode.mq_mode &\n+\t    ETH_MQ_RX_RSS_FLAG && adapter->edev_data->nb_rx_queues > 0) {\n \t\trc = ena_rss_init_default(adapter);\n \t\tif (rc)\n \t\t\tgoto err_rss_init;\n@@ -1084,7 +1085,7 @@ static int ena_start(struct rte_eth_dev *dev)\n \n \tticks = rte_get_timer_hz();\n \trte_timer_reset(&adapter->timer_wd, ticks, PERIODICAL, rte_lcore_id(),\n-\t\t\tena_timer_wd_callback, adapter);\n+\t\t\tena_timer_wd_callback, dev);\n \n \t++adapter->dev_stats.dev_start;\n \tadapter->state = ENA_ADAPTER_STATE_RUNNING;\n@@ -1505,6 +1506,7 @@ static int ena_populate_rx_queue(struct ena_ring *rxq, unsigned int count)\n }\n \n static int ena_device_init(struct ena_com_dev *ena_dev,\n+\t\t\t   struct rte_pci_device *pdev,\n \t\t\t   struct ena_com_dev_get_features_ctx *get_feat_ctx,\n \t\t\t   bool *wd_state)\n {\n@@ -1522,9 +1524,7 @@ static int ena_device_init(struct ena_com_dev *ena_dev,\n \t/* The PCIe configuration space revision id indicate if mmio reg\n \t * read is disabled.\n \t */\n-\treadless_supported =\n-\t\t!(((struct rte_pci_device *)ena_dev->dmadev)->id.class_id\n-\t\t\t       & ENA_MMIO_DISABLE_REG_READ);\n+\treadless_supported = !(pdev->id.class_id & ENA_MMIO_DISABLE_REG_READ);\n \tena_com_set_mmio_read_mode(ena_dev, readless_supported);\n \n \t/* reset device */\n@@ -1595,12 +1595,13 @@ static int ena_device_init(struct ena_com_dev *ena_dev,\n \n static void ena_interrupt_handler_rte(void *cb_arg)\n {\n-\tstruct ena_adapter *adapter = cb_arg;\n+\tstruct rte_eth_dev *dev = cb_arg;\n+\tstruct ena_adapter *adapter = dev->data->dev_private;\n \tstruct ena_com_dev *ena_dev = &adapter->ena_dev;\n \n \tena_com_admin_q_comp_intr_handler(ena_dev);\n \tif (likely(adapter->state != ENA_ADAPTER_STATE_CLOSED))\n-\t\tena_com_aenq_intr_handler(ena_dev, adapter);\n+\t\tena_com_aenq_intr_handler(ena_dev, dev);\n }\n \n static void check_for_missing_keep_alive(struct ena_adapter *adapter)\n@@ -1633,8 +1634,8 @@ static void check_for_admin_com_state(struct ena_adapter *adapter)\n static void ena_timer_wd_callback(__rte_unused struct rte_timer *timer,\n \t\t\t\t  void *arg)\n {\n-\tstruct ena_adapter *adapter = arg;\n-\tstruct rte_eth_dev *dev = adapter->rte_dev;\n+\tstruct rte_eth_dev *dev = arg;\n+\tstruct ena_adapter *adapter = dev->data->dev_private;\n \n \tcheck_for_missing_keep_alive(adapter);\n \tcheck_for_admin_com_state(adapter);\n@@ -1775,11 +1776,9 @@ static int eth_ena_dev_init(struct rte_eth_dev *eth_dev)\n \tmemset(adapter, 0, sizeof(struct ena_adapter));\n \tena_dev = &adapter->ena_dev;\n \n-\tadapter->rte_eth_dev_data = eth_dev->data;\n-\tadapter->rte_dev = eth_dev;\n+\tadapter->edev_data = eth_dev->data;\n \n \tpci_dev = RTE_ETH_DEV_TO_PCI(eth_dev);\n-\tadapter->pdev = pci_dev;\n \n \tPMD_INIT_LOG(INFO, \"Initializing %x:%x:%x.%d\",\n \t\t     pci_dev->addr.domain,\n@@ -1799,7 +1798,8 @@ static int eth_ena_dev_init(struct rte_eth_dev *eth_dev)\n \t}\n \n \tena_dev->reg_bar = adapter->regs;\n-\tena_dev->dmadev = adapter->pdev;\n+\t/* This is a dummy pointer for ena_com functions. */\n+\tena_dev->dmadev = adapter;\n \n \tadapter->id_number = adapters_found;\n \n@@ -1813,7 +1813,7 @@ static int eth_ena_dev_init(struct rte_eth_dev *eth_dev)\n \t}\n \n \t/* device specific initialization routine */\n-\trc = ena_device_init(ena_dev, &get_feat_ctx, &wd_state);\n+\trc = ena_device_init(ena_dev, pci_dev, &get_feat_ctx, &wd_state);\n \tif (rc) {\n \t\tPMD_INIT_LOG(CRIT, \"Failed to init ENA device\");\n \t\tgoto err;\n@@ -1896,7 +1896,7 @@ static int eth_ena_dev_init(struct rte_eth_dev *eth_dev)\n \n \trte_intr_callback_register(intr_handle,\n \t\t\t\t   ena_interrupt_handler_rte,\n-\t\t\t\t   adapter);\n+\t\t\t\t   eth_dev);\n \trte_intr_enable(intr_handle);\n \tena_com_set_admin_polling_mode(ena_dev, false);\n \tena_com_admin_aenq_enable(ena_dev);\n@@ -2679,7 +2679,7 @@ static int ena_xstats_get_names(struct rte_eth_dev *dev,\n \t\t\t\tstruct rte_eth_xstat_name *xstats_names,\n \t\t\t\tunsigned int n)\n {\n-\tunsigned int xstats_count = ena_xstats_calc_num(dev);\n+\tunsigned int xstats_count = ena_xstats_calc_num(dev->data);\n \tunsigned int stat, i, count = 0;\n \n \tif (n < xstats_count || !xstats_names)\n@@ -2728,7 +2728,7 @@ static int ena_xstats_get(struct rte_eth_dev *dev,\n \t\t\t  unsigned int n)\n {\n \tstruct ena_adapter *adapter = dev->data->dev_private;\n-\tunsigned int xstats_count = ena_xstats_calc_num(dev);\n+\tunsigned int xstats_count = ena_xstats_calc_num(dev->data);\n \tunsigned int stat, i, count = 0;\n \tint stat_offset;\n \tvoid *stats_begin;\n@@ -2953,14 +2953,12 @@ RTE_LOG_REGISTER_SUFFIX(ena_logtype_com, com, NOTICE);\n static void ena_update_on_link_change(void *adapter_data,\n \t\t\t\t      struct ena_admin_aenq_entry *aenq_e)\n {\n-\tstruct rte_eth_dev *eth_dev;\n-\tstruct ena_adapter *adapter;\n+\tstruct rte_eth_dev *eth_dev = adapter_data;\n+\tstruct ena_adapter *adapter = eth_dev->data->dev_private;\n \tstruct ena_admin_aenq_link_change_desc *aenq_link_desc;\n \tuint32_t status;\n \n-\tadapter = adapter_data;\n \taenq_link_desc = (struct ena_admin_aenq_link_change_desc *)aenq_e;\n-\teth_dev = adapter->rte_dev;\n \n \tstatus = get_ena_admin_aenq_link_change_desc_link_status(aenq_link_desc);\n \tadapter->link_status = status;\n@@ -2969,10 +2967,11 @@ static void ena_update_on_link_change(void *adapter_data,\n \trte_eth_dev_callback_process(eth_dev, RTE_ETH_EVENT_INTR_LSC, NULL);\n }\n \n-static void ena_notification(void *data,\n+static void ena_notification(void *adapter_data,\n \t\t\t     struct ena_admin_aenq_entry *aenq_e)\n {\n-\tstruct ena_adapter *adapter = data;\n+\tstruct rte_eth_dev *eth_dev = adapter_data;\n+\tstruct ena_adapter *adapter = eth_dev->data->dev_private;\n \tstruct ena_admin_ena_hw_hints *hints;\n \n \tif (aenq_e->aenq_common_desc.group != ENA_ADMIN_NOTIFICATION)\n@@ -2995,7 +2994,8 @@ static void ena_notification(void *data,\n static void ena_keep_alive(void *adapter_data,\n \t\t\t   __rte_unused struct ena_admin_aenq_entry *aenq_e)\n {\n-\tstruct ena_adapter *adapter = adapter_data;\n+\tstruct rte_eth_dev *eth_dev = adapter_data;\n+\tstruct ena_adapter *adapter = eth_dev->data->dev_private;\n \tstruct ena_admin_aenq_keep_alive_desc *desc;\n \tuint64_t rx_drops;\n \tuint64_t tx_drops;\ndiff --git a/drivers/net/ena/ena_ethdev.h b/drivers/net/ena/ena_ethdev.h\nindex ae235897ee..78718b759b 100644\n--- a/drivers/net/ena/ena_ethdev.h\n+++ b/drivers/net/ena/ena_ethdev.h\n@@ -210,9 +210,7 @@ struct ena_offloads {\n /* board specific private data structure */\n struct ena_adapter {\n \t/* OS defined structs */\n-\tstruct rte_pci_device *pdev;\n-\tstruct rte_eth_dev_data *rte_eth_dev_data;\n-\tstruct rte_eth_dev *rte_dev;\n+\tstruct rte_eth_dev_data *edev_data;\n \n \tstruct ena_com_dev ena_dev __rte_cache_aligned;\n \n",
    "prefixes": [
        "v5",
        "2/3"
    ]
}