Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/816807/?format=api
{ "id": 816807, "url": "http://patchwork.ozlabs.org/api/patches/816807/?format=api", "web_url": "http://patchwork.ozlabs.org/project/netdev/patch/160fed29eda1be2860ef5ef7f64feed34c8545eb.1505915085.git.igor.russkikh@aquantia.com/", "project": { "id": 7, "url": "http://patchwork.ozlabs.org/api/projects/7/?format=api", "name": "Linux network development", "link_name": "netdev", "list_id": "netdev.vger.kernel.org", "list_email": "netdev@vger.kernel.org", "web_url": null, "scm_url": null, "webscm_url": null, "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<160fed29eda1be2860ef5ef7f64feed34c8545eb.1505915085.git.igor.russkikh@aquantia.com>", "list_archive_url": null, "date": "2017-09-21T10:53:42", "name": "[net,4/4] net:ethernet:atlantic: fix iommu errors", "commit_ref": null, "pull_url": null, "state": "changes-requested", "archived": true, "hash": "3ab8adf637e7392e7c36013252a7f097b7e680a3", "submitter": { "id": 72409, "url": "http://patchwork.ozlabs.org/api/people/72409/?format=api", "name": "Igor Russkikh", "email": "igor.russkikh@aquantia.com" }, "delegate": { "id": 34, "url": "http://patchwork.ozlabs.org/api/users/34/?format=api", "username": "davem", "first_name": "David", "last_name": "Miller", "email": "davem@davemloft.net" }, "mbox": "http://patchwork.ozlabs.org/project/netdev/patch/160fed29eda1be2860ef5ef7f64feed34c8545eb.1505915085.git.igor.russkikh@aquantia.com/mbox/", "series": [ { "id": 4355, "url": "http://patchwork.ozlabs.org/api/series/4355/?format=api", "web_url": "http://patchwork.ozlabs.org/project/netdev/list/?series=4355", "date": "2017-09-21T10:53:38", "name": "net:ethernet:aquantia: Atlantic driver bugfixes and improvements", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/4355/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/816807/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/816807/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<netdev-owner@vger.kernel.org>", "X-Original-To": "patchwork-incoming@ozlabs.org", "Delivered-To": "patchwork-incoming@ozlabs.org", "Authentication-Results": [ "ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=netdev-owner@vger.kernel.org;\n\treceiver=<UNKNOWN>)", "ozlabs.org; dkim=pass (1024-bit key;\n\tunprotected) header.d=AQUANTIA1COM.onmicrosoft.com\n\theader.i=@AQUANTIA1COM.onmicrosoft.com header.b=\"F81vphqo\"; \n\tdkim-atps=neutral", "spf=none (sender IP is )\n\tsmtp.mailfrom=Igor.Russkikh@aquantia.com; " ], "Received": [ "from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3xyYR82Ysnz9sNw\n\tfor <patchwork-incoming@ozlabs.org>;\n\tThu, 21 Sep 2017 20:55:00 +1000 (AEST)", "(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1751790AbdIUKy5 (ORCPT <rfc822;patchwork-incoming@ozlabs.org>);\n\tThu, 21 Sep 2017 06:54:57 -0400", "from mail-co1nam03on0044.outbound.protection.outlook.com\n\t([104.47.40.44]:35280\n\t\"EHLO NAM03-CO1-obe.outbound.protection.outlook.com\"\n\trhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP\n\tid S1751773AbdIUKyz (ORCPT <rfc822;netdev@vger.kernel.org>);\n\tThu, 21 Sep 2017 06:54:55 -0400", "from ubuntubox.rdc.aquantia.com (95.79.108.179) by\n\tBY2PR0701MB1958.namprd07.prod.outlook.com (10.163.155.16) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id\n\t15.20.77.7; Thu, 21 Sep 2017 10:54:45 +0000" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version;\n\tbh=cPhL0xvfe9ALU130lZKiNzYjdUjzCV/oggrLr20B63g=;\n\tb=F81vphqoHNwmSItvMNKOOh0K47RUn+ILQDnPXEBY3vYKHXxLaIBTZGL37vbXBSB1YA0y8BIKPQUwxY+qgbh1E6FMM9/SceezwZmgOFh8Q2eNibn64kLjc++hmzrGKTYUVvsnQYkkP7cB3iUFCuUE5pWgDIXY6C3OSVyeIjTDkIw=", "From": "Igor Russkikh <igor.russkikh@aquantia.com>", "To": "\"David S . Miller\" <davem@davemloft.net>", "Cc": "netdev@vger.kernel.org, David Arcari <darcari@redhat.com>,\n\tPavel Belous <Pavel.Belous@aquantia.com>,\n\tNadezhda Krupnina <Nadezhda.Krupnina@aquantia.com>,\n\tSimon Edelhaus <simon.edelhaus@aquantia.com>,\n\tPavel Belous <pavel.belous@aquantia.com>,\n\tIgor Russkikh <igor.russkikh@aquantia.com>", "Subject": "[PATCH net 4/4] net:ethernet:atlantic: fix iommu errors", "Date": "Thu, 21 Sep 2017 13:53:42 +0300", "Message-Id": "<160fed29eda1be2860ef5ef7f64feed34c8545eb.1505915085.git.igor.russkikh@aquantia.com>", "X-Mailer": "git-send-email 2.7.4", "In-Reply-To": "<cover.1505915085.git.igor.russkikh@aquantia.com>", "References": "<cover.1505915085.git.igor.russkikh@aquantia.com>", "MIME-Version": "1.0", "Content-Type": "text/plain", "X-Originating-IP": "[95.79.108.179]", "X-ClientProxiedBy": "VI1PR0501CA0018.eurprd05.prod.outlook.com (10.172.9.156)\n\tTo\n\tBY2PR0701MB1958.namprd07.prod.outlook.com (10.163.155.16)", "X-MS-PublicTrafficType": "Email", "X-MS-Office365-Filtering-Correlation-Id": "dfc11377-843d-47f0-9dda-08d500df3066", "X-Microsoft-Antispam": "UriScan:; BCL:0; PCL:0;\n\tRULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(300000503095)(300135400095)(2017052603199)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);\n\tSRVR:BY2PR0701MB1958; ", "X-Microsoft-Exchange-Diagnostics": [ "1; BY2PR0701MB1958;\n\t3:ecEbGVrT9kKdiJ9BUDdUVZ9VJD15w/Sy5AvIqsL2BgbzYmpfLnjGJlOMu0Jz3TuJlmeori25xE6NZzLnHHINNFiK1rzb0laBjouY9HDjsRgwhy4sgh4EVabhQSBu5oh6bUPoXuxQ8DV6bDqCIhVj9VC8NBZjsHsvsvHrl0y5KdXDBePP/5Bhytcl36R/2q3j2nuj4y4pBXTa5vb36DDw5GZJBW0sX2+KNJvWazUq9QnTrmEoA2GMxdVzyuKF4J9d;\n\t25:LDOa+IIJxDOHtVDh5ClV8hWtVKzV5LsKi5jumX6HpSx23xwXSFuODDJI3H3cJZ/RSc/FMe8fbesnn/JNLVpLOZj1Ywl9S1GDKdXQB/22hyqkWBdkreq/yq4LY/5SH9a0YZNgIS+9KCaea5h0EBO5Bei/DbD41px0UGw/AQkCicEE7oInsO7A047IgdaKOeyY33z9pgoxW71LwkZWJXsk1tMaZt6xB/M2iWqfWjw4t4+yjfljZ8xhaEG+nLDokc+I2opkbmRLavWE5tkR9/lPXSDHcKUApgKy8tcuHhIa2XRdjRyRFodgpZUTkuNBUw74Wf4n+b2FeVyQx5rkjL5upw==;\n\t31:QqwrAnrne0NbiEsKugp+JwunpKIXAmAtAwc2f3sqXmywPIQS+Czv8AZk1Dgz8HwF7zcFjpUJdb63HV+u8tpPg1SMr7PG8nudn1DS82tO1KAOEz8TC3BtSBZ96nvqXHp9u4Fp4BfVEF9k0yZ0aqLq+gRix3TDjnI1AAXbSxzahbzHwpzTU84bTbnh1HZPq+rX33wdYCEaxU8Zen1JKvRudU3HYT50xy4gMfq5w5l/3vQ=", "1; BY2PR0701MB1958;\n\t20:TazjnEcXgJdhqGLuakqH2668XAunlnT/B1CHdF0tPzZLaQPj1wsxpj/7XcolzEms4t0OPMS3R3GOzPu23RezESLDWyMKw9fvQ5062pFRiNM/T6V1D7CdyRQuzN23RY5Fxt0zsb2Bqx1t2UNI5KxrSuRDptxeDwFHr3Vo6WQ5xIwnbSS7hFQ9rkv82Rn29BTQjYmMZijL4Dvl6MvPrqDA7QQhdEE5FcN+lWO1cPKgXSnXKWSd9qYFdwS281D5ZiLyALk0ngrHPS9dx2w6uGc7Lr78RCDAyF1iLb51QkKNci5cYVfWmTxUC2zogsZPGh3NjYKo4WjYNRKBomrJfUAeDgyAIWA2DvI9uRZEL6c7f32Z68Fh4hDb/dS85vVJwaBcbVmvEVeDJSIdgfg051IjKOwzr5hNDwnaUU+JrPl99r0n4xLipJl0k7iAKYc99bofe/1kEqe4RvdGSmOZqLL2E/jXJCTgypVJTZA0UzRUn+ZdPGrHS7/VK3IK8O6KDzEq;\n\t4:NUb35td7kDA7r61pVdBglVCGNun+yriBvuWrLbW/bvv6ns0v2JviOSYLq4uauXibkIwKjaE4V0SryMOmX4BfzqhSyxdDJaGXVBQOLbpc6q96U60PVELcFSidC9FccQ/T43PlU2TbQ0OZjeg8GoyT4w/u9SpHYvyjcFM/YyQ39uodVbiKyOFFoqh3ssN+0q4NOkd8YL1eqLZGcLrPbQAo6d6rlP2xNbYeOEcQIkCNCT7nddqVflzUIrMa+IPOCG/w", "1; BY2PR0701MB1958;\n\t23:QItXTiucRM9jBLvZMV1243lDnq+P72Ual4h7vqVWQp5DVNkky8bg2+CWQC2lptnb4Uq3ybex7pJRwIwD740eOzXMIiRPlxfapT1WssY8RRv5KETrO3syTrxFwf7IxdpEPuti7tDTT5b1VCfefRUvKHyhPrONrCEvhd9g1LFbdRCqJpAyonztIj8lQD76V2lOGsXf2Ss8I6w3xgJZJMFK2k12nFyamCxHwkwM/EwsQ4NNeJ/mc6lrJENxFzNHJJzFMCH0eaWjc/4Z1saqVLDwBjdPtVMpxE8yceriXtZkZQKn7W2BfvWPHECMP/Hq4R0x8NmhRIVBk+/6s0AoiTL6HTsl9dnnUtiV6Jb0/9I/qcXKSHcuUiq0zs8Zs7Gga3juOOPfGt95iwBHFA9OH9MpEGBwWHpCgkk8Jn4qDnTpyF/9E90c5/4QsqpW8FXWyXabeiBmJBRlSjnTxCHEx43eJRG1vzLsr9Q/050RU8tw5LGyYpSNw6FDibvWa8aE3aRh0dJV53+r+BumSeBzT6f+BfO4RHbn5o1QHzczKpjggfpGnUI+mf3PpoDScQlg9criRQbM/Cq7Uha4HExICKJojHIc7q83zNoXyBAJKRx8G/PzBHn1KZUGDBq/xXMWMJBRLqqDqPAxjLE0iCBMPFcKSXCz6LRXUAFj2Q/t7f6ZgQm+jCKBEXUhdTf1lmEjXQMbNH34szSXn6nqAPEZEO3J795TOuTdrzQIEbOlGDLUpV0QK9GIhAPabh9gnr54W5AWhbGk5UkcF7VJYlPEJiebH6JwpaIGLh4yAMPRq+KU8DrXugsaQb9lndtK849GuK4GJqe5TmI6V5gjOJ3K3U1vB8ziZ4NBFqitxwI3zqaBxbw2NR4SEs/ltvnikRBiGo4PAuYdoF596if1jwAuLGBhVApWxsaJe0h2U90b9AsC6uOQgIDuETjPDfnUa4v8raY5NUhSd+gHZyM/KmBOAgmdeGV/IKhZMap1bWlCKIxFHQIICNnrHTpY6KYu2gESKlRQZBViGt4j85aCLXRupN3eRCcG6iABWbc1o9BJN38v03q6nKXxVSva/zILHlYXrPENiqBkTdGIbdQFNacfX8qTDvTDdlmUYmq3/7CduRD1ZE4pQDI9urIILDrNDpy6IEl8areei8jR431klJI+aAQnvg==", "1; BY2PR0701MB1958;\n\t6:1RBHdMDirnrcLEyS3WJ2NC1FVUaNJ08WLPB1EQBjB2ojYBcTNsHrCbPFjztRyZ1EvsceMjFWOhEy/j1Kgf2k1RHMa1tvDdI4pUAbCrtGOnAxMgo/WJImdpwyzrP7o+MjJKy6dc55w8xmnSvVeShdPjoNyHmWbJ5dU/M7av4MAjVOuD6SZukGn6R2LZxSuLXezabUBUn5mBgpuBDGt51etobK0tVYJWYq2hiYiv6aBdm8tBIbveanJVm0BBINsZzqT8Uo38gjrWC7s0m3spqIYXji5OwqWdCMhj5u/6eYE05rJNIowyd8tGO8iVrW+sOZuftajEoEjysSWgamaFC4DA==;\n\t5:1QNPmKi3OVk1RzklZVMUjawpDAGnwNrcyl8PpYz7Z840kW69PKYhcBF45g595gFLf6B+bA6A4I081+cRMkkxHJ7S7zmtu6CZlf8WqzC4d9+LTdb/lVH6INCbV9m8yCYl5WYi9P8SVcUzrwr8aY+zBg==;\n\t24:qIKb1N80YCapoCxoKJtWBKQdEGkkfJ5ytjb/g0iq6Z5zLsH2A1abniaQWpcOawqlBIz0Ho7Nrh/otbU92RQoxkmouH/5U+XqH8vUbifaCEk=;\n\t7:V/kjws2i8h2SdvaNzGaWWoluj8L2F6uC/BhcoN23jK1sCAjAEWhXgVNHK/zxlVWlvZB6ETGjOtvJvAUQyfARnsRQH4JxH9sxpgVlniGPYDKgRluyXNMjtIj95y8r2EATP2AbmTYxH05bjw/A2vjeXTvdtsiR8i1kRkSnHh5P6ftnuzdj8n8okBxMUFTBLXq9rBrHtlL8o2ATQprFzcxY9jlTcvITMcsKMtCz1BaNW8g=" ], "X-MS-TrafficTypeDiagnostic": "BY2PR0701MB1958:", "X-Exchange-Antispam-Report-Test": "UriScan:;", "X-Microsoft-Antispam-PRVS": "<BY2PR0701MB1958C93FECC82CE922ABCF8A98660@BY2PR0701MB1958.namprd07.prod.outlook.com>", "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(5005006)(8121501046)(100000703101)(100105400095)(10201501046)(3002001)(93006095)(93001095)(6041248)(20161123558100)(20161123555025)(20161123560025)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);\n\tSRVR:BY2PR0701MB1958; BCL:0; PCL:0;\n\tRULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);\n\tSRVR:BY2PR0701MB1958; ", "X-Forefront-PRVS": "04371797A5", "X-Forefront-Antispam-Report": "SFV:NSPM;\n\tSFS:(10009020)(6009001)(39830400002)(376002)(346002)(199003)(189002)(6486002)(189998001)(575784001)(86362001)(81156014)(4326008)(33646002)(68736007)(8676002)(72206003)(478600001)(81166006)(16586007)(316002)(101416001)(16526017)(54906003)(36756003)(2950100002)(6666003)(6916009)(97736004)(5660300001)(50466002)(118296001)(48376002)(50226002)(76176999)(106356001)(2906002)(53936002)(25786009)(50986999)(105586002)(107886003)(5003940100001)(66066001)(8936002)(47776003)(6116002)(3846002)(305945005)(7736002);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:BY2PR0701MB1958;\n\tH:ubuntubox.rdc.aquantia.com; FPR:; SPF:None;\n\tPTR:InfoNoRecords; A:1; MX:1; LANG:en; ", "Received-SPF": "None (protection.outlook.com: aquantia.com does not designate\n\tpermitted sender hosts)", "SpamDiagnosticOutput": "1:99", "SpamDiagnosticMetadata": "NSPM", "X-OriginatorOrg": "aquantia.com", "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "21 Sep 2017 10:54:45.8309\n\t(UTC)", "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted", "X-MS-Exchange-CrossTenant-Id": "83e2e134-991c-4ede-8ced-34d47e38e6b1", "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "BY2PR0701MB1958", "Sender": "netdev-owner@vger.kernel.org", "Precedence": "bulk", "List-ID": "<netdev.vger.kernel.org>", "X-Mailing-List": "netdev@vger.kernel.org" }, "content": "From: Pavel Belous <pavel.belous@aquantia.com>\n\nCall skb_frag_dma_map multiple times if tx length is greater than\ndevice max and avoid processing tx ring until entire packet has been\nsent.\n\nSigned-off-by: Igor Russkikh <igor.russkikh@aquantia.com>\nSigned-off-by: Pavel Belous <pavel.belous@aquantia.com>\n---\n drivers/net/ethernet/aquantia/atlantic/aq_nic.c | 43 ++++++++++++++----------\n drivers/net/ethernet/aquantia/atlantic/aq_ring.c | 27 ++++++++++-----\n drivers/net/ethernet/aquantia/atlantic/aq_ring.h | 6 ++--\n 3 files changed, 49 insertions(+), 27 deletions(-)", "diff": "diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_nic.c b/drivers/net/ethernet/aquantia/atlantic/aq_nic.c\nindex 24f573c..5b18ffc 100644\n--- a/drivers/net/ethernet/aquantia/atlantic/aq_nic.c\n+++ b/drivers/net/ethernet/aquantia/atlantic/aq_nic.c\n@@ -474,6 +474,7 @@ static unsigned int aq_nic_map_skb(struct aq_nic_s *self,\n \tunsigned int nr_frags = skb_shinfo(skb)->nr_frags;\n \tunsigned int frag_count = 0U;\n \tunsigned int dx = ring->sw_tail;\n+\tstruct aq_ring_buff_s *first = NULL;\n \tstruct aq_ring_buff_s *dx_buff = &ring->buff_ring[dx];\n \n \tif (unlikely(skb_is_gso(skb))) {\n@@ -484,6 +485,7 @@ static unsigned int aq_nic_map_skb(struct aq_nic_s *self,\n \t\tdx_buff->len_l4 = tcp_hdrlen(skb);\n \t\tdx_buff->mss = skb_shinfo(skb)->gso_size;\n \t\tdx_buff->is_txc = 1U;\n+\t\tdx_buff->eop_index = 0xffffU;\n \n \t\tdx_buff->is_ipv6 =\n \t\t\t(ip_hdr(skb)->version == 6) ? 1U : 0U;\n@@ -503,6 +505,7 @@ static unsigned int aq_nic_map_skb(struct aq_nic_s *self,\n \tif (unlikely(dma_mapping_error(aq_nic_get_dev(self), dx_buff->pa)))\n \t\tgoto exit;\n \n+\tfirst = dx_buff;\n \tdx_buff->len_pkt = skb->len;\n \tdx_buff->is_sop = 1U;\n \tdx_buff->is_mapped = 1U;\n@@ -531,40 +534,46 @@ static unsigned int aq_nic_map_skb(struct aq_nic_s *self,\n \n \tfor (; nr_frags--; ++frag_count) {\n \t\tunsigned int frag_len = 0U;\n+\t\tunsigned int buff_offset = 0U;\n+\t\tunsigned int buff_size = 0U;\n \t\tdma_addr_t frag_pa;\n \t\tskb_frag_t *frag = &skb_shinfo(skb)->frags[frag_count];\n \n \t\tfrag_len = skb_frag_size(frag);\n-\t\tfrag_pa = skb_frag_dma_map(aq_nic_get_dev(self), frag, 0,\n-\t\t\t\t\t frag_len, DMA_TO_DEVICE);\n \n-\t\tif (unlikely(dma_mapping_error(aq_nic_get_dev(self), frag_pa)))\n-\t\t\tgoto mapping_error;\n+\t\twhile (frag_len) {\n+\t\t\tif (frag_len > AQ_CFG_TX_FRAME_MAX)\n+\t\t\t\tbuff_size = AQ_CFG_TX_FRAME_MAX;\n+\t\t\telse\n+\t\t\t\tbuff_size = frag_len;\n+\n+\t\t\tfrag_pa = skb_frag_dma_map(aq_nic_get_dev(self),\n+\t\t\t\t\t\t frag,\n+\t\t\t\t\t\t buff_offset,\n+\t\t\t\t\t\t buff_size,\n+\t\t\t\t\t\t DMA_TO_DEVICE);\n+\n+\t\t\tif (unlikely(dma_mapping_error(aq_nic_get_dev(self),\n+\t\t\t\t\t\t frag_pa)))\n+\t\t\t\tgoto mapping_error;\n \n-\t\twhile (frag_len > AQ_CFG_TX_FRAME_MAX) {\n \t\t\tdx = aq_ring_next_dx(ring, dx);\n \t\t\tdx_buff = &ring->buff_ring[dx];\n \n \t\t\tdx_buff->flags = 0U;\n-\t\t\tdx_buff->len = AQ_CFG_TX_FRAME_MAX;\n+\t\t\tdx_buff->len = buff_size;\n \t\t\tdx_buff->pa = frag_pa;\n \t\t\tdx_buff->is_mapped = 1U;\n+\t\t\tdx_buff->eop_index = 0xffffU;\n+\n+\t\t\tfrag_len -= buff_size;\n+\t\t\tbuff_offset += buff_size;\n \n-\t\t\tfrag_len -= AQ_CFG_TX_FRAME_MAX;\n-\t\t\tfrag_pa += AQ_CFG_TX_FRAME_MAX;\n \t\t\t++ret;\n \t\t}\n-\n-\t\tdx = aq_ring_next_dx(ring, dx);\n-\t\tdx_buff = &ring->buff_ring[dx];\n-\n-\t\tdx_buff->flags = 0U;\n-\t\tdx_buff->len = frag_len;\n-\t\tdx_buff->pa = frag_pa;\n-\t\tdx_buff->is_mapped = 1U;\n-\t\t++ret;\n \t}\n \n+\tfirst->eop_index = dx;\n \tdx_buff->is_eop = 1U;\n \tdx_buff->skb = skb;\n \tgoto exit;\ndiff --git a/drivers/net/ethernet/aquantia/atlantic/aq_ring.c b/drivers/net/ethernet/aquantia/atlantic/aq_ring.c\nindex 02f79b0..0654e0c 100644\n--- a/drivers/net/ethernet/aquantia/atlantic/aq_ring.c\n+++ b/drivers/net/ethernet/aquantia/atlantic/aq_ring.c\n@@ -104,6 +104,12 @@ int aq_ring_init(struct aq_ring_s *self)\n \treturn 0;\n }\n \n+static inline bool aq_ring_dx_in_range(unsigned int h, unsigned int i,\n+\t\t\t\t unsigned int t)\n+{\n+\treturn (h < t) ? ((h < i) && (i < t)) : ((h < i) || (i < t));\n+}\n+\n void aq_ring_update_queue_state(struct aq_ring_s *ring)\n {\n \tif (aq_ring_avail_dx(ring) <= AQ_CFG_SKB_FRAGS_MAX)\n@@ -139,23 +145,28 @@ void aq_ring_tx_clean(struct aq_ring_s *self)\n \t\tstruct aq_ring_buff_s *buff = &self->buff_ring[self->sw_head];\n \n \t\tif (likely(buff->is_mapped)) {\n-\t\t\tif (unlikely(buff->is_sop))\n+\t\t\tif (unlikely(buff->is_sop)) {\n+\t\t\t\tif (!buff->is_eop &&\n+\t\t\t\t buff->eop_index != 0xffffU &&\n+\t\t\t\t (!aq_ring_dx_in_range(self->sw_head,\n+\t\t\t\t\t\tbuff->eop_index,\n+\t\t\t\t\t\tself->hw_head)))\n+\t\t\t\t\tbreak;\n+\n \t\t\t\tdma_unmap_single(dev, buff->pa, buff->len,\n \t\t\t\t\t\t DMA_TO_DEVICE);\n-\t\t\telse\n+\t\t\t} else {\n \t\t\t\tdma_unmap_page(dev, buff->pa, buff->len,\n \t\t\t\t\t DMA_TO_DEVICE);\n+\t\t\t}\n \t\t}\n \n \t\tif (unlikely(buff->is_eop))\n \t\t\tdev_kfree_skb_any(buff->skb);\n-\t}\n-}\n \n-static inline unsigned int aq_ring_dx_in_range(unsigned int h, unsigned int i,\n-\t\t\t\t\t unsigned int t)\n-{\n-\treturn (h < t) ? ((h < i) && (i < t)) : ((h < i) || (i < t));\n+\t\tbuff->pa = 0U;\n+\t\tbuff->eop_index = 0xffffU;\n+\t}\n }\n \n #define AQ_SKB_ALIGN SKB_DATA_ALIGN(sizeof(struct skb_shared_info))\ndiff --git a/drivers/net/ethernet/aquantia/atlantic/aq_ring.h b/drivers/net/ethernet/aquantia/atlantic/aq_ring.h\nindex 24523b5..5844078 100644\n--- a/drivers/net/ethernet/aquantia/atlantic/aq_ring.h\n+++ b/drivers/net/ethernet/aquantia/atlantic/aq_ring.h\n@@ -65,7 +65,7 @@ struct __packed aq_ring_buff_s {\n \t};\n \tunion {\n \t\tstruct {\n-\t\t\tu32 len:16;\n+\t\t\tu16 len;\n \t\t\tu32 is_ip_cso:1;\n \t\t\tu32 is_udp_cso:1;\n \t\t\tu32 is_tcp_cso:1;\n@@ -77,8 +77,10 @@ struct __packed aq_ring_buff_s {\n \t\t\tu32 is_cleaned:1;\n \t\t\tu32 is_error:1;\n \t\t\tu32 rsvd3:6;\n+\t\t\tu16 eop_index;\n+\t\t\tu16 rsvd4;\n \t\t};\n-\t\tu32 flags;\n+\t\tu64 flags;\n \t};\n };\n \n", "prefixes": [ "net", "4/4" ] }