get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 117596,
    "url": "http://patches.dpdk.org/api/patches/117596/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20221007174336.54354-17-andrew.boyer@amd.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": "<20221007174336.54354-17-andrew.boyer@amd.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20221007174336.54354-17-andrew.boyer@amd.com",
    "date": "2022-10-07T17:43:17",
    "name": "[16/35] net/ionic: precalculate segment lengths on receive side",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "51641f3c41ca13a165fc2342900555914ed9ebb3",
    "submitter": {
        "id": 2861,
        "url": "http://patches.dpdk.org/api/people/2861/?format=api",
        "name": "Andrew Boyer",
        "email": "Andrew.Boyer@amd.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/20221007174336.54354-17-andrew.boyer@amd.com/mbox/",
    "series": [
        {
            "id": 25037,
            "url": "http://patches.dpdk.org/api/series/25037/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=25037",
            "date": "2022-10-07T17:43:01",
            "name": "net/ionic: updates for 22.11 release",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/25037/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/117596/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/117596/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 8AAB7A04FD;\n\tFri,  7 Oct 2022 19:46:12 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 242EC42BC1;\n\tFri,  7 Oct 2022 19:44:48 +0200 (CEST)",
            "from NAM11-DM6-obe.outbound.protection.outlook.com\n (mail-dm6nam11on2043.outbound.protection.outlook.com [40.107.223.43])\n by mails.dpdk.org (Postfix) with ESMTP id 6570B42BB4\n for <dev@dpdk.org>; Fri,  7 Oct 2022 19:44:46 +0200 (CEST)",
            "from MW3PR05CA0009.namprd05.prod.outlook.com (2603:10b6:303:2b::14)\n by MN2PR12MB4421.namprd12.prod.outlook.com (2603:10b6:208:26c::10)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5676.20; Fri, 7 Oct\n 2022 17:44:43 +0000",
            "from CO1NAM11FT015.eop-nam11.prod.protection.outlook.com\n (2603:10b6:303:2b:cafe::8e) by MW3PR05CA0009.outlook.office365.com\n (2603:10b6:303:2b::14) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.13 via Frontend\n Transport; Fri, 7 Oct 2022 17:44:43 +0000",
            "from SATLEXMB04.amd.com (165.204.84.17) by\n CO1NAM11FT015.mail.protection.outlook.com (10.13.175.130) with Microsoft SMTP\n Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id\n 15.20.5709.10 via Frontend Transport; Fri, 7 Oct 2022 17:44:43 +0000",
            "from driver-dev1.pensando.io (10.180.168.240) by SATLEXMB04.amd.com\n (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.28; Fri, 7 Oct\n 2022 12:44:42 -0500"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=izz7VUhTv+6HXwvMuTWAC62U9JdtTuKgz4L1OkxoG/HntEwM9y2Uv3G+6Ic3Ink5n2s70fpuKvXTYFjHCQfQ81yMbmeo4XH56UlqfGjE9G+UpL79+QfGpoOoQETDrKvzq0JWwyVTqeVsjzVbqFOTuZSswSpjfVcLb476S7NrmYbkEo8dPi0WlS2mq2Xi7bvZBcB4A5d/M83HHCj8BYMjGnu22Jj2vHquberMDYCkmQKbKbz3X+px7xlzMqP/3AuzaOKMJxQYu1e2hjI4nB5BOBbEB3R+yVW7tpgWreifY9CZH5DymqqLNrFB04tNJtwif2otbfc51K9Pb37iur5uFQ==",
        "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=GhKG75DTC37Vh1bgRxkbiIpikUYFO8pH7j9Vk0UVWNI=;\n b=dNutOgHoUK8ioQayzWYkKEZyTrR3abiJ+Grh6pVZw7AGvo14p4KUqtP+ARNRaoXf5XjdFP9xiAt/AZeBAIugRV2ALsmyXu/I/+PecLtuJsAVSl3Vv3DQ/q+Mzu3kBHbqNJNJCqqgtFccWtJsPdEvB6wIzpF8f4Byfp96jiOkHibH2e8qt3SNO65tXrUwo20LXA8osJScmL0Xt3g6qLJdIA6Re36kS69OOUlCmutba/PIZfrvmZi2Lcdt/euWp6wBBvl67RDaD0ovu05LqMps9f0P3JY3/OV2JwlaxS2bRDzrOsWJkE9AfzsO32Gnv7xYAkZ5oObZZNOfYMnvnYX5Yg==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass (sender ip is\n 165.204.84.17) smtp.rcpttodomain=dpdk.org smtp.mailfrom=amd.com; dmarc=pass\n (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com;\n dkim=none (message not signed); arc=none",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=GhKG75DTC37Vh1bgRxkbiIpikUYFO8pH7j9Vk0UVWNI=;\n b=reUQlKa0FkvIU6g7RPC96DqvFqYasWeuTukIj8i94frcMZVwig4qUL/e0Rcvh4RTFkpkvhuktQk1EVFSQAUTNrcLgef/p2QK5x19oqfHIrccstupU17zDFFQBHQeUEbbhakCmfVaxtfSbGAlTmBBmaFOMxfZEqs0kjNr31PJG4Y=",
        "X-MS-Exchange-Authentication-Results": "spf=pass (sender IP is 165.204.84.17)\n smtp.mailfrom=amd.com; dkim=none (message not signed)\n header.d=none;dmarc=pass action=none header.from=amd.com;",
        "Received-SPF": "Pass (protection.outlook.com: domain of amd.com designates\n 165.204.84.17 as permitted sender) receiver=protection.outlook.com;\n client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C",
        "From": "Andrew Boyer <andrew.boyer@amd.com>",
        "To": "<dev@dpdk.org>",
        "CC": "Andrew Boyer <andrew.boyer@amd.com>",
        "Subject": "[PATCH 16/35] net/ionic: precalculate segment lengths on receive side",
        "Date": "Fri, 7 Oct 2022 10:43:17 -0700",
        "Message-ID": "<20221007174336.54354-17-andrew.boyer@amd.com>",
        "X-Mailer": "git-send-email 2.17.1",
        "In-Reply-To": "<20221007174336.54354-1-andrew.boyer@amd.com>",
        "References": "<20221007174336.54354-1-andrew.boyer@amd.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[10.180.168.240]",
        "X-ClientProxiedBy": "SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com\n (10.181.40.145)",
        "X-EOPAttributedMessage": "0",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-TrafficTypeDiagnostic": "CO1NAM11FT015:EE_|MN2PR12MB4421:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "63f3747d-0dac-479e-2062-08daa88b9e31",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n VveTSwIzPHRVWLF9+T5a819V8hJGXoAqTPujhsoFSuLYg5ezaRXAwXrst7d2QuGx0D0FJTua7fMACxER2MXNMYX6gQgoh50SD4t045OKX9RjPajEljbdevBm3UH9UfVphSRbcazYM0YD80Bdll345qAfMMyfBn+RwpKqkeDoRRs8UhfVbHjQQTJ4I0dQHdTaLg5891tvOX1hYm2sWqHl2eim45Z/UkOdmBE2vBirjPPWyZrYDv5+YelWgmSyhFLipUb31lDXOmlRjdzS1r8q8/CLAbTHlsOnMrmOf2gBTsJmitdthkzMWWN4cOP4m5M4hy4w4ifhs8mQZHgTjP9Y7Rn25MXJpU6Yxi0dErWg2JmFlXZv+y6ubdVN6j9i5evFF9FaV4PJU8D2fFMr0434CrP6eIorQqwCD5CyWR3j1iA/vyIib/BS/hKMOUXWlxdk73HRyaR8RygWhdfjpuwDJqgnB8azIxQpE63L73AFI6aiic+CW7An0q9Mtvy3yFkFONqukZ267e/tfIcd1wNtuvR69iAc13CRhLjRlH9nR7c005ReoTHNDRZYDmdqclC22FiWrwY7q6db0nzkVg0874zPivZEG5S1A0X7P0U2q3IXeyXNkly6wdFcaImwhgiK8Z8iSW5bYn3wGtdgsifLsOjJIrgx0dE4R7KqyuhRBrPI6oF6racfT4ELSESO26w7zDGFd96g/KMJ4YB7oiAoOhF7QS2sKyhEceSJuJaYJibDxkumj8Ngc/XmUfcpqOJ0GJ0XdSvOjHeNIi/qvD+KInkr3uZlc62KDqkUXd3E0gg=",
        "X-Forefront-Antispam-Report": "CIP:165.204.84.17; CTRY:US; LANG:en; SCL:1; SRV:;\n IPV:CAL; SFV:NSPM; H:SATLEXMB04.amd.com; PTR:InfoDomainNonexistent; CAT:NONE;\n SFS:(13230022)(4636009)(39860400002)(396003)(376002)(136003)(346002)(451199015)(46966006)(40470700004)(36840700001)(86362001)(83380400001)(82740400003)(40480700001)(5660300002)(8936002)(36756003)(40460700003)(81166007)(478600001)(44832011)(6666004)(8676002)(70586007)(4326008)(70206006)(316002)(1076003)(36860700001)(16526019)(336012)(26005)(426003)(2906002)(186003)(2616005)(356005)(41300700001)(47076005)(82310400005)(6916009)(36900700001);\n DIR:OUT; SFP:1101;",
        "X-OriginatorOrg": "amd.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "07 Oct 2022 17:44:43.2568 (UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 63f3747d-0dac-479e-2062-08daa88b9e31",
        "X-MS-Exchange-CrossTenant-Id": "3dd8961f-e488-4e60-8e11-a82d994e183d",
        "X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp": "\n TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d; Ip=[165.204.84.17];\n Helo=[SATLEXMB04.amd.com]",
        "X-MS-Exchange-CrossTenant-AuthSource": "\n CO1NAM11FT015.eop-nam11.prod.protection.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Anonymous",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "MN2PR12MB4421",
        "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": "The first (header) segment includes the standard headroom.\nSubsequent segments do not.\n\nStore the fragment counts in the queue structure.\n\nPrecalculating improves performance by reducing\nhow much work must be done in the hot path.\n\nSigned-off-by: Andrew Boyer <andrew.boyer@amd.com>\n---\n drivers/net/ionic/ionic_dev.h  |  1 +\n drivers/net/ionic/ionic_lif.c  | 36 ++++++++++++++++++++++++--\n drivers/net/ionic/ionic_lif.h  |  4 ++-\n drivers/net/ionic/ionic_rxtx.c | 46 ++++++++++++++--------------------\n 4 files changed, 57 insertions(+), 30 deletions(-)",
    "diff": "diff --git a/drivers/net/ionic/ionic_dev.h b/drivers/net/ionic/ionic_dev.h\nindex f72c05342c..55a9485bff 100644\n--- a/drivers/net/ionic/ionic_dev.h\n+++ b/drivers/net/ionic/ionic_dev.h\n@@ -137,6 +137,7 @@ struct ionic_dev {\n \n struct ionic_queue {\n \tuint16_t num_descs;\n+\tuint16_t num_segs;\n \tuint16_t head_idx;\n \tuint16_t tail_idx;\n \tuint16_t size_mask;\ndiff --git a/drivers/net/ionic/ionic_lif.c b/drivers/net/ionic/ionic_lif.c\nindex 578e36e60c..cc64aedaa1 100644\n--- a/drivers/net/ionic/ionic_lif.c\n+++ b/drivers/net/ionic/ionic_lif.c\n@@ -566,6 +566,7 @@ ionic_qcq_alloc(struct ionic_lif *lif,\n \t\tconst char *type_name,\n \t\tuint16_t flags,\n \t\tuint16_t num_descs,\n+\t\tuint16_t num_segs,\n \t\tuint16_t desc_size,\n \t\tuint16_t cq_desc_size,\n \t\tuint16_t sg_desc_size,\n@@ -616,6 +617,7 @@ ionic_qcq_alloc(struct ionic_lif *lif,\n \t\tgoto err_out_free_qcq;\n \t}\n \n+\tnew->q.num_segs = num_segs;\n \tnew->q.type = type;\n \n \terr = ionic_q_init(&new->q, index, num_descs);\n@@ -698,14 +700,38 @@ ionic_qcq_free(struct ionic_qcq *qcq)\n \n int\n ionic_rx_qcq_alloc(struct ionic_lif *lif, uint32_t socket_id, uint32_t index,\n-\t\tuint16_t nrxq_descs, struct ionic_rx_qcq **rxq_out)\n+\t\tuint16_t nrxq_descs, struct rte_mempool *mb_pool,\n+\t\tstruct ionic_rx_qcq **rxq_out)\n {\n \tstruct ionic_rx_qcq *rxq;\n-\tuint16_t flags;\n+\tuint16_t flags, seg_size, hdr_seg_size, max_segs, max_segs_fw;\n+\tuint32_t max_mtu;\n \tint err;\n \n \tflags = IONIC_QCQ_F_SG;\n \n+\tseg_size = rte_pktmbuf_data_room_size(mb_pool);\n+\n+\t/* The first mbuf needs to leave headroom */\n+\thdr_seg_size = seg_size - RTE_PKTMBUF_HEADROOM;\n+\n+\tmax_mtu = rte_le_to_cpu_32(lif->adapter->ident.lif.eth.max_mtu);\n+\n+\tmax_segs_fw = IONIC_RX_MAX_SG_ELEMS + 1;\n+\n+\t/*\n+\t * Calculate how many fragment pointers might be stored in queue.\n+\t */\n+\tmax_segs = 1 + (max_mtu + RTE_PKTMBUF_HEADROOM - 1) / seg_size;\n+\n+\tIONIC_PRINT(DEBUG, \"rxq %u frame_size %u seg_size %u max_segs %u\",\n+\t\tindex, lif->frame_size, seg_size, max_segs);\n+\tif (max_segs > max_segs_fw) {\n+\t\tIONIC_PRINT(ERR, \"Rx mbuf size insufficient (%d > %d avail)\",\n+\t\t\tmax_segs, max_segs_fw);\n+\t\treturn -EINVAL;\n+\t}\n+\n \terr = ionic_qcq_alloc(lif,\n \t\tIONIC_QTYPE_RXQ,\n \t\tsizeof(struct ionic_rx_qcq),\n@@ -714,6 +740,7 @@ ionic_rx_qcq_alloc(struct ionic_lif *lif, uint32_t socket_id, uint32_t index,\n \t\t\"rx\",\n \t\tflags,\n \t\tnrxq_descs,\n+\t\tmax_segs,\n \t\tsizeof(struct ionic_rxq_desc),\n \t\tsizeof(struct ionic_rxq_comp),\n \t\tsizeof(struct ionic_rxq_sg_desc),\n@@ -722,6 +749,8 @@ ionic_rx_qcq_alloc(struct ionic_lif *lif, uint32_t socket_id, uint32_t index,\n \t\treturn err;\n \n \trxq->flags = flags;\n+\trxq->seg_size = seg_size;\n+\trxq->hdr_seg_size = hdr_seg_size;\n \n \tlif->rxqcqs[index] = rxq;\n \t*rxq_out = rxq;\n@@ -749,6 +778,7 @@ ionic_tx_qcq_alloc(struct ionic_lif *lif, uint32_t socket_id, uint32_t index,\n \t\t\"tx\",\n \t\tflags,\n \t\tntxq_descs,\n+\t\t1,\n \t\tsizeof(struct ionic_txq_desc),\n \t\tsizeof(struct ionic_txq_comp),\n \t\tsizeof(struct ionic_txq_sg_desc_v1),\n@@ -779,6 +809,7 @@ ionic_admin_qcq_alloc(struct ionic_lif *lif)\n \t\t\"admin\",\n \t\tflags,\n \t\tIONIC_ADMINQ_LENGTH,\n+\t\t1,\n \t\tsizeof(struct ionic_admin_cmd),\n \t\tsizeof(struct ionic_admin_comp),\n \t\t0,\n@@ -805,6 +836,7 @@ ionic_notify_qcq_alloc(struct ionic_lif *lif)\n \t\t\"notify\",\n \t\tflags,\n \t\tIONIC_NOTIFYQ_LENGTH,\n+\t\t1,\n \t\tsizeof(struct ionic_notifyq_cmd),\n \t\tsizeof(union ionic_notifyq_comp),\n \t\t0,\ndiff --git a/drivers/net/ionic/ionic_lif.h b/drivers/net/ionic/ionic_lif.h\nindex b3f0ce720b..237fd0a2ef 100644\n--- a/drivers/net/ionic/ionic_lif.h\n+++ b/drivers/net/ionic/ionic_lif.h\n@@ -81,6 +81,8 @@ struct ionic_rx_qcq {\n \t/* cacheline2 */\n \tstruct rte_mempool *mb_pool;\n \tuint16_t frame_size;\t/* Based on configured MTU */\n+\tuint16_t hdr_seg_size;\t/* Length of first segment of RX chain */\n+\tuint16_t seg_size;\t/* Length of all subsequent segments */\n \tuint16_t flags;\n \n \t/* cacheline3 (inside stats) */\n@@ -199,7 +201,7 @@ int ionic_dev_allmulticast_enable(struct rte_eth_dev *dev);\n int ionic_dev_allmulticast_disable(struct rte_eth_dev *dev);\n \n int ionic_rx_qcq_alloc(struct ionic_lif *lif, uint32_t socket_id,\n-\tuint32_t index, uint16_t nrxq_descs,\n+\tuint32_t index, uint16_t nrxq_descs, struct rte_mempool *mp,\n \tstruct ionic_rx_qcq **qcq_out);\n int ionic_tx_qcq_alloc(struct ionic_lif *lif, uint32_t socket_id,\n \tuint32_t index, uint16_t ntxq_descs,\ndiff --git a/drivers/net/ionic/ionic_rxtx.c b/drivers/net/ionic/ionic_rxtx.c\nindex 17ffaf6aac..0f251eca13 100644\n--- a/drivers/net/ionic/ionic_rxtx.c\n+++ b/drivers/net/ionic/ionic_rxtx.c\n@@ -732,7 +732,7 @@ ionic_dev_rx_queue_setup(struct rte_eth_dev *eth_dev,\n \teth_dev->data->rx_queue_state[rx_queue_id] =\n \t\tRTE_ETH_QUEUE_STATE_STOPPED;\n \n-\terr = ionic_rx_qcq_alloc(lif, socket_id, rx_queue_id, nb_desc,\n+\terr = ionic_rx_qcq_alloc(lif, socket_id, rx_queue_id, nb_desc, mp,\n \t\t\t&rxq);\n \tif (err) {\n \t\tIONIC_PRINT(ERR, \"Queue %d allocation failure\", rx_queue_id);\n@@ -773,9 +773,6 @@ ionic_rx_clean(struct ionic_rx_qcq *rxq,\n \tuint64_t pkt_flags = 0;\n \tuint32_t pkt_type;\n \tstruct ionic_rx_stats *stats = &rxq->stats;\n-\tuint32_t buf_size = (uint16_t)\n-\t\t(rte_pktmbuf_data_room_size(rxq->mb_pool) -\n-\t\tRTE_PKTMBUF_HEADROOM);\n \tuint32_t left;\n \tvoid **info;\n \n@@ -809,14 +806,12 @@ ionic_rx_clean(struct ionic_rx_qcq *rxq,\n \trxm->pkt_len = cq_desc->len;\n \trxm->port = rxq->qcq.lif->port_id;\n \n-\tleft = cq_desc->len;\n-\n-\trxm->data_len = RTE_MIN(buf_size, left);\n-\tleft -= rxm->data_len;\n+\trxm->data_len = RTE_MIN(rxq->hdr_seg_size, cq_desc->len);\n+\tleft = cq_desc->len - rxm->data_len;\n \n \trxm_seg = rxm->next;\n \twhile (rxm_seg && left) {\n-\t\trxm_seg->data_len = RTE_MIN(buf_size, left);\n+\t\trxm_seg->data_len = RTE_MIN(rxq->seg_size, left);\n \t\tleft -= rxm_seg->data_len;\n \n \t\trxm_seg = rxm_seg->next;\n@@ -926,10 +921,7 @@ ionic_rx_fill(struct ionic_rx_qcq *rxq)\n \tstruct ionic_rxq_sg_elem *elem;\n \tvoid **info;\n \trte_iova_t dma_addr;\n-\tuint32_t i, j, nsegs, buf_size, size;\n-\n-\tbuf_size = (uint16_t)(rte_pktmbuf_data_room_size(rxq->mb_pool) -\n-\t\tRTE_PKTMBUF_HEADROOM);\n+\tuint32_t i, j;\n \n \t/* Initialize software ring entries */\n \tfor (i = ionic_q_space_avail(q); i; i--) {\n@@ -943,21 +935,18 @@ ionic_rx_fill(struct ionic_rx_qcq *rxq)\n \n \t\tinfo = IONIC_INFO_PTR(q, q->head_idx);\n \n-\t\tnsegs = (rxq->frame_size + buf_size - 1) / buf_size;\n-\n \t\tdesc = &desc_base[q->head_idx];\n \t\tdma_addr = rte_cpu_to_le_64(rte_mbuf_data_iova_default(rxm));\n \t\tdesc->addr = dma_addr;\n-\t\tdesc->len = buf_size;\n-\t\tsize = buf_size;\n-\t\tdesc->opcode = (nsegs > 1) ? IONIC_RXQ_DESC_OPCODE_SG :\n+\t\tdesc->len = rxq->hdr_seg_size;\n+\t\tdesc->opcode = (q->num_segs > 1) ? IONIC_RXQ_DESC_OPCODE_SG :\n \t\t\tIONIC_RXQ_DESC_OPCODE_SIMPLE;\n \t\trxm->next = NULL;\n \n \t\tprev_rxm_seg = rxm;\n \t\tsg_desc = &sg_desc_base[q->head_idx];\n \t\telem = sg_desc->elems;\n-\t\tfor (j = 0; j < nsegs - 1 && j < IONIC_RX_MAX_SG_ELEMS; j++) {\n+\t\tfor (j = 0; j < q->num_segs - 1u; j++) {\n \t\t\tstruct rte_mbuf *rxm_seg;\n \t\t\trte_iova_t data_iova;\n \n@@ -967,21 +956,18 @@ ionic_rx_fill(struct ionic_rx_qcq *rxq)\n \t\t\t\treturn -ENOMEM;\n \t\t\t}\n \n+\t\t\trxm_seg->data_off = 0;\n \t\t\tdata_iova = rte_mbuf_data_iova(rxm_seg);\n \t\t\tdma_addr = rte_cpu_to_le_64(data_iova);\n \t\t\telem->addr = dma_addr;\n-\t\t\telem->len = buf_size;\n-\t\t\tsize += buf_size;\n+\t\t\telem->len = rxq->seg_size;\n \t\t\telem++;\n+\n \t\t\trxm_seg->next = NULL;\n \t\t\tprev_rxm_seg->next = rxm_seg;\n \t\t\tprev_rxm_seg = rxm_seg;\n \t\t}\n \n-\t\tif (size < rxq->frame_size)\n-\t\t\tIONIC_PRINT(ERR, \"Rx SG size is not sufficient (%d < %d)\",\n-\t\t\t\tsize, rxq->frame_size);\n-\n \t\tinfo[0] = rxm;\n \n \t\tq->head_idx = Q_NEXT_TO_POST(q, 1);\n@@ -1000,6 +986,7 @@ ionic_dev_rx_queue_start(struct rte_eth_dev *eth_dev, uint16_t rx_queue_id)\n {\n \tuint8_t *rx_queue_state = eth_dev->data->rx_queue_state;\n \tstruct ionic_rx_qcq *rxq;\n+\tstruct ionic_queue *q;\n \tint err;\n \n \tif (rx_queue_state[rx_queue_id] == RTE_ETH_QUEUE_STATE_STARTED) {\n@@ -1009,11 +996,16 @@ ionic_dev_rx_queue_start(struct rte_eth_dev *eth_dev, uint16_t rx_queue_id)\n \t}\n \n \trxq = eth_dev->data->rx_queues[rx_queue_id];\n+\tq = &rxq->qcq.q;\n \n \trxq->frame_size = rxq->qcq.lif->frame_size - RTE_ETHER_CRC_LEN;\n \n-\tIONIC_PRINT(DEBUG, \"Starting RX queue %u, %u descs, size %u\",\n-\t\trx_queue_id, rxq->qcq.q.num_descs, rxq->frame_size);\n+\t/* Recalculate segment count based on MTU */\n+\tq->num_segs = 1 +\n+\t\t(rxq->frame_size + RTE_PKTMBUF_HEADROOM - 1) / rxq->seg_size;\n+\n+\tIONIC_PRINT(DEBUG, \"Starting RX queue %u, %u descs, size %u segs %u\",\n+\t\trx_queue_id, q->num_descs, rxq->frame_size, q->num_segs);\n \n \terr = ionic_lif_rxq_init(rxq);\n \tif (err)\n",
    "prefixes": [
        "16/35"
    ]
}