get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 28250,
    "url": "http://patches.dpdk.org/api/patches/28250/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/d4c41e00816d402cecc8411721eabde76858ccfc.1504252977.git.adrien.mazarguil@6wind.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": "<d4c41e00816d402cecc8411721eabde76858ccfc.1504252977.git.adrien.mazarguil@6wind.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/d4c41e00816d402cecc8411721eabde76858ccfc.1504252977.git.adrien.mazarguil@6wind.com",
    "date": "2017-09-01T08:07:06",
    "name": "[dpdk-dev,v2,51/51] net/mlx4: rely on ethdev for Tx/Rx queue arrays",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "59a2c299bdb887a88c52620e85afdbb4b4ba94cf",
    "submitter": {
        "id": 165,
        "url": "http://patches.dpdk.org/api/people/165/?format=api",
        "name": "Adrien Mazarguil",
        "email": "adrien.mazarguil@6wind.com"
    },
    "delegate": {
        "id": 319,
        "url": "http://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/d4c41e00816d402cecc8411721eabde76858ccfc.1504252977.git.adrien.mazarguil@6wind.com/mbox/",
    "series": [],
    "comments": "http://patches.dpdk.org/api/patches/28250/comments/",
    "check": "fail",
    "checks": "http://patches.dpdk.org/api/patches/28250/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 666839B9B;\n\tFri,  1 Sep 2017 10:08:37 +0200 (CEST)",
            "from mail-wm0-f54.google.com (mail-wm0-f54.google.com\n\t[74.125.82.54]) by dpdk.org (Postfix) with ESMTP id ED47999EC\n\tfor <dev@dpdk.org>; Fri,  1 Sep 2017 10:08:26 +0200 (CEST)",
            "by mail-wm0-f54.google.com with SMTP id 187so3723834wmn.1\n\tfor <dev@dpdk.org>; Fri, 01 Sep 2017 01:08:26 -0700 (PDT)",
            "from 6wind.com (host.78.145.23.62.rev.coltfrance.com.\n\t[62.23.145.78]) by smtp.gmail.com with ESMTPSA id\n\tb72sm7870546wmd.0.2017.09.01.01.08.25 for <dev@dpdk.org>\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);\n\tFri, 01 Sep 2017 01:08:25 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=6wind-com.20150623.gappssmtp.com; s=20150623;\n\th=from:to:subject:date:message-id:in-reply-to:references;\n\tbh=ynuw3fCk7zMwNpaF5GtnfOGzodh7kEpOFIIA/EiBr0A=;\n\tb=Hm4ed1HpUeuIJBCMuHrnlxSHj+9v7Rgh3OuYXQt1iTAQkrDPhKbFikhBNa0u10MzKU\n\tKjQg8idvpsnc3iGKi9Ydx694h2mP+MjCZro2Ri+l6MZ+Au3mEnA/2urdyhoKmkpgRG8r\n\tcyKEdyN+nDo7uLNSkkXJUDiEVhcJKjIuvw+SdvFxCJxj6RsMoxd6Dv67C5vLofwWLsWS\n\tg4dA3ENZ2jOZcYIdYYkZPzJL84OS6SQaDqGEIak0UEL/naOw3sJWT8oE6Kvt2/5nIE6X\n\tpn0uK44fi/JQZmO91okSGVyYcivPwg86m5cUtbqT82vW98Db9cz1fDVE3saYpbY1VOCS\n\tzyEA==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:from:to:subject:date:message-id:in-reply-to\n\t:references;\n\tbh=ynuw3fCk7zMwNpaF5GtnfOGzodh7kEpOFIIA/EiBr0A=;\n\tb=YOtVRhq0jACn5JTZuDcmM0h+l4fYEelmLJo5kfA2f0rvWvQ+HMSfRcauxBcPveCpfk\n\t9ZqQhSrXO7ZmTfEQKqeePTpEyKYR+UZnIaPJLOyochZwW4og+OwToD7JAUo4wRnH69oA\n\tFwzAblpoDGbwWRk+TC4oMdUr4rhBA2mspqn+QuLlYYRzA7UHBsnPOaftiy2apdb+K/iX\n\tqftvm9qumqGSwVYpFL1GXwpsHxGHU+Tb5+bVrT42L25PdFfiCk5/6bsehUH392mDTOH+\n\tm3vndLsF5srHd33SRUTYJJq5QBd/qt721dKfcnlWAin2LD+kJ++21guy84BmdV9Kxjod\n\tH2TQ==",
        "X-Gm-Message-State": "AHPjjUgCmd3e7BcvYssOP7RciILpRJs4APjhhN4eFq/tvZv3DVhocl5p\n\tTOMrGpApUiUGC6Kwhvo=",
        "X-Google-Smtp-Source": "ADKCNb4Qxw5WjOOhLLZVYdRf4su0HZWo7H28sGsjsf1tvwgVDg7jTV8JrNonjMh1nLMYEGhUJl65qw==",
        "X-Received": "by 10.28.109.24 with SMTP id i24mr670289wmc.68.1504253306195;\n\tFri, 01 Sep 2017 01:08:26 -0700 (PDT)",
        "From": "Adrien Mazarguil <adrien.mazarguil@6wind.com>",
        "To": "dev@dpdk.org",
        "Date": "Fri,  1 Sep 2017 10:07:06 +0200",
        "Message-Id": "<d4c41e00816d402cecc8411721eabde76858ccfc.1504252977.git.adrien.mazarguil@6wind.com>",
        "X-Mailer": "git-send-email 2.1.4",
        "In-Reply-To": "<cover.1504252977.git.adrien.mazarguil@6wind.com>",
        "References": "<cover.1501598383.git.adrien.mazarguil@6wind.com>\n\t<cover.1504252977.git.adrien.mazarguil@6wind.com>",
        "Subject": "[dpdk-dev] [PATCH v2 51/51] net/mlx4: rely on ethdev for Tx/Rx\n\tqueue arrays",
        "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": "Allocation and management of Tx/Rx queue arrays is done by wrappers at the\nethdev level. The resulting information is copied to the private structure\nwhile configuring the device, where it is managed separately by the PMD.\n\nThis is redundant and consumes space in the private structure.\n\nRelying more on ethdev also means there is no need to protect the PMD\nagainst burst function calls while closing the device anymore.\n\nSigned-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>\n---\n drivers/net/mlx4/mlx4.c        | 58 ++++---------------------------------\n drivers/net/mlx4/mlx4.h        |  5 ----\n drivers/net/mlx4/mlx4_ethdev.c | 41 ++++++++++++--------------\n drivers/net/mlx4/mlx4_flow.c   |  5 ++--\n drivers/net/mlx4/mlx4_intr.c   | 10 +++----\n drivers/net/mlx4/mlx4_rxq.c    | 20 ++++++-------\n drivers/net/mlx4/mlx4_txq.c    | 16 +++++-----\n 7 files changed, 48 insertions(+), 107 deletions(-)",
    "diff": "diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c\nindex 317d0e6..b084903 100644\n--- a/drivers/net/mlx4/mlx4.c\n+++ b/drivers/net/mlx4/mlx4.c\n@@ -44,7 +44,6 @@\n #include <stdio.h>\n #include <stdlib.h>\n #include <string.h>\n-#include <unistd.h>\n \n /* Verbs headers do not support -pedantic. */\n #ifdef PEDANTIC\n@@ -88,8 +87,6 @@ const char *pmd_mlx4_init_params[] = {\n /**\n  * DPDK callback for Ethernet device configuration.\n  *\n- * Prepare the driver for a given number of TX and RX queues.\n- *\n  * @param dev\n  *   Pointer to Ethernet device structure.\n  *\n@@ -99,22 +96,7 @@ const char *pmd_mlx4_init_params[] = {\n static int\n mlx4_dev_configure(struct rte_eth_dev *dev)\n {\n-\tstruct priv *priv = dev->data->dev_private;\n-\tunsigned int rxqs_n = dev->data->nb_rx_queues;\n-\tunsigned int txqs_n = dev->data->nb_tx_queues;\n-\n-\tpriv->rxqs = (void *)dev->data->rx_queues;\n-\tpriv->txqs = (void *)dev->data->tx_queues;\n-\tif (txqs_n != priv->txqs_n) {\n-\t\tINFO(\"%p: TX queues number update: %u -> %u\",\n-\t\t     (void *)dev, priv->txqs_n, txqs_n);\n-\t\tpriv->txqs_n = txqs_n;\n-\t}\n-\tif (rxqs_n != priv->rxqs_n) {\n-\t\tINFO(\"%p: Rx queues number update: %u -> %u\",\n-\t\t     (void *)dev, priv->rxqs_n, rxqs_n);\n-\t\tpriv->rxqs_n = rxqs_n;\n-\t}\n+\t(void)dev;\n \treturn 0;\n }\n \n@@ -196,7 +178,6 @@ static void\n mlx4_dev_close(struct rte_eth_dev *dev)\n {\n \tstruct priv *priv = dev->data->dev_private;\n-\tvoid *tmp;\n \tunsigned int i;\n \n \tif (priv == NULL)\n@@ -205,41 +186,12 @@ mlx4_dev_close(struct rte_eth_dev *dev)\n \t      (void *)dev,\n \t      ((priv->ctx != NULL) ? priv->ctx->device->name : \"\"));\n \tmlx4_mac_addr_del(priv);\n-\t/*\n-\t * Prevent crashes when queues are still in use. This is unfortunately\n-\t * still required for DPDK 1.3 because some programs (such as testpmd)\n-\t * never release them before closing the device.\n-\t */\n \tdev->rx_pkt_burst = mlx4_rx_burst_removed;\n \tdev->tx_pkt_burst = mlx4_tx_burst_removed;\n-\tif (priv->rxqs != NULL) {\n-\t\t/* XXX race condition if mlx4_rx_burst() is still running. */\n-\t\tusleep(1000);\n-\t\tfor (i = 0; (i != priv->rxqs_n); ++i) {\n-\t\t\ttmp = (*priv->rxqs)[i];\n-\t\t\tif (tmp == NULL)\n-\t\t\t\tcontinue;\n-\t\t\t(*priv->rxqs)[i] = NULL;\n-\t\t\tmlx4_rxq_cleanup(tmp);\n-\t\t\trte_free(tmp);\n-\t\t}\n-\t\tpriv->rxqs_n = 0;\n-\t\tpriv->rxqs = NULL;\n-\t}\n-\tif (priv->txqs != NULL) {\n-\t\t/* XXX race condition if mlx4_tx_burst() is still running. */\n-\t\tusleep(1000);\n-\t\tfor (i = 0; (i != priv->txqs_n); ++i) {\n-\t\t\ttmp = (*priv->txqs)[i];\n-\t\t\tif (tmp == NULL)\n-\t\t\t\tcontinue;\n-\t\t\t(*priv->txqs)[i] = NULL;\n-\t\t\tmlx4_txq_cleanup(tmp);\n-\t\t\trte_free(tmp);\n-\t\t}\n-\t\tpriv->txqs_n = 0;\n-\t\tpriv->txqs = NULL;\n-\t}\n+\tfor (i = 0; i != dev->data->nb_rx_queues; ++i)\n+\t\tmlx4_rx_queue_release(dev->data->rx_queues[i]);\n+\tfor (i = 0; i != dev->data->nb_tx_queues; ++i)\n+\t\tmlx4_tx_queue_release(dev->data->tx_queues[i]);\n \tif (priv->pd != NULL) {\n \t\tassert(priv->ctx != NULL);\n \t\tclaim_zero(ibv_dealloc_pd(priv->pd));\ndiff --git a/drivers/net/mlx4/mlx4.h b/drivers/net/mlx4/mlx4.h\nindex 1cd4db3..93e5502 100644\n--- a/drivers/net/mlx4/mlx4.h\n+++ b/drivers/net/mlx4/mlx4.h\n@@ -104,11 +104,6 @@ struct priv {\n \tunsigned int vf:1; /* This is a VF device. */\n \tunsigned int intr_alarm:1; /* An interrupt alarm is scheduled. */\n \tunsigned int isolated:1; /* Toggle isolated mode. */\n-\t/* RX/TX queues. */\n-\tunsigned int rxqs_n; /* RX queues array size. */\n-\tunsigned int txqs_n; /* TX queues array size. */\n-\tstruct rxq *(*rxqs)[]; /* RX queues. */\n-\tstruct txq *(*txqs)[]; /* TX queues. */\n \tstruct rte_intr_handle intr_handle; /* Port interrupt handle. */\n \tstruct rte_flow_drop *flow_drop_queue; /* Flow drop queue. */\n \tLIST_HEAD(mlx4_flows, rte_flow) flows;\ndiff --git a/drivers/net/mlx4/mlx4_ethdev.c b/drivers/net/mlx4/mlx4_ethdev.c\nindex 5f1dba2..a9e8059 100644\n--- a/drivers/net/mlx4/mlx4_ethdev.c\n+++ b/drivers/net/mlx4/mlx4_ethdev.c\n@@ -574,17 +574,14 @@ mlx4_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *info)\n void\n mlx4_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)\n {\n-\tstruct priv *priv = dev->data->dev_private;\n \tstruct rte_eth_stats tmp;\n \tunsigned int i;\n \tunsigned int idx;\n \n-\tif (priv == NULL)\n-\t\treturn;\n \tmemset(&tmp, 0, sizeof(tmp));\n \t/* Add software counters. */\n-\tfor (i = 0; (i != priv->rxqs_n); ++i) {\n-\t\tstruct rxq *rxq = (*priv->rxqs)[i];\n+\tfor (i = 0; i != dev->data->nb_rx_queues; ++i) {\n+\t\tstruct rxq *rxq = dev->data->rx_queues[i];\n \n \t\tif (rxq == NULL)\n \t\t\tcontinue;\n@@ -600,8 +597,8 @@ mlx4_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)\n \t\ttmp.ierrors += rxq->stats.idropped;\n \t\ttmp.rx_nombuf += rxq->stats.rx_nombuf;\n \t}\n-\tfor (i = 0; (i != priv->txqs_n); ++i) {\n-\t\tstruct txq *txq = (*priv->txqs)[i];\n+\tfor (i = 0; i != dev->data->nb_tx_queues; ++i) {\n+\t\tstruct txq *txq = dev->data->tx_queues[i];\n \n \t\tif (txq == NULL)\n \t\t\tcontinue;\n@@ -627,25 +624,23 @@ mlx4_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)\n void\n mlx4_stats_reset(struct rte_eth_dev *dev)\n {\n-\tstruct priv *priv = dev->data->dev_private;\n \tunsigned int i;\n-\tunsigned int idx;\n \n-\tif (priv == NULL)\n-\t\treturn;\n-\tfor (i = 0; (i != priv->rxqs_n); ++i) {\n-\t\tif ((*priv->rxqs)[i] == NULL)\n-\t\t\tcontinue;\n-\t\tidx = (*priv->rxqs)[i]->stats.idx;\n-\t\t(*priv->rxqs)[i]->stats =\n-\t\t\t(struct mlx4_rxq_stats){ .idx = idx };\n+\tfor (i = 0; i != dev->data->nb_rx_queues; ++i) {\n+\t\tstruct rxq *rxq = dev->data->rx_queues[i];\n+\n+\t\tif (rxq)\n+\t\t\trxq->stats = (struct mlx4_rxq_stats){\n+\t\t\t\t.idx = rxq->stats.idx,\n+\t\t\t};\n \t}\n-\tfor (i = 0; (i != priv->txqs_n); ++i) {\n-\t\tif ((*priv->txqs)[i] == NULL)\n-\t\t\tcontinue;\n-\t\tidx = (*priv->txqs)[i]->stats.idx;\n-\t\t(*priv->txqs)[i]->stats =\n-\t\t\t(struct mlx4_txq_stats){ .idx = idx };\n+\tfor (i = 0; i != dev->data->nb_tx_queues; ++i) {\n+\t\tstruct txq *txq = dev->data->tx_queues[i];\n+\n+\t\tif (txq)\n+\t\t\ttxq->stats = (struct mlx4_txq_stats){\n+\t\t\t\t.idx = txq->stats.idx,\n+\t\t\t};\n \t}\n }\n \ndiff --git a/drivers/net/mlx4/mlx4_flow.c b/drivers/net/mlx4/mlx4_flow.c\nindex e177545..0885a91 100644\n--- a/drivers/net/mlx4/mlx4_flow.c\n+++ b/drivers/net/mlx4/mlx4_flow.c\n@@ -691,7 +691,8 @@ mlx4_flow_prepare(struct priv *priv,\n \t\t\t\t(const struct rte_flow_action_queue *)\n \t\t\t\tactions->conf;\n \n-\t\t\tif (!queue || (queue->index > (priv->rxqs_n - 1)))\n+\t\t\tif (!queue || (queue->index >\n+\t\t\t\t       (priv->dev->data->nb_rx_queues - 1)))\n \t\t\t\tgoto exit_action_not_supported;\n \t\t\taction.queue = 1;\n \t\t} else {\n@@ -841,7 +842,7 @@ mlx4_flow_create_action_queue(struct priv *priv,\n \tif (action->drop) {\n \t\tqp = priv->flow_drop_queue ? priv->flow_drop_queue->qp : NULL;\n \t} else {\n-\t\tstruct rxq *rxq = (*priv->rxqs)[action->queue_id];\n+\t\tstruct rxq *rxq = priv->dev->data->rx_queues[action->queue_id];\n \n \t\tqp = rxq->qp;\n \t\trte_flow->qp = qp;\ndiff --git a/drivers/net/mlx4/mlx4_intr.c b/drivers/net/mlx4/mlx4_intr.c\nindex 76d2e01..e3449ee 100644\n--- a/drivers/net/mlx4/mlx4_intr.c\n+++ b/drivers/net/mlx4/mlx4_intr.c\n@@ -91,7 +91,7 @@ static int\n mlx4_rx_intr_vec_enable(struct priv *priv)\n {\n \tunsigned int i;\n-\tunsigned int rxqs_n = priv->rxqs_n;\n+\tunsigned int rxqs_n = priv->dev->data->nb_rx_queues;\n \tunsigned int n = RTE_MIN(rxqs_n, (uint32_t)RTE_MAX_RXTX_INTR_VEC_ID);\n \tunsigned int count = 0;\n \tstruct rte_intr_handle *intr_handle = &priv->intr_handle;\n@@ -105,7 +105,7 @@ mlx4_rx_intr_vec_enable(struct priv *priv)\n \t\treturn -rte_errno;\n \t}\n \tfor (i = 0; i != n; ++i) {\n-\t\tstruct rxq *rxq = (*priv->rxqs)[i];\n+\t\tstruct rxq *rxq = priv->dev->data->rx_queues[i];\n \n \t\t/* Skip queues that cannot request interrupts. */\n \t\tif (!rxq || !rxq->channel) {\n@@ -324,8 +324,7 @@ mlx4_intr_install(struct priv *priv)\n int\n mlx4_rx_intr_disable(struct rte_eth_dev *dev, uint16_t idx)\n {\n-\tstruct priv *priv = dev->data->dev_private;\n-\tstruct rxq *rxq = (*priv->rxqs)[idx];\n+\tstruct rxq *rxq = dev->data->rx_queues[idx];\n \tstruct ibv_cq *ev_cq;\n \tvoid *ev_ctx;\n \tint ret;\n@@ -361,8 +360,7 @@ mlx4_rx_intr_disable(struct rte_eth_dev *dev, uint16_t idx)\n int\n mlx4_rx_intr_enable(struct rte_eth_dev *dev, uint16_t idx)\n {\n-\tstruct priv *priv = dev->data->dev_private;\n-\tstruct rxq *rxq = (*priv->rxqs)[idx];\n+\tstruct rxq *rxq = dev->data->rx_queues[idx];\n \tint ret;\n \n \tif (!rxq || !rxq->channel)\ndiff --git a/drivers/net/mlx4/mlx4_rxq.c b/drivers/net/mlx4/mlx4_rxq.c\nindex 7f675a4..409983f 100644\n--- a/drivers/net/mlx4/mlx4_rxq.c\n+++ b/drivers/net/mlx4/mlx4_rxq.c\n@@ -403,15 +403,15 @@ mlx4_rx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc,\n \t\t    struct rte_mempool *mp)\n {\n \tstruct priv *priv = dev->data->dev_private;\n-\tstruct rxq *rxq = (*priv->rxqs)[idx];\n+\tstruct rxq *rxq = dev->data->rx_queues[idx];\n \tint ret;\n \n \tDEBUG(\"%p: configuring queue %u for %u descriptors\",\n \t      (void *)dev, idx, desc);\n-\tif (idx >= priv->rxqs_n) {\n+\tif (idx >= dev->data->nb_rx_queues) {\n \t\trte_errno = EOVERFLOW;\n \t\tERROR(\"%p: queue index out of range (%u >= %u)\",\n-\t\t      (void *)dev, idx, priv->rxqs_n);\n+\t\t      (void *)dev, idx, dev->data->nb_rx_queues);\n \t\treturn -rte_errno;\n \t}\n \tif (rxq != NULL) {\n@@ -421,7 +421,7 @@ mlx4_rx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc,\n \t\t\trte_errno = EEXIST;\n \t\t\treturn -rte_errno;\n \t\t}\n-\t\t(*priv->rxqs)[idx] = NULL;\n+\t\tdev->data->rx_queues[idx] = NULL;\n \t\tif (idx == 0)\n \t\t\tmlx4_mac_addr_del(priv);\n \t\tmlx4_rxq_cleanup(rxq);\n@@ -441,7 +441,7 @@ mlx4_rx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc,\n \t\trxq->stats.idx = idx;\n \t\tDEBUG(\"%p: adding Rx queue %p to list\",\n \t\t      (void *)dev, (void *)rxq);\n-\t\t(*priv->rxqs)[idx] = rxq;\n+\t\tdev->data->rx_queues[idx] = rxq;\n \t\t/* Update receive callback. */\n \t\tdev->rx_pkt_burst = mlx4_rx_burst;\n \t}\n@@ -464,11 +464,11 @@ mlx4_rx_queue_release(void *dpdk_rxq)\n \tif (rxq == NULL)\n \t\treturn;\n \tpriv = rxq->priv;\n-\tfor (i = 0; (i != priv->rxqs_n); ++i)\n-\t\tif ((*priv->rxqs)[i] == rxq) {\n+\tfor (i = 0; i != priv->dev->data->nb_rx_queues; ++i)\n+\t\tif (priv->dev->data->rx_queues[i] == rxq) {\n \t\t\tDEBUG(\"%p: removing Rx queue %p from list\",\n \t\t\t      (void *)priv->dev, (void *)rxq);\n-\t\t\t(*priv->rxqs)[i] = NULL;\n+\t\t\tpriv->dev->data->rx_queues[i] = NULL;\n \t\t\tif (i == 0)\n \t\t\t\tmlx4_mac_addr_del(priv);\n \t\t\tbreak;\n@@ -522,8 +522,8 @@ mlx4_mac_addr_add(struct priv *priv)\n \t\treturn 0;\n \tif (priv->isolated)\n \t\treturn 0;\n-\tif (*priv->rxqs && (*priv->rxqs)[0])\n-\t\trxq = (*priv->rxqs)[0];\n+\tif (priv->dev->data->rx_queues && priv->dev->data->rx_queues[0])\n+\t\trxq = priv->dev->data->rx_queues[0];\n \telse\n \t\treturn 0;\n \ndiff --git a/drivers/net/mlx4/mlx4_txq.c b/drivers/net/mlx4/mlx4_txq.c\nindex 945833b..e0245b0 100644\n--- a/drivers/net/mlx4/mlx4_txq.c\n+++ b/drivers/net/mlx4/mlx4_txq.c\n@@ -401,15 +401,15 @@ mlx4_tx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc,\n \t\t    unsigned int socket, const struct rte_eth_txconf *conf)\n {\n \tstruct priv *priv = dev->data->dev_private;\n-\tstruct txq *txq = (*priv->txqs)[idx];\n+\tstruct txq *txq = dev->data->tx_queues[idx];\n \tint ret;\n \n \tDEBUG(\"%p: configuring queue %u for %u descriptors\",\n \t      (void *)dev, idx, desc);\n-\tif (idx >= priv->txqs_n) {\n+\tif (idx >= dev->data->nb_tx_queues) {\n \t\trte_errno = EOVERFLOW;\n \t\tERROR(\"%p: queue index out of range (%u >= %u)\",\n-\t\t      (void *)dev, idx, priv->txqs_n);\n+\t\t      (void *)dev, idx, dev->data->nb_tx_queues);\n \t\treturn -rte_errno;\n \t}\n \tif (txq != NULL) {\n@@ -419,7 +419,7 @@ mlx4_tx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc,\n \t\t\trte_errno = EEXIST;\n \t\t\treturn -rte_errno;\n \t\t}\n-\t\t(*priv->txqs)[idx] = NULL;\n+\t\tdev->data->tx_queues[idx] = NULL;\n \t\tmlx4_txq_cleanup(txq);\n \t} else {\n \t\ttxq = rte_calloc_socket(\"TXQ\", 1, sizeof(*txq), 0, socket);\n@@ -437,7 +437,7 @@ mlx4_tx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc,\n \t\ttxq->stats.idx = idx;\n \t\tDEBUG(\"%p: adding Tx queue %p to list\",\n \t\t      (void *)dev, (void *)txq);\n-\t\t(*priv->txqs)[idx] = txq;\n+\t\tdev->data->tx_queues[idx] = txq;\n \t\t/* Update send callback. */\n \t\tdev->tx_pkt_burst = mlx4_tx_burst;\n \t}\n@@ -460,11 +460,11 @@ mlx4_tx_queue_release(void *dpdk_txq)\n \tif (txq == NULL)\n \t\treturn;\n \tpriv = txq->priv;\n-\tfor (i = 0; (i != priv->txqs_n); ++i)\n-\t\tif ((*priv->txqs)[i] == txq) {\n+\tfor (i = 0; i != priv->dev->data->nb_tx_queues; ++i)\n+\t\tif (priv->dev->data->tx_queues[i] == txq) {\n \t\t\tDEBUG(\"%p: removing Tx queue %p from list\",\n \t\t\t      (void *)priv->dev, (void *)txq);\n-\t\t\t(*priv->txqs)[i] = NULL;\n+\t\t\tpriv->dev->data->tx_queues[i] = NULL;\n \t\t\tbreak;\n \t\t}\n \tmlx4_txq_cleanup(txq);\n",
    "prefixes": [
        "dpdk-dev",
        "v2",
        "51/51"
    ]
}