From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM01-BN3-obe.outbound.protection.outlook.com (mail-bn3nam01on0085.outbound.protection.outlook.com [104.47.33.85]) by dpdk.org (Postfix) with ESMTP id EF8E45920 for ; Tue, 25 Apr 2017 09:29:33 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=SIPJqNxz1xKb2nVPV1OyQFLVrRBfJKkAjWEdAT3WTZM=; b=GpG/Eg9vgaMTJI80u9Xrckr6nEFFys0UgY3wHUt9CKVIGuGedwuuyZc6UTCfxDtzcB2SgzfX9zO8czj4CnbcN5cyMlUsAncafaXQbLVQREXikG50LkhrkP9SuaorobFz4/VefRLHLtqXcBIh4Cw+fuT20Xv5x6fohel1szMV9Zg= Received: from SN1PR0701CA0075.namprd07.prod.outlook.com (10.163.126.43) by CY1PR0701MB1417.namprd07.prod.outlook.com (10.160.150.18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1047.13; Tue, 25 Apr 2017 07:29:31 +0000 Received: from BN1BFFO11FD023.protection.gbl (2a01:111:f400:7c10::1:197) by SN1PR0701CA0075.outlook.office365.com (2a01:111:e400:52fd::43) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1047.13 via Frontend Transport; Tue, 25 Apr 2017 07:29:30 +0000 Authentication-Results: spf=none (sender IP is 50.232.66.26) smtp.mailfrom=cavium.com; dpdk.org; dkim=none (message not signed) header.d=none;dpdk.org; dmarc=none action=none header.from=cavium.com; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) Received: from CAEXCH02.caveonetworks.com (50.232.66.26) by BN1BFFO11FD023.mail.protection.outlook.com (10.58.144.86) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.1.1047.9 via Frontend Transport; Tue, 25 Apr 2017 07:29:30 +0000 Received: from avsmtprelay01.qlc.com (10.1.112.194) by CAEXCH02.caveonetworks.com (10.17.4.29) with Microsoft SMTP Server id 14.2.309.2; Tue, 25 Apr 2017 00:29:26 -0700 Received: from avluser05.qlc.com (avluser05.qlc.com [10.1.113.115]) by avsmtprelay01.qlc.com (Postfix) with ESMTP id 38E658BF770A1; Tue, 25 Apr 2017 00:29:26 -0700 (PDT) Received: (from rmody@localhost) by avluser05.qlc.com (8.14.4/8.14.4/Submit) id v3P7TQFN032098; Tue, 25 Apr 2017 00:29:26 -0700 X-Authentication-Warning: avluser05.qlc.com: rmody set sender to rasesh.mody@cavium.com using -f From: Rasesh Mody To: CC: Harish Patil , Date: Tue, 25 Apr 2017 00:28:38 -0700 Message-ID: <1493105326-31984-3-git-send-email-rasesh.mody@cavium.com> X-Mailer: git-send-email 1.7.10.3 In-Reply-To: <1493105326-31984-1-git-send-email-rasesh.mody@cavium.com> References: <1493105326-31984-1-git-send-email-rasesh.mody@cavium.com> MIME-Version: 1.0 Content-Type: text/plain X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:50.232.66.26; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(39850400002)(39410400002)(39450400003)(39400400002)(39840400002)(2980300002)(428002)(199003)(189002)(9170700003)(50226002)(81166006)(48376002)(87636002)(86362001)(5003940100001)(50466002)(110136004)(6916009)(5660300001)(6666003)(101416001)(2906002)(2950100002)(38730400002)(107886003)(189998001)(8936002)(47776003)(4720700003)(356003)(4326008)(106466001)(8676002)(76176999)(305945005)(50986999)(2351001)(42186005)(105586002)(54906002)(33646002)(36756003); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR0701MB1417; H:CAEXCH02.caveonetworks.com; FPR:; SPF:None; MLV:sfv; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1BFFO11FD023; 1:ESzIxME+V18ISR2Z7yYB3AB3lvszyE8WoE4396ggQfrgYL+tmeJLBznJpMHcyE7SMBFWGNiZJGFxfUbaJyQQGyfO+dgbjFKyNHwwjNhnMw+/VFv8GFTV3BQkR3Zr4GH9KnqmQvfImXiC4He3Uqk4JuoEAGd13ZgKnMPSzSiVp6/Zeaeg8afj2LsI5+ZboR/8L0hKRH7TrrF63W5gIxUlCpUvuzXV+mTTZ9pcDKWCdJtA8qHSPDTAOy2RpGQDy3htU1KdeNvnw913xa++s4UEPLV9y7pYGfQsP3jRxthaosbWDeOYwm/aaVjRV2s+2WxTw4NXPN7fP6+pI1LJOsAc33ySzGdmXISczrHc9fFxVfcTooNM7g5vYvKoV2OEk7XNndC2bi8ThQpbqrDtnE/bD4FV6IAX3nVMRcGT2oFmlG33+ZIloxBSrQTe0ZE9jz3LSZ9CuY3a2ojEmOs9DvTf+gRKnpDuNAlFqVjAHrOoOKlNR1yU1q5fqrZ86pF9Q09VKBBAS5+hoUlklD0NQh9mKg== X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 44e8d2bb-165e-4666-34b4-08d48baccfe9 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(2017030254075)(201703131423075)(201703031133081); SRVR:CY1PR0701MB1417; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1417; 3:qdRzhSjVLW02/Qa4AZS2Wo37lf1dAWT+WT8n2pcZbP2lXu+eKBS1oO7WwF3cu+X8EsmHAnP+9R0xz1/wmIUt5PvcISN/edqbS6un1ZBGc1+ygBUp//ZOuOyC5+TE/jlZ0/bDbCe9ClcenISfG8uPvTBsJ/eAKuqjNCscKtfOCiNpLWaoKwJuq3DLB4Th9OF4yAMRx4jC2QenDZ3oiplU/g1I4cOIYwkipP2BBRLmLYyOYlFgI2nYtxlm3Bd8vxnRQob4IFO7h+XufzmCEozEAtpviHw7VXp9ClK2hsMWL/PvPiF2l0WjRk+0zifxX49Nv2IKAK4WZ5SLDKPrkmhuwW7jZHbxQMUz6N0OM9JxEkpQZW+yQYbTYWADCcoaiZtMfjTQR7Ea2HFLsnzjJfA3tQ/ShmevDJnLu0Thu/tgclw0PuTLvj0eTHYXlt304lenKGq3NE6QYLvW/E43DWYyhg== X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1417; 25:J/B7+geaaXU4ddlbVf1tS5YtoIC/icqEPVlYON/cvQtrzDimJwXpUG5SqLsG1/qTEOrDwz8G0/uksliu3L3nEIDGWLMublCEAXt54h2thtUpAqYUrCyjlblfa/lmaFeXTFPpQ5fIGEuSe26be/l0IpJzd5pR+L2Loe4OYq3lz3fiN9dnUqrQwBWlgISWfZ1dasRUPPPi3SbmJnrmonqeyqf8KGQ3iQZVMa0zfnSWqLErftbKQBsAwZ36nxaybKsVtQVbZ+dhD2eHtnqWuTRdQrVTLl1EHD35a35JokLbZuIwp4vsgwL8VI95UxPTnG1CXR6CruZzVl56THKddETqRhAs4fosGEwdoyqyi5W/IqjNaN9nnmBamcWC6/YynqWvTpc2KJePkcKVb86YC/PoJexvMXetpMu7jkQKgrdZgaiMkCDnyIHRs7AVm5E76rvBtMIpml3Y5qwdvMzITbYWCA==; 31:A1tku/CeB79WWUJHVYpf/OGmHLaSqGR5jml3kvkC65ipFU2nT0TOGjHp/a5TCYDAWVU4dq+WcTba5vpk7hjAaiZrkshfCfvFG64ls5KWmgKYvatm+HhdjIkivS7ZAVMbo6syYm+wvhcntoi/rLfd4A4AIC1z+7V760VH4JcdcJCMGtaL7KV0pZdoMrMuwwzFTGmkgTkCJsm360rGwHmQ5YTag2AT1VROJyXqwrVtwiosfiSTCO4WB8Ff2B7PnNupbiMo8wxWc1MH8LAZSpp/L9huxGtDqn8id3F5tpXv0fw= X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1417; 20:kTzTCyrJgfoHFNZHKrVAq12RPpEpGDtp/1havELxORCzdZMAoFVw2p/Y7SZdc9HAubYbj0HIKvAdBx6N/s/TagIeWRT2aHOmNCc9Fs6+qHV3IsFJZQR4kQOavhMVR+e828Um66Exi/PPzYWh+CzhOFJ/mHP56K/v3naW3pm0duNRq7Mjx7Rl8Rb/QUr5N0BGKoDgpP/b0bH2MNEIB19Nzx0RfFMpr2mV8tIEgnQYmYb3f7twvCOnNG6ovaseMP1iDo8KjdvKCzCxaoKIBmG+P5CEih8MipGHUx9WetmIUvycvx6EvpqzAsXvhAPgVziswDNCm8loKgicAXsxLC8nBPDkbA8rYRo8l873bYmqEwaA6YihE5IZfrhq6BlLSAeT8WTEy3IbQXDsu/GFCRErZu0pcc2l51vk8qZQY3Bfep58r7st4MVT4ykwFGnTiOR4iGghfJzQREsuNKL9njWs9iRKT0v01+wFJj8Gj2ckacfsGOq2JF1zWcDL6niSizNP X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040450)(601004)(2401047)(13015025)(13017025)(8121501046)(5005006)(13024025)(13023025)(13018025)(10201501046)(93006095)(93001095)(3002001)(6041248)(20161123560025)(20161123555025)(20161123564025)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(6072148); SRVR:CY1PR0701MB1417; BCL:0; PCL:0; RULEID:; SRVR:CY1PR0701MB1417; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1417; 4:LqqbUIb/iU0odnYeZW3tFiSKnSxthekwo2fBml1q4LXiY1DzNH9fijNZNkhZdqy5NujRflweDziYIYsQ5eAFm58Zbt5h4DYOLc4JNZ12/4xaGJ4UMdwCUBEvjSP0n2VGMDcVbqL1mOdigRX2FFdXcaIFGuwuOs0Qa4D1JKXFvDBSA+WiRMJx8VHOtDy0R2gN6aSp8NwbsSrgHkscW6KnoNsS05Pc0pqo5uWDcnrDplDhJiriVfywoJ/tOugxh78mKamCsfQ0l8JMJmPHIB5xg/edyv0JnIZNfwLYFemx4mLIycTvtWg7BW4qCqOpt8bh+hgMavLzocYnDg/LmJWvzxX/6yyUOV4d7At/MtEChew9ldZxxIrz9Itbpl1VO5IytO50CGlzGJBWgVOTtB5PqYkF24KWQ/FTm4afMzG8SGwzx823CTNvZ+upmCG+NQ3ApJZzr6srSdel0BFbf+QHtGNFA5J2GHYqIxOAsmh/YMlth7foLP9Nl9Rhl3av5/1WKUrHcGhbfWVbmXHnnt66JSAiihVdJt9G3nhNziSXiVzcFZuTLgy0z0QqzuaLj31EYLuI7BTO3MF7oFr8ZEa6/L96yAXV0goPotZPF79wW191xraWqgZ0qRLyaNpdaY5RTp/s2vz/fn/CbVQP4R2N3hhIlh4GZp7TR0GS14yp6x5DfK64mtq5p7JuxY6SBb2heAXQzwwlo5VDfB2vtq0YGIsH2uzDlXmDTWKhMGwUfUhb+wk9klPL36AjaNrj905beJAEeMmOPpnL9RrV2+txFwoRYVFhRnVgKH3wOXSYo8WJGfyjDz6wkAQeIYa+p1Xm X-Forefront-PRVS: 0288CD37D9 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY1PR0701MB1417; 23:Xjv/XEXJLDt6eI3nNL2cHhDNcEuwcFmJSYNAqZM?= =?us-ascii?Q?7Yj9OLdoMZJkYXZ6WDVRXtAE0i1ZbQHaHuYI++G7dsBalpgJ68IPUJgCED9U?= =?us-ascii?Q?2uI65zz9ltmucespam9QZyCwVnkhZH55lTNEQHV42lHLuaZAX08fcQv5ialX?= =?us-ascii?Q?CfIyMpZwdtuY2WEHDugZoXgUy5VfEsnc3Eb5hP/1AYFS1tktOVznlNg9A3+c?= =?us-ascii?Q?1h5QmYrwVMC63lx/p3SchPsXSRj2PNyUCy6bcG9cXR5/HvfbAev74QnedMdq?= =?us-ascii?Q?1aTuerJ6aaXcvp1Xnyo1v5cHMHhdVUjyv1d7lUegNbRNqJOnK/8ZvIjKO9Dp?= =?us-ascii?Q?uBhZD8vgyRLjn58+Wu2gr+1jFJkWJFU5g+Xr4gl1TCVi2HKvD/DyrF0eXfCs?= =?us-ascii?Q?ZJu0k9iHkblt3+IfT5rw99+FsLZVtbP86BOGJsjFVKpUfQtb+NPkrhpgud9l?= =?us-ascii?Q?He1hgF1pSBD1sKYty6D7S+NUYj9q+pVci5zXSGu83mxlz6T4otMuXPkvLqtP?= =?us-ascii?Q?FrbnmEgMreDqskV4vaNX1gmHNuD4HVPoUEQ63us+cBTPeY43JVB4ta2mnlNT?= =?us-ascii?Q?EhZhIHw+BPiDD0jWfsYhrekJtwqY+uu9TsfnlZaqZel+4y834UT3MYA1cAKf?= =?us-ascii?Q?CZDujzedI6C/Vry5j3LvwHMRfnZlQ+aXpHYwky4doijOjALpidSWblDghgj2?= =?us-ascii?Q?HvtuU8SXD+4KngR2Nkzri9tJN0XvqJJreOjCjCMzVZij/hDEiisQAgrqO+vZ?= =?us-ascii?Q?SlaaQTc4NEmaoB4bIBn0NbHRyEzNH3OlkCiV0fK+XBTAQMxlapRMPXYZtf+q?= =?us-ascii?Q?7geKGhETF13OYeIH2HJI73znOOXpjH+iZlWrkfZn3+q8H3f/VDHAgG4YUTzV?= =?us-ascii?Q?FGe+AFNwBgEvg3LJXkI0hJHI4Uq8QvjIFoNxuu+b6FbGbuH1zzpG1LKHojxj?= =?us-ascii?Q?oSYQ7r9K9EObENSNdbYsaIMjtGlMRMol9JoN7NhKWBc8O9LmygC9DqJKTdt5?= =?us-ascii?Q?86W7r4N/Ptj/A3hxXv80LEQ4JOPMY9fLnzanSljmQhO+JiFZHWvyWPNPgwDy?= =?us-ascii?Q?0G89cIVodqs0dRTtLTcd6UPR3QGUQhuzIExdwu7PIMrkGA54QZw=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1417; 6:XAz17WrorinMOBxSAovFnKmT8rW78chTWUXd3HkG6PUyl7hyTIe+UATo01b+IRzoOXKY3CKCbTyaGCOzsrdussO4hBPdiKFO1stzMC3DTfd+2X59+D3H4T8NNgGyhlD9O2JSDmaZGYewrBnDJoQlDPu42iIzWScz5IVuDVUMkKNzn8WvEcDWJRL5a+MbY9C7FuxyjgnKa0YG2o5Cb5xHH3GathDSkz2U2Zz5rUQ8B5DHMmadyjEX2y1smj4sJQIpp+U5fBYneYAzT0WA7ebRmN6TRCSzMFv4gHetZkNg4d4Xh7TtWyk1NHlYf+n54YsiTSOYPw1a1wFFbTpJZrcgN1v9vFjU7RPCLyX/h/kk4Hf4ifscxCPpDzOe1ZWwPzNJBqoK2RMk0ZUZ02NkvR4gXW99bsgt02lT/elpIKOL3IFrPMxwSlewp4NxqkIp5OKg0NvMWEpDEmFulsfS7+GXLsQcy+27r62aNs9mzvYXDLuHAIKsurOQiaeyiDoRUsvputQWK7EHpv3eoeulsmlXWQ==; 5:v6HH0Nnyvpxv4g4G7ehsV7QCxQb3vFPwUcFYfkQU+Ja2skUqyFA8bHjwdcysfEbSVfSqBXeaYLHxQpCRr3rY4a57zew1DN7Ab+WTC1HJe1lia9T9XjRUb0ahtz1DllxkLiTrlkgN6C2tdPq0oxW9JQ==; 24:IBudjath+WIgx+CBYYLiNlQgHRFP96ydwyxHxvgbk7uIYG2IRNYvYJDJ3bT5h43ZhzuUngUzAMWEeM/XGEsKr1pydCxVjWcD+Z7h0PqH/mY= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1417; 7:bhHGPORWvQD9EVJ9L18U0msf6Yi5bM/bXHlr9QQ7GvOlPLueupX8VMHJzu5XITw7mKtRhSgfKae8rnbK8gw6tEledB7UN+VTpXR/QtE01h0xMPZ4oMsNByJXmy4ZOGcPTso8EzXfbnBd13a1LQ6xXmLHgEUNwBOCtS4k5Ayw9KUOEeENqlGxGwNCRA8nmeXuq3SedQY28nS2H5qRlfCNGGIFVZ1PFtGbuEdyJHv6Im1nqVQkHG4ED1TnLss4Dnxy729qHpLc3cafR1jjK0UqJn7x8scHL6Q6RdYt4i6f3He9arAdfdosrcHUFTayxtCWkVF6kwaOYJuoss04oFYq7A== X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Apr 2017 07:29:30.1453 (UTC) X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=711e4ccf-2e9b-4bcf-a551-4094005b6194; Ip=[50.232.66.26]; Helo=[CAEXCH02.caveonetworks.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR0701MB1417 Subject: [dpdk-dev] [PATCH 03/11] net/qede: fix LRO handling issue X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 25 Apr 2017 07:29:34 -0000 From: Harish Patil - Add a common routine to handle ETH_RX_CQE_TYPE_TPA_CONT and ETH_RX_CQE_TYPE_TPA_END. - Remove enum qede_agg_state since there is no need to maintain aggregation state. - Modify the segment chaining logic by tracking head and tail TPA segments of each aggregation. - Add more debug and comments. - Mark the packet as PKT_RX_LRO. Fixes: 29540be7efce ("net/qede: support LRO/TSO offloads") Signed-off-by: Harish Patil --- drivers/net/qede/qede_rxtx.c | 135 +++++++++++++++++++----------------------- drivers/net/qede/qede_rxtx.h | 11 +--- 2 files changed, 64 insertions(+), 82 deletions(-) diff --git a/drivers/net/qede/qede_rxtx.c b/drivers/net/qede/qede_rxtx.c index 7623a01..ec045b0 100644 --- a/drivers/net/qede/qede_rxtx.c +++ b/drivers/net/qede/qede_rxtx.c @@ -514,14 +514,17 @@ void qede_dealloc_fp_resc(struct rte_eth_dev *eth_dev) /* Enable LRO in split mode */ sge_tpa_params->tpa_ipv4_en_flg = enable; sge_tpa_params->tpa_ipv6_en_flg = enable; - sge_tpa_params->tpa_ipv4_tunn_en_flg = enable; - sge_tpa_params->tpa_ipv6_tunn_en_flg = enable; + sge_tpa_params->tpa_ipv4_tunn_en_flg = false; + sge_tpa_params->tpa_ipv6_tunn_en_flg = false; /* set if tpa enable changes */ sge_tpa_params->update_tpa_en_flg = 1; /* set if tpa parameters should be handled */ sge_tpa_params->update_tpa_param_flg = enable; sge_tpa_params->max_buffers_per_cqe = 20; + /* Enable TPA in split mode. In this mode each TPA segment + * starts on the new BD, so there is one BD per segment. + */ sge_tpa_params->tpa_pkt_split_flg = 1; sge_tpa_params->tpa_hdr_data_split_flg = 0; sge_tpa_params->tpa_gro_consistent_flg = 0; @@ -793,91 +796,71 @@ static inline uint32_t qede_rx_cqe_to_pkt_type(uint16_t flags) } static inline void -qede_rx_process_tpa_cont_cqe(struct qede_dev *qdev, - struct qede_rx_queue *rxq, - struct eth_fast_path_rx_tpa_cont_cqe *cqe) +qede_rx_process_tpa_cmn_cont_end_cqe(struct qede_dev *qdev, + struct qede_rx_queue *rxq, + uint8_t agg_index, uint16_t len) { struct ecore_dev *edev = QEDE_INIT_EDEV(qdev); struct qede_agg_info *tpa_info; - struct rte_mbuf *temp_frag; /* Pointer to mbuf chain head */ - struct rte_mbuf *curr_frag; - uint8_t list_count = 0; + struct rte_mbuf *curr_frag; /* Pointer to currently filled TPA seg */ uint16_t cons_idx; - uint8_t i; - - PMD_RX_LOG(INFO, rxq, "TPA cont[%02x] - len_list [%04x %04x]\n", - cqe->tpa_agg_index, rte_le_to_cpu_16(cqe->len_list[0]), - rte_le_to_cpu_16(cqe->len_list[1])); - tpa_info = &rxq->tpa_info[cqe->tpa_agg_index]; - temp_frag = tpa_info->mbuf; - assert(temp_frag); - - for (i = 0; cqe->len_list[i]; i++) { + /* Under certain conditions it is possible that FW may not consume + * additional or new BD. So decision to consume the BD must be made + * based on len_list[0]. + */ + if (rte_le_to_cpu_16(len)) { + tpa_info = &rxq->tpa_info[agg_index]; cons_idx = rxq->sw_rx_cons & NUM_RX_BDS(rxq); curr_frag = rxq->sw_rx_ring[cons_idx].mbuf; + assert(curr_frag); + curr_frag->nb_segs = 1; + curr_frag->pkt_len = rte_le_to_cpu_16(len); + curr_frag->data_len = curr_frag->pkt_len; + tpa_info->tpa_tail->next = curr_frag; + tpa_info->tpa_tail = curr_frag; qede_rx_bd_ring_consume(rxq); - curr_frag->data_len = rte_le_to_cpu_16(cqe->len_list[i]); - temp_frag->next = curr_frag; - temp_frag = curr_frag; - list_count++; - } - - /* Allocate RX mbuf on the RX BD ring for those many consumed */ - for (i = 0 ; i < list_count ; i++) { if (unlikely(qede_alloc_rx_buffer(rxq) != 0)) { - DP_ERR(edev, "Failed to allocate mbuf for LRO cont\n"); - tpa_info->state = QEDE_AGG_STATE_ERROR; + PMD_RX_LOG(ERR, rxq, "mbuf allocation fails\n"); + rte_eth_devices[rxq->port_id].data->rx_mbuf_alloc_failed++; + rxq->rx_alloc_errors++; } } } static inline void +qede_rx_process_tpa_cont_cqe(struct qede_dev *qdev, + struct qede_rx_queue *rxq, + struct eth_fast_path_rx_tpa_cont_cqe *cqe) +{ + PMD_RX_LOG(INFO, rxq, "TPA cont[%d] - len [%d]\n", + cqe->tpa_agg_index, rte_le_to_cpu_16(cqe->len_list[0])); + /* only len_list[0] will have value */ + qede_rx_process_tpa_cmn_cont_end_cqe(qdev, rxq, cqe->tpa_agg_index, + cqe->len_list[0]); +} + +static inline void qede_rx_process_tpa_end_cqe(struct qede_dev *qdev, struct qede_rx_queue *rxq, struct eth_fast_path_rx_tpa_end_cqe *cqe) { - struct ecore_dev *edev = QEDE_INIT_EDEV(qdev); struct qede_agg_info *tpa_info; - struct rte_mbuf *temp_frag; /* Pointer to mbuf chain head */ - struct rte_mbuf *curr_frag; - struct rte_mbuf *rx_mb; - uint8_t list_count = 0; - uint16_t cons_idx; - uint8_t i; - - PMD_RX_LOG(INFO, rxq, "TPA End[%02x] - len_list [%04x %04x]\n", - cqe->tpa_agg_index, rte_le_to_cpu_16(cqe->len_list[0]), - rte_le_to_cpu_16(cqe->len_list[1])); - - tpa_info = &rxq->tpa_info[cqe->tpa_agg_index]; - temp_frag = tpa_info->mbuf; - assert(temp_frag); - - for (i = 0; cqe->len_list[i]; i++) { - cons_idx = rxq->sw_rx_cons & NUM_RX_BDS(rxq); - curr_frag = rxq->sw_rx_ring[cons_idx].mbuf; - qede_rx_bd_ring_consume(rxq); - curr_frag->data_len = rte_le_to_cpu_16(cqe->len_list[i]); - temp_frag->next = curr_frag; - temp_frag = curr_frag; - list_count++; - } - - /* Allocate RX mbuf on the RX BD ring for those many consumed */ - for (i = 0 ; i < list_count ; i++) { - if (unlikely(qede_alloc_rx_buffer(rxq) != 0)) { - DP_ERR(edev, "Failed to allocate mbuf for lro end\n"); - tpa_info->state = QEDE_AGG_STATE_ERROR; - } - } + struct rte_mbuf *rx_mb; /* Pointer to head of the chained agg */ + qede_rx_process_tpa_cmn_cont_end_cqe(qdev, rxq, cqe->tpa_agg_index, + cqe->len_list[0]); /* Update total length and frags based on end TPA */ - rx_mb = rxq->tpa_info[cqe->tpa_agg_index].mbuf; - /* TBD: Add sanity checks here */ + tpa_info = &rxq->tpa_info[cqe->tpa_agg_index]; + rx_mb = rxq->tpa_info[cqe->tpa_agg_index].tpa_head; + /* TODO: Add Sanity Checks */ rx_mb->nb_segs = cqe->num_of_bds; rx_mb->pkt_len = cqe->total_packet_len; - tpa_info->state = QEDE_AGG_STATE_NONE; + + PMD_RX_LOG(INFO, rxq, "TPA End[%d] reason %d cqe_len %d nb_segs %d" + " pkt_len %d\n", cqe->tpa_agg_index, cqe->end_reason, + rte_le_to_cpu_16(cqe->len_list[0]), rx_mb->nb_segs, + rx_mb->pkt_len); } static inline uint32_t qede_rx_cqe_to_tunn_pkt_type(uint16_t flags) @@ -1037,9 +1020,15 @@ static inline uint32_t qede_rx_cqe_to_tunn_pkt_type(uint16_t flags) cqe_start_tpa = &cqe->fast_path_tpa_start; tpa_info = &rxq->tpa_info[cqe_start_tpa->tpa_agg_index]; tpa_start_flg = true; + /* Mark it as LRO packet */ + ol_flags |= PKT_RX_LRO; + /* In split mode, seg_len is same as len_on_first_bd + * and ext_bd_len_list will be empty since there are + * no additional buffers + */ PMD_RX_LOG(INFO, rxq, - "TPA start[%u] - len %04x [header %02x]" - " [bd_list[0] %04x], [seg_len %04x]\n", + "TPA start[%d] - len_on_first_bd %d header %d" + " [bd_list[0] %d], [seg_len %d]\n", cqe_start_tpa->tpa_agg_index, rte_le_to_cpu_16(cqe_start_tpa->len_on_first_bd), cqe_start_tpa->header_len, @@ -1050,14 +1039,13 @@ static inline uint32_t qede_rx_cqe_to_tunn_pkt_type(uint16_t flags) case ETH_RX_CQE_TYPE_TPA_CONT: qede_rx_process_tpa_cont_cqe(qdev, rxq, &cqe->fast_path_tpa_cont); - continue; + goto next_cqe; case ETH_RX_CQE_TYPE_TPA_END: qede_rx_process_tpa_end_cqe(qdev, rxq, &cqe->fast_path_tpa_end); tpa_agg_idx = cqe->fast_path_tpa_end.tpa_agg_index; - rx_mb = rxq->tpa_info[tpa_agg_idx].mbuf; - PMD_RX_LOG(INFO, rxq, "TPA end reason %d\n", - cqe->fast_path_tpa_end.end_reason); + tpa_info = &rxq->tpa_info[tpa_agg_idx]; + rx_mb = rxq->tpa_info[tpa_agg_idx].tpa_head; goto tpa_end; case ETH_RX_CQE_TYPE_SLOW_PATH: PMD_RX_LOG(INFO, rxq, "Got unexpected slowpath CQE\n"); @@ -1087,9 +1075,6 @@ static inline uint32_t qede_rx_cqe_to_tunn_pkt_type(uint16_t flags) offset = cqe_start_tpa->placement_offset; /* seg_len = len_on_first_bd */ len = rte_le_to_cpu_16(cqe_start_tpa->len_on_first_bd); - tpa_info->start_cqe_bd_len = len + - cqe_start_tpa->header_len; - tpa_info->mbuf = rx_mb; } if (qede_tunn_exist(parse_flag)) { PMD_RX_LOG(INFO, rxq, "Rx tunneled packet\n"); @@ -1207,6 +1192,10 @@ static inline uint32_t qede_rx_cqe_to_tunn_pkt_type(uint16_t flags) if (!tpa_start_flg) { rx_mb->nb_segs = fp_cqe->bd_num; rx_mb->pkt_len = pkt_len; + } else { + /* store ref to the updated mbuf */ + tpa_info->tpa_head = rx_mb; + tpa_info->tpa_tail = tpa_info->tpa_head; } rte_prefetch1(rte_pktmbuf_mtod(rx_mb, void *)); tpa_end: diff --git a/drivers/net/qede/qede_rxtx.h b/drivers/net/qede/qede_rxtx.h index eb8174f..a1bbd25 100644 --- a/drivers/net/qede/qede_rxtx.h +++ b/drivers/net/qede/qede_rxtx.h @@ -149,16 +149,9 @@ struct qede_rx_entry { }; /* TPA related structures */ -enum qede_agg_state { - QEDE_AGG_STATE_NONE = 0, - QEDE_AGG_STATE_START = 1, - QEDE_AGG_STATE_ERROR = 2 -}; - struct qede_agg_info { - struct rte_mbuf *mbuf; - uint16_t start_cqe_bd_len; - uint8_t state; /* for sanity check */ + struct rte_mbuf *tpa_head; /* Pointer to first TPA segment */ + struct rte_mbuf *tpa_tail; /* Pointer to last TPA segment */ }; /* -- 1.7.10.3