get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 818070,
    "url": "http://patchwork.ozlabs.org/api/patches/818070/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/netdev/patch/83560083f457697606352b233dbfc44aed581f37.1506324091.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": "<83560083f457697606352b233dbfc44aed581f37.1506324091.git.igor.russkikh@aquantia.com>",
    "list_archive_url": null,
    "date": "2017-09-25T07:48:50",
    "name": "[net,v2,4/4] net:ethernet:atlantic: fix iommu errors",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "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/83560083f457697606352b233dbfc44aed581f37.1506324091.git.igor.russkikh@aquantia.com/mbox/",
    "series": [
        {
            "id": 4883,
            "url": "http://patchwork.ozlabs.org/api/series/4883/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/netdev/list/?series=4883",
            "date": "2017-09-25T07:48:46",
            "name": "net:ethernet:aquantia: Atlantic driver bugfixes und improvements",
            "version": 2,
            "mbox": "http://patchwork.ozlabs.org/series/4883/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/818070/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/818070/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=\"eBXxJ88c\"; \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 3y0x7c533Hz9tXD\n\tfor <patchwork-incoming@ozlabs.org>;\n\tMon, 25 Sep 2017 17:49:48 +1000 (AEST)",
            "(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S933975AbdIYHtq (ORCPT <rfc822;patchwork-incoming@ozlabs.org>);\n\tMon, 25 Sep 2017 03:49:46 -0400",
            "from mail-bn3nam01on0083.outbound.protection.outlook.com\n\t([104.47.33.83]:34707\n\t\"EHLO NAM01-BN3-obe.outbound.protection.outlook.com\"\n\trhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP\n\tid S933208AbdIYHto (ORCPT <rfc822;netdev@vger.kernel.org>);\n\tMon, 25 Sep 2017 03:49:44 -0400",
            "from ubuntubox.rdc.aquantia.com (95.79.108.179) by\n\tCY1PR0701MB1964.namprd07.prod.outlook.com (10.163.141.18) 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; Mon, 25 Sep 2017 07:49:40 +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=z2z0jNi6SPd0KqqdOcQpz0alToSa6J1KeBWpd6rGMYs=;\n\tb=eBXxJ88cX17nOXagmnqJsZjg0xm79HtzzfCDn2m4UKPvlUIUOFms4SAGcvpDYnmHlWRgU6RwiGHUvVTy4APv+srOkiFhV4ayUtTITATi/jXHaTpQJa9YM3622x9JLzApzOZwx9tsYEtnm9/HunXJj8LcBKlxPs2qKacvlcENlkY=",
        "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\tIgor Russkikh <igor.russkikh@aquantia.com>",
        "Subject": "[PATCH net v2 4/4] net:ethernet:atlantic: fix iommu errors",
        "Date": "Mon, 25 Sep 2017 10:48:50 +0300",
        "Message-Id": "<83560083f457697606352b233dbfc44aed581f37.1506324091.git.igor.russkikh@aquantia.com>",
        "X-Mailer": "git-send-email 2.7.4",
        "In-Reply-To": "<cover.1506324091.git.igor.russkikh@aquantia.com>",
        "References": "<cover.1506324091.git.igor.russkikh@aquantia.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[95.79.108.179]",
        "X-ClientProxiedBy": "DB6PR0202CA0008.eurprd02.prod.outlook.com (10.169.218.18)\n\tTo CY1PR0701MB1964.namprd07.prod.outlook.com\n\t(10.163.141.18)",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "cad3c7ab-3175-4888-48dc-08d503e9fb56",
        "X-Microsoft-Antispam": "UriScan:; BCL:0; PCL:0;\n\tRULEID:(22001)(2017030254152)(2017052603199)(201703131423075)(201703031133081)(201702281549075);\n\tSRVR:CY1PR0701MB1964; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; CY1PR0701MB1964;\n\t3:rb2vfEzOp5KRP6BYboVzyOpBwMix8g7Fblke4OgiHCTMTwqncUxmFuwwgk7B7ZhekeQ2qZv+AW6hc6ft6W/SPQN9MCfCNxMtzvDgqGP6irT1OqH8HJ4TnSyVaNnVYLvoKQaAz6pGg78mrMAqLeH5b0KwNu/MsGQUwwBYTJZ3f4sgrYaTJzm7kzaGrjDQ+HsrqewnqnYZf87pEsefYLkGyMCJ5Fks/gj0D3izmYTdji9YrRZUOJOPCFXekFjZ1Y4d;\n\t25:2WPlg/EsYrUOoFSssf/GMUi0v9fVEdxtkvaRo1zc+iX3tdjDxq3PrTPEdyZasopEcMBvarnPJtwIsECgIc1eRY1atAVGuMvEs9iIRcTcX+L6U1j1hgPXuXJIzaMC820jZpf2873cUDcCKq057yyjIrLru7GQFWrVE41LCVAyjLoFXQxOWLg3nLDhjjrLQYAuyFhLqtH16uZrLms0fw918mzQ4zykJOEmvwHNnoexazulbdMQdGwaltjmrZbitP4F6bNPPSbl89GtDIpiJ6Jt5gRRNzqe3DWSzuh5CnpHMjqTjhkcZLJf7AlntJS3zL9B/Q50+iptax+YnPBOqx2e1Q==;\n\t31:gYEVZP52KgYKXYE3uxLZw9WQz9dJlZvLhR3PC+pXo4EV6CqTYwgefCdiWft2XyeoD2srRRS4WVFd80988ygUkBe7Ckhtc0D9cOciohALEY//xtS0GZIT3vNGHKi1re3xOFy2nPiXV2jc9gIZnK1pxqibVEYKYV6vN0FV3HUaS1JESCXTBsnZx1+NRDQb16f2HwtoJY242CQ5MfqOwO+c+0+Z2OPk1sKCyyGYMw3ADsg=",
            "1; CY1PR0701MB1964;\n\t20:dWCzgPMQUC4PJj0O/2h8LmuPcR3d8S2gTAfq5pKsErHtIil5bJU3+v4b5V22dzIWYAiOok+D00kuQR6Y8TBmH6/mhnQrvQE5kZYk9T6Th5xu292ctKzUWIEinWt8YK89e/KKlnAF9Q9WX/8vfCYQlQNdcJhujez/8VfAfXDYZW+8peT9CS/nXHSgeEP0nZTPAGD9cJ8v///HV89QcSrwNnEepqa9HRRoFpWwN6ZCYO5XW+PCxeoBihoCc8ZS46eEjgTAbuMozV7gh2V6/MkPBiJGXXUuCzF5BsYXFk+y0mUAWnCwHAutGYA4B8V44ASbIO9o+pxSWgBUNka/HYhhEzvrerJtgF6gDgZVmuf9q01onLGcD23Q76BGmgg3/hWsEcurT1d3AZNr3WlLzzhEpsuoWtv4xaXYzNusULu75a1n3Mn88EWwVFphqlJlXpfR4zO5fzOoD/mspGDlxEAhlkPb/YeKy13saSE0cKghul6Iskmi9h/Ixakgn9GOigZf;\n\t4:ygj2xSQpprwfAKkKS2suU6JYJJKroo1NIUGLzN1SE0FVV8W6LLSQwTjK/RB4nqQWFIwoZZz4usGC7luq12184X+6LZFzEFfYcnJPqAHQq77IZ21mBv7j8lxTxljmOdtr4WmBBMUtqRL25hxtHszoGReC5UmJJRLEuudH+GhviX/QpSC+S1N+brz98DRU24fWnSQKYb2HVMChrrGpHfJuX2ryt1c64Nd51zcKwlS3iVeSM+cuKlE+rTLkVQ21mGQA",
            "1; CY1PR0701MB1964;\n\t23:etPLZe3YKp2sYePoC8mXZ7W5hvqftmRCLucK93X4jSO2yPztAqBoUABHdadJRbkd2gjAbtwrKh4jS1XWNVl3cvYhauSKGe0WGvtTuAjMTS6oG3oapIE9Tl7xIQuqLgqVKEYHNuSLCxE9XhfYegYczDgYUINnFxS3zdkxBOd6ukDUhd2VyCiNrXuZBhDgFfdticNyFpZ+EXU0GWb2GFS75zB+ykfGlWuD24uIO6OAbdi52lVo5WZxzMRPSD98J7DY7zSZi9M7iKa9/u1odYBeiFX97vu/Rb3gdMA0lOmyZfZRlW4TYXc7WPnjZykmG3SpUvIDeLjurzaiW+tIS7iGeXx8tGXN2wQXpprDvRPhWh92wVvMFbhg00PrWlCxr072v4ejJ9z9zVeF0ZHDgs8J/KWGBFBhdA0beccCLsBajemn76mRcpWJWmbqM7K04qXHgU48qHyISE8Y7WKdmfTwkkv+kSd3UN8uE1yeVzsq1rki/SS20MtVxP7xt8f1iKuFKmgS+C2RUpjang5mHCDG5qVVLBX1WnksOqqJmrYtBji9joncGDUzxl2obuixXyzwzRkMOHQB5MEstxRA4S2mpcE/q7duLZHVyjTqI6nxBSKkJpdS5UF0/1D/dqBLq/353b1D/dN/u9O57/riW9tPZYx8ribxO0rFk8FaBcXzZkZbV1fBX0Ou2BXLbgWKsJd9WQanx/lDtAZVwzuguBmwLz8BKXUusfExK5Bj9XMTnOcYVgXs2Yu01W4Rn4EzIi6C0ln+UMej8ZzGIxrrFXDthLK2BJopKc5Bzfl+p/4CVd/t2ueP/hmXwOPBPRdt4Dkd+QxsoPyl4STIIDx6Y3gDCmR6n+HA8Q/U+Fp9IO8nfbBSyw5mndZgIhZm7pZel94OIGmriMvs0w2uhrHEEzfGzbohqK3bStsCGEh4GirjXOemidQdBruttq7nvZJsAL0elGMXWrNHdy88kLNMV/XS4M7HIf9nbXeemB2C4d3s3nDq/7YQDzpbCE9wFIIEGu/9S81dWtrcKF4JTmmcDLglPAHwTnVieLFKLShfSPeXNjCeJeajAAgq78taho1L53QxxH4BKmHPzqwNgNoY7XlmjOk2pxD0y032yrBBetb+n3dS35XicjR+rP+PpIUKOMfmxz1kFQbq6be7E4cy5fIxkg==",
            "1; CY1PR0701MB1964;\n\t6:rG97kZkRk/Q10AW6KGkZ3wMoq7RQqZxzVfw1ktiVVORbaVdAZlN3e2QDBmHIWA3oG5BlR8v//WTloWFuR3snyY8ZGpwCiEnVW5G/knOXjBiCXsstG9kZXKie49pL7cV5TSBgp0TAM6D5YE7eovKcnbLyHjiH2uZfuhSEgvNrXFW6ZmhAYtwQu6kI1ZmZhA1k9PzmftvOYj9X+9FB3L0pkne6KAztT3S5cYSWxdgiNiC268Vqph3r/zyvhoq3RZhNqNKr8hRLFPdH5LwXMvFqk4ggRD7dYElPrFZlv+CbyWSy5tsOWnsuhDjaFq2Ss6bk9FMr97UqqV5nlzh0ThN6Eg==;\n\t5:hlNie9d9D85BnYPaulKKPyExyle6MSf+B+GEwhlZ0pmM+Xmp9HDmlK0cjrTb1Ew2OenqbZ6F5O3VQLyzJt9C6hsv6mGzXMGHeD7XrkmvGF6+Sf+J40D7vm5dq400m8jr/X9NYNst06lXeSQWD7Svxg==;\n\t24:Y8OTrPJFkC3pImbq3kW9X4LyX5tck9CNrhu9FD8McrPjydm0sv/YkHlkKb8weQ83BtzGQWS/JOxnoPENkvHPvCBS2yakLWzdI0HoxCbiK5o=;\n\t7:InA0vMyCnp+Ai7x8DPlHvCQVSmAB/I1DG/D2F9FuIE1lsRP7YueTWjN4kCS5rdgcmRLfbLPYKXopYTVITTF/8fxnSxC56Y+rNxp1/ODUe+oB1PTbxBo53Te+oL+JvBMnqn22Iz1uF5wNu7geoQ7QiWEgLEk9KBW0dlPRtnOzLrKPzpLO0aVAeHJEX6ojVelRwSU7Hxckx26GJ8JbP2Z36zf67xyIUVVx3bH8L2KDRYY="
        ],
        "X-MS-TrafficTypeDiagnostic": "CY1PR0701MB1964:",
        "X-Exchange-Antispam-Report-Test": "UriScan:;",
        "X-Microsoft-Antispam-PRVS": "<CY1PR0701MB1964E599CF8EB1EE7347F710987A0@CY1PR0701MB1964.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)(10201501046)(3002001)(100000703101)(100105400095)(93006095)(93001095)(6041248)(20161123560025)(20161123558100)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123555025)(20161123564025)(20161123562025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);\n\tSRVR:CY1PR0701MB1964; BCL:0; PCL:0;\n\tRULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);\n\tSRVR:CY1PR0701MB1964; ",
        "X-Forefront-PRVS": "04410E544A",
        "X-Forefront-Antispam-Report": "SFV:NSPM;\n\tSFS:(10009020)(6009001)(376002)(39830400002)(346002)(199003)(189002)(5003940100001)(53936002)(575784001)(50986999)(86362001)(316002)(6486002)(16526017)(36756003)(16586007)(81166006)(106356001)(7736002)(107886003)(54906003)(6916009)(189998001)(50226002)(72206003)(48376002)(118296001)(101416001)(105586002)(81156014)(2950100002)(478600001)(8676002)(68736007)(3846002)(6116002)(50466002)(6666003)(76176999)(66066001)(5660300001)(47776003)(25786009)(97736004)(4326008)(8936002)(305945005)(2906002)(33646002);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR0701MB1964;\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": "25 Sep 2017 07:49:40.4135\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-CrossTenant-Id": "83e2e134-991c-4ede-8ced-34d47e38e6b1",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "CY1PR0701MB1964",
        "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 072a550..0a5bb41 100644\n--- a/drivers/net/ethernet/aquantia/atlantic/aq_nic.c\n+++ b/drivers/net/ethernet/aquantia/atlantic/aq_nic.c\n@@ -473,6 +473,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@@ -483,6 +484,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@@ -502,6 +504,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@@ -530,40 +533,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",
        "v2",
        "4/4"
    ]
}