get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 117036,
    "url": "https://patches.dpdk.org/api/patches/117036/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20220928052516.1279442-15-g.singh@nxp.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": "<20220928052516.1279442-15-g.singh@nxp.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20220928052516.1279442-15-g.singh@nxp.com",
    "date": "2022-09-28T05:25:15",
    "name": "[14/15] net/dpaa: fix buffer free on transmit SG packets",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "486a742dbba85759d55febe2fd26ede0fbafa644",
    "submitter": {
        "id": 1068,
        "url": "https://patches.dpdk.org/api/people/1068/?format=api",
        "name": "Gagandeep Singh",
        "email": "g.singh@nxp.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/20220928052516.1279442-15-g.singh@nxp.com/mbox/",
    "series": [
        {
            "id": 24872,
            "url": "https://patches.dpdk.org/api/series/24872/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=24872",
            "date": "2022-09-28T05:25:01",
            "name": "DPAA and DPAA2 driver changes",
            "version": 1,
            "mbox": "https://patches.dpdk.org/series/24872/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/117036/comments/",
    "check": "warning",
    "checks": "https://patches.dpdk.org/api/patches/117036/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 CBABEA00C2;\n\tWed, 28 Sep 2022 07:27:16 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id EDE8042BBE;\n\tWed, 28 Sep 2022 07:26:05 +0200 (CEST)",
            "from EUR04-VI1-obe.outbound.protection.outlook.com\n (mail-eopbgr80075.outbound.protection.outlook.com [40.107.8.75])\n by mails.dpdk.org (Postfix) with ESMTP id C3EC742BBF;\n Wed, 28 Sep 2022 07:26:04 +0200 (CEST)",
            "from AS8PR04MB8198.eurprd04.prod.outlook.com (2603:10a6:20b:3b0::14)\n by DB9PR04MB8495.eurprd04.prod.outlook.com (2603:10a6:10:2c7::20)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5676.17; Wed, 28 Sep\n 2022 05:26:02 +0000",
            "from AS8PR04MB8198.eurprd04.prod.outlook.com\n ([fe80::14d0:4458:d6ec:b8b1]) by AS8PR04MB8198.eurprd04.prod.outlook.com\n ([fe80::14d0:4458:d6ec:b8b1%7]) with mapi id 15.20.5676.017; Wed, 28 Sep 2022\n 05:26:02 +0000"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=eregez4Zr6dp5y52jnXvVfPnB87X16D3imFWsA5Ogz8mygOwbHxyDiKHCyfNt3nLjksYO5i2fQv8PblUYGYcEAzGYh10rifs8YDv3Zdiyt15B63eXh/zY7TZTnyHvAokACteGK36RAq8Kt8GqiDB0edVtBk3PvxF1YmOXT2Fac2p9SkdDjY3SjaJ7eAV+UO8J3r8P0piTRIdDZL3EF+UrU2c1pKkk7/gTpnW6UcCgk4WIAwMROW74zJ97xGyamENPA5tIOpzfMA5s3W/BacpzsIAclfBVKZmCzSbw6v2SriuIag4A5my9U253FCVfB8iE3+DMf/7eRTyTKWtdqLhiQ==",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector9901;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=cxl6QkJJOSbtfwH3YOWq8ZIL+h91jY/XkzjgTlVXj4Y=;\n b=W6nWYMhyqPK64wZ/RpKw7F6AyjUkz4Go/7qUO+yIh4OjFWWUQnnz995qc7cn6yM/VhJLrjxsa1QzPHtmu4fHr/hpY+dvJBPputJuHWOqe2KJI4+Di5pNgw5/P8U1xxXcpZU6SEXAxwbn/lh8NrPJd7S4HuNEFMaghqLFYz9vd1SdgUzuE1DNcmsHTAe+3qyQA59R0hpCareHG3sMVlp5AKep6McwDdpJEDyS/TTptoiNJDTHZuFDN/OlnDG4ZQZjFD6i/y4vBxOWuFnHZs7QwfnUBBrmLCHZD5qU/j6QX0F9nyAr3YNjBnd+XNChrM5WRpKEiwjcnH3HNVJTuk063A==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass\n header.d=nxp.com; arc=none",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=cxl6QkJJOSbtfwH3YOWq8ZIL+h91jY/XkzjgTlVXj4Y=;\n b=kwu6y1YwMUV6vP1T57lsNKjOMIX5pHfAgzWurfZJU2B31eBtKvkKhlDdFdhnFQ4vWr6o0lGgZQUwBNvPBVCPNC+s+K7rc5mJZ9dqaN78sUZ8JoM5OEGO6O2Xt8EDLVM3KAcz/+1MZCmc4WyuK4NVfulExty1u3w1thx7NOnGYCg=",
        "Authentication-Results": "dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=nxp.com;",
        "From": "Gagandeep Singh <g.singh@nxp.com>",
        "To": "ferruh.yigit@amd.com,\n\tdev@dpdk.org",
        "Cc": "Gagandeep Singh <g.singh@nxp.com>,\n\tstable@dpdk.org",
        "Subject": "[PATCH 14/15] net/dpaa: fix buffer free on transmit SG packets",
        "Date": "Wed, 28 Sep 2022 10:55:15 +0530",
        "Message-Id": "<20220928052516.1279442-15-g.singh@nxp.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "In-Reply-To": "<20220928052516.1279442-1-g.singh@nxp.com>",
        "References": "<20220928052516.1279442-1-g.singh@nxp.com>",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-ClientProxiedBy": "SGBP274CA0015.SGPP274.PROD.OUTLOOK.COM (2603:1096:4:b0::27)\n To AS8PR04MB8198.eurprd04.prod.outlook.com\n (2603:10a6:20b:3b0::14)",
        "MIME-Version": "1.0",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-TrafficTypeDiagnostic": "AS8PR04MB8198:EE_|DB9PR04MB8495:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "03f54b07-acbb-410e-5cfd-08daa111ef0a",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n DIiF/Gx8n1DYBbPQz9UOSF2uYxBj9bbmNohl3Qa/9vk57JHn+3ExDcan6eGQ9fVSehtiyJpG6xTj6UvY19bGNdVA1hTDlOrN6xRXsdH0nDDfWsbV2WzYFTreYyuLeWSRDrBYU0NTWPK8DHfO5xb2Bdo+58ZRw5uuVH5yUuIvC3y/99FNMzWKAPZogEQI0DqoMZbpkydQnDWXT8jihEkbJC2dP2nrevE++cpciZagRwYWSXxOcMpM618Cr3xTG012rQjHD/Ces07xrd0Sb9yrmqe2XcU7nMLGOpQX/YSHKmKbU9Qzo1EAp5tDXnis2eiASN5NsAanYaxYpzcCO61hhdAvSrbmeVNBxp98D4p98nz8JTH38bCV6pMRER0rXc1x+klUvdterRnvgxwTEd3spAn+lAzUsjnS5u7bET03XRvK4fr2g9dO7HErhCpBvTILxd2dhUokXYlCvudhx8kFLUSxCnQinSno8fQB0I9B9oFMng+D/QlBxh4p7FCN00b/xOpdRJq8JOrKzpT9d3UHgGhpPcJX+fGSqTV+tmbAKIZvUa04jHfCV2/gN1E9skFd4s2vsaVI32rziDauO0BgcG0SMAxXCGbLvfdbKyoIS/v4GZATwBQceJ9DuSk9gmpb8DsLe3PGodKrOpw5nNwZiVGnbQHwoz1loM3Jyi88oEsoc0MtOVlAjcwYaDDYt0yWP044bimNMDPOLCL0Nw1bkdkdzc1OfTko+Wq3Qa9gQhloHm9J9vOLled30+90XTsYFVhCQNEuR+1A5K6U9KJJFA==",
        "X-Forefront-Antispam-Report": "CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;\n IPV:NLI; SFV:NSPM; H:AS8PR04MB8198.eurprd04.prod.outlook.com; PTR:; CAT:NONE;\n SFS:(13230022)(4636009)(366004)(376002)(396003)(346002)(136003)(39860400002)(451199015)(8676002)(6486002)(316002)(478600001)(38100700002)(38350700002)(5660300002)(4326008)(36756003)(66476007)(66556008)(66946007)(41300700001)(8936002)(83380400001)(6666004)(6506007)(52116002)(186003)(86362001)(2616005)(1076003)(26005)(6512007)(2906002);\n DIR:OUT; SFP:1101;",
        "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1",
        "X-MS-Exchange-AntiSpam-MessageData-0": "\n lw467c6+W0wkTlYrmvxUQPLPBWwv6+jiEaG8PlxDmhLLEe+rDJcmojBA4Et4DXgrMjr+A3mh6zn3kT6knxRV5BGdXVdq7bCETr7t9ixUqXtnV/Ysh2Y3ydkVjFjV/9o0PSz6BP4ACh2lxvaK8wFzOhrGxR7+pldfCeCie3cetcABShUfAywx20E/j7Qghq3G40LmJwle7i4+vv1qDYQ/LTCRjY7bAnifPREKzbfaMM5Mka7/SCuoVNgLRblJTKYv2FffTHcb3uae7Ty+WA4yyoTmc6ItDV5ajm7xef7ud/JLklJHxQbCBEXOJ8u6h9k9JQPrQEl5+Or6kCSAAW3alrVRoUjMvqMRy0ay6III0RsKLKzgY/CFONJ4jZdx0Z1EwrrWoJY4R33yp7klzpQKYaJJ0BV0pUg/ix7mTHuha8YTzVl1hgdztj83mZUmsQr+YnhNHC9QbcCpEpgkRuNqRpvA8pSsWknaOogRuSMSlO/vMlpc3NHD7v6jz5VxpT4TQs1rGC6z/Rl7g5+/Yimd5ye8vTDok/IUZiACe8y3GRGnun6MckQsbffrW8onXBpiUTu/6IT9k/4+kccl3As16u3hlymlO19AmsaRhw014/O8erLRj+JZ5zpS8y8LxVUj6j7YJuBTd1ZI6itsovRQRJXDdB14LTonvQ2q1K+bOU9lcz1V3DMkqdhQG27Zq63Z2Rd1zxzO1IozZ9xUZMpg/gD2aKNcDT+K9uzlwzu0G9Lt5t8SU52kgf96tBOlQUt5Kgp7fgmKd/tPIzvM85ctHBNCa7hYFuYlBLeO9R6e82BcRPqOkjOd4AQrbbbTYV5tOLub6asb5pvH5oe2rYIssIdIB1aB3manpbJFgzvRprw0iJA3VMc48E21g/5fJDNBZ16DyKI/Vo5rFbh+2vyJK2ZkUuwmQ6r2B5ef9LnQlTvAnW5uSn8T8aezgER0sEfHXS62t+9+Y8RRGglcJtR5/HLlpjeMLb52u4j2c39XZncNzUWUFSctL3C26zyIN8yy5qfEBBZy2VUBqPbsn5tQyl4CWza+23IgmQtBsODh/BQ+otAVfMEiTho3yqEnug3AB5r9q0TFYQ2pdc9xefASNhAl8uIvvQbJf2xHIluACh+GAKwBuq3LH7IbmAGmdDYeBAd38jSVZI6/eKfg/cEcwh6ZVFfT/KvJPOV5434RI+8YFKW2rOAkQzBAyC/iqUVbvmJ8qo2ssVJ6MSjekL0Ltyu+eTxHjf0crtv+mFMutXQvFJgfF1hRm+Qwn+1lAYILP/zUAwgmK0ONzg1a7eZ1v/ZyHVNwW3B+CbUOWG4Rh686YF6Jyq3No92VDiDm7CAbwcTIYxmBuzZqiG8lfaXTtbJg9Ai18oCDHEt2HhZuV6nfnqgxUF7ABVVe8GFkJjPzKVglwSGsW9dLrXUh24z3j/8tL1ccgCTCPpjO7FqZgQcMwWYKdP7+hWM5QOI9E4KVv4L7s5HVN/FQ7tGnYG1WhZeJuEHTE8FbyZ+yfwH2cFO90TT47wx4cFDf3CDznxxp+XMBRSofmw7hf9AsCnd2PV699vSu7vcewk43Jh/9Ci1HeV6kceOtoTHKRs77aOpZ",
        "X-OriginatorOrg": "nxp.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 03f54b07-acbb-410e-5cfd-08daa111ef0a",
        "X-MS-Exchange-CrossTenant-AuthSource": "AS8PR04MB8198.eurprd04.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Internal",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "28 Sep 2022 05:26:02.5951 (UTC)",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-CrossTenant-Id": "686ea1d3-bc2b-4c6f-a92c-d99c5c301635",
        "X-MS-Exchange-CrossTenant-MailboxType": "HOSTED",
        "X-MS-Exchange-CrossTenant-UserPrincipalName": "\n C7V5X9mFr8u64MLX9Mt8CsjvbeMcg+0CpbTwKR4BI98sLHSGi455+8Fn/msfxhE0",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "DB9PR04MB8495",
        "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"
    },
    "content": "When using SG list to TX with external and direct buffers,\nHW free direct buffers and driver free external buffers.\n\nSoftware scans the complete SG mbuf list to find the external\nbuffers to free, but this is wrong as hardware can free the\ndirect buffers if any present in the list and same can be\nre-allocated for other purpose in multi thread or high spead\nrunning traffic environment with new data in it. So the software\nwhich is scanning the SG mbuf list, if that list has any direct\nbuffer present then that direct buffer's next pointor can give\nwrong pointer value, if already freed by hardware which\ncan do the mempool corruption or memory leak.\n\nIn this patch instead of relying on user given SG mbuf list\nwe are storing the buffers in an internal list which will\nbe scanned by driver after transmit to free non-direct\nbuffers.\n\nThis patch also fixes below issues.\n\nDriver is freeing complete SG list by checking external buffer\nflag in first segment only, but external buffer can be attached\nto any of the segment. Because of this, driver either can double\nfree buffers or there can be memory leak.\n\nIn case of indirect buffers, driver is modifying the original\nbuffer list to free the indirect buffers but this orginal buffer\nlist is being used by driver even after transmit packets for\nnon-direct buffer cleanup. This can cause the buffer leak issue.\n\nFixes: f191d5abda54 (\"net/dpaa: support external buffers in Tx\")\nCc: stable@dpdk.org\n\nSigned-off-by: Gagandeep Singh <g.singh@nxp.com>\n---\n drivers/net/dpaa/dpaa_ethdev.h | 10 ++++++\n drivers/net/dpaa/dpaa_rxtx.c   | 61 ++++++++++++++++++++++------------\n 2 files changed, 49 insertions(+), 22 deletions(-)",
    "diff": "diff --git a/drivers/net/dpaa/dpaa_ethdev.h b/drivers/net/dpaa/dpaa_ethdev.h\nindex f9c0554530..502c1c88b8 100644\n--- a/drivers/net/dpaa/dpaa_ethdev.h\n+++ b/drivers/net/dpaa/dpaa_ethdev.h\n@@ -112,6 +112,16 @@\n \n extern struct rte_mempool *dpaa_tx_sg_pool;\n \n+/* structure to free external and indirect\n+ * buffers.\n+ */\n+struct dpaa_sw_buf_free {\n+\t/* To which packet this segment belongs */\n+\tuint16_t pkt_id;\n+\t/* The actual segment */\n+\tstruct rte_mbuf *seg;\n+};\n+\n /* Each network interface is represented by one of these */\n struct dpaa_if {\n \tint valid;\ndiff --git a/drivers/net/dpaa/dpaa_rxtx.c b/drivers/net/dpaa/dpaa_rxtx.c\nindex e23206bf5c..4d285b4f38 100644\n--- a/drivers/net/dpaa/dpaa_rxtx.c\n+++ b/drivers/net/dpaa/dpaa_rxtx.c\n@@ -803,9 +803,12 @@ uint16_t dpaa_eth_queue_rx(void *q,\n \n static int\n dpaa_eth_mbuf_to_sg_fd(struct rte_mbuf *mbuf,\n-\t\tstruct qm_fd *fd)\n+\t\tstruct qm_fd *fd,\n+\t\tstruct dpaa_sw_buf_free *free_buf,\n+\t\tuint32_t *free_count,\n+\t\tuint32_t pkt_id)\n {\n-\tstruct rte_mbuf *cur_seg = mbuf, *prev_seg = NULL;\n+\tstruct rte_mbuf *cur_seg = mbuf;\n \tstruct rte_mbuf *temp, *mi;\n \tstruct qm_sg_entry *sg_temp, *sgt;\n \tint i = 0;\n@@ -869,10 +872,11 @@ dpaa_eth_mbuf_to_sg_fd(struct rte_mbuf *mbuf,\n \t\t\t\tsg_temp->bpid =\n \t\t\t\t\tDPAA_MEMPOOL_TO_BPID(cur_seg->pool);\n \t\t\t}\n-\t\t\tcur_seg = cur_seg->next;\n \t\t} else if (RTE_MBUF_HAS_EXTBUF(cur_seg)) {\n+\t\t\tfree_buf[*free_count].seg = cur_seg;\n+\t\t\tfree_buf[*free_count].pkt_id = pkt_id;\n+\t\t\t++*free_count;\n \t\t\tsg_temp->bpid = 0xff;\n-\t\t\tcur_seg = cur_seg->next;\n \t\t} else {\n \t\t\t/* Get owner MBUF from indirect buffer */\n \t\t\tmi = rte_mbuf_from_indirect(cur_seg);\n@@ -885,11 +889,11 @@ dpaa_eth_mbuf_to_sg_fd(struct rte_mbuf *mbuf,\n \t\t\t\tsg_temp->bpid = DPAA_MEMPOOL_TO_BPID(mi->pool);\n \t\t\t\trte_mbuf_refcnt_update(mi, 1);\n \t\t\t}\n-\t\t\tprev_seg = cur_seg;\n-\t\t\tcur_seg = cur_seg->next;\n-\t\t\tprev_seg->next = NULL;\n-\t\t\trte_pktmbuf_free(prev_seg);\n+\t\t\tfree_buf[*free_count].seg = cur_seg;\n+\t\t\tfree_buf[*free_count].pkt_id = pkt_id;\n+\t\t\t++*free_count;\n \t\t}\n+\t\tcur_seg = cur_seg->next;\n \t\tif (cur_seg == NULL) {\n \t\t\tsg_temp->final = 1;\n \t\t\tcpu_to_hw_sg(sg_temp);\n@@ -904,7 +908,10 @@ dpaa_eth_mbuf_to_sg_fd(struct rte_mbuf *mbuf,\n static inline void\n tx_on_dpaa_pool_unsegmented(struct rte_mbuf *mbuf,\n \t\t\t    struct dpaa_bp_info *bp_info,\n-\t\t\t    struct qm_fd *fd_arr)\n+\t\t\t    struct qm_fd *fd_arr,\n+\t\t\t    struct dpaa_sw_buf_free *buf_to_free,\n+\t\t\t    uint32_t *free_count,\n+\t\t\t    uint32_t pkt_id)\n {\n \tstruct rte_mbuf *mi = NULL;\n \n@@ -923,6 +930,9 @@ tx_on_dpaa_pool_unsegmented(struct rte_mbuf *mbuf,\n \t\t\tDPAA_MBUF_TO_CONTIG_FD(mbuf, fd_arr, bp_info->bpid);\n \t\t}\n \t} else if (RTE_MBUF_HAS_EXTBUF(mbuf)) {\n+\t\tbuf_to_free[*free_count].seg = mbuf;\n+\t\tbuf_to_free[*free_count].pkt_id = pkt_id;\n+\t\t++*free_count;\n \t\tDPAA_MBUF_TO_CONTIG_FD(mbuf, fd_arr,\n \t\t\t\tbp_info ? bp_info->bpid : 0xff);\n \t} else {\n@@ -946,7 +956,9 @@ tx_on_dpaa_pool_unsegmented(struct rte_mbuf *mbuf,\n \t\t\tDPAA_MBUF_TO_CONTIG_FD(mbuf, fd_arr,\n \t\t\t\t\t\tbp_info ? bp_info->bpid : 0xff);\n \t\t}\n-\t\trte_pktmbuf_free(mbuf);\n+\t\tbuf_to_free[*free_count].seg = mbuf;\n+\t\tbuf_to_free[*free_count].pkt_id = pkt_id;\n+\t\t++*free_count;\n \t}\n \n \tif (mbuf->ol_flags & DPAA_TX_CKSUM_OFFLOAD_MASK)\n@@ -957,16 +969,21 @@ tx_on_dpaa_pool_unsegmented(struct rte_mbuf *mbuf,\n static inline uint16_t\n tx_on_dpaa_pool(struct rte_mbuf *mbuf,\n \t\tstruct dpaa_bp_info *bp_info,\n-\t\tstruct qm_fd *fd_arr)\n+\t\tstruct qm_fd *fd_arr,\n+\t\tstruct dpaa_sw_buf_free *buf_to_free,\n+\t\tuint32_t *free_count,\n+\t\tuint32_t pkt_id)\n {\n \tDPAA_DP_LOG(DEBUG, \"BMAN offloaded buffer, mbuf: %p\", mbuf);\n \n \tif (mbuf->nb_segs == 1) {\n \t\t/* Case for non-segmented buffers */\n-\t\ttx_on_dpaa_pool_unsegmented(mbuf, bp_info, fd_arr);\n+\t\ttx_on_dpaa_pool_unsegmented(mbuf, bp_info, fd_arr,\n+\t\t\t\tbuf_to_free, free_count, pkt_id);\n \t} else if (mbuf->nb_segs > 1 &&\n \t\t   mbuf->nb_segs <= DPAA_SGT_MAX_ENTRIES) {\n-\t\tif (dpaa_eth_mbuf_to_sg_fd(mbuf, fd_arr)) {\n+\t\tif (dpaa_eth_mbuf_to_sg_fd(mbuf, fd_arr, buf_to_free,\n+\t\t\t\t\t   free_count, pkt_id)) {\n \t\t\tDPAA_PMD_DEBUG(\"Unable to create Scatter Gather FD\");\n \t\t\treturn 1;\n \t\t}\n@@ -1070,7 +1087,8 @@ dpaa_eth_queue_tx(void *q, struct rte_mbuf **bufs, uint16_t nb_bufs)\n \tuint16_t state;\n \tint ret, realloc_mbuf = 0;\n \tuint32_t seqn, index, flags[DPAA_TX_BURST_SIZE] = {0};\n-\tstruct rte_mbuf **orig_bufs = bufs;\n+\tstruct dpaa_sw_buf_free buf_to_free[DPAA_MAX_SGS * DPAA_MAX_DEQUEUE_NUM_FRAMES];\n+\tuint32_t free_count = 0;\n \n \tif (unlikely(!DPAA_PER_LCORE_PORTAL)) {\n \t\tret = rte_dpaa_portal_init((void *)0);\n@@ -1153,7 +1171,10 @@ dpaa_eth_queue_tx(void *q, struct rte_mbuf **bufs, uint16_t nb_bufs)\n \t\t\t}\n indirect_buf:\n \t\t\tstate = tx_on_dpaa_pool(mbuf, bp_info,\n-\t\t\t\t\t\t&fd_arr[loop]);\n+\t\t\t\t\t\t&fd_arr[loop],\n+\t\t\t\t\t\tbuf_to_free,\n+\t\t\t\t\t\t&free_count,\n+\t\t\t\t\t\tloop);\n \t\t\tif (unlikely(state)) {\n \t\t\t\t/* Set frames_to_send & nb_bufs so\n \t\t\t\t * that packets are transmitted till\n@@ -1178,13 +1199,9 @@ dpaa_eth_queue_tx(void *q, struct rte_mbuf **bufs, uint16_t nb_bufs)\n \n \tDPAA_DP_LOG(DEBUG, \"Transmitted %d buffers on queue: %p\", sent, q);\n \n-\n-\tloop = 0;\n-\twhile (loop < sent) {\n-\t\tif (unlikely(RTE_MBUF_HAS_EXTBUF(*orig_bufs)))\n-\t\t\trte_pktmbuf_free(*orig_bufs);\n-\t\torig_bufs++;\n-\t\tloop++;\n+\tfor (loop = 0; loop < free_count; loop++) {\n+\t\tif (buf_to_free[loop].pkt_id < sent)\n+\t\t\trte_pktmbuf_free_seg(buf_to_free[loop].seg);\n \t}\n \n \treturn sent;\n",
    "prefixes": [
        "14/15"
    ]
}