get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 13066,
    "url": "http://patches.dpdk.org/api/patches/13066/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1464540424-12631-9-git-send-email-jerin.jacob@caviumnetworks.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": "<1464540424-12631-9-git-send-email-jerin.jacob@caviumnetworks.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1464540424-12631-9-git-send-email-jerin.jacob@caviumnetworks.com",
    "date": "2016-05-29T16:46:52",
    "name": "[dpdk-dev,v2,08/20] thunderx/nicvf: add tx_queue_setup/release support",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "84087fe1263c71a36e37bc76d29fac1386283dd2",
    "submitter": {
        "id": 305,
        "url": "http://patches.dpdk.org/api/people/305/?format=api",
        "name": "Jerin Jacob",
        "email": "jerin.jacob@caviumnetworks.com"
    },
    "delegate": {
        "id": 10,
        "url": "http://patches.dpdk.org/api/users/10/?format=api",
        "username": "bruce",
        "first_name": "Bruce",
        "last_name": "Richardson",
        "email": "bruce.richardson@intel.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/1464540424-12631-9-git-send-email-jerin.jacob@caviumnetworks.com/mbox/",
    "series": [],
    "comments": "http://patches.dpdk.org/api/patches/13066/comments/",
    "check": "pending",
    "checks": "http://patches.dpdk.org/api/patches/13066/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 C1EDD5A93;\n\tSun, 29 May 2016 18:48:45 +0200 (CEST)",
            "from na01-bl2-obe.outbound.protection.outlook.com\n\t(mail-bl2on0081.outbound.protection.outlook.com [65.55.169.81])\n\tby dpdk.org (Postfix) with ESMTP id 87A4E685C\n\tfor <dev@dpdk.org>; Sun, 29 May 2016 18:48:44 +0200 (CEST)",
            "from localhost.localdomain.localdomain (122.167.187.184) by\n\tCY1PR0701MB1725.namprd07.prod.outlook.com (10.163.21.14) with\n\tMicrosoft SMTP\n\tServer (TLS) id 15.1.506.9; Sun, 29 May 2016 16:48:37 +0000"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com;\n\th=From:To:Date:Subject:Message-ID:Content-Type:MIME-Version;\n\tbh=tGYPfAsYiKmJyGSrlbQRPD79n22Of997Kyyjf4AI9jE=;\n\tb=D3vtmyriF5tzcauydtDpMcdPvNxf00QCAMlxTim2eLmdtvxqvSELB1EkuBDGa7C0zpSadlyKg46LjnOanDdtZBBAk4fJ/NsC+/PWJCUmmUbeLO8i1MsUxRd3Q4UqwLhLphyVKcTEhJpXuRPXPNmbHVCdDgYlxt2pU/fKF6S+pSI=",
        "Authentication-Results": "dpdk.org; dkim=none (message not signed)\n\theader.d=none;dpdk.org; dmarc=none action=none\n\theader.from=caviumnetworks.com;",
        "From": "Jerin Jacob <jerin.jacob@caviumnetworks.com>",
        "To": "<dev@dpdk.org>",
        "CC": "<thomas.monjalon@6wind.com>, <bruce.richardson@intel.com>,\n\t<john.mcnamara@intel.com>, Jerin Jacob <jerin.jacob@caviumnetworks.com>, \n\tMaciej Czekaj <maciej.czekaj@caviumnetworks.com>, Kamil Rytarowski\n\t<Kamil.Rytarowski@caviumnetworks.com>,\n\tZyta Szpak <zyta.szpak@semihalf.com>, \n\tSlawomir Rosek <slawomir.rosek@semihalf.com>, Radoslaw Biernacki\n\t<rad@semihalf.com>",
        "Date": "Sun, 29 May 2016 22:16:52 +0530",
        "Message-ID": "<1464540424-12631-9-git-send-email-jerin.jacob@caviumnetworks.com>",
        "X-Mailer": "git-send-email 2.5.5",
        "In-Reply-To": "<1464540424-12631-1-git-send-email-jerin.jacob@caviumnetworks.com>",
        "References": "<1462634198-2289-1-git-send-email-jerin.jacob@caviumnetworks.com>\n\t<1464540424-12631-1-git-send-email-jerin.jacob@caviumnetworks.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[122.167.187.184]",
        "X-ClientProxiedBy": "BM1PR01CA0003.INDPRD01.PROD.OUTLOOK.COM (10.163.198.138)\n\tTo\n\tCY1PR0701MB1725.namprd07.prod.outlook.com (10.163.21.14)",
        "X-MS-Office365-Filtering-Correlation-Id": "23f34c78-ce00-4767-3a6a-08d387e11714",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; CY1PR0701MB1725;\n\t2:XrpAuSq/FvUpp+TZHuLYwioRhUq1jBpS2tvMOXZNg/r5WotixCKufM9m0d30YcKZOjNkfxzEfv79Qx1LXFEoNZ7G5Q3lGeKpx+9sq1trKISEEhuhWS6GcxUrOTd3/hik7Fj2hdTUPTSZm49qipHOQAEL6opE1TWTypcvjDy9aNzbm0WoIn0cZWZOzN9yEcGM;\n\t3:ZZO2Dn7Iz63GckGzCSogpTLzGwfmCUUDbpfyqG+yCqjZv5ztnt9L7ZXRCVXYBXadXE0exT5/w85CsbNrLiGYG0fbCdnJg2KQl2Cdn8c8CRsa5AYEbZfg2zyll1YVWWnQ;\n\t25:g7c3uEWW+DzeQAWgGm6NCy+iULc69nf4snNpkiAgDhMcrAx6qFvOgWW4Dv0eAX9MkTB12h3SDKak7o+DtU6ubCnDWgHWNQWH/r8HsIzLUJcs9WgJPNhrYcA/JAYTiTMhfq81ZE6bPHfrcH4+lMyZg6ypHovj27wGAiM4aZbvamx1GYQJR4264exU2hvfj/fFZZHQpI7WSkXV93sa2wpr41sHT4wKiW4Q1pKR78OU95g/QCox2XRIHQYH1k9Ze6Vz/YCtKeW4+sFE+uQhYOD5OFvE9YTMU8X8+Oll0byfA36kOSPRbPRlQ5gnVHLq62Br8Kp64xdX885OX+iHski4aBdfLfck2s1ksibAbAfcQSLHcidhpcHdN6gKyEoozPUQebJeWDHmibs24AKyTF8/rektArwyqg6GNiAkKCI0T5g=",
            "1; CY1PR0701MB1725;\n\t20:5egg6RNqWBKcApsY3iDG2VvOMVL7qlQrRddsInrD7f1kDlHNR/fewfe1nJvrF40iY1KhZJ9AwyLsf3w5LiiX881/RpfDizqQc0Op9vb6BIM5iLLUm5rm16aQxghd9L+40NxnqzYA/kGeUclhQY5hXKhzbwVL7Y8QUvXF1ArRbq6Sk8jKh7wLhoFRDQ8guPPbvfEMxcBg0zjEOMR2iKxVGLzynOVHMxzXdo0OHpJno8doIHcS8qH/sdG52Utk5exQkYh+hPkAB5sAwmVQ3+fxBha/S++TPY7yhB4sa1mrG0QvxClSEsnUOS/yrbnf7JOsMQhXGK9k2EoLwfRAT0n9WDAe+OXk0GhTF9ZUfPP9OcDWp6nlXbYcTe7OZePK4NtmOddv6go9O37ERTj4Drjb9gqVpKLR2wXk0ejaEnnGKCVfuKUseNtOMLbiZ6Le5YUBYN/jYtknRufEbDI1TjrG3L4wZgObV/eNfBIcisu9dT3ZEbFHcj5pVYtc7GiD4zEzRxDPTeNnkoUxXSd7QwHn2rRrn4z4zl1NYU714Ut4NM9WKHFq0adNG4JJYW/kBDpDhIzQZk03DNgaszhBEtgI7IO/fIZ5yNA4qG9MRSdK12E=",
            "1; CY1PR0701MB1725;\n\t4:dfMQ85kNsfHALI1OIS6hl1hrckALyMamNXi7HzDh/+TbZIa5HIhbqDaTfbYuhP8Nb33FvDBg+1o90qd506muWxfPH2apt7qJqZusKjrAiowi9/rVBqbr3R+nrunPapv2kbX2+87Ay8rDxg7E7YABoIBwUTxoZwjiRURUazJlL+pJLhsuWXJ5Ae4cdsMVPHbLkr5nMEj5YCH7ltHc2X5B2BAMgrm0wo30fmwY/SkWh+GxQON03bPJcC2HV23rTQrZoKuu3x3Dji8SHtYtIsYc+K4hzKnxQscBnldjZ4lzpGEDhw38uRWnQajvMROTSGPjG5G4IzeNHBgzvaWu9nWppOpXCegws7EWGsqWoaRDFOtdRPChW6A5nQKC3y78HP3P",
            "1; CY1PR0701MB1725;\n\t23:cNESou4V79lOav6bW6e3km8IoOA2cIlhOZ6u28Pw6KtTcZFg4lzkFG14rcTa2LMJp/ZfbBFFVJdDdoyFSVYl+6qBqJdOig8M4pHRsPBNUKLKDkNz14D/jPZLd1jRKZSpK6Oy29LKEph8xrn+eZLQcNS8UG+Xi+xMXSwwnokp8B+lOcvE/THXhaAffSa2YVJbPkbp3d8ijFMk9xICJE+ryh3FkT5PNZQN3iRc9VEXwcf3U3ve4xTOOY/hlnPw3+QyjczmC1VhKg8FdSeQCuFRZf3pEV5hcxVxlyvXg+k9Av56lXzSnoUlKVkedCzKHWQVMjuoeuapn6mEUzwXkuWXG7SrrmdpHcSEKtG6hUYIUziw1k7tToQBGOiiHME4od/ANo3Uy8U8znzqV3NKwm73PhUZ9PInfkli2OOUCrh0zAlmtdnxCQz1gJEbringhijXIGJZetdhDUuvoyPo4A4c/kSMzCTYO/7GykXic273blG3j1Qu1eo5pB5OYprIKG/rEgrhn8djDdBpB3XB13fjjJ60vjgGDD7UDbfRb0kp5ZLtu7vo9xGqz9ex6JoandgmkpjJTekMP5E6IN+yCxvJtN+igSMbBxvIVuXfOoZywlv5NGj2xQV8OtZBZMNldfVPr0qfkhu9z9O40zD6LuJMJqZtWiudGHSsvzCaUSjtCwSEZFTXJQhYBH43BeXVs5LQddbKRqikbyw6iws2IDFBn6ZUGxlQBDNfF5MXes/2Ee2kDRxygR6hSFlsdExBNQV79wyAOHUUuFK7jVV3XAKvqU9jwNjfagHUtxXrAenDAwn9B16JyLbAunR/Vso2A/cp7AwDNnMFPbazaCll3XKW6Pt4MWgS62EBov7GPGxCzoyVMJkcVlpJSM72/jVuCv1J",
            "1; CY1PR0701MB1725;\n\t5:0gQEXTLpNwtu+3VcF799f9rVnAZAIGkg8BKMKj6+AJagy+RYn+28WJAbF79vQ5Jd6Rd+2bx7d0NUt2lRMtfz/4qZd4pQpEq8FhVl8OchJ9VWIWR3D0DGcUyAAJHPp8lmGOoPGlADLJllVq3fGts+Dg==;\n\t24:NkUxPx7zBq+O3Uykk1D+r4QYXwHacG2DWNzqHijm8V1TFdmHG9iEQVkS4GeiQx3MLmtlrBwXZMfv8pSddgvzLYwsbUJVVauU7K31K78A+mI=;\n\t7:Pf126n1bE4V/8LGs2fN+/ZyyYg3cfSA1Djc1lkDBBqyqKz/lKbWD37bDFwsu7MAdibJIiMAqWwA4tA6MsKECeOeKug4NEnrrSzfzmpDtD3Y86fNFE3bhuAPXvKn1MKOeFEJ+zpvUC4/Ux4aJ81/NzzyGtzrS719sbrCecO2Cs0drPPWP6xJyn2InfkLgVLMW"
        ],
        "X-Microsoft-Antispam": "UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR0701MB1725;",
        "X-Microsoft-Antispam-PRVS": "<CY1PR0701MB1725E55C42752B8CCDE30F0681440@CY1PR0701MB1725.namprd07.prod.outlook.com>",
        "X-Exchange-Antispam-Report-Test": "UriScan:;",
        "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(601004)(2401047)(5005006)(8121501046)(10201501046)(3002001); \n\tSRVR:CY1PR0701MB1725; BCL:0; PCL:0; RULEID:; SRVR:CY1PR0701MB1725; ",
        "X-Forefront-PRVS": "0957AD37A0",
        "X-Forefront-Antispam-Report": "SFV:NSPM;\n\tSFS:(10009020)(6069001)(6009001)(4326007)(92566002)(189998001)(2351001)(81166006)(33646002)(76176999)(229853001)(2950100001)(50986999)(19580405001)(19580395003)(36756003)(50466002)(110136002)(8676002)(2906002)(586003)(3846002)(77096005)(5004730100002)(5003940100001)(50226002)(66066001)(47776003)(48376002)(42186005)(5008740100001)(6116002)(7099028);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR0701MB1725;\n\tH:localhost.localdomain.localdomain; FPR:; SPF:None; MLV:sfv; LANG:en;",
        "SpamDiagnosticOutput": "1:23",
        "SpamDiagnosticMetadata": "NSPM",
        "X-OriginatorOrg": "caviumnetworks.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "29 May 2016 16:48:37.8182\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "CY1PR0701MB1725",
        "Subject": "[dpdk-dev] [PATCH v2 08/20] thunderx/nicvf: add\n\ttx_queue_setup/release support",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "patches and discussions about DPDK <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": "Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>\nSigned-off-by: Maciej Czekaj <maciej.czekaj@caviumnetworks.com>\nSigned-off-by: Kamil Rytarowski <Kamil.Rytarowski@caviumnetworks.com>\nSigned-off-by: Zyta Szpak <zyta.szpak@semihalf.com>\nSigned-off-by: Slawomir Rosek <slawomir.rosek@semihalf.com>\nSigned-off-by: Radoslaw Biernacki <rad@semihalf.com>\n---\n drivers/net/thunderx/nicvf_ethdev.c | 179 ++++++++++++++++++++++++++++++++++++\n 1 file changed, 179 insertions(+)",
    "diff": "diff --git a/drivers/net/thunderx/nicvf_ethdev.c b/drivers/net/thunderx/nicvf_ethdev.c\nindex 8fa3256..3b7cdde 100644\n--- a/drivers/net/thunderx/nicvf_ethdev.c\n+++ b/drivers/net/thunderx/nicvf_ethdev.c\n@@ -78,6 +78,10 @@ static int nicvf_dev_rx_queue_setup(struct rte_eth_dev *dev, uint16_t qidx,\n \t\t\t\t    const struct rte_eth_rxconf *rx_conf,\n \t\t\t\t    struct rte_mempool *mp);\n static void nicvf_dev_rx_queue_release(void *rx_queue);\n+static int nicvf_dev_tx_queue_setup(struct rte_eth_dev *dev, uint16_t qidx,\n+\t\t\t\t    uint16_t nb_desc, unsigned int socket_id,\n+\t\t\t\t    const struct rte_eth_txconf *tx_conf);\n+static void nicvf_dev_tx_queue_release(void *sq);\n static int nicvf_dev_get_reg_length(struct rte_eth_dev *dev);\n static int nicvf_dev_get_regs(struct rte_eth_dev *dev,\n \t\t\t      struct rte_dev_reg_info *regs);\n@@ -226,6 +230,179 @@ nicvf_qset_cq_alloc(struct nicvf *nic, struct nicvf_rxq *rxq, uint16_t qidx,\n \treturn 0;\n }\n \n+static int\n+nicvf_qset_sq_alloc(struct nicvf *nic,  struct nicvf_txq *sq, uint16_t qidx,\n+\t\t    uint32_t desc_cnt)\n+{\n+\tconst struct rte_memzone *rz;\n+\tuint32_t ring_size = desc_cnt * sizeof(union sq_entry_t);\n+\n+\trz = rte_eth_dma_zone_reserve(nic->eth_dev, \"sq\", qidx, ring_size,\n+\t\t\t\tNICVF_SQ_BASE_ALIGN_BYTES, nic->node);\n+\tif (rz == NULL) {\n+\t\tPMD_INIT_LOG(ERR, \"Failed allocate mem for sq hw ring\");\n+\t\treturn -ENOMEM;\n+\t}\n+\n+\tmemset(rz->addr, 0, ring_size);\n+\n+\tsq->phys = rz->phys_addr;\n+\tsq->desc = rz->addr;\n+\tsq->qlen_mask = desc_cnt - 1;\n+\n+\treturn 0;\n+}\n+\n+static inline void\n+nicvf_tx_queue_release_mbufs(struct nicvf_txq *txq)\n+{\n+\tuint32_t head;\n+\n+\thead = txq->head;\n+\twhile (head != txq->tail) {\n+\t\tif (txq->txbuffs[head]) {\n+\t\t\trte_pktmbuf_free_seg(txq->txbuffs[head]);\n+\t\t\ttxq->txbuffs[head] = NULL;\n+\t\t}\n+\t\thead++;\n+\t\thead = head & txq->qlen_mask;\n+\t}\n+}\n+\n+static void\n+nicvf_tx_queue_reset(struct nicvf_txq *txq)\n+{\n+\tuint32_t txq_desc_cnt = txq->qlen_mask + 1;\n+\n+\tmemset(txq->desc, 0, sizeof(union sq_entry_t) * txq_desc_cnt);\n+\tmemset(txq->txbuffs, 0, sizeof(struct rte_mbuf *) * txq_desc_cnt);\n+\ttxq->tail = 0;\n+\ttxq->head = 0;\n+\ttxq->xmit_bufs = 0;\n+}\n+\n+static void\n+nicvf_dev_tx_queue_release(void *sq)\n+{\n+\tstruct nicvf_txq *txq;\n+\n+\tPMD_INIT_FUNC_TRACE();\n+\n+\ttxq = (struct nicvf_txq *)sq;\n+\tif (txq) {\n+\t\tif (txq->txbuffs != NULL) {\n+\t\t\tnicvf_tx_queue_release_mbufs(txq);\n+\t\t\trte_free(txq->txbuffs);\n+\t\t\ttxq->txbuffs = NULL;\n+\t\t}\n+\t\trte_free(txq);\n+\t}\n+}\n+\n+static int\n+nicvf_dev_tx_queue_setup(struct rte_eth_dev *dev, uint16_t qidx,\n+\t\t\t uint16_t nb_desc, unsigned int socket_id,\n+\t\t\t const struct rte_eth_txconf *tx_conf)\n+{\n+\tuint16_t tx_free_thresh;\n+\tuint8_t is_single_pool;\n+\tstruct nicvf_txq *txq;\n+\tstruct nicvf *nic = nicvf_pmd_priv(dev);\n+\n+\tPMD_INIT_FUNC_TRACE();\n+\n+\t/* Socket id check */\n+\tif (socket_id != (unsigned int)SOCKET_ID_ANY && socket_id != nic->node)\n+\t\tPMD_DRV_LOG(WARNING, \"socket_id expected %d, configured %d\",\n+\t\tsocket_id, nic->node);\n+\n+\t/* Tx deferred start is not supported */\n+\tif (tx_conf->tx_deferred_start) {\n+\t\tPMD_INIT_LOG(ERR, \"Tx deferred start not supported\");\n+\t\treturn -EINVAL;\n+\t}\n+\n+\t/* Roundup nb_desc to avilable qsize and validate max number of desc */\n+\tnb_desc = nicvf_qsize_sq_roundup(nb_desc);\n+\tif (nb_desc == 0) {\n+\t\tPMD_INIT_LOG(ERR, \"Value of nb_desc beyond available sq qsize\");\n+\t\treturn -EINVAL;\n+\t}\n+\n+\t/* Validate tx_free_thresh */\n+\ttx_free_thresh = (uint16_t)((tx_conf->tx_free_thresh) ?\n+\t\t\t\ttx_conf->tx_free_thresh :\n+\t\t\t\tNICVF_DEFAULT_TX_FREE_THRESH);\n+\n+\tif (tx_free_thresh > (nb_desc) ||\n+\t\ttx_free_thresh > NICVF_MAX_TX_FREE_THRESH) {\n+\t\tPMD_INIT_LOG(ERR,\n+\t\t\t\"tx_free_thresh must be less than the number of TX \"\n+\t\t\t\"descriptors. (tx_free_thresh=%u port=%d \"\n+\t\t\t\"queue=%d)\", (unsigned int)tx_free_thresh,\n+\t\t\t(int)dev->data->port_id, (int)qidx);\n+\t\treturn -EINVAL;\n+\t}\n+\n+\t/* Free memory prior to re-allocation if needed. */\n+\tif (dev->data->tx_queues[qidx] != NULL) {\n+\t\tPMD_TX_LOG(DEBUG, \"Freeing memory prior to re-allocation %d\",\n+\t\t\t\tqidx);\n+\t\tnicvf_dev_tx_queue_release(dev->data->tx_queues[qidx]);\n+\t\tdev->data->tx_queues[qidx] = NULL;\n+\t}\n+\n+\t/* Allocating tx queue data structure */\n+\ttxq = rte_zmalloc_socket(\"ethdev TX queue\", sizeof(struct nicvf_txq),\n+\t\t\t\t\tRTE_CACHE_LINE_SIZE, nic->node);\n+\tif (txq == NULL) {\n+\t\tPMD_INIT_LOG(ERR, \"Failed to allocate txq=%d\", qidx);\n+\t\treturn -ENOMEM;\n+\t}\n+\n+\ttxq->nic = nic;\n+\ttxq->queue_id = qidx;\n+\ttxq->tx_free_thresh = tx_free_thresh;\n+\ttxq->txq_flags = tx_conf->txq_flags;\n+\ttxq->sq_head = nicvf_qset_base(nic, qidx) + NIC_QSET_SQ_0_7_HEAD;\n+\ttxq->sq_door = nicvf_qset_base(nic, qidx) + NIC_QSET_SQ_0_7_DOOR;\n+\tis_single_pool = (txq->txq_flags & ETH_TXQ_FLAGS_NOREFCOUNT &&\n+\t\t\t\ttxq->txq_flags & ETH_TXQ_FLAGS_NOMULTMEMP);\n+\n+\t/* Choose optimum free threshold value for multipool case */\n+\tif (!is_single_pool) {\n+\t\ttxq->tx_free_thresh = (uint16_t)\n+\t\t(tx_conf->tx_free_thresh == NICVF_DEFAULT_TX_FREE_THRESH ?\n+\t\t\t\tNICVF_TX_FREE_MPOOL_THRESH :\n+\t\t\t\ttx_conf->tx_free_thresh);\n+\t}\n+\n+\t/* Allocate software ring */\n+\ttxq->txbuffs = rte_zmalloc_socket(\"txq->txbuffs\",\n+\t\t\t\tnb_desc * sizeof(struct rte_mbuf *),\n+\t\t\t\tRTE_CACHE_LINE_SIZE, nic->node);\n+\n+\tif (txq->txbuffs == NULL) {\n+\t\tnicvf_dev_tx_queue_release(txq);\n+\t\treturn -ENOMEM;\n+\t}\n+\n+\tif (nicvf_qset_sq_alloc(nic, txq, qidx, nb_desc)) {\n+\t\tPMD_INIT_LOG(ERR, \"Failed to allocate mem for sq %d\", qidx);\n+\t\tnicvf_dev_tx_queue_release(txq);\n+\t\treturn -ENOMEM;\n+\t}\n+\n+\tnicvf_tx_queue_reset(txq);\n+\n+\tPMD_TX_LOG(DEBUG, \"[%d] txq=%p nb_desc=%d desc=%p phys=0x%\" PRIx64,\n+\t\t\tqidx, txq, nb_desc, txq->desc, txq->phys);\n+\n+\tdev->data->tx_queues[qidx] = txq;\n+\tdev->data->tx_queue_state[qidx] = RTE_ETH_QUEUE_STATE_STOPPED;\n+\treturn 0;\n+}\n+\n static void\n nicvf_rx_queue_reset(struct nicvf_rxq *rxq)\n {\n@@ -465,6 +642,8 @@ static const struct eth_dev_ops nicvf_eth_dev_ops = {\n \t.dev_infos_get            = nicvf_dev_info_get,\n \t.rx_queue_setup           = nicvf_dev_rx_queue_setup,\n \t.rx_queue_release         = nicvf_dev_rx_queue_release,\n+\t.tx_queue_setup           = nicvf_dev_tx_queue_setup,\n+\t.tx_queue_release         = nicvf_dev_tx_queue_release,\n \t.get_reg_length           = nicvf_dev_get_reg_length,\n \t.get_reg                  = nicvf_dev_get_regs,\n };\n",
    "prefixes": [
        "dpdk-dev",
        "v2",
        "08/20"
    ]
}