From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.0 required=3.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 51677C2BB1D for ; Mon, 6 Apr 2020 20:16:30 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 2D55B2072F for ; Mon, 6 Apr 2020 20:16:30 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="aL24iL2f"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ZTxU3Wo5" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2D55B2072F Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date: Message-ID:From:References:To:Subject:Reply-To:Content-ID:Content-Description :Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=6AJ5hWzLGFVvSujpQA2gq6g0yw9Vkk7qdqZvqf38SCE=; b=aL24iL2fM/JDUZ d1O7ISKk0D/gjcBeYy16vromMlC7KWjCCoaefN0/zWhwS+LKZhhzHX4YzfZc1tOasaXzoRqP9990d nBKVi32z4S979tAWm7LSQJYpTxA+DzQnuSzGeG9LvWEmNmZySXEsVWG7hMEe0S9KxgqZwJCIatS9O jEJTbGlXpkHvF7a7to2J0OhTtxpd3mPEDZEiKV6zX4g/DiMI3R6GJg2TSqaBUcAdyFERWFRSf6yNg 3atUaACQu3abm4OTr7em+T/BcHwlPtp41gD42ngT5UQ8XaG6sfhg248SPTUBww0oWaiRVqKKcFl4X Bu+RIK0xa/vxKGYH/UpQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jLYAQ-0000NJ-8X; Mon, 06 Apr 2020 20:16:22 +0000 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jLYAH-0000GI-Ua; Mon, 06 Apr 2020 20:16:15 +0000 Received: by mail-wr1-x442.google.com with SMTP id g3so1100144wrx.2; Mon, 06 Apr 2020 13:16:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:autocrypt:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=4/JVG1Rluunatq6GnbK5n3QH0bGpghdVbJTjmqP/xOM=; b=ZTxU3Wo5Nh26xOIxm0T9d7l6Xku2PnfzQjBPvFylBiLgC2LfKIH+pu7uSNKqEU3lEU 9ti5r4wMW/yiRzmXg/AkrCerRlkUSA2b7XxZaoglk564CQpBqvOt1plMsM+ClpLBPnkg Ui5AREYmR6rMyk1UlANGnlCmhJp8oSw2cXuoko0MNbVVkN3+kUhHDXdd219tZ7WWQg/+ cvXOkZxTD7KV0K83JvG/avuLUWL6CffSC5g7tkV2OAVPk09idO/FfuiPKqjoSWBs0/Mo ffMG9H9TSS3NmS7J6qyQQi+N+RNBJ+1IUXJxPnk7ApBycHTeYz3e/nLYYTwtq8SShCbB cVVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:autocrypt :message-id:date:user-agent:mime-version:in-reply-to :content-language:content-transfer-encoding; bh=4/JVG1Rluunatq6GnbK5n3QH0bGpghdVbJTjmqP/xOM=; b=jbb/LiG8rUAnhKMikezuA3/MhWB5E85s8odbAykAmSp0EFUlPjlzMYBEYmkTWsKl0f zgj/LHa3fl59EvOOlG8/P+xJTZhflIhHX2RRlNpMVqLXBoQYkFRzseVsXT91GNJh5CIt ZzSX78aUR7/gO/9zBw1IUDp/YSBHEzdQJUzwftiK3M4X9p4zuJmzRcDXI4Y5cI/vqgeS 9by+dYdr/ZLxfynw7Bi+BA7dPk93hvDipW4JCvmVZ0Q0nPN8IP/054+PU+dCj1oveuPh xRZY5+g9VbdBvax5BvXjjo334vmaDHm/IoSVrQPbhJRO5+sea2Rc/Ad6wVdBXM8UUIg8 lPxQ== X-Gm-Message-State: AGi0Pub9j+3mEJ+j4d/Gv29fTb9Txv60VnVi6MNzONiubN+GGqRPwhIV mAjimIxONcWYL+j6Kw9zhO8= X-Google-Smtp-Source: APiQypI70IQ3KjOEYbMUvycXVf9PIJ9y3cS26gajoukYnya2h/yRGNsViD5pTLGvRb1msfpDDwt2oA== X-Received: by 2002:a5d:6441:: with SMTP id d1mr1064873wrw.301.1586204172262; Mon, 06 Apr 2020 13:16:12 -0700 (PDT) Received: from [192.168.1.3] (ip68-111-84-250.oc.oc.cox.net. [68.111.84.250]) by smtp.gmail.com with ESMTPSA id s7sm3171366wrt.2.2020.04.06.13.16.07 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 06 Apr 2020 13:16:11 -0700 (PDT) Subject: Re: [PATCH net-next] net: dsa: add GRO support via gro_cells To: Alexander Lobakin References: <97a880e4-de7d-1f94-d35b-2635fbd8237e@gmail.com> <20200406191113.5983-1-bloodyreaper@yandex.ru> From: Florian Fainelli Autocrypt: addr=f.fainelli@gmail.com; keydata= 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 M5kY0ACeNhCZJvZ5g4C2Lc9fcTHu8jxmEkI= Message-ID: Date: Mon, 6 Apr 2020 13:16:06 -0700 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Firefox/68.0 Thunderbird/68.6.0 MIME-Version: 1.0 In-Reply-To: <20200406191113.5983-1-bloodyreaper@yandex.ru> Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200406_131614_012815_46E8AD04 X-CRM114-Status: GOOD ( 15.13 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Woojung Huh , Andrew Lunn , "linux-kernel@vger.kernel.org" , Hauke Mehrtens , Linus Walleij , Sean Wang , Russell King , Vivien Didelot , Microchip Linux Driver Support , Vladimir Oltean , Claudiu Manoil , "linux-mediatek@lists.infradead.org" , Philipp Zabel , "netdev@vger.kernel.org" , Matthias Brugger , Jakub Kicinski , Oleksij Rempel , "David S. Miller" , "linux-arm-kernel@lists.infradead.org" , Mao Wenan Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org CgpPbiA0LzYvMjAyMCAxMjoxMSBQTSwgQWxleGFuZGVyIExvYmFraW4gd3JvdGU6Cj4gMDYuMDQu MjAyMCwgMjA6NTcsICJGbG9yaWFuIEZhaW5lbGxpIiA8Zi5mYWluZWxsaUBnbWFpbC5jb20+Ogo+ PiBPbiA0LzYvMjAyMCAxMDozNCBBTSwgQWxleGFuZGVyIExvYmFraW4gd3JvdGU6Cj4+PiDCoDA2 LjA0LjIwMjAsIDE4OjIxLCAiQWxleGFuZGVyIExvYmFraW4iIDxibG9vZHlyZWFwZXJAeWFuZGV4 LnJ1PjoKPj4+PiDCoDA2LjA0LjIwMjAsIDE3OjQ4LCAiQW5kcmV3IEx1bm4iIDxhbmRyZXdAbHVu bi5jaD46Cj4+Pj4+IMKgwqBPbiBNb24sIEFwciAwNiwgMjAyMCBhdCAwMTo1OToxMFBNICswMzAw LCBBbGV4YW5kZXIgTG9iYWtpbiB3cm90ZToKPj4+Pj4+IMKgwqDCoGdyb19jZWxscyBsaWIgaXMg dXNlZCBieSBkaWZmZXJlbnQgZW5jYXBzdWxhdGluZyBuZXRkZXZpY2VzLCBzdWNoIGFzCj4+Pj4+ PiDCoMKgwqBnZW5ldmUsIG1hY3NlYywgdnhsYW4gZXRjLiB0byBzcGVlZCB1cCBkZWNhcHN1bGF0 ZWQgdHJhZmZpYyBwcm9jZXNzaW5nLgo+Pj4+Pj4gwqDCoMKgQ1BVIHRhZyBpcyBhIHNvcnQgb2Yg ImVuY2Fwc3VsYXRpb24iLCBhbmQgd2UgY2FuIHVzZSB0aGUgc2FtZSBtZWNocyB0bwo+Pj4+Pj4g wqDCoMKgZ3JlYXRseSBpbXByb3ZlIG92ZXJhbGwgRFNBIHBlcmZvcm1hbmNlLgo+Pj4+Pj4gwqDC oMKgc2ticyBhcmUgcGFzc2VkIHRvIHRoZSBHUk8gbGF5ZXIgYWZ0ZXIgcmVtb3ZpbmcgQ1BVIHRh Z3MsIHNvIHdlIGRvbid0Cj4+Pj4+PiDCoMKgwqBuZWVkIGFueSBuZXcgcGFja2V0IG9mZmxvYWQg dHlwZXMgYXMgaXQgd2FzIGZpcnN0bHkgcHJvcG9zZWQgYnkgbWUgaW4KPj4+Pj4+IMKgwqDCoHRo ZSBmaXJzdCBHUk8tb3Zlci1EU0EgdmFyaWFudCBbMV0uCj4+Pj4+Pgo+Pj4+Pj4gwqDCoMKgVGhl IHNpemUgb2Ygc3RydWN0IGdyb19jZWxscyBpcyBzaXplb2Yodm9pZCAqKSwgc28gaG90IHN0cnVj dAo+Pj4+Pj4gwqDCoMKgZHNhX3NsYXZlX3ByaXYgYmVjb21lcyBvbmx5IDQvOCBieXRlcyBiaWdn ZXIsIGFuZCBhbGwgY3JpdGljYWwgZmllbGRzCj4+Pj4+PiDCoMKgwqByZW1haW4gaW4gb25lIDMy LWJ5dGUgY2FjaGVsaW5lLgo+Pj4+Pj4gwqDCoMKgVGhlIG90aGVyIHBvc2l0aXZlIHNpZGUgZWZm ZWN0IGlzIHRoYXQgZHJpdmVycyBmb3IgbmV0d29yayBkZXZpY2VzCj4+Pj4+PiDCoMKgwqB0aGF0 IGNhbiBiZSBzaGlwcGVkIGFzIENQVSBwb3J0cyBvZiBEU0EtZHJpdmVuIHN3aXRjaGVzIGNhbiBu b3cgdXNlCj4+Pj4+PiDCoMKgwqBuYXBpX2dyb19mcmFncygpIHRvIHBhc3Mgc2ticyB0byBrZXJu ZWwuIFBhY2tldHMgYnVpbHQgdGhhdCB3YXkgYXJlCj4+Pj4+PiDCoMKgwqBjb21wbGV0ZWx5IG5v bi1saW5lYXIgYW5kIGFyZSBsaWtlbHkgYmVpbmcgZHJvcHBlZCB3aXRob3V0IEdSTy4KPj4+Pj4+ Cj4+Pj4+PiDCoMKgwqBUaGlzIHdhcyB0ZXN0ZWQgb24gdG8tYmUtbWFpbmxpbmVkLXNvb24gRXRo ZXJuZXQgZHJpdmVyIHRoYXQgdXNlcwo+Pj4+Pj4gwqDCoMKgbmFwaV9ncm9fZnJhZ3MoKSwgYW5k IHRoZSBvdmVyYWxsIHBlcmZvcm1hbmNlIHdhcyBvbiBwYXIgd2l0aCB0aGUKPj4+Pj4+IMKgwqDC oHZhcmlhbnQgZnJvbSBbMV0sIHNvbWV0aW1lcyBldmVuIGJldHRlciBkdWUgdG8gbWluaW1hbCBv dmVyaGVhZC4KPj4+Pj4+IMKgwqDCoG5ldC5jb3JlLmdyb19ub3JtYWxfYmF0Y2ggdHVuaW5nIG1h eSBoZWxwIHRvIHB1c2ggaXQgdG8gdGhlIGxpbWl0Cj4+Pj4+PiDCoMKgwqBvbiBwYXJ0aWN1bGFy IHNldHVwcyBhbmQgcGxhdGZvcm1zLgo+Pj4+Pj4KPj4+Pj4+IMKgwqDCoFsxXSBodHRwczovL2xv cmUua2VybmVsLm9yZy9uZXRkZXYvMjAxOTEyMzAxNDMwMjguMjczMTMtMS1hbG9iYWtpbkBkbGlu ay5ydS8KPj4+Pj4KPj4+Pj4gwqDCoEhpIEFsZXhhbmRlcgo+Pj4+Cj4+Pj4gwqBIaSBBbmRyZXch Cj4+Pj4KPj4+Pj4gwqDCoG5ldC1uZXh0IGlzIGNsb3NlZCBhdCB0aGUgbW9tZW50LiBTbyB5b3Ug c2hvdWxkIG9mIHBvc3RlZCB0aGlzIHdpdGggYW4KPj4+Pj4gwqDCoFJGQyBwcmVmaXguCj4+Pj4K Pj4+PiDCoEkgc2F3IHRoYXQgaXQncyBjbG9zZWQsIGJ1dCBkaWRuJ3Qga25ldyBhYm91dCAiUkZD IiB0YWdzIGZvciB0aGF0IHBlcmlvZCwKPj4+PiDCoHNvcnJ5Lgo+Pj4+Cj4+Pj4+IMKgwqBUaGUg aW1wbGVtZW50YXRpb24gbG9va3MgbmljZSBhbmQgc2ltcGxlLiBCdXQgaXQgd291bGQgYmUgbmlj ZSB0byBoYXZlCj4+Pj4+IMKgwqBzb21lIHBlcmZvcm1hbmNlIGZpZ3VyZXMuCj4+Pj4KPj4+PiDC oEknbGwgZG8sIHN1cmUuIEkgdGhpbmsgSSdsbCBjb2xsZWN0IHRoZSBzdGF0cyB3aXRoIHZhcmlv dXMgbWFpbiByZWNlaXZpbmcKPj4+PiDCoGZ1bmN0aW9ucyBpbiBFdGhlcm5ldCBkcml2ZXIgKG5h cGlfZ3JvX2ZyYWdzKCksIG5hcGlfZ3JvX3JlY2VpdmUoKSwKPj4+PiDCoG5ldGlmX3JlY2VpdmVf c2tiKCksIG5ldGlmX3JlY2VpdmVfc2tiX2xpc3QoKSksIGFuZCB3aXRoIGFuZCB3aXRob3V0IHRo aXMKPj4+PiDCoHBhdGNoIHRvIG1ha2UgdGhlbSBhcyBjb21wbGV0ZSBhcyBwb3NzaWJsZS4KPj4+ Cj4+PiDCoE9LLCBzbyBoZXJlIHdlIGdvLgo+Pj4KPj4+IMKgTXkgZGV2aWNlIGlzIDEuMiBHSHog NC1jb3JlIE1JUFMzMiBSMi4gRXRoZXJuZXQgY29udHJvbGxlciByZXByZXNlbnRpbmcKPj4+IMKg dGhlIENQVSBwb3J0IGlzIGNhcGFibGUgb2YgUy9HLCBmcmFnbGlzdHMgUy9HLCBUU080LzYgYW5k IEdTTyBVRFAgTDQuCj4+PiDCoFRlc3RzIGFyZSBwZXJmb3JtZWQgdGhyb3VnaCBzaW1wbGUgSVBv RSBWTEFOIE5BVCBmb3J3YXJkaW5nIHNldHVwCj4+PiDCoChwb3J0MCA8LT4gcG9ydDEuMjE4KSB3 aXRoIGlwZXJmMyBpbiBUQ1AgbW9kZS4KPj4+IMKgbmV0LmNvcmUuZ3JvX25vcm1hbF9iYXRjaCBp cyBhbHdheXMgc2V0IHRvIDE2IGFzIHRoYXQgdmFsdWUgc2VlbXMgdG8gYmUKPj4+IMKgdGhlIG1v c3QgZWZmZWN0aXZlIGZvciB0aGF0IHBhcnRpY3VsYXIgaGFyZHdhcmUgYW5kIGRyaXZlcnMuCj4+ Pgo+Pj4gwqBQYWNrZXQgY291bnRlcnMgb24gZXRoMCBhcmUgdGhlIHJlYWwgbnVtYmVycyBvZiBv bmdvaW5nIGZyYW1lcy4gQ291bnRlcnMKPj4+IMKgb24gcG9ydFggYXJlIHB1cmUtc29mdHdhcmUg YW5kIGFyZSB1cGRhdGVkIGluc2lkZSBuZXR3b3JraW5nIHN0YWNrLgo+Pj4KPj4+IMKgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCj4+Pgo+Pj4gwqBuZXRpZl9yZWNlaXZlX3NrYigpIGluIEV0aCBkcml2ZXIsIG5vIHBh dGNoOgo+Pj4KPj4+IMKgWyBJRF0gSW50ZXJ2YWwgVHJhbnNmZXIgQml0cmF0ZSBSZXRyCj4+PiDC oFsgNV0gMC4wMC0xMjAuMDEgc2VjIDkuMDAgR0J5dGVzIDY0NCBNYml0cy9zZWMgNDEzIHNlbmRl cgo+Pj4gwqBbIDVdIDAuMDAtMTIwLjAwIHNlYyA4Ljk5IEdCeXRlcyA2NDQgTWJpdHMvc2VjIHJl Y2VpdmVyCj4+Pgo+Pj4gwqBldGgwCj4+PiDCoFJYIHBhY2tldHM6NzA5NzczMSBlcnJvcnM6MCBk cm9wcGVkOjAgb3ZlcnJ1bnM6MCBmcmFtZTowCj4+PiDCoFRYIHBhY2tldHM6NzA5NzcwMiBlcnJv cnM6MCBkcm9wcGVkOjAgb3ZlcnJ1bnM6MCBjYXJyaWVyOjAKPj4+Cj4+PiDCoHBvcnQwCj4+PiDC oFJYIHBhY2tldHM6NDI2MDUwIGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVuczowIGZyYW1lOjAK Pj4+IMKgVFggcGFja2V0czo2NjcxODI5IGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVuczowIGNh cnJpZXI6MAo+Pj4KPj4+IMKgcG9ydDEKPj4+IMKgUlggcGFja2V0czo2NjcxNjgxIGVycm9yczow IGRyb3BwZWQ6MCBvdmVycnVuczowIGNhcnJpZXI6MAo+Pj4gwqBUWCBwYWNrZXRzOjQyNTg2MiBl cnJvcnM6MCBkcm9wcGVkOjAgb3ZlcnJ1bnM6MCBjYXJyaWVyOjAKPj4+Cj4+PiDCoHBvcnQxLjIx OAo+Pj4gwqBSWCBwYWNrZXRzOjY2NzE2NzcgZXJyb3JzOjAgZHJvcHBlZDowIG92ZXJydW5zOjAg ZnJhbWU6MAo+Pj4gwqBUWCBwYWNrZXRzOjQyNTg1MSBlcnJvcnM6MCBkcm9wcGVkOjAgb3ZlcnJ1 bnM6MCBjYXJyaWVyOjAKPj4+Cj4+PiDCoC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+Pj4KPj4+IMKgbmV0aWZfcmVj ZWl2ZV9za2JfbGlzdCgpIGluIEV0aCBkcml2ZXIsIG5vIHBhdGNoOgo+Pj4KPj4+IMKgWyBJRF0g SW50ZXJ2YWwgVHJhbnNmZXIgQml0cmF0ZSBSZXRyCj4+PiDCoFsgNV0gMC4wMC0xMjAuMDEgc2Vj IDkuNDggR0J5dGVzIDY3OSBNYml0cy9zZWMgMTI5IHNlbmRlcgo+Pj4gwqBbIDVdIDAuMDAtMTIw LjAwIHNlYyA5LjQ4IEdCeXRlcyA2NzkgTWJpdHMvc2VjIHJlY2VpdmVyCj4+Pgo+Pj4gwqBldGgw Cj4+PiDCoFJYIHBhY2tldHM6NzQ0ODA5OCBlcnJvcnM6MCBkcm9wcGVkOjAgb3ZlcnJ1bnM6MCBm cmFtZTowCj4+PiDCoFRYIHBhY2tldHM6NzQ0ODA3MyBlcnJvcnM6MCBkcm9wcGVkOjAgb3ZlcnJ1 bnM6MCBjYXJyaWVyOjAKPj4+Cj4+PiDCoHBvcnQwCj4+PiDCoFJYIHBhY2tldHM6NDE2MTE1IGVy cm9yczowIGRyb3BwZWQ6MCBvdmVycnVuczowIGZyYW1lOjAKPj4+IMKgVFggcGFja2V0czo3MDMy MTIxIGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVuczowIGNhcnJpZXI6MAo+Pj4KPj4+IMKgcG9y dDEKPj4+IMKgUlggcGFja2V0czo3MDMxOTgzIGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVuczow IGZyYW1lOjAKPj4+IMKgVFggcGFja2V0czo0MTU5NDEgZXJyb3JzOjAgZHJvcHBlZDowIG92ZXJy dW5zOjAgY2FycmllcjowCj4+Pgo+Pj4gwqBwb3J0MS4yMTgKPj4+IMKgUlggcGFja2V0czo3MDMx OTc4IGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVuczowIGZyYW1lOjAKPj4+IMKgVFggcGFja2V0 czo0MTU5MzAgZXJyb3JzOjAgZHJvcHBlZDowIG92ZXJydW5zOjAgY2FycmllcjowCj4+Pgo+Pj4g wqAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KPj4+Cj4+PiDCoG5hcGlfZ3JvX3JlY2VpdmUoKSBpbiBFdGggZHJpdmVy LCBubyBwYXRjaDoKPj4+Cj4+PiDCoFsgSURdIEludGVydmFsIFRyYW5zZmVyIEJpdHJhdGUgUmV0 cgo+Pj4gwqBbIDVdIDAuMDAtMTIwLjAxIHNlYyAxMC4wIEdCeXRlcyA3MTggTWJpdHMvc2VjIDEw NyBzZW5kZXIKPj4+IMKgWyA1XSAwLjAwLTEyMC4wMCBzZWMgMTAuMCBHQnl0ZXMgNzE4IE1iaXRz L3NlYyByZWNlaXZlcgo+Pj4KPj4+IMKgZXRoMAo+Pj4gwqBSWCBwYWNrZXRzOjc4NjgyODEgZXJy b3JzOjAgZHJvcHBlZDowIG92ZXJydW5zOjAgZnJhbWU6MAo+Pj4gwqBUWCBwYWNrZXRzOjc4Njgy NjcgZXJyb3JzOjAgZHJvcHBlZDowIG92ZXJydW5zOjAgY2FycmllcjowCj4+Pgo+Pj4gwqBwb3J0 MAo+Pj4gwqBSWCBwYWNrZXRzOjQyOTA4MiBlcnJvcnM6MCBkcm9wcGVkOjAgb3ZlcnJ1bnM6MCBm cmFtZTowCj4+PiDCoFRYIHBhY2tldHM6NzQzOTM0MyBlcnJvcnM6MCBkcm9wcGVkOjAgb3ZlcnJ1 bnM6MCBjYXJyaWVyOjAKPj4+Cj4+PiDCoHBvcnQxCj4+PiDCoFJYIHBhY2tldHM6NzQzOTE5OSBl cnJvcnM6MCBkcm9wcGVkOjAgb3ZlcnJ1bnM6MCBmcmFtZTowCj4+PiDCoFRYIHBhY2tldHM6NDI4 OTEzIGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVuczowIGNhcnJpZXI6MAo+Pj4KPj4+IMKgcG9y dDEuMjE4Cj4+PiDCoFJYIHBhY2tldHM6NzQzOTE5NSBlcnJvcnM6MCBkcm9wcGVkOjAgb3ZlcnJ1 bnM6MCBmcmFtZTowCj4+PiDCoFRYIHBhY2tldHM6NDI4OTAyIGVycm9yczowIGRyb3BwZWQ6MCBv dmVycnVuczowIGNhcnJpZXI6MAo+Pj4KPj4+IMKgPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cj4+Pgo+Pj4gwqBuZXRp Zl9yZWNlaXZlX3NrYigpIGluIEV0aCBkcml2ZXIgKyBwYXRjaDoKPj4+Cj4+PiDCoFsgSURdIElu dGVydmFsIFRyYW5zZmVyIEJpdHJhdGUgUmV0cgo+Pj4gwqBbIDVdIDAuMDAtMTIwLjAxIHNlYyAx Mi4yIEdCeXRlcyA4NzAgTWJpdHMvc2VjIDIyNjcgc2VuZGVyCj4+PiDCoFsgNV0gMC4wMC0xMjAu MDAgc2VjIDEyLjIgR0J5dGVzIDg3MCBNYml0cy9zZWMgcmVjZWl2ZXIKPj4+Cj4+PiDCoGV0aDAK Pj4+IMKgUlggcGFja2V0czo5NDc0NzkyIGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVuczowIGZy YW1lOjAKPj4+IMKgVFggcGFja2V0czo5NDc0Nzc3IGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVu czowIGNhcnJpZXI6MAo+Pj4KPj4+IMKgcG9ydDAKPj4+IMKgUlggcGFja2V0czo0NTUyMDAgZXJy b3JzOjAgZHJvcHBlZDowIG92ZXJydW5zOjAgZnJhbWU6MAo+Pj4gwqBUWCBwYWNrZXRzOjM1MzI4 OCBlcnJvcnM6MCBkcm9wcGVkOjAgb3ZlcnJ1bnM6MCBjYXJyaWVyOjAKPj4+Cj4+PiDCoHBvcnQx Cj4+PiDCoFJYIHBhY2tldHM6OTAxOTU5MiBlcnJvcnM6MCBkcm9wcGVkOjAgb3ZlcnJ1bnM6MCBm cmFtZTowCj4+PiDCoFRYIHBhY2tldHM6NDU1MDM1IGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVu czowIGNhcnJpZXI6MAo+Pj4KPj4+IMKgcG9ydDEuMjE4Cj4+PiDCoFJYIHBhY2tldHM6MzUzMTQ0 IGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVuczowIGZyYW1lOjAKPj4+IMKgVFggcGFja2V0czo0 NTUwMjQgZXJyb3JzOjAgZHJvcHBlZDowIG92ZXJydW5zOjAgY2FycmllcjowCj4+Pgo+Pj4gwqAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KPj4+Cj4+PiDCoG5ldGlmX3JlY2VpdmVfc2tiX2xpc3QoKSBpbiBFdGggZHJp dmVyICsgcGF0Y2g6Cj4+Pgo+Pj4gwqBbIElEXSBJbnRlcnZhbCBUcmFuc2ZlciBCaXRyYXRlIFJl dHIKPj4+IMKgWyA1XSAwLjAwLTEyMC4wMSBzZWMgMTEuNiBHQnl0ZXMgODI3IE1iaXRzL3NlYyAy MjI0IHNlbmRlcgo+Pj4gwqBbIDVdIDAuMDAtMTIwLjAwIHNlYyAxMS41IEdCeXRlcyA4MjcgTWJp dHMvc2VjIHJlY2VpdmVyCj4+Pgo+Pj4gwqBldGgwCj4+PiDCoFJYIHBhY2tldHM6ODk4MTY1MSBl cnJvcnM6MCBkcm9wcGVkOjAgb3ZlcnJ1bnM6MCBmcmFtZTowCj4+PiDCoFRYIHBhY2tldHM6ODk4 MTg3IGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVuczowIGNhcnJpZXI6MAo+Pj4KPj4+IMKgcG9y dDAKPj4+IMKgUlggcGFja2V0czo0MzYxNTkgZXJyb3JzOjAgZHJvcHBlZDowIG92ZXJydW5zOjAg ZnJhbWU6MAo+Pj4gwqBUWCBwYWNrZXRzOjMzNTY2NSBlcnJvcnM6MCBkcm9wcGVkOjAgb3ZlcnJ1 bnM6MCBjYXJyaWVyOjAKPj4+Cj4+PiDCoHBvcnQxCj4+PiDCoFJYIHBhY2tldHM6ODU0NTQ5MiBl cnJvcnM6MCBkcm9wcGVkOjAgb3ZlcnJ1bnM6MCBmcmFtZTowCj4+PiDCoFRYIHBhY2tldHM6NDM2 MDcxIGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVuczowIGNhcnJpZXI6MAo+Pj4KPj4+IMKgcG9y dDEuMjE4Cj4+PiDCoFJYIHBhY2tldHM6MzM1NTkzIGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVu czowIGZyYW1lOjAKPj4+IMKgVFggcGFja2V0czo0MzYwNjUgZXJyb3JzOjAgZHJvcHBlZDowIG92 ZXJydW5zOjAgY2FycmllcjowCj4+Pgo+Pj4gwqAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+Pj4KPj4+IMKgbmFwaV9ncm9fcmVjZWl2 ZSgpIGluIEV0aCBkcml2ZXIgKyBwYXRjaDoKPj4+Cj4+PiDCoFsgSURdIEludGVydmFsIFRyYW5z ZmVyIEJpdHJhdGUgUmV0cgo+Pj4gwqBbIDVdIDAuMDAtMTIwLjAxIHNlYyAxMS44IEdCeXRlcyA4 NTUgTWJpdHMvc2VjIDEyMiBzZW5kZXIKPj4+IMKgWyA1XSAwLjAwLTEyMC4wMCBzZWMgMTEuOCBH Qnl0ZXMgODU1IE1iaXRzL3NlYyByZWNlaXZlcgo+Pj4KPj4+IMKgZXRoMAo+Pj4gwqBSWCBwYWNr ZXRzOjkyOTIyMTQgZXJyb3JzOjAgZHJvcHBlZDowIG92ZXJydW5zOjAgZnJhbWU6MAo+Pj4gwqBU WCBwYWNrZXRzOjkyOTIxOTAgZXJyb3JzOjAgZHJvcHBlZDowIG92ZXJydW5zOjAgY2Fycmllcjow Cj4+Pgo+Pj4gwqBwb3J0MAo+Pj4gwqBSWCBwYWNrZXRzOjQzODUxNiBlcnJvcnM6MCBkcm9wcGVk OjAgb3ZlcnJ1bnM6MCBmcmFtZTowCj4+PiDCoFRYIHBhY2tldHM6MzQ3MjM2IGVycm9yczowIGRy b3BwZWQ6MCBvdmVycnVuczowIGNhcnJpZXI6MAo+Pj4KPj4+IMKgcG9ydDEKPj4+IMKgUlggcGFj a2V0czo4ODUzNjk4IGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVuczowIGZyYW1lOjAKPj4+IMKg VFggcGFja2V0czo0MzgzMzEgZXJyb3JzOjAgZHJvcHBlZDowIG92ZXJydW5zOjAgY2Fycmllcjow Cj4+Pgo+Pj4gwqBwb3J0MS4yMTgKPj4+IMKgUlggcGFja2V0czozNDcwODIgZXJyb3JzOjAgZHJv cHBlZDowIG92ZXJydW5zOjAgZnJhbWU6MAo+Pj4gwqBUWCBwYWNrZXRzOjQzODMyMCBlcnJvcnM6 MCBkcm9wcGVkOjAgb3ZlcnJ1bnM6MCBjYXJyaWVyOjAKPj4+Cj4+PiDCoC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4+Pgo+Pj4gwqBU aGUgbWFpbiBnb2FsIGlzIGFjaGlldmVkOiB3ZSBoYXZlIGFib3V0IDEwMC0yMDAgTWJwcyBvZiBw ZXJmb3JtYW5jZQo+Pj4gwqBib29zdCB3aGlsZSBpbi1zdGFjayBza2JzIGFyZSBncmVhdGx5IHJl ZHVjZWQgZnJvbSB+OC05IG1pbGxpb25zIHRvCj4+PiDCoH4zNTAwMDAgKGNvbXBhcmUgcG9ydDAg VFggYW5kIHBvcnQxIFJYIHdpdGhvdXQgcGF0Y2ggYW5kIHdpdGggaXQpLgo+Pgo+PiBBbmQgdGhl IG51bWJlciBvZiBUQ1AgcmV0cmllcyBpcyBhbHNvIGxvd2VyLCB3aGljaCBsaWtlbHkgbWVhbnMg dGhhdCB3ZQo+PiBhcmUgbWFraW5nIGJldHRlciB1c2Ugb2YgdGhlIGZsb3cgY29udHJvbCBidWls dCBpbnRvIHRoZSBoYXJkd2FyZS9kcml2ZXIKPj4gaGVyZT8KPj4KPj4gQlRXIGRvIHlvdSBrbm93 IHdoeSB5b3UgaGF2ZSBzbyBtYW55IHJldHJpZXMgdGhvdWdoPyBJdCBzb3VuZHMgbGlrZSB5b3Vy Cj4+IGZsb3cgY29udHJvbCBpcyBtaXNzaW5nIGEgZmV3IGVkZ2UgY2FzZXMsIG9yIHRoYXQgeW91 IGhhdmUgYW4gaW5jb3JyZWN0Cj4+IGNvbmZpZ3VyYXRpb24gb2YgeW91ciBUWCBhZG1pc3Npb24g cXVldWUuCj4gCj4gV2VsbCwgSSBoYXZlIHRoZSBzYW1lIHF1ZXN0aW9uIFRCSC4gQWxsIHRoZXNl IH4xLjUgeWVhcnMgdGhhdCBJJ20KPiB3b3JraW5nIG9uIHRoZXNlIHN3aXRjaGVzIEkgaGF2ZSBw cmV0dHkgY2hhb3RpYyBudW1iZXIgb2YgVENQCj4gcmV0cmFuc21pc3Npb25zIGVhY2ggdGltZSBJ IGNoYW5nZSBzb21ldGhpbmcgaW4gdGhlIGNvZGUuIFRoZXkgYXJlCj4gbGVzcyBsaWtlbHkgdG8g aGFwcGVuIHdoZW4gdGhlIGF2ZXJhZ2UgQ1BVIGxvYWQgaXMgbG93ZXIsIGJ1dCB+MTAwCj4gaXMg dGhlIGJlc3QgcmVzdWx0IEkgZXZlciBnb3QuCj4gU2VlbXMgbGlrZSBJIHNob3VsZCBzdG9wIHRy eWluZyB0byBwdXNoIHNvZnR3YXJlIHRocm91Z2hwdXQgdG8KPiB0aGUgbWF4IGZvciBhIHdoaWxl IGFuZCBwYXkgbW9yZSBhdHRlbnRpb24gdG8gdGhpcyBhbmQgdG8gaGFyZHdhcmUKPiBjb25maWd1 cmF0aW9uIGluc3RlYWQgYW5kIGNoZWNrIGlmIEkgbWlzcyBzb21ldGhpbmcgOikgCgpJIGhhdmUg aGFkIHRvIGRlYnVnIHN1Y2ggYSBwcm9ibGVtIG9uIHNvbWUgb2Ygb3VyIHN5c3RlbXMgcmVjZW50 bHkgYW5kCml0IGNhbWUgZG93biB0byBiZWluZyBhIGNvdXBsZSBvZiB0aGluZ3MgZm9yIHRob3Nl IHN5c3RlbXM6CgotIGFzIGEgcmVjZWl2ZXIsIHdlIGNvdWxkIGNyZWF0ZSBmYXN0IHJlLXRyYW5z bWlzc2lvbnMgb24gdGhlIHNlbmRlcgpzaWRlIGJlY2F1c2Ugb2YgcGFja2V0IGxvc3Mgd2hpY2gg d2FzIGJlY2F1c2UgdGhlIHN3aXRjaCBpcyBhYmxlIHRvIHB1c2gKcGFja2V0cyBmYXN0ZXIgdGhh biB0aGUgRFNBIG1hc3RlciBiZWluZyBhYmxlIHRvIHdyaXRlIHRoZW0gdG8gRFJBTS4gT25lCndh eSB0byB3b3JrIGFyb3VuZCB0aGlzIGlzIHRvIGNsb2NrIHRoZSBFdGhlcm5ldCBNQUMgaGlnaGVy LCBhdCB0aGUgY29zdApvZiBwb3dlciBjb25zdW1wdGlvbi4KCi0gYXMgYSBzZW5kZXIsIHdlIGNv dWxkIGhhdmUgZmFzdCByZS10cmFuc21pc3Npb25zIHdoZW4gd2Ugd2VyZQpvdXJzZWx2ZXMgYSAi ZmFzdCIgQ1BVICgxLjdHSHogb3IgaGlnaGVyIGZvciBHaWdhYml0IHRocm91Z2hwdXQpLCB0aGF0 CnBhcnQgaXMgc3RpbGwgYmVpbmcgcm9vdCBjYXVzZWQsIGJ1dCBJIHRoaW5rIGl0IGNvbWVzIGRv d24gdG8gZmxvdwpjb250cm9sIGJlaW5nIGluY29ycmVjdGx5IHNldC11cCBpbiBoYXJkd2FyZSwg d2hpY2ggbWVhbnMgeW91IGNvdWxkIGxvc2UKcGFja2V0cyBiZXR3ZWVuIHlvdXIgbmRvX3N0YXJ0 X3htaXQoKSBhbmQgbm90IGhhdmluZyB0aGUgc29mdHdhcmUgVFhRCmFzc2VydCBYT04vWE9GRiBw cm9wZXJseQoKU28gaW4gYm90aCBjYXNlcywgcGFja2V0IGxvc3MgaXMgcmVzcG9uc2libGUgZm9y IHRob3NlIGZhc3QKcmUtdHJhbnNtaXNzaW9ucywgYnV0IHRoZXkgYXJlIGJhcmVseSBvYnNlcnZh YmxlIChjYXNlICMxIHdhcywgc2luY2UgdGhlCnN3aXRjaCBwb3J0IGNvdW50ZXIgZGlkIG5vdCBt YXRjaCB0aGUgRXRoZXJuZXQgTUFDIE1JQiBjb3VudGVycykgc2luY2UKeW91IGhhdmUgYSBibGFj ayBob2xlIGVmZmVjdC4KLS0gCkZsb3JpYW4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCkxpbnV4LW1lZGlhdGVrIG1haWxpbmcgbGlzdApMaW51eC1tZWRp YXRla0BsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxt YW4vbGlzdGluZm8vbGludXgtbWVkaWF0ZWsK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.0 required=3.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6F9FDC2BA80 for ; Mon, 6 Apr 2020 20:16:18 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 49A102072F for ; Mon, 6 Apr 2020 20:16:18 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="R0mZ8vu5"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ZTxU3Wo5" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 49A102072F Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date: Message-ID:From:References:To:Subject:Reply-To:Content-ID:Content-Description :Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=vkO6HQofbKOeV61cdle1AmfeUauSmKz3GZAEzpoMeb4=; b=R0mZ8vu5e2RJCF Wcqx0+gY+vpZ+h2jU3SqVa3JUpOsPAaa6cRyIkRRl1XaH1UvTwu1fZkthUJCH15fyuu6OjwrLm3u9 tv+LQOmEMBSFpoZjLONENSnBEKSW/PKTHKU7Ft4UfC1kwSETivWqteeUmFXp1XbdMK9el05a9P0SB D+XHko92/kKUyej3rMIJj50TagpxkJ5C5mzVZxhy3OJOPlgr1HSOcn/CD2WcHNl/N18VnqpAz3VTm xHSpW27rnPdsg+KkfKKkHhQp91X66tZ4y1U/g5ljgkoSNCVtv6rZfJhu8uf5nh4bVdAWvl2AB0cYA zA880B1oYCSUA5rh0Byg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jLYAL-0000Gg-Js; Mon, 06 Apr 2020 20:16:17 +0000 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jLYAH-0000GI-Ua; Mon, 06 Apr 2020 20:16:15 +0000 Received: by mail-wr1-x442.google.com with SMTP id g3so1100144wrx.2; Mon, 06 Apr 2020 13:16:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:autocrypt:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=4/JVG1Rluunatq6GnbK5n3QH0bGpghdVbJTjmqP/xOM=; b=ZTxU3Wo5Nh26xOIxm0T9d7l6Xku2PnfzQjBPvFylBiLgC2LfKIH+pu7uSNKqEU3lEU 9ti5r4wMW/yiRzmXg/AkrCerRlkUSA2b7XxZaoglk564CQpBqvOt1plMsM+ClpLBPnkg Ui5AREYmR6rMyk1UlANGnlCmhJp8oSw2cXuoko0MNbVVkN3+kUhHDXdd219tZ7WWQg/+ cvXOkZxTD7KV0K83JvG/avuLUWL6CffSC5g7tkV2OAVPk09idO/FfuiPKqjoSWBs0/Mo ffMG9H9TSS3NmS7J6qyQQi+N+RNBJ+1IUXJxPnk7ApBycHTeYz3e/nLYYTwtq8SShCbB cVVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:autocrypt :message-id:date:user-agent:mime-version:in-reply-to :content-language:content-transfer-encoding; bh=4/JVG1Rluunatq6GnbK5n3QH0bGpghdVbJTjmqP/xOM=; b=jbb/LiG8rUAnhKMikezuA3/MhWB5E85s8odbAykAmSp0EFUlPjlzMYBEYmkTWsKl0f zgj/LHa3fl59EvOOlG8/P+xJTZhflIhHX2RRlNpMVqLXBoQYkFRzseVsXT91GNJh5CIt ZzSX78aUR7/gO/9zBw1IUDp/YSBHEzdQJUzwftiK3M4X9p4zuJmzRcDXI4Y5cI/vqgeS 9by+dYdr/ZLxfynw7Bi+BA7dPk93hvDipW4JCvmVZ0Q0nPN8IP/054+PU+dCj1oveuPh xRZY5+g9VbdBvax5BvXjjo334vmaDHm/IoSVrQPbhJRO5+sea2Rc/Ad6wVdBXM8UUIg8 lPxQ== X-Gm-Message-State: AGi0Pub9j+3mEJ+j4d/Gv29fTb9Txv60VnVi6MNzONiubN+GGqRPwhIV mAjimIxONcWYL+j6Kw9zhO8= X-Google-Smtp-Source: APiQypI70IQ3KjOEYbMUvycXVf9PIJ9y3cS26gajoukYnya2h/yRGNsViD5pTLGvRb1msfpDDwt2oA== X-Received: by 2002:a5d:6441:: with SMTP id d1mr1064873wrw.301.1586204172262; Mon, 06 Apr 2020 13:16:12 -0700 (PDT) Received: from [192.168.1.3] (ip68-111-84-250.oc.oc.cox.net. [68.111.84.250]) by smtp.gmail.com with ESMTPSA id s7sm3171366wrt.2.2020.04.06.13.16.07 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 06 Apr 2020 13:16:11 -0700 (PDT) Subject: Re: [PATCH net-next] net: dsa: add GRO support via gro_cells To: Alexander Lobakin References: <97a880e4-de7d-1f94-d35b-2635fbd8237e@gmail.com> <20200406191113.5983-1-bloodyreaper@yandex.ru> From: Florian Fainelli Autocrypt: addr=f.fainelli@gmail.com; keydata= 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 M5kY0ACeNhCZJvZ5g4C2Lc9fcTHu8jxmEkI= Message-ID: Date: Mon, 6 Apr 2020 13:16:06 -0700 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Firefox/68.0 Thunderbird/68.6.0 MIME-Version: 1.0 In-Reply-To: <20200406191113.5983-1-bloodyreaper@yandex.ru> Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200406_131614_012815_46E8AD04 X-CRM114-Status: GOOD ( 15.13 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Woojung Huh , Andrew Lunn , "linux-kernel@vger.kernel.org" , Hauke Mehrtens , Linus Walleij , Sean Wang , Russell King , Vivien Didelot , Microchip Linux Driver Support , Vladimir Oltean , Claudiu Manoil , "linux-mediatek@lists.infradead.org" , Philipp Zabel , "netdev@vger.kernel.org" , Matthias Brugger , Jakub Kicinski , Oleksij Rempel , "David S. Miller" , "linux-arm-kernel@lists.infradead.org" , Mao Wenan Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org CgpPbiA0LzYvMjAyMCAxMjoxMSBQTSwgQWxleGFuZGVyIExvYmFraW4gd3JvdGU6Cj4gMDYuMDQu MjAyMCwgMjA6NTcsICJGbG9yaWFuIEZhaW5lbGxpIiA8Zi5mYWluZWxsaUBnbWFpbC5jb20+Ogo+ PiBPbiA0LzYvMjAyMCAxMDozNCBBTSwgQWxleGFuZGVyIExvYmFraW4gd3JvdGU6Cj4+PiDCoDA2 LjA0LjIwMjAsIDE4OjIxLCAiQWxleGFuZGVyIExvYmFraW4iIDxibG9vZHlyZWFwZXJAeWFuZGV4 LnJ1PjoKPj4+PiDCoDA2LjA0LjIwMjAsIDE3OjQ4LCAiQW5kcmV3IEx1bm4iIDxhbmRyZXdAbHVu bi5jaD46Cj4+Pj4+IMKgwqBPbiBNb24sIEFwciAwNiwgMjAyMCBhdCAwMTo1OToxMFBNICswMzAw LCBBbGV4YW5kZXIgTG9iYWtpbiB3cm90ZToKPj4+Pj4+IMKgwqDCoGdyb19jZWxscyBsaWIgaXMg dXNlZCBieSBkaWZmZXJlbnQgZW5jYXBzdWxhdGluZyBuZXRkZXZpY2VzLCBzdWNoIGFzCj4+Pj4+ PiDCoMKgwqBnZW5ldmUsIG1hY3NlYywgdnhsYW4gZXRjLiB0byBzcGVlZCB1cCBkZWNhcHN1bGF0 ZWQgdHJhZmZpYyBwcm9jZXNzaW5nLgo+Pj4+Pj4gwqDCoMKgQ1BVIHRhZyBpcyBhIHNvcnQgb2Yg ImVuY2Fwc3VsYXRpb24iLCBhbmQgd2UgY2FuIHVzZSB0aGUgc2FtZSBtZWNocyB0bwo+Pj4+Pj4g wqDCoMKgZ3JlYXRseSBpbXByb3ZlIG92ZXJhbGwgRFNBIHBlcmZvcm1hbmNlLgo+Pj4+Pj4gwqDC oMKgc2ticyBhcmUgcGFzc2VkIHRvIHRoZSBHUk8gbGF5ZXIgYWZ0ZXIgcmVtb3ZpbmcgQ1BVIHRh Z3MsIHNvIHdlIGRvbid0Cj4+Pj4+PiDCoMKgwqBuZWVkIGFueSBuZXcgcGFja2V0IG9mZmxvYWQg dHlwZXMgYXMgaXQgd2FzIGZpcnN0bHkgcHJvcG9zZWQgYnkgbWUgaW4KPj4+Pj4+IMKgwqDCoHRo ZSBmaXJzdCBHUk8tb3Zlci1EU0EgdmFyaWFudCBbMV0uCj4+Pj4+Pgo+Pj4+Pj4gwqDCoMKgVGhl IHNpemUgb2Ygc3RydWN0IGdyb19jZWxscyBpcyBzaXplb2Yodm9pZCAqKSwgc28gaG90IHN0cnVj dAo+Pj4+Pj4gwqDCoMKgZHNhX3NsYXZlX3ByaXYgYmVjb21lcyBvbmx5IDQvOCBieXRlcyBiaWdn ZXIsIGFuZCBhbGwgY3JpdGljYWwgZmllbGRzCj4+Pj4+PiDCoMKgwqByZW1haW4gaW4gb25lIDMy LWJ5dGUgY2FjaGVsaW5lLgo+Pj4+Pj4gwqDCoMKgVGhlIG90aGVyIHBvc2l0aXZlIHNpZGUgZWZm ZWN0IGlzIHRoYXQgZHJpdmVycyBmb3IgbmV0d29yayBkZXZpY2VzCj4+Pj4+PiDCoMKgwqB0aGF0 IGNhbiBiZSBzaGlwcGVkIGFzIENQVSBwb3J0cyBvZiBEU0EtZHJpdmVuIHN3aXRjaGVzIGNhbiBu b3cgdXNlCj4+Pj4+PiDCoMKgwqBuYXBpX2dyb19mcmFncygpIHRvIHBhc3Mgc2ticyB0byBrZXJu ZWwuIFBhY2tldHMgYnVpbHQgdGhhdCB3YXkgYXJlCj4+Pj4+PiDCoMKgwqBjb21wbGV0ZWx5IG5v bi1saW5lYXIgYW5kIGFyZSBsaWtlbHkgYmVpbmcgZHJvcHBlZCB3aXRob3V0IEdSTy4KPj4+Pj4+ Cj4+Pj4+PiDCoMKgwqBUaGlzIHdhcyB0ZXN0ZWQgb24gdG8tYmUtbWFpbmxpbmVkLXNvb24gRXRo ZXJuZXQgZHJpdmVyIHRoYXQgdXNlcwo+Pj4+Pj4gwqDCoMKgbmFwaV9ncm9fZnJhZ3MoKSwgYW5k IHRoZSBvdmVyYWxsIHBlcmZvcm1hbmNlIHdhcyBvbiBwYXIgd2l0aCB0aGUKPj4+Pj4+IMKgwqDC oHZhcmlhbnQgZnJvbSBbMV0sIHNvbWV0aW1lcyBldmVuIGJldHRlciBkdWUgdG8gbWluaW1hbCBv dmVyaGVhZC4KPj4+Pj4+IMKgwqDCoG5ldC5jb3JlLmdyb19ub3JtYWxfYmF0Y2ggdHVuaW5nIG1h eSBoZWxwIHRvIHB1c2ggaXQgdG8gdGhlIGxpbWl0Cj4+Pj4+PiDCoMKgwqBvbiBwYXJ0aWN1bGFy IHNldHVwcyBhbmQgcGxhdGZvcm1zLgo+Pj4+Pj4KPj4+Pj4+IMKgwqDCoFsxXSBodHRwczovL2xv cmUua2VybmVsLm9yZy9uZXRkZXYvMjAxOTEyMzAxNDMwMjguMjczMTMtMS1hbG9iYWtpbkBkbGlu ay5ydS8KPj4+Pj4KPj4+Pj4gwqDCoEhpIEFsZXhhbmRlcgo+Pj4+Cj4+Pj4gwqBIaSBBbmRyZXch Cj4+Pj4KPj4+Pj4gwqDCoG5ldC1uZXh0IGlzIGNsb3NlZCBhdCB0aGUgbW9tZW50LiBTbyB5b3Ug c2hvdWxkIG9mIHBvc3RlZCB0aGlzIHdpdGggYW4KPj4+Pj4gwqDCoFJGQyBwcmVmaXguCj4+Pj4K Pj4+PiDCoEkgc2F3IHRoYXQgaXQncyBjbG9zZWQsIGJ1dCBkaWRuJ3Qga25ldyBhYm91dCAiUkZD IiB0YWdzIGZvciB0aGF0IHBlcmlvZCwKPj4+PiDCoHNvcnJ5Lgo+Pj4+Cj4+Pj4+IMKgwqBUaGUg aW1wbGVtZW50YXRpb24gbG9va3MgbmljZSBhbmQgc2ltcGxlLiBCdXQgaXQgd291bGQgYmUgbmlj ZSB0byBoYXZlCj4+Pj4+IMKgwqBzb21lIHBlcmZvcm1hbmNlIGZpZ3VyZXMuCj4+Pj4KPj4+PiDC oEknbGwgZG8sIHN1cmUuIEkgdGhpbmsgSSdsbCBjb2xsZWN0IHRoZSBzdGF0cyB3aXRoIHZhcmlv dXMgbWFpbiByZWNlaXZpbmcKPj4+PiDCoGZ1bmN0aW9ucyBpbiBFdGhlcm5ldCBkcml2ZXIgKG5h cGlfZ3JvX2ZyYWdzKCksIG5hcGlfZ3JvX3JlY2VpdmUoKSwKPj4+PiDCoG5ldGlmX3JlY2VpdmVf c2tiKCksIG5ldGlmX3JlY2VpdmVfc2tiX2xpc3QoKSksIGFuZCB3aXRoIGFuZCB3aXRob3V0IHRo aXMKPj4+PiDCoHBhdGNoIHRvIG1ha2UgdGhlbSBhcyBjb21wbGV0ZSBhcyBwb3NzaWJsZS4KPj4+ Cj4+PiDCoE9LLCBzbyBoZXJlIHdlIGdvLgo+Pj4KPj4+IMKgTXkgZGV2aWNlIGlzIDEuMiBHSHog NC1jb3JlIE1JUFMzMiBSMi4gRXRoZXJuZXQgY29udHJvbGxlciByZXByZXNlbnRpbmcKPj4+IMKg dGhlIENQVSBwb3J0IGlzIGNhcGFibGUgb2YgUy9HLCBmcmFnbGlzdHMgUy9HLCBUU080LzYgYW5k IEdTTyBVRFAgTDQuCj4+PiDCoFRlc3RzIGFyZSBwZXJmb3JtZWQgdGhyb3VnaCBzaW1wbGUgSVBv RSBWTEFOIE5BVCBmb3J3YXJkaW5nIHNldHVwCj4+PiDCoChwb3J0MCA8LT4gcG9ydDEuMjE4KSB3 aXRoIGlwZXJmMyBpbiBUQ1AgbW9kZS4KPj4+IMKgbmV0LmNvcmUuZ3JvX25vcm1hbF9iYXRjaCBp cyBhbHdheXMgc2V0IHRvIDE2IGFzIHRoYXQgdmFsdWUgc2VlbXMgdG8gYmUKPj4+IMKgdGhlIG1v c3QgZWZmZWN0aXZlIGZvciB0aGF0IHBhcnRpY3VsYXIgaGFyZHdhcmUgYW5kIGRyaXZlcnMuCj4+ Pgo+Pj4gwqBQYWNrZXQgY291bnRlcnMgb24gZXRoMCBhcmUgdGhlIHJlYWwgbnVtYmVycyBvZiBv bmdvaW5nIGZyYW1lcy4gQ291bnRlcnMKPj4+IMKgb24gcG9ydFggYXJlIHB1cmUtc29mdHdhcmUg YW5kIGFyZSB1cGRhdGVkIGluc2lkZSBuZXR3b3JraW5nIHN0YWNrLgo+Pj4KPj4+IMKgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCj4+Pgo+Pj4gwqBuZXRpZl9yZWNlaXZlX3NrYigpIGluIEV0aCBkcml2ZXIsIG5vIHBh dGNoOgo+Pj4KPj4+IMKgWyBJRF0gSW50ZXJ2YWwgVHJhbnNmZXIgQml0cmF0ZSBSZXRyCj4+PiDC oFsgNV0gMC4wMC0xMjAuMDEgc2VjIDkuMDAgR0J5dGVzIDY0NCBNYml0cy9zZWMgNDEzIHNlbmRl cgo+Pj4gwqBbIDVdIDAuMDAtMTIwLjAwIHNlYyA4Ljk5IEdCeXRlcyA2NDQgTWJpdHMvc2VjIHJl Y2VpdmVyCj4+Pgo+Pj4gwqBldGgwCj4+PiDCoFJYIHBhY2tldHM6NzA5NzczMSBlcnJvcnM6MCBk cm9wcGVkOjAgb3ZlcnJ1bnM6MCBmcmFtZTowCj4+PiDCoFRYIHBhY2tldHM6NzA5NzcwMiBlcnJv cnM6MCBkcm9wcGVkOjAgb3ZlcnJ1bnM6MCBjYXJyaWVyOjAKPj4+Cj4+PiDCoHBvcnQwCj4+PiDC oFJYIHBhY2tldHM6NDI2MDUwIGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVuczowIGZyYW1lOjAK Pj4+IMKgVFggcGFja2V0czo2NjcxODI5IGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVuczowIGNh cnJpZXI6MAo+Pj4KPj4+IMKgcG9ydDEKPj4+IMKgUlggcGFja2V0czo2NjcxNjgxIGVycm9yczow IGRyb3BwZWQ6MCBvdmVycnVuczowIGNhcnJpZXI6MAo+Pj4gwqBUWCBwYWNrZXRzOjQyNTg2MiBl cnJvcnM6MCBkcm9wcGVkOjAgb3ZlcnJ1bnM6MCBjYXJyaWVyOjAKPj4+Cj4+PiDCoHBvcnQxLjIx OAo+Pj4gwqBSWCBwYWNrZXRzOjY2NzE2NzcgZXJyb3JzOjAgZHJvcHBlZDowIG92ZXJydW5zOjAg ZnJhbWU6MAo+Pj4gwqBUWCBwYWNrZXRzOjQyNTg1MSBlcnJvcnM6MCBkcm9wcGVkOjAgb3ZlcnJ1 bnM6MCBjYXJyaWVyOjAKPj4+Cj4+PiDCoC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+Pj4KPj4+IMKgbmV0aWZfcmVj ZWl2ZV9za2JfbGlzdCgpIGluIEV0aCBkcml2ZXIsIG5vIHBhdGNoOgo+Pj4KPj4+IMKgWyBJRF0g SW50ZXJ2YWwgVHJhbnNmZXIgQml0cmF0ZSBSZXRyCj4+PiDCoFsgNV0gMC4wMC0xMjAuMDEgc2Vj IDkuNDggR0J5dGVzIDY3OSBNYml0cy9zZWMgMTI5IHNlbmRlcgo+Pj4gwqBbIDVdIDAuMDAtMTIw LjAwIHNlYyA5LjQ4IEdCeXRlcyA2NzkgTWJpdHMvc2VjIHJlY2VpdmVyCj4+Pgo+Pj4gwqBldGgw Cj4+PiDCoFJYIHBhY2tldHM6NzQ0ODA5OCBlcnJvcnM6MCBkcm9wcGVkOjAgb3ZlcnJ1bnM6MCBm cmFtZTowCj4+PiDCoFRYIHBhY2tldHM6NzQ0ODA3MyBlcnJvcnM6MCBkcm9wcGVkOjAgb3ZlcnJ1 bnM6MCBjYXJyaWVyOjAKPj4+Cj4+PiDCoHBvcnQwCj4+PiDCoFJYIHBhY2tldHM6NDE2MTE1IGVy cm9yczowIGRyb3BwZWQ6MCBvdmVycnVuczowIGZyYW1lOjAKPj4+IMKgVFggcGFja2V0czo3MDMy MTIxIGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVuczowIGNhcnJpZXI6MAo+Pj4KPj4+IMKgcG9y dDEKPj4+IMKgUlggcGFja2V0czo3MDMxOTgzIGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVuczow IGZyYW1lOjAKPj4+IMKgVFggcGFja2V0czo0MTU5NDEgZXJyb3JzOjAgZHJvcHBlZDowIG92ZXJy dW5zOjAgY2FycmllcjowCj4+Pgo+Pj4gwqBwb3J0MS4yMTgKPj4+IMKgUlggcGFja2V0czo3MDMx OTc4IGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVuczowIGZyYW1lOjAKPj4+IMKgVFggcGFja2V0 czo0MTU5MzAgZXJyb3JzOjAgZHJvcHBlZDowIG92ZXJydW5zOjAgY2FycmllcjowCj4+Pgo+Pj4g wqAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KPj4+Cj4+PiDCoG5hcGlfZ3JvX3JlY2VpdmUoKSBpbiBFdGggZHJpdmVy LCBubyBwYXRjaDoKPj4+Cj4+PiDCoFsgSURdIEludGVydmFsIFRyYW5zZmVyIEJpdHJhdGUgUmV0 cgo+Pj4gwqBbIDVdIDAuMDAtMTIwLjAxIHNlYyAxMC4wIEdCeXRlcyA3MTggTWJpdHMvc2VjIDEw NyBzZW5kZXIKPj4+IMKgWyA1XSAwLjAwLTEyMC4wMCBzZWMgMTAuMCBHQnl0ZXMgNzE4IE1iaXRz L3NlYyByZWNlaXZlcgo+Pj4KPj4+IMKgZXRoMAo+Pj4gwqBSWCBwYWNrZXRzOjc4NjgyODEgZXJy b3JzOjAgZHJvcHBlZDowIG92ZXJydW5zOjAgZnJhbWU6MAo+Pj4gwqBUWCBwYWNrZXRzOjc4Njgy NjcgZXJyb3JzOjAgZHJvcHBlZDowIG92ZXJydW5zOjAgY2FycmllcjowCj4+Pgo+Pj4gwqBwb3J0 MAo+Pj4gwqBSWCBwYWNrZXRzOjQyOTA4MiBlcnJvcnM6MCBkcm9wcGVkOjAgb3ZlcnJ1bnM6MCBm cmFtZTowCj4+PiDCoFRYIHBhY2tldHM6NzQzOTM0MyBlcnJvcnM6MCBkcm9wcGVkOjAgb3ZlcnJ1 bnM6MCBjYXJyaWVyOjAKPj4+Cj4+PiDCoHBvcnQxCj4+PiDCoFJYIHBhY2tldHM6NzQzOTE5OSBl cnJvcnM6MCBkcm9wcGVkOjAgb3ZlcnJ1bnM6MCBmcmFtZTowCj4+PiDCoFRYIHBhY2tldHM6NDI4 OTEzIGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVuczowIGNhcnJpZXI6MAo+Pj4KPj4+IMKgcG9y dDEuMjE4Cj4+PiDCoFJYIHBhY2tldHM6NzQzOTE5NSBlcnJvcnM6MCBkcm9wcGVkOjAgb3ZlcnJ1 bnM6MCBmcmFtZTowCj4+PiDCoFRYIHBhY2tldHM6NDI4OTAyIGVycm9yczowIGRyb3BwZWQ6MCBv dmVycnVuczowIGNhcnJpZXI6MAo+Pj4KPj4+IMKgPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cj4+Pgo+Pj4gwqBuZXRp Zl9yZWNlaXZlX3NrYigpIGluIEV0aCBkcml2ZXIgKyBwYXRjaDoKPj4+Cj4+PiDCoFsgSURdIElu dGVydmFsIFRyYW5zZmVyIEJpdHJhdGUgUmV0cgo+Pj4gwqBbIDVdIDAuMDAtMTIwLjAxIHNlYyAx Mi4yIEdCeXRlcyA4NzAgTWJpdHMvc2VjIDIyNjcgc2VuZGVyCj4+PiDCoFsgNV0gMC4wMC0xMjAu MDAgc2VjIDEyLjIgR0J5dGVzIDg3MCBNYml0cy9zZWMgcmVjZWl2ZXIKPj4+Cj4+PiDCoGV0aDAK Pj4+IMKgUlggcGFja2V0czo5NDc0NzkyIGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVuczowIGZy YW1lOjAKPj4+IMKgVFggcGFja2V0czo5NDc0Nzc3IGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVu czowIGNhcnJpZXI6MAo+Pj4KPj4+IMKgcG9ydDAKPj4+IMKgUlggcGFja2V0czo0NTUyMDAgZXJy b3JzOjAgZHJvcHBlZDowIG92ZXJydW5zOjAgZnJhbWU6MAo+Pj4gwqBUWCBwYWNrZXRzOjM1MzI4 OCBlcnJvcnM6MCBkcm9wcGVkOjAgb3ZlcnJ1bnM6MCBjYXJyaWVyOjAKPj4+Cj4+PiDCoHBvcnQx Cj4+PiDCoFJYIHBhY2tldHM6OTAxOTU5MiBlcnJvcnM6MCBkcm9wcGVkOjAgb3ZlcnJ1bnM6MCBm cmFtZTowCj4+PiDCoFRYIHBhY2tldHM6NDU1MDM1IGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVu czowIGNhcnJpZXI6MAo+Pj4KPj4+IMKgcG9ydDEuMjE4Cj4+PiDCoFJYIHBhY2tldHM6MzUzMTQ0 IGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVuczowIGZyYW1lOjAKPj4+IMKgVFggcGFja2V0czo0 NTUwMjQgZXJyb3JzOjAgZHJvcHBlZDowIG92ZXJydW5zOjAgY2FycmllcjowCj4+Pgo+Pj4gwqAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KPj4+Cj4+PiDCoG5ldGlmX3JlY2VpdmVfc2tiX2xpc3QoKSBpbiBFdGggZHJp dmVyICsgcGF0Y2g6Cj4+Pgo+Pj4gwqBbIElEXSBJbnRlcnZhbCBUcmFuc2ZlciBCaXRyYXRlIFJl dHIKPj4+IMKgWyA1XSAwLjAwLTEyMC4wMSBzZWMgMTEuNiBHQnl0ZXMgODI3IE1iaXRzL3NlYyAy MjI0IHNlbmRlcgo+Pj4gwqBbIDVdIDAuMDAtMTIwLjAwIHNlYyAxMS41IEdCeXRlcyA4MjcgTWJp dHMvc2VjIHJlY2VpdmVyCj4+Pgo+Pj4gwqBldGgwCj4+PiDCoFJYIHBhY2tldHM6ODk4MTY1MSBl cnJvcnM6MCBkcm9wcGVkOjAgb3ZlcnJ1bnM6MCBmcmFtZTowCj4+PiDCoFRYIHBhY2tldHM6ODk4 MTg3IGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVuczowIGNhcnJpZXI6MAo+Pj4KPj4+IMKgcG9y dDAKPj4+IMKgUlggcGFja2V0czo0MzYxNTkgZXJyb3JzOjAgZHJvcHBlZDowIG92ZXJydW5zOjAg ZnJhbWU6MAo+Pj4gwqBUWCBwYWNrZXRzOjMzNTY2NSBlcnJvcnM6MCBkcm9wcGVkOjAgb3ZlcnJ1 bnM6MCBjYXJyaWVyOjAKPj4+Cj4+PiDCoHBvcnQxCj4+PiDCoFJYIHBhY2tldHM6ODU0NTQ5MiBl cnJvcnM6MCBkcm9wcGVkOjAgb3ZlcnJ1bnM6MCBmcmFtZTowCj4+PiDCoFRYIHBhY2tldHM6NDM2 MDcxIGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVuczowIGNhcnJpZXI6MAo+Pj4KPj4+IMKgcG9y dDEuMjE4Cj4+PiDCoFJYIHBhY2tldHM6MzM1NTkzIGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVu czowIGZyYW1lOjAKPj4+IMKgVFggcGFja2V0czo0MzYwNjUgZXJyb3JzOjAgZHJvcHBlZDowIG92 ZXJydW5zOjAgY2FycmllcjowCj4+Pgo+Pj4gwqAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+Pj4KPj4+IMKgbmFwaV9ncm9fcmVjZWl2 ZSgpIGluIEV0aCBkcml2ZXIgKyBwYXRjaDoKPj4+Cj4+PiDCoFsgSURdIEludGVydmFsIFRyYW5z ZmVyIEJpdHJhdGUgUmV0cgo+Pj4gwqBbIDVdIDAuMDAtMTIwLjAxIHNlYyAxMS44IEdCeXRlcyA4 NTUgTWJpdHMvc2VjIDEyMiBzZW5kZXIKPj4+IMKgWyA1XSAwLjAwLTEyMC4wMCBzZWMgMTEuOCBH Qnl0ZXMgODU1IE1iaXRzL3NlYyByZWNlaXZlcgo+Pj4KPj4+IMKgZXRoMAo+Pj4gwqBSWCBwYWNr ZXRzOjkyOTIyMTQgZXJyb3JzOjAgZHJvcHBlZDowIG92ZXJydW5zOjAgZnJhbWU6MAo+Pj4gwqBU WCBwYWNrZXRzOjkyOTIxOTAgZXJyb3JzOjAgZHJvcHBlZDowIG92ZXJydW5zOjAgY2Fycmllcjow Cj4+Pgo+Pj4gwqBwb3J0MAo+Pj4gwqBSWCBwYWNrZXRzOjQzODUxNiBlcnJvcnM6MCBkcm9wcGVk OjAgb3ZlcnJ1bnM6MCBmcmFtZTowCj4+PiDCoFRYIHBhY2tldHM6MzQ3MjM2IGVycm9yczowIGRy b3BwZWQ6MCBvdmVycnVuczowIGNhcnJpZXI6MAo+Pj4KPj4+IMKgcG9ydDEKPj4+IMKgUlggcGFj a2V0czo4ODUzNjk4IGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVuczowIGZyYW1lOjAKPj4+IMKg VFggcGFja2V0czo0MzgzMzEgZXJyb3JzOjAgZHJvcHBlZDowIG92ZXJydW5zOjAgY2Fycmllcjow Cj4+Pgo+Pj4gwqBwb3J0MS4yMTgKPj4+IMKgUlggcGFja2V0czozNDcwODIgZXJyb3JzOjAgZHJv cHBlZDowIG92ZXJydW5zOjAgZnJhbWU6MAo+Pj4gwqBUWCBwYWNrZXRzOjQzODMyMCBlcnJvcnM6 MCBkcm9wcGVkOjAgb3ZlcnJ1bnM6MCBjYXJyaWVyOjAKPj4+Cj4+PiDCoC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4+Pgo+Pj4gwqBU aGUgbWFpbiBnb2FsIGlzIGFjaGlldmVkOiB3ZSBoYXZlIGFib3V0IDEwMC0yMDAgTWJwcyBvZiBw ZXJmb3JtYW5jZQo+Pj4gwqBib29zdCB3aGlsZSBpbi1zdGFjayBza2JzIGFyZSBncmVhdGx5IHJl ZHVjZWQgZnJvbSB+OC05IG1pbGxpb25zIHRvCj4+PiDCoH4zNTAwMDAgKGNvbXBhcmUgcG9ydDAg VFggYW5kIHBvcnQxIFJYIHdpdGhvdXQgcGF0Y2ggYW5kIHdpdGggaXQpLgo+Pgo+PiBBbmQgdGhl IG51bWJlciBvZiBUQ1AgcmV0cmllcyBpcyBhbHNvIGxvd2VyLCB3aGljaCBsaWtlbHkgbWVhbnMg dGhhdCB3ZQo+PiBhcmUgbWFraW5nIGJldHRlciB1c2Ugb2YgdGhlIGZsb3cgY29udHJvbCBidWls dCBpbnRvIHRoZSBoYXJkd2FyZS9kcml2ZXIKPj4gaGVyZT8KPj4KPj4gQlRXIGRvIHlvdSBrbm93 IHdoeSB5b3UgaGF2ZSBzbyBtYW55IHJldHJpZXMgdGhvdWdoPyBJdCBzb3VuZHMgbGlrZSB5b3Vy Cj4+IGZsb3cgY29udHJvbCBpcyBtaXNzaW5nIGEgZmV3IGVkZ2UgY2FzZXMsIG9yIHRoYXQgeW91 IGhhdmUgYW4gaW5jb3JyZWN0Cj4+IGNvbmZpZ3VyYXRpb24gb2YgeW91ciBUWCBhZG1pc3Npb24g cXVldWUuCj4gCj4gV2VsbCwgSSBoYXZlIHRoZSBzYW1lIHF1ZXN0aW9uIFRCSC4gQWxsIHRoZXNl IH4xLjUgeWVhcnMgdGhhdCBJJ20KPiB3b3JraW5nIG9uIHRoZXNlIHN3aXRjaGVzIEkgaGF2ZSBw cmV0dHkgY2hhb3RpYyBudW1iZXIgb2YgVENQCj4gcmV0cmFuc21pc3Npb25zIGVhY2ggdGltZSBJ IGNoYW5nZSBzb21ldGhpbmcgaW4gdGhlIGNvZGUuIFRoZXkgYXJlCj4gbGVzcyBsaWtlbHkgdG8g aGFwcGVuIHdoZW4gdGhlIGF2ZXJhZ2UgQ1BVIGxvYWQgaXMgbG93ZXIsIGJ1dCB+MTAwCj4gaXMg dGhlIGJlc3QgcmVzdWx0IEkgZXZlciBnb3QuCj4gU2VlbXMgbGlrZSBJIHNob3VsZCBzdG9wIHRy eWluZyB0byBwdXNoIHNvZnR3YXJlIHRocm91Z2hwdXQgdG8KPiB0aGUgbWF4IGZvciBhIHdoaWxl IGFuZCBwYXkgbW9yZSBhdHRlbnRpb24gdG8gdGhpcyBhbmQgdG8gaGFyZHdhcmUKPiBjb25maWd1 cmF0aW9uIGluc3RlYWQgYW5kIGNoZWNrIGlmIEkgbWlzcyBzb21ldGhpbmcgOikgCgpJIGhhdmUg aGFkIHRvIGRlYnVnIHN1Y2ggYSBwcm9ibGVtIG9uIHNvbWUgb2Ygb3VyIHN5c3RlbXMgcmVjZW50 bHkgYW5kCml0IGNhbWUgZG93biB0byBiZWluZyBhIGNvdXBsZSBvZiB0aGluZ3MgZm9yIHRob3Nl IHN5c3RlbXM6CgotIGFzIGEgcmVjZWl2ZXIsIHdlIGNvdWxkIGNyZWF0ZSBmYXN0IHJlLXRyYW5z bWlzc2lvbnMgb24gdGhlIHNlbmRlcgpzaWRlIGJlY2F1c2Ugb2YgcGFja2V0IGxvc3Mgd2hpY2gg d2FzIGJlY2F1c2UgdGhlIHN3aXRjaCBpcyBhYmxlIHRvIHB1c2gKcGFja2V0cyBmYXN0ZXIgdGhh biB0aGUgRFNBIG1hc3RlciBiZWluZyBhYmxlIHRvIHdyaXRlIHRoZW0gdG8gRFJBTS4gT25lCndh eSB0byB3b3JrIGFyb3VuZCB0aGlzIGlzIHRvIGNsb2NrIHRoZSBFdGhlcm5ldCBNQUMgaGlnaGVy LCBhdCB0aGUgY29zdApvZiBwb3dlciBjb25zdW1wdGlvbi4KCi0gYXMgYSBzZW5kZXIsIHdlIGNv dWxkIGhhdmUgZmFzdCByZS10cmFuc21pc3Npb25zIHdoZW4gd2Ugd2VyZQpvdXJzZWx2ZXMgYSAi ZmFzdCIgQ1BVICgxLjdHSHogb3IgaGlnaGVyIGZvciBHaWdhYml0IHRocm91Z2hwdXQpLCB0aGF0 CnBhcnQgaXMgc3RpbGwgYmVpbmcgcm9vdCBjYXVzZWQsIGJ1dCBJIHRoaW5rIGl0IGNvbWVzIGRv d24gdG8gZmxvdwpjb250cm9sIGJlaW5nIGluY29ycmVjdGx5IHNldC11cCBpbiBoYXJkd2FyZSwg d2hpY2ggbWVhbnMgeW91IGNvdWxkIGxvc2UKcGFja2V0cyBiZXR3ZWVuIHlvdXIgbmRvX3N0YXJ0 X3htaXQoKSBhbmQgbm90IGhhdmluZyB0aGUgc29mdHdhcmUgVFhRCmFzc2VydCBYT04vWE9GRiBw cm9wZXJseQoKU28gaW4gYm90aCBjYXNlcywgcGFja2V0IGxvc3MgaXMgcmVzcG9uc2libGUgZm9y IHRob3NlIGZhc3QKcmUtdHJhbnNtaXNzaW9ucywgYnV0IHRoZXkgYXJlIGJhcmVseSBvYnNlcnZh YmxlIChjYXNlICMxIHdhcywgc2luY2UgdGhlCnN3aXRjaCBwb3J0IGNvdW50ZXIgZGlkIG5vdCBt YXRjaCB0aGUgRXRoZXJuZXQgTUFDIE1JQiBjb3VudGVycykgc2luY2UKeW91IGhhdmUgYSBibGFj ayBob2xlIGVmZmVjdC4KLS0gCkZsb3JpYW4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFy bS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 85E75C2BA1A for ; Mon, 6 Apr 2020 20:16:17 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 4D2532072F for ; Mon, 6 Apr 2020 20:16:17 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ZTxU3Wo5" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726407AbgDFUQQ (ORCPT ); Mon, 6 Apr 2020 16:16:16 -0400 Received: from mail-wr1-f65.google.com ([209.85.221.65]:35992 "EHLO mail-wr1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725895AbgDFUQP (ORCPT ); Mon, 6 Apr 2020 16:16:15 -0400 Received: by mail-wr1-f65.google.com with SMTP id k1so1099716wrm.3; Mon, 06 Apr 2020 13:16:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:autocrypt:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=4/JVG1Rluunatq6GnbK5n3QH0bGpghdVbJTjmqP/xOM=; b=ZTxU3Wo5Nh26xOIxm0T9d7l6Xku2PnfzQjBPvFylBiLgC2LfKIH+pu7uSNKqEU3lEU 9ti5r4wMW/yiRzmXg/AkrCerRlkUSA2b7XxZaoglk564CQpBqvOt1plMsM+ClpLBPnkg Ui5AREYmR6rMyk1UlANGnlCmhJp8oSw2cXuoko0MNbVVkN3+kUhHDXdd219tZ7WWQg/+ cvXOkZxTD7KV0K83JvG/avuLUWL6CffSC5g7tkV2OAVPk09idO/FfuiPKqjoSWBs0/Mo ffMG9H9TSS3NmS7J6qyQQi+N+RNBJ+1IUXJxPnk7ApBycHTeYz3e/nLYYTwtq8SShCbB cVVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:autocrypt :message-id:date:user-agent:mime-version:in-reply-to :content-language:content-transfer-encoding; bh=4/JVG1Rluunatq6GnbK5n3QH0bGpghdVbJTjmqP/xOM=; b=gVS9cv23gCrz+pj5wERB2omM4zuoH4vHKCDkU/B6IPOr+zknt8S1hcDL4q9p2B5x5V KYIuq9ozusvcO8eovaZqrBVUHlVRheAIekeejviu+rKIpicHRoevbl0OF4cpL0ux8iA0 q0B0649ae4psApu+lNHSxKlpvzVom9QRHdQHASyBqzwwSgvPgcD1XqOkgQKTP8ioKZg3 KOpJWyEv3v+ZUWsyuuiFfoAuFiqf1tGlP9Jp/eOBhiXPxYSHmfp6nHBXMKpJ1+0YUTC+ XwbosOtCV8680brWNhtFg1sVn6haxYvwF12uGrMoWuI9vsOVzfZGU8paVjVbfFf34c19 kiPQ== X-Gm-Message-State: AGi0PuatK2EL2j8i2i20ySLkf8QUt9DS3pkRWm3KaIkCySmk7PPfQDSJ M0lm40TLrMBcNvu4kJbMcxk= X-Google-Smtp-Source: APiQypI70IQ3KjOEYbMUvycXVf9PIJ9y3cS26gajoukYnya2h/yRGNsViD5pTLGvRb1msfpDDwt2oA== X-Received: by 2002:a5d:6441:: with SMTP id d1mr1064873wrw.301.1586204172262; Mon, 06 Apr 2020 13:16:12 -0700 (PDT) Received: from [192.168.1.3] (ip68-111-84-250.oc.oc.cox.net. [68.111.84.250]) by smtp.gmail.com with ESMTPSA id s7sm3171366wrt.2.2020.04.06.13.16.07 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 06 Apr 2020 13:16:11 -0700 (PDT) Subject: Re: [PATCH net-next] net: dsa: add GRO support via gro_cells To: Alexander Lobakin Cc: Andrew Lunn , "David S. Miller" , Jakub Kicinski , Woojung Huh , Hauke Mehrtens , Linus Walleij , Sean Wang , Russell King , Microchip Linux Driver Support , Claudiu Manoil , "netdev@vger.kernel.org" , "linux-mediatek@lists.infradead.org" , "linux-arm-kernel@lists.infradead.org" , Philipp Zabel , Vladimir Oltean , Matthias Brugger , Oleksij Rempel , Vivien Didelot , "linux-kernel@vger.kernel.org" , Mao Wenan References: <97a880e4-de7d-1f94-d35b-2635fbd8237e@gmail.com> <20200406191113.5983-1-bloodyreaper@yandex.ru> From: Florian Fainelli Autocrypt: addr=f.fainelli@gmail.com; keydata= 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 M5kY0ACeNhCZJvZ5g4C2Lc9fcTHu8jxmEkI= Message-ID: Date: Mon, 6 Apr 2020 13:16:06 -0700 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Firefox/68.0 Thunderbird/68.6.0 MIME-Version: 1.0 In-Reply-To: <20200406191113.5983-1-bloodyreaper@yandex.ru> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 4/6/2020 12:11 PM, Alexander Lobakin wrote: > 06.04.2020, 20:57, "Florian Fainelli" : >> On 4/6/2020 10:34 AM, Alexander Lobakin wrote: >>>  06.04.2020, 18:21, "Alexander Lobakin" : >>>>  06.04.2020, 17:48, "Andrew Lunn" : >>>>>   On Mon, Apr 06, 2020 at 01:59:10PM +0300, Alexander Lobakin wrote: >>>>>>    gro_cells lib is used by different encapsulating netdevices, such as >>>>>>    geneve, macsec, vxlan etc. to speed up decapsulated traffic processing. >>>>>>    CPU tag is a sort of "encapsulation", and we can use the same mechs to >>>>>>    greatly improve overall DSA performance. >>>>>>    skbs are passed to the GRO layer after removing CPU tags, so we don't >>>>>>    need any new packet offload types as it was firstly proposed by me in >>>>>>    the first GRO-over-DSA variant [1]. >>>>>> >>>>>>    The size of struct gro_cells is sizeof(void *), so hot struct >>>>>>    dsa_slave_priv becomes only 4/8 bytes bigger, and all critical fields >>>>>>    remain in one 32-byte cacheline. >>>>>>    The other positive side effect is that drivers for network devices >>>>>>    that can be shipped as CPU ports of DSA-driven switches can now use >>>>>>    napi_gro_frags() to pass skbs to kernel. Packets built that way are >>>>>>    completely non-linear and are likely being dropped without GRO. >>>>>> >>>>>>    This was tested on to-be-mainlined-soon Ethernet driver that uses >>>>>>    napi_gro_frags(), and the overall performance was on par with the >>>>>>    variant from [1], sometimes even better due to minimal overhead. >>>>>>    net.core.gro_normal_batch tuning may help to push it to the limit >>>>>>    on particular setups and platforms. >>>>>> >>>>>>    [1] https://lore.kernel.org/netdev/20191230143028.27313-1-alobakin@dlink.ru/ >>>>> >>>>>   Hi Alexander >>>> >>>>  Hi Andrew! >>>> >>>>>   net-next is closed at the moment. So you should of posted this with an >>>>>   RFC prefix. >>>> >>>>  I saw that it's closed, but didn't knew about "RFC" tags for that period, >>>>  sorry. >>>> >>>>>   The implementation looks nice and simple. But it would be nice to have >>>>>   some performance figures. >>>> >>>>  I'll do, sure. I think I'll collect the stats with various main receiving >>>>  functions in Ethernet driver (napi_gro_frags(), napi_gro_receive(), >>>>  netif_receive_skb(), netif_receive_skb_list()), and with and without this >>>>  patch to make them as complete as possible. >>> >>>  OK, so here we go. >>> >>>  My device is 1.2 GHz 4-core MIPS32 R2. Ethernet controller representing >>>  the CPU port is capable of S/G, fraglists S/G, TSO4/6 and GSO UDP L4. >>>  Tests are performed through simple IPoE VLAN NAT forwarding setup >>>  (port0 <-> port1.218) with iperf3 in TCP mode. >>>  net.core.gro_normal_batch is always set to 16 as that value seems to be >>>  the most effective for that particular hardware and drivers. >>> >>>  Packet counters on eth0 are the real numbers of ongoing frames. Counters >>>  on portX are pure-software and are updated inside networking stack. >>> >>>  --------------------------------------------------------------------- >>> >>>  netif_receive_skb() in Eth driver, no patch: >>> >>>  [ ID] Interval Transfer Bitrate Retr >>>  [ 5] 0.00-120.01 sec 9.00 GBytes 644 Mbits/sec 413 sender >>>  [ 5] 0.00-120.00 sec 8.99 GBytes 644 Mbits/sec receiver >>> >>>  eth0 >>>  RX packets:7097731 errors:0 dropped:0 overruns:0 frame:0 >>>  TX packets:7097702 errors:0 dropped:0 overruns:0 carrier:0 >>> >>>  port0 >>>  RX packets:426050 errors:0 dropped:0 overruns:0 frame:0 >>>  TX packets:6671829 errors:0 dropped:0 overruns:0 carrier:0 >>> >>>  port1 >>>  RX packets:6671681 errors:0 dropped:0 overruns:0 carrier:0 >>>  TX packets:425862 errors:0 dropped:0 overruns:0 carrier:0 >>> >>>  port1.218 >>>  RX packets:6671677 errors:0 dropped:0 overruns:0 frame:0 >>>  TX packets:425851 errors:0 dropped:0 overruns:0 carrier:0 >>> >>>  --------------------------------------------------------------------- >>> >>>  netif_receive_skb_list() in Eth driver, no patch: >>> >>>  [ ID] Interval Transfer Bitrate Retr >>>  [ 5] 0.00-120.01 sec 9.48 GBytes 679 Mbits/sec 129 sender >>>  [ 5] 0.00-120.00 sec 9.48 GBytes 679 Mbits/sec receiver >>> >>>  eth0 >>>  RX packets:7448098 errors:0 dropped:0 overruns:0 frame:0 >>>  TX packets:7448073 errors:0 dropped:0 overruns:0 carrier:0 >>> >>>  port0 >>>  RX packets:416115 errors:0 dropped:0 overruns:0 frame:0 >>>  TX packets:7032121 errors:0 dropped:0 overruns:0 carrier:0 >>> >>>  port1 >>>  RX packets:7031983 errors:0 dropped:0 overruns:0 frame:0 >>>  TX packets:415941 errors:0 dropped:0 overruns:0 carrier:0 >>> >>>  port1.218 >>>  RX packets:7031978 errors:0 dropped:0 overruns:0 frame:0 >>>  TX packets:415930 errors:0 dropped:0 overruns:0 carrier:0 >>> >>>  --------------------------------------------------------------------- >>> >>>  napi_gro_receive() in Eth driver, no patch: >>> >>>  [ ID] Interval Transfer Bitrate Retr >>>  [ 5] 0.00-120.01 sec 10.0 GBytes 718 Mbits/sec 107 sender >>>  [ 5] 0.00-120.00 sec 10.0 GBytes 718 Mbits/sec receiver >>> >>>  eth0 >>>  RX packets:7868281 errors:0 dropped:0 overruns:0 frame:0 >>>  TX packets:7868267 errors:0 dropped:0 overruns:0 carrier:0 >>> >>>  port0 >>>  RX packets:429082 errors:0 dropped:0 overruns:0 frame:0 >>>  TX packets:7439343 errors:0 dropped:0 overruns:0 carrier:0 >>> >>>  port1 >>>  RX packets:7439199 errors:0 dropped:0 overruns:0 frame:0 >>>  TX packets:428913 errors:0 dropped:0 overruns:0 carrier:0 >>> >>>  port1.218 >>>  RX packets:7439195 errors:0 dropped:0 overruns:0 frame:0 >>>  TX packets:428902 errors:0 dropped:0 overruns:0 carrier:0 >>> >>>  ===================================================================== >>> >>>  netif_receive_skb() in Eth driver + patch: >>> >>>  [ ID] Interval Transfer Bitrate Retr >>>  [ 5] 0.00-120.01 sec 12.2 GBytes 870 Mbits/sec 2267 sender >>>  [ 5] 0.00-120.00 sec 12.2 GBytes 870 Mbits/sec receiver >>> >>>  eth0 >>>  RX packets:9474792 errors:0 dropped:0 overruns:0 frame:0 >>>  TX packets:9474777 errors:0 dropped:0 overruns:0 carrier:0 >>> >>>  port0 >>>  RX packets:455200 errors:0 dropped:0 overruns:0 frame:0 >>>  TX packets:353288 errors:0 dropped:0 overruns:0 carrier:0 >>> >>>  port1 >>>  RX packets:9019592 errors:0 dropped:0 overruns:0 frame:0 >>>  TX packets:455035 errors:0 dropped:0 overruns:0 carrier:0 >>> >>>  port1.218 >>>  RX packets:353144 errors:0 dropped:0 overruns:0 frame:0 >>>  TX packets:455024 errors:0 dropped:0 overruns:0 carrier:0 >>> >>>  --------------------------------------------------------------------- >>> >>>  netif_receive_skb_list() in Eth driver + patch: >>> >>>  [ ID] Interval Transfer Bitrate Retr >>>  [ 5] 0.00-120.01 sec 11.6 GBytes 827 Mbits/sec 2224 sender >>>  [ 5] 0.00-120.00 sec 11.5 GBytes 827 Mbits/sec receiver >>> >>>  eth0 >>>  RX packets:8981651 errors:0 dropped:0 overruns:0 frame:0 >>>  TX packets:898187 errors:0 dropped:0 overruns:0 carrier:0 >>> >>>  port0 >>>  RX packets:436159 errors:0 dropped:0 overruns:0 frame:0 >>>  TX packets:335665 errors:0 dropped:0 overruns:0 carrier:0 >>> >>>  port1 >>>  RX packets:8545492 errors:0 dropped:0 overruns:0 frame:0 >>>  TX packets:436071 errors:0 dropped:0 overruns:0 carrier:0 >>> >>>  port1.218 >>>  RX packets:335593 errors:0 dropped:0 overruns:0 frame:0 >>>  TX packets:436065 errors:0 dropped:0 overruns:0 carrier:0 >>> >>>  ----------------------------------------------------------- >>> >>>  napi_gro_receive() in Eth driver + patch: >>> >>>  [ ID] Interval Transfer Bitrate Retr >>>  [ 5] 0.00-120.01 sec 11.8 GBytes 855 Mbits/sec 122 sender >>>  [ 5] 0.00-120.00 sec 11.8 GBytes 855 Mbits/sec receiver >>> >>>  eth0 >>>  RX packets:9292214 errors:0 dropped:0 overruns:0 frame:0 >>>  TX packets:9292190 errors:0 dropped:0 overruns:0 carrier:0 >>> >>>  port0 >>>  RX packets:438516 errors:0 dropped:0 overruns:0 frame:0 >>>  TX packets:347236 errors:0 dropped:0 overruns:0 carrier:0 >>> >>>  port1 >>>  RX packets:8853698 errors:0 dropped:0 overruns:0 frame:0 >>>  TX packets:438331 errors:0 dropped:0 overruns:0 carrier:0 >>> >>>  port1.218 >>>  RX packets:347082 errors:0 dropped:0 overruns:0 frame:0 >>>  TX packets:438320 errors:0 dropped:0 overruns:0 carrier:0 >>> >>>  ----------------------------------------------------------- >>> >>>  The main goal is achieved: we have about 100-200 Mbps of performance >>>  boost while in-stack skbs are greatly reduced from ~8-9 millions to >>>  ~350000 (compare port0 TX and port1 RX without patch and with it). >> >> And the number of TCP retries is also lower, which likely means that we >> are making better use of the flow control built into the hardware/driver >> here? >> >> BTW do you know why you have so many retries though? It sounds like your >> flow control is missing a few edge cases, or that you have an incorrect >> configuration of your TX admission queue. > > Well, I have the same question TBH. All these ~1.5 years that I'm > working on these switches I have pretty chaotic number of TCP > retransmissions each time I change something in the code. They are > less likely to happen when the average CPU load is lower, but ~100 > is the best result I ever got. > Seems like I should stop trying to push software throughput to > the max for a while and pay more attention to this and to hardware > configuration instead and check if I miss something :) I have had to debug such a problem on some of our systems recently and it came down to being a couple of things for those systems: - as a receiver, we could create fast re-transmissions on the sender side because of packet loss which was because the switch is able to push packets faster than the DSA master being able to write them to DRAM. One way to work around this is to clock the Ethernet MAC higher, at the cost of power consumption. - as a sender, we could have fast re-transmissions when we were ourselves a "fast" CPU (1.7GHz or higher for Gigabit throughput), that part is still being root caused, but I think it comes down to flow control being incorrectly set-up in hardware, which means you could lose packets between your ndo_start_xmit() and not having the software TXQ assert XON/XOFF properly So in both cases, packet loss is responsible for those fast re-transmissions, but they are barely observable (case #1 was, since the switch port counter did not match the Ethernet MAC MIB counters) since you have a black hole effect. -- Florian