get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 93500,
    "url": "http://patches.dpdk.org/api/patches/93500/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20210527152510.1551026-2-andrew.rybchenko@oktetlabs.ru/",
    "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": "<20210527152510.1551026-2-andrew.rybchenko@oktetlabs.ru>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20210527152510.1551026-2-andrew.rybchenko@oktetlabs.ru",
    "date": "2021-05-27T15:24:51",
    "name": "[01/20] net/sfc: introduce ethdev Rx queue ID",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "efdd834d9dee11387b268d58252fb927e0390fc8",
    "submitter": {
        "id": 2013,
        "url": "http://patches.dpdk.org/api/people/2013/?format=api",
        "name": "Andrew Rybchenko",
        "email": "Andrew.Rybchenko@oktetlabs.ru"
    },
    "delegate": null,
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20210527152510.1551026-2-andrew.rybchenko@oktetlabs.ru/mbox/",
    "series": [
        {
            "id": 17144,
            "url": "http://patches.dpdk.org/api/series/17144/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=17144",
            "date": "2021-05-27T15:24:50",
            "name": "net/sfc: support flow API COUNT action",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/17144/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/93500/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/93500/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 E380BA0546;\n\tThu, 27 May 2021 17:25:52 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id BD2D6410F5;\n\tThu, 27 May 2021 17:25:48 +0200 (CEST)",
            "from shelob.oktetlabs.ru (shelob.oktetlabs.ru [91.220.146.113])\n by mails.dpdk.org (Postfix) with ESMTP id D958540698\n for <dev@dpdk.org>; Thu, 27 May 2021 17:25:46 +0200 (CEST)",
            "by shelob.oktetlabs.ru (Postfix, from userid 122)\n id A359D7F610; Thu, 27 May 2021 18:25:46 +0300 (MSK)",
            "from aros.oktetlabs.ru (aros.oktetlabs.ru [192.168.38.17])\n by shelob.oktetlabs.ru (Postfix) with ESMTP id 9CF9D7F57E;\n Thu, 27 May 2021 18:25:41 +0300 (MSK)"
        ],
        "X-Spam-Checker-Version": "SpamAssassin 3.4.2 (2018-09-13) on shelob.oktetlabs.ru",
        "X-Spam-Level": "",
        "X-Spam-Status": "No, score=0.8 required=5.0 tests=ALL_TRUSTED,\n DKIM_ADSP_DISCARD,\n URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.2",
        "DKIM-Filter": "OpenDKIM Filter v2.11.0 shelob.oktetlabs.ru 9CF9D7F57E",
        "Authentication-Results": "shelob.oktetlabs.ru/9CF9D7F57E; dkim=none;\n dkim-atps=neutral",
        "From": "Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>",
        "To": "dev@dpdk.org",
        "Cc": "Igor Romanov <igor.romanov@oktetlabs.ru>,\n Andy Moreton <amoreton@xilinx.com>, Ivan Malov <ivan.malov@oktetlabs.ru>",
        "Date": "Thu, 27 May 2021 18:24:51 +0300",
        "Message-Id": "<20210527152510.1551026-2-andrew.rybchenko@oktetlabs.ru>",
        "X-Mailer": "git-send-email 2.30.2",
        "In-Reply-To": "<20210527152510.1551026-1-andrew.rybchenko@oktetlabs.ru>",
        "References": "<20210527152510.1551026-1-andrew.rybchenko@oktetlabs.ru>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dpdk-dev] [PATCH 01/20] net/sfc: introduce ethdev Rx queue ID",
        "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: Igor Romanov <igor.romanov@oktetlabs.ru>\n\nMake software index of an Rx queue and ethdev index separate.\nWhen an ethdev RxQ is accessed in ethdev callbacks, an explicit ethdev\nqueue index is used.\n\nThis is a preparation to introducing non-ethdev Rx queues.\n\nSigned-off-by: Igor Romanov <igor.romanov@oktetlabs.ru>\nSigned-off-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>\nReviewed-by: Andy Moreton <amoreton@xilinx.com>\nReviewed-by: Ivan Malov <ivan.malov@oktetlabs.ru>\n---\n drivers/net/sfc/sfc.h        |   2 +\n drivers/net/sfc/sfc_dp.h     |   4 +\n drivers/net/sfc/sfc_ethdev.c |  69 ++++++++------\n drivers/net/sfc/sfc_ev.c     |   2 +-\n drivers/net/sfc/sfc_ev.h     |  22 ++++-\n drivers/net/sfc/sfc_flow.c   |  22 +++--\n drivers/net/sfc/sfc_rx.c     | 179 +++++++++++++++++++++++++----------\n drivers/net/sfc/sfc_rx.h     |  10 +-\n 8 files changed, 215 insertions(+), 95 deletions(-)",
    "diff": "diff --git a/drivers/net/sfc/sfc.h b/drivers/net/sfc/sfc.h\nindex b48a818adb..ebe705020d 100644\n--- a/drivers/net/sfc/sfc.h\n+++ b/drivers/net/sfc/sfc.h\n@@ -29,6 +29,7 @@\n #include \"sfc_filter.h\"\n #include \"sfc_sriov.h\"\n #include \"sfc_mae.h\"\n+#include \"sfc_dp.h\"\n \n #ifdef __cplusplus\n extern \"C\" {\n@@ -168,6 +169,7 @@ struct sfc_rss {\n struct sfc_adapter_shared {\n \tunsigned int\t\t\trxq_count;\n \tstruct sfc_rxq_info\t\t*rxq_info;\n+\tunsigned int\t\t\tethdev_rxq_count;\n \n \tunsigned int\t\t\ttxq_count;\n \tstruct sfc_txq_info\t\t*txq_info;\ndiff --git a/drivers/net/sfc/sfc_dp.h b/drivers/net/sfc/sfc_dp.h\nindex 4bed137806..76065483d4 100644\n--- a/drivers/net/sfc/sfc_dp.h\n+++ b/drivers/net/sfc/sfc_dp.h\n@@ -96,6 +96,10 @@ struct sfc_dp {\n /** List of datapath variants */\n TAILQ_HEAD(sfc_dp_list, sfc_dp);\n \n+typedef unsigned int sfc_sw_index_t;\n+typedef int32_t\tsfc_ethdev_qid_t;\n+#define SFC_ETHDEV_QID_INVALID\t((sfc_ethdev_qid_t)(-1))\n+\n /* Check if available HW/FW capabilities are sufficient for the datapath */\n static inline bool\n sfc_dp_match_hw_fw_caps(const struct sfc_dp *dp, unsigned int avail_caps)\ndiff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c\nindex c50ecea0b9..2651c41288 100644\n--- a/drivers/net/sfc/sfc_ethdev.c\n+++ b/drivers/net/sfc/sfc_ethdev.c\n@@ -463,26 +463,31 @@ sfc_dev_allmulti_disable(struct rte_eth_dev *dev)\n }\n \n static int\n-sfc_rx_queue_setup(struct rte_eth_dev *dev, uint16_t rx_queue_id,\n+sfc_rx_queue_setup(struct rte_eth_dev *dev, uint16_t ethdev_qid,\n \t\t   uint16_t nb_rx_desc, unsigned int socket_id,\n \t\t   const struct rte_eth_rxconf *rx_conf,\n \t\t   struct rte_mempool *mb_pool)\n {\n \tstruct sfc_adapter_shared *sas = sfc_adapter_shared_by_eth_dev(dev);\n \tstruct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev);\n+\tsfc_ethdev_qid_t sfc_ethdev_qid = ethdev_qid;\n+\tstruct sfc_rxq_info *rxq_info;\n+\tsfc_sw_index_t sw_index;\n \tint rc;\n \n \tsfc_log_init(sa, \"RxQ=%u nb_rx_desc=%u socket_id=%u\",\n-\t\t     rx_queue_id, nb_rx_desc, socket_id);\n+\t\t     ethdev_qid, nb_rx_desc, socket_id);\n \n \tsfc_adapter_lock(sa);\n \n-\trc = sfc_rx_qinit(sa, rx_queue_id, nb_rx_desc, socket_id,\n+\tsw_index = sfc_rxq_sw_index_by_ethdev_rx_qid(sas, sfc_ethdev_qid);\n+\trc = sfc_rx_qinit(sa, sw_index, nb_rx_desc, socket_id,\n \t\t\t  rx_conf, mb_pool);\n \tif (rc != 0)\n \t\tgoto fail_rx_qinit;\n \n-\tdev->data->rx_queues[rx_queue_id] = sas->rxq_info[rx_queue_id].dp;\n+\trxq_info = sfc_rxq_info_by_ethdev_qid(sas, sfc_ethdev_qid);\n+\tdev->data->rx_queues[ethdev_qid] = rxq_info->dp;\n \n \tsfc_adapter_unlock(sa);\n \n@@ -500,7 +505,7 @@ sfc_rx_queue_release(void *queue)\n \tstruct sfc_dp_rxq *dp_rxq = queue;\n \tstruct sfc_rxq *rxq;\n \tstruct sfc_adapter *sa;\n-\tunsigned int sw_index;\n+\tsfc_sw_index_t sw_index;\n \n \tif (dp_rxq == NULL)\n \t\treturn;\n@@ -1182,15 +1187,14 @@ sfc_set_mc_addr_list(struct rte_eth_dev *dev,\n  * use any process-local pointers from the adapter data.\n  */\n static void\n-sfc_rx_queue_info_get(struct rte_eth_dev *dev, uint16_t rx_queue_id,\n+sfc_rx_queue_info_get(struct rte_eth_dev *dev, uint16_t ethdev_qid,\n \t\t      struct rte_eth_rxq_info *qinfo)\n {\n \tstruct sfc_adapter_shared *sas = sfc_adapter_shared_by_eth_dev(dev);\n+\tsfc_ethdev_qid_t sfc_ethdev_qid = ethdev_qid;\n \tstruct sfc_rxq_info *rxq_info;\n \n-\tSFC_ASSERT(rx_queue_id < sas->rxq_count);\n-\n-\trxq_info = &sas->rxq_info[rx_queue_id];\n+\trxq_info = sfc_rxq_info_by_ethdev_qid(sas, sfc_ethdev_qid);\n \n \tqinfo->mp = rxq_info->refill_mb_pool;\n \tqinfo->conf.rx_free_thresh = rxq_info->refill_threshold;\n@@ -1232,14 +1236,14 @@ sfc_tx_queue_info_get(struct rte_eth_dev *dev, uint16_t tx_queue_id,\n  * use any process-local pointers from the adapter data.\n  */\n static uint32_t\n-sfc_rx_queue_count(struct rte_eth_dev *dev, uint16_t rx_queue_id)\n+sfc_rx_queue_count(struct rte_eth_dev *dev, uint16_t ethdev_qid)\n {\n \tconst struct sfc_adapter_priv *sap = sfc_adapter_priv_by_eth_dev(dev);\n \tstruct sfc_adapter_shared *sas = sfc_adapter_shared_by_eth_dev(dev);\n+\tsfc_ethdev_qid_t sfc_ethdev_qid = ethdev_qid;\n \tstruct sfc_rxq_info *rxq_info;\n \n-\tSFC_ASSERT(rx_queue_id < sas->rxq_count);\n-\trxq_info = &sas->rxq_info[rx_queue_id];\n+\trxq_info = sfc_rxq_info_by_ethdev_qid(sas, sfc_ethdev_qid);\n \n \tif ((rxq_info->state & SFC_RXQ_STARTED) == 0)\n \t\treturn 0;\n@@ -1293,13 +1297,16 @@ sfc_tx_descriptor_status(void *queue, uint16_t offset)\n }\n \n static int\n-sfc_rx_queue_start(struct rte_eth_dev *dev, uint16_t rx_queue_id)\n+sfc_rx_queue_start(struct rte_eth_dev *dev, uint16_t ethdev_qid)\n {\n \tstruct sfc_adapter_shared *sas = sfc_adapter_shared_by_eth_dev(dev);\n \tstruct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev);\n+\tsfc_ethdev_qid_t sfc_ethdev_qid = ethdev_qid;\n+\tstruct sfc_rxq_info *rxq_info;\n+\tsfc_sw_index_t sw_index;\n \tint rc;\n \n-\tsfc_log_init(sa, \"RxQ=%u\", rx_queue_id);\n+\tsfc_log_init(sa, \"RxQ=%u\", ethdev_qid);\n \n \tsfc_adapter_lock(sa);\n \n@@ -1307,14 +1314,16 @@ sfc_rx_queue_start(struct rte_eth_dev *dev, uint16_t rx_queue_id)\n \tif (sa->state != SFC_ADAPTER_STARTED)\n \t\tgoto fail_not_started;\n \n-\tif (sas->rxq_info[rx_queue_id].state != SFC_RXQ_INITIALIZED)\n+\trxq_info = sfc_rxq_info_by_ethdev_qid(sas, sfc_ethdev_qid);\n+\tif (rxq_info->state != SFC_RXQ_INITIALIZED)\n \t\tgoto fail_not_setup;\n \n-\trc = sfc_rx_qstart(sa, rx_queue_id);\n+\tsw_index = sfc_rxq_sw_index_by_ethdev_rx_qid(sas, sfc_ethdev_qid);\n+\trc = sfc_rx_qstart(sa, sw_index);\n \tif (rc != 0)\n \t\tgoto fail_rx_qstart;\n \n-\tsas->rxq_info[rx_queue_id].deferred_started = B_TRUE;\n+\trxq_info->deferred_started = B_TRUE;\n \n \tsfc_adapter_unlock(sa);\n \n@@ -1329,17 +1338,23 @@ sfc_rx_queue_start(struct rte_eth_dev *dev, uint16_t rx_queue_id)\n }\n \n static int\n-sfc_rx_queue_stop(struct rte_eth_dev *dev, uint16_t rx_queue_id)\n+sfc_rx_queue_stop(struct rte_eth_dev *dev, uint16_t ethdev_qid)\n {\n \tstruct sfc_adapter_shared *sas = sfc_adapter_shared_by_eth_dev(dev);\n \tstruct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev);\n+\tsfc_ethdev_qid_t sfc_ethdev_qid = ethdev_qid;\n+\tstruct sfc_rxq_info *rxq_info;\n+\tsfc_sw_index_t sw_index;\n \n-\tsfc_log_init(sa, \"RxQ=%u\", rx_queue_id);\n+\tsfc_log_init(sa, \"RxQ=%u\", ethdev_qid);\n \n \tsfc_adapter_lock(sa);\n-\tsfc_rx_qstop(sa, rx_queue_id);\n \n-\tsas->rxq_info[rx_queue_id].deferred_started = B_FALSE;\n+\tsw_index = sfc_rxq_sw_index_by_ethdev_rx_qid(sas, sfc_ethdev_qid);\n+\tsfc_rx_qstop(sa, sw_index);\n+\n+\trxq_info = sfc_rxq_info_by_ethdev_qid(sas, sfc_ethdev_qid);\n+\trxq_info->deferred_started = B_FALSE;\n \n \tsfc_adapter_unlock(sa);\n \n@@ -1766,27 +1781,27 @@ sfc_pool_ops_supported(struct rte_eth_dev *dev, const char *pool)\n }\n \n static int\n-sfc_rx_queue_intr_enable(struct rte_eth_dev *dev, uint16_t queue_id)\n+sfc_rx_queue_intr_enable(struct rte_eth_dev *dev, uint16_t ethdev_qid)\n {\n \tconst struct sfc_adapter_priv *sap = sfc_adapter_priv_by_eth_dev(dev);\n \tstruct sfc_adapter_shared *sas = sfc_adapter_shared_by_eth_dev(dev);\n+\tsfc_ethdev_qid_t sfc_ethdev_qid = ethdev_qid;\n \tstruct sfc_rxq_info *rxq_info;\n \n-\tSFC_ASSERT(queue_id < sas->rxq_count);\n-\trxq_info = &sas->rxq_info[queue_id];\n+\trxq_info = sfc_rxq_info_by_ethdev_qid(sas, sfc_ethdev_qid);\n \n \treturn sap->dp_rx->intr_enable(rxq_info->dp);\n }\n \n static int\n-sfc_rx_queue_intr_disable(struct rte_eth_dev *dev, uint16_t queue_id)\n+sfc_rx_queue_intr_disable(struct rte_eth_dev *dev, uint16_t ethdev_qid)\n {\n \tconst struct sfc_adapter_priv *sap = sfc_adapter_priv_by_eth_dev(dev);\n \tstruct sfc_adapter_shared *sas = sfc_adapter_shared_by_eth_dev(dev);\n+\tsfc_ethdev_qid_t sfc_ethdev_qid = ethdev_qid;\n \tstruct sfc_rxq_info *rxq_info;\n \n-\tSFC_ASSERT(queue_id < sas->rxq_count);\n-\trxq_info = &sas->rxq_info[queue_id];\n+\trxq_info = sfc_rxq_info_by_ethdev_qid(sas, sfc_ethdev_qid);\n \n \treturn sap->dp_rx->intr_disable(rxq_info->dp);\n }\ndiff --git a/drivers/net/sfc/sfc_ev.c b/drivers/net/sfc/sfc_ev.c\nindex b4953ac647..2262994112 100644\n--- a/drivers/net/sfc/sfc_ev.c\n+++ b/drivers/net/sfc/sfc_ev.c\n@@ -582,7 +582,7 @@ sfc_ev_qpoll(struct sfc_evq *evq)\n \t\tint rc;\n \n \t\tif (evq->dp_rxq != NULL) {\n-\t\t\tunsigned int rxq_sw_index;\n+\t\t\tsfc_sw_index_t rxq_sw_index;\n \n \t\t\trxq_sw_index = evq->dp_rxq->dpq.queue_id;\n \ndiff --git a/drivers/net/sfc/sfc_ev.h b/drivers/net/sfc/sfc_ev.h\nindex d796865b7f..5a9f85c2d9 100644\n--- a/drivers/net/sfc/sfc_ev.h\n+++ b/drivers/net/sfc/sfc_ev.h\n@@ -69,9 +69,25 @@ struct sfc_evq {\n  * Tx event queues follow Rx event queues.\n  */\n \n-static inline unsigned int\n-sfc_evq_index_by_rxq_sw_index(__rte_unused struct sfc_adapter *sa,\n-\t\t\t      unsigned int rxq_sw_index)\n+static inline sfc_ethdev_qid_t\n+sfc_ethdev_rx_qid_by_rxq_sw_index(__rte_unused struct sfc_adapter_shared *sas,\n+\t\t\t\t  sfc_sw_index_t rxq_sw_index)\n+{\n+\t/* Only ethdev queues are present for now */\n+\treturn rxq_sw_index;\n+}\n+\n+static inline sfc_sw_index_t\n+sfc_rxq_sw_index_by_ethdev_rx_qid(__rte_unused struct sfc_adapter_shared *sas,\n+\t\t\t\t  sfc_ethdev_qid_t ethdev_qid)\n+{\n+\t/* Only ethdev queues are present for now */\n+\treturn ethdev_qid;\n+}\n+\n+static inline sfc_sw_index_t\n+sfc_evq_sw_index_by_rxq_sw_index(__rte_unused struct sfc_adapter *sa,\n+\t\t\t\t sfc_sw_index_t rxq_sw_index)\n {\n \treturn 1 + rxq_sw_index;\n }\ndiff --git a/drivers/net/sfc/sfc_flow.c b/drivers/net/sfc/sfc_flow.c\nindex 0bfd284c9e..2db8af1759 100644\n--- a/drivers/net/sfc/sfc_flow.c\n+++ b/drivers/net/sfc/sfc_flow.c\n@@ -1400,10 +1400,10 @@ sfc_flow_parse_queue(struct sfc_adapter *sa,\n \tstruct sfc_rxq *rxq;\n \tstruct sfc_rxq_info *rxq_info;\n \n-\tif (queue->index >= sfc_sa2shared(sa)->rxq_count)\n+\tif (queue->index >= sfc_sa2shared(sa)->ethdev_rxq_count)\n \t\treturn -EINVAL;\n \n-\trxq = &sa->rxq_ctrl[queue->index];\n+\trxq = sfc_rxq_ctrl_by_ethdev_qid(sa, queue->index);\n \tspec_filter->template.efs_dmaq_id = (uint16_t)rxq->hw_index;\n \n \trxq_info = &sfc_sa2shared(sa)->rxq_info[queue->index];\n@@ -1420,7 +1420,7 @@ sfc_flow_parse_rss(struct sfc_adapter *sa,\n {\n \tstruct sfc_adapter_shared * const sas = sfc_sa2shared(sa);\n \tstruct sfc_rss *rss = &sas->rss;\n-\tunsigned int rxq_sw_index;\n+\tsfc_ethdev_qid_t ethdev_qid;\n \tstruct sfc_rxq *rxq;\n \tunsigned int rxq_hw_index_min;\n \tunsigned int rxq_hw_index_max;\n@@ -1434,18 +1434,19 @@ sfc_flow_parse_rss(struct sfc_adapter *sa,\n \tif (action_rss->queue_num == 0)\n \t\treturn -EINVAL;\n \n-\trxq_sw_index = sfc_sa2shared(sa)->rxq_count - 1;\n-\trxq = &sa->rxq_ctrl[rxq_sw_index];\n+\tethdev_qid = sfc_sa2shared(sa)->ethdev_rxq_count - 1;\n+\trxq = sfc_rxq_ctrl_by_ethdev_qid(sa, ethdev_qid);\n \trxq_hw_index_min = rxq->hw_index;\n \trxq_hw_index_max = 0;\n \n \tfor (i = 0; i < action_rss->queue_num; ++i) {\n-\t\trxq_sw_index = action_rss->queue[i];\n+\t\tethdev_qid = action_rss->queue[i];\n \n-\t\tif (rxq_sw_index >= sfc_sa2shared(sa)->rxq_count)\n+\t\tif ((unsigned int)ethdev_qid >=\n+\t\t    sfc_sa2shared(sa)->ethdev_rxq_count)\n \t\t\treturn -EINVAL;\n \n-\t\trxq = &sa->rxq_ctrl[rxq_sw_index];\n+\t\trxq = sfc_rxq_ctrl_by_ethdev_qid(sa, ethdev_qid);\n \n \t\tif (rxq->hw_index < rxq_hw_index_min)\n \t\t\trxq_hw_index_min = rxq->hw_index;\n@@ -1509,9 +1510,10 @@ sfc_flow_parse_rss(struct sfc_adapter *sa,\n \n \tfor (i = 0; i < RTE_DIM(sfc_rss_conf->rss_tbl); ++i) {\n \t\tunsigned int nb_queues = action_rss->queue_num;\n-\t\tunsigned int rxq_sw_index = action_rss->queue[i % nb_queues];\n-\t\tstruct sfc_rxq *rxq = &sa->rxq_ctrl[rxq_sw_index];\n+\t\tstruct sfc_rxq *rxq;\n \n+\t\tethdev_qid = action_rss->queue[i % nb_queues];\n+\t\trxq = sfc_rxq_ctrl_by_ethdev_qid(sa, ethdev_qid);\n \t\tsfc_rss_conf->rss_tbl[i] = rxq->hw_index - rxq_hw_index_min;\n \t}\n \ndiff --git a/drivers/net/sfc/sfc_rx.c b/drivers/net/sfc/sfc_rx.c\nindex 461afc5168..597785ae02 100644\n--- a/drivers/net/sfc/sfc_rx.c\n+++ b/drivers/net/sfc/sfc_rx.c\n@@ -654,14 +654,17 @@ struct sfc_dp_rx sfc_efx_rx = {\n };\n \n static void\n-sfc_rx_qflush(struct sfc_adapter *sa, unsigned int sw_index)\n+sfc_rx_qflush(struct sfc_adapter *sa, sfc_sw_index_t sw_index)\n {\n+\tstruct sfc_adapter_shared *sas = sfc_sa2shared(sa);\n+\tsfc_ethdev_qid_t ethdev_qid;\n \tstruct sfc_rxq_info *rxq_info;\n \tstruct sfc_rxq *rxq;\n \tunsigned int retry_count;\n \tunsigned int wait_count;\n \tint rc;\n \n+\tethdev_qid = sfc_ethdev_rx_qid_by_rxq_sw_index(sas, sw_index);\n \trxq_info = &sfc_sa2shared(sa)->rxq_info[sw_index];\n \tSFC_ASSERT(rxq_info->state & SFC_RXQ_STARTED);\n \n@@ -698,13 +701,16 @@ sfc_rx_qflush(struct sfc_adapter *sa, unsigned int sw_index)\n \t\t\t (wait_count++ < SFC_RX_QFLUSH_POLL_ATTEMPTS));\n \n \t\tif (rxq_info->state & SFC_RXQ_FLUSHING)\n-\t\t\tsfc_err(sa, \"RxQ %u flush timed out\", sw_index);\n+\t\t\tsfc_err(sa, \"RxQ %d (internal %u) flush timed out\",\n+\t\t\t\tethdev_qid, sw_index);\n \n \t\tif (rxq_info->state & SFC_RXQ_FLUSH_FAILED)\n-\t\t\tsfc_err(sa, \"RxQ %u flush failed\", sw_index);\n+\t\t\tsfc_err(sa, \"RxQ %d (internal %u) flush failed\",\n+\t\t\t\tethdev_qid, sw_index);\n \n \t\tif (rxq_info->state & SFC_RXQ_FLUSHED)\n-\t\t\tsfc_notice(sa, \"RxQ %u flushed\", sw_index);\n+\t\t\tsfc_notice(sa, \"RxQ %d (internal %u) flushed\",\n+\t\t\t\t   ethdev_qid, sw_index);\n \t}\n \n \tsa->priv.dp_rx->qpurge(rxq_info->dp);\n@@ -764,17 +770,20 @@ sfc_rx_default_rxq_set_filter(struct sfc_adapter *sa, struct sfc_rxq *rxq)\n }\n \n int\n-sfc_rx_qstart(struct sfc_adapter *sa, unsigned int sw_index)\n+sfc_rx_qstart(struct sfc_adapter *sa, sfc_sw_index_t sw_index)\n {\n+\tstruct sfc_adapter_shared *sas = sfc_sa2shared(sa);\n+\tsfc_ethdev_qid_t ethdev_qid;\n \tstruct sfc_rxq_info *rxq_info;\n \tstruct sfc_rxq *rxq;\n \tstruct sfc_evq *evq;\n \tefx_rx_prefix_layout_t pinfo;\n \tint rc;\n \n-\tsfc_log_init(sa, \"sw_index=%u\", sw_index);\n-\n \tSFC_ASSERT(sw_index < sfc_sa2shared(sa)->rxq_count);\n+\tethdev_qid = sfc_ethdev_rx_qid_by_rxq_sw_index(sas, sw_index);\n+\n+\tsfc_log_init(sa, \"RxQ %d (internal %u)\", ethdev_qid, sw_index);\n \n \trxq_info = &sfc_sa2shared(sa)->rxq_info[sw_index];\n \tSFC_ASSERT(rxq_info->state == SFC_RXQ_INITIALIZED);\n@@ -782,7 +791,7 @@ sfc_rx_qstart(struct sfc_adapter *sa, unsigned int sw_index)\n \trxq = &sa->rxq_ctrl[sw_index];\n \tevq = rxq->evq;\n \n-\trc = sfc_ev_qstart(evq, sfc_evq_index_by_rxq_sw_index(sa, sw_index));\n+\trc = sfc_ev_qstart(evq, sfc_evq_sw_index_by_rxq_sw_index(sa, sw_index));\n \tif (rc != 0)\n \t\tgoto fail_ev_qstart;\n \n@@ -833,15 +842,16 @@ sfc_rx_qstart(struct sfc_adapter *sa, unsigned int sw_index)\n \n \trxq_info->state |= SFC_RXQ_STARTED;\n \n-\tif (sw_index == 0 && !sfc_sa2shared(sa)->isolated) {\n+\tif (ethdev_qid == 0 && !sfc_sa2shared(sa)->isolated) {\n \t\trc = sfc_rx_default_rxq_set_filter(sa, rxq);\n \t\tif (rc != 0)\n \t\t\tgoto fail_mac_filter_default_rxq_set;\n \t}\n \n \t/* It seems to be used by DPDK for debug purposes only ('rte_ether') */\n-\tsa->eth_dev->data->rx_queue_state[sw_index] =\n-\t\tRTE_ETH_QUEUE_STATE_STARTED;\n+\tif (ethdev_qid != SFC_ETHDEV_QID_INVALID)\n+\t\tsa->eth_dev->data->rx_queue_state[ethdev_qid] =\n+\t\t\tRTE_ETH_QUEUE_STATE_STARTED;\n \n \treturn 0;\n \n@@ -864,14 +874,17 @@ sfc_rx_qstart(struct sfc_adapter *sa, unsigned int sw_index)\n }\n \n void\n-sfc_rx_qstop(struct sfc_adapter *sa, unsigned int sw_index)\n+sfc_rx_qstop(struct sfc_adapter *sa, sfc_sw_index_t sw_index)\n {\n+\tstruct sfc_adapter_shared *sas = sfc_sa2shared(sa);\n+\tsfc_ethdev_qid_t ethdev_qid;\n \tstruct sfc_rxq_info *rxq_info;\n \tstruct sfc_rxq *rxq;\n \n-\tsfc_log_init(sa, \"sw_index=%u\", sw_index);\n-\n \tSFC_ASSERT(sw_index < sfc_sa2shared(sa)->rxq_count);\n+\tethdev_qid = sfc_ethdev_rx_qid_by_rxq_sw_index(sas, sw_index);\n+\n+\tsfc_log_init(sa, \"RxQ %d (internal %u)\", ethdev_qid, sw_index);\n \n \trxq_info = &sfc_sa2shared(sa)->rxq_info[sw_index];\n \n@@ -880,13 +893,14 @@ sfc_rx_qstop(struct sfc_adapter *sa, unsigned int sw_index)\n \tSFC_ASSERT(rxq_info->state & SFC_RXQ_STARTED);\n \n \t/* It seems to be used by DPDK for debug purposes only ('rte_ether') */\n-\tsa->eth_dev->data->rx_queue_state[sw_index] =\n-\t\tRTE_ETH_QUEUE_STATE_STOPPED;\n+\tif (ethdev_qid != SFC_ETHDEV_QID_INVALID)\n+\t\tsa->eth_dev->data->rx_queue_state[ethdev_qid] =\n+\t\t\tRTE_ETH_QUEUE_STATE_STOPPED;\n \n \trxq = &sa->rxq_ctrl[sw_index];\n \tsa->priv.dp_rx->qstop(rxq_info->dp, &rxq->evq->read_ptr);\n \n-\tif (sw_index == 0)\n+\tif (ethdev_qid == 0)\n \t\tefx_mac_filter_default_rxq_clear(sa->nic);\n \n \tsfc_rx_qflush(sa, sw_index);\n@@ -1056,11 +1070,13 @@ sfc_rx_mb_pool_buf_size(struct sfc_adapter *sa, struct rte_mempool *mb_pool)\n }\n \n int\n-sfc_rx_qinit(struct sfc_adapter *sa, unsigned int sw_index,\n+sfc_rx_qinit(struct sfc_adapter *sa, sfc_sw_index_t sw_index,\n \t     uint16_t nb_rx_desc, unsigned int socket_id,\n \t     const struct rte_eth_rxconf *rx_conf,\n \t     struct rte_mempool *mb_pool)\n {\n+\tstruct sfc_adapter_shared *sas = sfc_sa2shared(sa);\n+\tsfc_ethdev_qid_t ethdev_qid;\n \tconst efx_nic_cfg_t *encp = efx_nic_cfg_get(sa->nic);\n \tstruct sfc_rss *rss = &sfc_sa2shared(sa)->rss;\n \tint rc;\n@@ -1092,16 +1108,22 @@ sfc_rx_qinit(struct sfc_adapter *sa, unsigned int sw_index,\n \tSFC_ASSERT(rxq_entries <= sa->rxq_max_entries);\n \tSFC_ASSERT(rxq_max_fill_level <= nb_rx_desc);\n \n-\toffloads = rx_conf->offloads |\n-\t\tsa->eth_dev->data->dev_conf.rxmode.offloads;\n+\tethdev_qid = sfc_ethdev_rx_qid_by_rxq_sw_index(sas, sw_index);\n+\n+\toffloads = rx_conf->offloads;\n+\t/* Add device level Rx offloads if the queue is an ethdev Rx queue */\n+\tif (ethdev_qid != SFC_ETHDEV_QID_INVALID)\n+\t\toffloads |= sa->eth_dev->data->dev_conf.rxmode.offloads;\n+\n \trc = sfc_rx_qcheck_conf(sa, rxq_max_fill_level, rx_conf, offloads);\n \tif (rc != 0)\n \t\tgoto fail_bad_conf;\n \n \tbuf_size = sfc_rx_mb_pool_buf_size(sa, mb_pool);\n \tif (buf_size == 0) {\n-\t\tsfc_err(sa, \"RxQ %u mbuf pool object size is too small\",\n-\t\t\tsw_index);\n+\t\tsfc_err(sa,\n+\t\t\t\"RxQ %d (internal %u) mbuf pool object size is too small\",\n+\t\t\tethdev_qid, sw_index);\n \t\trc = EINVAL;\n \t\tgoto fail_bad_conf;\n \t}\n@@ -1111,11 +1133,13 @@ sfc_rx_qinit(struct sfc_adapter *sa, unsigned int sw_index,\n \t\t\t\t  (offloads & DEV_RX_OFFLOAD_SCATTER),\n \t\t\t\t  encp->enc_rx_scatter_max,\n \t\t\t\t  &error)) {\n-\t\tsfc_err(sa, \"RxQ %u MTU check failed: %s\", sw_index, error);\n-\t\tsfc_err(sa, \"RxQ %u calculated Rx buffer size is %u vs \"\n+\t\tsfc_err(sa, \"RxQ %d (internal %u) MTU check failed: %s\",\n+\t\t\tethdev_qid, sw_index, error);\n+\t\tsfc_err(sa,\n+\t\t\t\"RxQ %d (internal %u) calculated Rx buffer size is %u vs \"\n \t\t\t\"PDU size %u plus Rx prefix %u bytes\",\n-\t\t\tsw_index, buf_size, (unsigned int)sa->port.pdu,\n-\t\t\tencp->enc_rx_prefix_size);\n+\t\t\tethdev_qid, sw_index, buf_size,\n+\t\t\t(unsigned int)sa->port.pdu, encp->enc_rx_prefix_size);\n \t\trc = EINVAL;\n \t\tgoto fail_bad_conf;\n \t}\n@@ -1193,7 +1217,7 @@ sfc_rx_qinit(struct sfc_adapter *sa, unsigned int sw_index,\n \tinfo.flags = rxq_info->rxq_flags;\n \tinfo.rxq_entries = rxq_info->entries;\n \tinfo.rxq_hw_ring = rxq->mem.esm_base;\n-\tinfo.evq_hw_index = sfc_evq_index_by_rxq_sw_index(sa, sw_index);\n+\tinfo.evq_hw_index = sfc_evq_sw_index_by_rxq_sw_index(sa, sw_index);\n \tinfo.evq_entries = evq_entries;\n \tinfo.evq_hw_ring = evq->mem.esm_base;\n \tinfo.hw_index = rxq->hw_index;\n@@ -1231,13 +1255,18 @@ sfc_rx_qinit(struct sfc_adapter *sa, unsigned int sw_index,\n }\n \n void\n-sfc_rx_qfini(struct sfc_adapter *sa, unsigned int sw_index)\n+sfc_rx_qfini(struct sfc_adapter *sa, sfc_sw_index_t sw_index)\n {\n+\tstruct sfc_adapter_shared *sas = sfc_sa2shared(sa);\n+\tsfc_ethdev_qid_t ethdev_qid;\n \tstruct sfc_rxq_info *rxq_info;\n \tstruct sfc_rxq *rxq;\n \n \tSFC_ASSERT(sw_index < sfc_sa2shared(sa)->rxq_count);\n-\tsa->eth_dev->data->rx_queues[sw_index] = NULL;\n+\tethdev_qid = sfc_ethdev_rx_qid_by_rxq_sw_index(sas, sw_index);\n+\n+\tif (ethdev_qid != SFC_ETHDEV_QID_INVALID)\n+\t\tsa->eth_dev->data->rx_queues[ethdev_qid] = NULL;\n \n \trxq_info = &sfc_sa2shared(sa)->rxq_info[sw_index];\n \n@@ -1479,14 +1508,41 @@ sfc_rx_rss_config(struct sfc_adapter *sa)\n \treturn rc;\n }\n \n+struct sfc_rxq_info *\n+sfc_rxq_info_by_ethdev_qid(struct sfc_adapter_shared *sas,\n+\t\t\t   sfc_ethdev_qid_t ethdev_qid)\n+{\n+\tsfc_sw_index_t sw_index;\n+\n+\tSFC_ASSERT((unsigned int)ethdev_qid < sas->ethdev_rxq_count);\n+\tSFC_ASSERT(ethdev_qid != SFC_ETHDEV_QID_INVALID);\n+\n+\tsw_index = sfc_rxq_sw_index_by_ethdev_rx_qid(sas, ethdev_qid);\n+\treturn &sas->rxq_info[sw_index];\n+}\n+\n+struct sfc_rxq *\n+sfc_rxq_ctrl_by_ethdev_qid(struct sfc_adapter *sa, sfc_ethdev_qid_t ethdev_qid)\n+{\n+\tstruct sfc_adapter_shared *sas = sfc_sa2shared(sa);\n+\tsfc_sw_index_t sw_index;\n+\n+\tSFC_ASSERT((unsigned int)ethdev_qid < sas->ethdev_rxq_count);\n+\tSFC_ASSERT(ethdev_qid != SFC_ETHDEV_QID_INVALID);\n+\n+\tsw_index = sfc_rxq_sw_index_by_ethdev_rx_qid(sas, ethdev_qid);\n+\treturn &sa->rxq_ctrl[sw_index];\n+}\n+\n int\n sfc_rx_start(struct sfc_adapter *sa)\n {\n \tstruct sfc_adapter_shared * const sas = sfc_sa2shared(sa);\n-\tunsigned int sw_index;\n+\tsfc_sw_index_t sw_index;\n \tint rc;\n \n-\tsfc_log_init(sa, \"rxq_count=%u\", sas->rxq_count);\n+\tsfc_log_init(sa, \"rxq_count=%u (internal %u)\", sas->ethdev_rxq_count,\n+\t\t     sas->rxq_count);\n \n \trc = efx_rx_init(sa->nic);\n \tif (rc != 0)\n@@ -1524,9 +1580,10 @@ void\n sfc_rx_stop(struct sfc_adapter *sa)\n {\n \tstruct sfc_adapter_shared * const sas = sfc_sa2shared(sa);\n-\tunsigned int sw_index;\n+\tsfc_sw_index_t sw_index;\n \n-\tsfc_log_init(sa, \"rxq_count=%u\", sas->rxq_count);\n+\tsfc_log_init(sa, \"rxq_count=%u (internal %u)\", sas->ethdev_rxq_count,\n+\t\t     sas->rxq_count);\n \n \tsw_index = sas->rxq_count;\n \twhile (sw_index-- > 0) {\n@@ -1538,7 +1595,7 @@ sfc_rx_stop(struct sfc_adapter *sa)\n }\n \n static int\n-sfc_rx_qinit_info(struct sfc_adapter *sa, unsigned int sw_index)\n+sfc_rx_qinit_info(struct sfc_adapter *sa, sfc_sw_index_t sw_index)\n {\n \tstruct sfc_adapter_shared * const sas = sfc_sa2shared(sa);\n \tstruct sfc_rxq_info *rxq_info = &sas->rxq_info[sw_index];\n@@ -1606,17 +1663,29 @@ static void\n sfc_rx_fini_queues(struct sfc_adapter *sa, unsigned int nb_rx_queues)\n {\n \tstruct sfc_adapter_shared * const sas = sfc_sa2shared(sa);\n-\tint sw_index;\n+\tsfc_sw_index_t sw_index;\n+\tsfc_ethdev_qid_t ethdev_qid;\n \n-\tSFC_ASSERT(nb_rx_queues <= sas->rxq_count);\n+\tSFC_ASSERT(nb_rx_queues <= sas->ethdev_rxq_count);\n \n-\tsw_index = sas->rxq_count;\n-\twhile (--sw_index >= (int)nb_rx_queues) {\n-\t\tif (sas->rxq_info[sw_index].state & SFC_RXQ_INITIALIZED)\n+\t/*\n+\t * Finalize only ethdev queues since other ones are finalized only\n+\t * on device close and they may require additional deinitializaton.\n+\t */\n+\tethdev_qid = sas->ethdev_rxq_count;\n+\twhile (--ethdev_qid >= (int)nb_rx_queues) {\n+\t\tstruct sfc_rxq_info *rxq_info;\n+\n+\t\trxq_info = sfc_rxq_info_by_ethdev_qid(sas, ethdev_qid);\n+\t\tif (rxq_info->state & SFC_RXQ_INITIALIZED) {\n+\t\t\tsw_index = sfc_rxq_sw_index_by_ethdev_rx_qid(sas,\n+\t\t\t\t\t\t\t\tethdev_qid);\n \t\t\tsfc_rx_qfini(sa, sw_index);\n+\t\t}\n+\n \t}\n \n-\tsas->rxq_count = nb_rx_queues;\n+\tsas->ethdev_rxq_count = nb_rx_queues;\n }\n \n /**\n@@ -1637,7 +1706,7 @@ sfc_rx_configure(struct sfc_adapter *sa)\n \tint rc;\n \n \tsfc_log_init(sa, \"nb_rx_queues=%u (old %u)\",\n-\t\t     nb_rx_queues, sas->rxq_count);\n+\t\t     nb_rx_queues, sas->ethdev_rxq_count);\n \n \trc = sfc_rx_check_mode(sa, &dev_conf->rxmode);\n \tif (rc != 0)\n@@ -1666,7 +1735,7 @@ sfc_rx_configure(struct sfc_adapter *sa)\n \t\tstruct sfc_rxq_info *new_rxq_info;\n \t\tstruct sfc_rxq *new_rxq_ctrl;\n \n-\t\tif (nb_rx_queues < sas->rxq_count)\n+\t\tif (nb_rx_queues < sas->ethdev_rxq_count)\n \t\t\tsfc_rx_fini_queues(sa, nb_rx_queues);\n \n \t\trc = ENOMEM;\n@@ -1685,30 +1754,38 @@ sfc_rx_configure(struct sfc_adapter *sa)\n \t\tsas->rxq_info = new_rxq_info;\n \t\tsa->rxq_ctrl = new_rxq_ctrl;\n \t\tif (nb_rx_queues > sas->rxq_count) {\n-\t\t\tmemset(&sas->rxq_info[sas->rxq_count], 0,\n-\t\t\t       (nb_rx_queues - sas->rxq_count) *\n+\t\t\tunsigned int rxq_count = sas->rxq_count;\n+\n+\t\t\tmemset(&sas->rxq_info[rxq_count], 0,\n+\t\t\t       (nb_rx_queues - rxq_count) *\n \t\t\t       sizeof(sas->rxq_info[0]));\n-\t\t\tmemset(&sa->rxq_ctrl[sas->rxq_count], 0,\n-\t\t\t       (nb_rx_queues - sas->rxq_count) *\n+\t\t\tmemset(&sa->rxq_ctrl[rxq_count], 0,\n+\t\t\t       (nb_rx_queues - rxq_count) *\n \t\t\t       sizeof(sa->rxq_ctrl[0]));\n \t\t}\n \t}\n \n-\twhile (sas->rxq_count < nb_rx_queues) {\n-\t\trc = sfc_rx_qinit_info(sa, sas->rxq_count);\n+\twhile (sas->ethdev_rxq_count < nb_rx_queues) {\n+\t\tsfc_sw_index_t sw_index;\n+\n+\t\tsw_index = sfc_rxq_sw_index_by_ethdev_rx_qid(sas,\n+\t\t\t\t\t\t\tsas->ethdev_rxq_count);\n+\t\trc = sfc_rx_qinit_info(sa, sw_index);\n \t\tif (rc != 0)\n \t\t\tgoto fail_rx_qinit_info;\n \n-\t\tsas->rxq_count++;\n+\t\tsas->ethdev_rxq_count++;\n \t}\n \n+\tsas->rxq_count = sas->ethdev_rxq_count;\n+\n configure_rss:\n \trss->channels = (dev_conf->rxmode.mq_mode == ETH_MQ_RX_RSS) ?\n-\t\t\t MIN(sas->rxq_count, EFX_MAXRSS) : 0;\n+\t\t\t MIN(sas->ethdev_rxq_count, EFX_MAXRSS) : 0;\n \n \tif (rss->channels > 0) {\n \t\tstruct rte_eth_rss_conf *adv_conf_rss;\n-\t\tunsigned int sw_index;\n+\t\tsfc_sw_index_t sw_index;\n \n \t\tfor (sw_index = 0; sw_index < EFX_RSS_TBL_SIZE; ++sw_index)\n \t\t\trss->tbl[sw_index] = sw_index % rss->channels;\ndiff --git a/drivers/net/sfc/sfc_rx.h b/drivers/net/sfc/sfc_rx.h\nindex 2730454fd6..96c7dc415d 100644\n--- a/drivers/net/sfc/sfc_rx.h\n+++ b/drivers/net/sfc/sfc_rx.h\n@@ -119,6 +119,10 @@ struct sfc_rxq_info {\n };\n \n struct sfc_rxq_info *sfc_rxq_info_by_dp_rxq(const struct sfc_dp_rxq *dp_rxq);\n+struct sfc_rxq_info *sfc_rxq_info_by_ethdev_qid(struct sfc_adapter_shared *sas,\n+\t\t\t\t\t\tsfc_ethdev_qid_t ethdev_qid);\n+struct sfc_rxq *sfc_rxq_ctrl_by_ethdev_qid(struct sfc_adapter *sa,\n+\t\t\t\t\t   sfc_ethdev_qid_t ethdev_qid);\n \n int sfc_rx_configure(struct sfc_adapter *sa);\n void sfc_rx_close(struct sfc_adapter *sa);\n@@ -129,9 +133,9 @@ int sfc_rx_qinit(struct sfc_adapter *sa, unsigned int rx_queue_id,\n \t\t uint16_t nb_rx_desc, unsigned int socket_id,\n \t\t const struct rte_eth_rxconf *rx_conf,\n \t\t struct rte_mempool *mb_pool);\n-void sfc_rx_qfini(struct sfc_adapter *sa, unsigned int sw_index);\n-int sfc_rx_qstart(struct sfc_adapter *sa, unsigned int sw_index);\n-void sfc_rx_qstop(struct sfc_adapter *sa, unsigned int sw_index);\n+void sfc_rx_qfini(struct sfc_adapter *sa, sfc_sw_index_t sw_index);\n+int sfc_rx_qstart(struct sfc_adapter *sa, sfc_sw_index_t sw_index);\n+void sfc_rx_qstop(struct sfc_adapter *sa, sfc_sw_index_t sw_index);\n \n uint64_t sfc_rx_get_dev_offload_caps(struct sfc_adapter *sa);\n uint64_t sfc_rx_get_queue_offload_caps(struct sfc_adapter *sa);\n",
    "prefixes": [
        "01/20"
    ]
}