From patchwork Sat Mar 23 15:23:31 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 1062308 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=aquantia.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=AQUANTIA1COM.onmicrosoft.com header.i=@AQUANTIA1COM.onmicrosoft.com header.b="s/h9paHb"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44RPSJ19KVz9sSW for ; Sun, 24 Mar 2019 02:23:44 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727588AbfCWPXf (ORCPT ); Sat, 23 Mar 2019 11:23:35 -0400 Received: from mail-eopbgr760045.outbound.protection.outlook.com ([40.107.76.45]:15874 "EHLO NAM02-CY1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727494AbfCWPXe (ORCPT ); Sat, 23 Mar 2019 11:23:34 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=H5Krpcgp+bRfR1ni1Nq1gptWStnQi1X5JiIL1H6Xto0=; b=s/h9paHbsRU00e7/0OX4TSzmapI7o2i36USXh2Flcu5q6KHmMSc8kHgplRF8tQAMSRm1ahULdJhIMDlTAOENv1ZWoczIBT8zUhaa1+2+ovglK/8PFTQaag2LriQcV3iF/efpAoLeOvDx/sSRZUuJEivl5uJvr7N9fBccPjOL4DY= Received: from DM6PR11MB3625.namprd11.prod.outlook.com (20.178.230.149) by DM6PR11MB3659.namprd11.prod.outlook.com (20.178.231.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1730.15; Sat, 23 Mar 2019 15:23:31 +0000 Received: from DM6PR11MB3625.namprd11.prod.outlook.com ([fe80::d145:a1f4:ed34:e31b]) by DM6PR11MB3625.namprd11.prod.outlook.com ([fe80::d145:a1f4:ed34:e31b%3]) with mapi id 15.20.1730.017; Sat, 23 Mar 2019 15:23:31 +0000 From: Igor Russkikh To: "David S . Miller" CC: "netdev@vger.kernel.org" , Igor Russkikh Subject: [PATCH net-next 1/7] net: aquantia: optimize rx path using larger preallocated skb len Thread-Topic: [PATCH net-next 1/7] net: aquantia: optimize rx path using larger preallocated skb len Thread-Index: AQHU4Yxf5JPZYoJekkmau3vA1rZ0Mw== Date: Sat, 23 Mar 2019 15:23:31 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: BY5PR13CA0013.namprd13.prod.outlook.com (2603:10b6:a03:180::26) To DM6PR11MB3625.namprd11.prod.outlook.com (2603:10b6:5:13a::21) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-mailer: git-send-email 2.17.1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 6670c7dd-de82-488d-afbc-08d6afa381a8 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600127)(711020)(4605104)(2017052603328)(7153060)(7193020); SRVR:DM6PR11MB3659; x-ms-traffictypediagnostic: DM6PR11MB3659: x-microsoft-antispam-prvs: x-forefront-prvs: 0985DA2459 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(979002)(366004)(136003)(396003)(376002)(39840400004)(346002)(199004)(189003)(14454004)(97736004)(25786009)(5660300002)(86362001)(81166006)(81156014)(8676002)(2906002)(4326008)(7736002)(305945005)(3846002)(6116002)(316002)(11346002)(476003)(2616005)(446003)(54906003)(44832011)(486006)(52116002)(72206003)(6916009)(6486002)(68736007)(386003)(6506007)(6512007)(76176011)(256004)(99286004)(53936002)(71190400001)(71200400001)(6436002)(478600001)(118296001)(186003)(8936002)(107886003)(105586002)(50226002)(106356001)(66066001)(102836004)(36756003)(26005)(969003)(989001)(999001)(1009001)(1019001); DIR:OUT; SFP:1101; SCL:1; SRVR:DM6PR11MB3659; H:DM6PR11MB3625.namprd11.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: k3cvd0ZHQwTGkUluuF5bSSODKmDyqyy7kID8Lk9O/K2QKhMswW5I7dhctTzs1Cw8SvfFUW2x1FvPU6Yt6vEAeHtpk4IR06O6QH4l70WLDO02ey1B+kHvY9ybh1orrCyBWzlnBK8Fu2jS1XQgYfgSQxbInipgA2nbihJTD4SF0s7nbvnDHeqRho7wLfyyH55L3RKtxQCC10EISw03M3grF+YvxVSd6mujL0MaSzRY0ty829z1QZLBXtwpRMJ/Brolq5YW6JjhnJTV6qt5TK4c0vDkAbaxi83DMVWPaKhQxiR8HxK5vF+VkFbrLjkS3H7yvNthHMu2hiNasnD4HpQTG4AUM/3dtqO4hmtdG7As5PxkVrR1fHIsXCY7oTupdedMEYRTUWmE3mXZD4U4KLvqZ8jRxWQyMuWAUS4wxfMUJsM= MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6670c7dd-de82-488d-afbc-08d6afa381a8 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Mar 2019 15:23:31.1851 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR11MB3659 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Atlantic driver used 14 bytes preallocated skb size. That made L3 protocol processing inefficient because pskb_pull had to fetch all the L3/L4 headers from extra fragments. Specially on UDP flows that caused extra packet drops because CPU was overloaded with pskb_pull. This patch uses eth_get_headlen for skb preallocation. Signed-off-by: Igor Russkikh --- .../net/ethernet/aquantia/atlantic/aq_cfg.h | 2 ++ .../net/ethernet/aquantia/atlantic/aq_ring.c | 27 ++++++++++++------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_cfg.h b/drivers/net/ethernet/aquantia/atlantic/aq_cfg.h index 3944ce7f0870..aba550770adf 100644 --- a/drivers/net/ethernet/aquantia/atlantic/aq_cfg.h +++ b/drivers/net/ethernet/aquantia/atlantic/aq_cfg.h @@ -38,6 +38,8 @@ #define AQ_CFG_TX_CLEAN_BUDGET 256U +#define AQ_CFG_RX_HDR_SIZE 256U + /* LRO */ #define AQ_CFG_IS_LRO_DEF 1U diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_ring.c b/drivers/net/ethernet/aquantia/atlantic/aq_ring.c index 74550ccc7a20..42163b5d1cac 100644 --- a/drivers/net/ethernet/aquantia/atlantic/aq_ring.c +++ b/drivers/net/ethernet/aquantia/atlantic/aq_ring.c @@ -200,17 +200,18 @@ int aq_ring_rx_clean(struct aq_ring_s *self, int budget) { struct net_device *ndev = aq_nic_get_ndev(self->aq_nic); - int err = 0; bool is_rsc_completed = true; + int err = 0; for (; (self->sw_head != self->hw_head) && budget; self->sw_head = aq_ring_next_dx(self, self->sw_head), --budget, ++(*work_done)) { struct aq_ring_buff_s *buff = &self->buff_ring[self->sw_head]; + struct aq_ring_buff_s *buff_ = NULL; struct sk_buff *skb = NULL; unsigned int next_ = 0U; unsigned int i = 0U; - struct aq_ring_buff_s *buff_ = NULL; + u16 hdr_len; if (buff->is_error) { __free_pages(buff->page, 0); @@ -254,20 +255,28 @@ int aq_ring_rx_clean(struct aq_ring_s *self, err = -ENOMEM; goto err_exit; } - skb_put(skb, buff->len); } else { - skb = netdev_alloc_skb(ndev, ETH_HLEN); + skb = napi_alloc_skb(napi, AQ_CFG_RX_HDR_SIZE); if (unlikely(!skb)) { err = -ENOMEM; goto err_exit; } - skb_put(skb, ETH_HLEN); - memcpy(skb->data, page_address(buff->page), ETH_HLEN); - skb_add_rx_frag(skb, 0, buff->page, ETH_HLEN, - buff->len - ETH_HLEN, - SKB_TRUESIZE(buff->len - ETH_HLEN)); + hdr_len = buff->len; + if (hdr_len > AQ_CFG_RX_HDR_SIZE) + hdr_len = eth_get_headlen(page_address(buff->page), + AQ_CFG_RX_HDR_SIZE); + + memcpy(__skb_put(skb, hdr_len), page_address(buff->page), + ALIGN(hdr_len, sizeof(long))); + + if (buff->len - hdr_len > 0) { + skb_add_rx_frag(skb, 0, buff->page, + hdr_len, + buff->len - hdr_len, + SKB_TRUESIZE(buff->len - hdr_len)); + } if (!buff->is_eop) { for (i = 1U, next_ = buff->next, From patchwork Sat Mar 23 15:23:32 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 1062309 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=aquantia.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=AQUANTIA1COM.onmicrosoft.com header.i=@AQUANTIA1COM.onmicrosoft.com header.b="eVKvR143"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44RPSJ5Cqrz9sSR for ; Sun, 24 Mar 2019 02:23:44 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727625AbfCWPXh (ORCPT ); Sat, 23 Mar 2019 11:23:37 -0400 Received: from mail-eopbgr760045.outbound.protection.outlook.com ([40.107.76.45]:15874 "EHLO NAM02-CY1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727364AbfCWPXg (ORCPT ); Sat, 23 Mar 2019 11:23:36 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZvJExgqcSrY/TLvbNktVxtFu76X5FJn/XVj0bwlGilU=; b=eVKvR143LzESdU3CkNEiaeYpDtbqSMCyNyQR+RTBA+M70bq8sIxB1g2poS9Qvf/DAt2gyTt8JpoTARDvJMzlff2CNXSpdw3e2RqkjER+cbAPhZdshdtQUYGeNHby1CgwlFqa6l+yMS0oeMe4/HnZfdc4HpJYZeG0r4pdRiBjOuk= Received: from DM6PR11MB3625.namprd11.prod.outlook.com (20.178.230.149) by DM6PR11MB3659.namprd11.prod.outlook.com (20.178.231.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1730.15; Sat, 23 Mar 2019 15:23:33 +0000 Received: from DM6PR11MB3625.namprd11.prod.outlook.com ([fe80::d145:a1f4:ed34:e31b]) by DM6PR11MB3625.namprd11.prod.outlook.com ([fe80::d145:a1f4:ed34:e31b%3]) with mapi id 15.20.1730.017; Sat, 23 Mar 2019 15:23:33 +0000 From: Igor Russkikh To: "David S . Miller" CC: "netdev@vger.kernel.org" , Igor Russkikh Subject: [PATCH net-next 2/7] net: aquantia: optimize rx performance by page reuse strategy Thread-Topic: [PATCH net-next 2/7] net: aquantia: optimize rx performance by page reuse strategy Thread-Index: AQHU4YxgOrChEaZl0kiW4pLzpkZWGg== Date: Sat, 23 Mar 2019 15:23:32 +0000 Message-ID: <0acd9e5b04184815d446a965fe8920a877b5fe98.1553353914.git.igor.russkikh@aquantia.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: BY5PR13CA0013.namprd13.prod.outlook.com (2603:10b6:a03:180::26) To DM6PR11MB3625.namprd11.prod.outlook.com (2603:10b6:5:13a::21) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-mailer: git-send-email 2.17.1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 45ea9e7c-2e01-49cb-6be3-08d6afa382ac x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600127)(711020)(4605104)(2017052603328)(7153060)(7193020); SRVR:DM6PR11MB3659; x-ms-traffictypediagnostic: DM6PR11MB3659: x-microsoft-antispam-prvs: x-forefront-prvs: 0985DA2459 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(366004)(136003)(396003)(376002)(39840400004)(346002)(199004)(189003)(14454004)(97736004)(25786009)(5660300002)(86362001)(81166006)(81156014)(8676002)(2906002)(30864003)(4326008)(7736002)(305945005)(3846002)(6116002)(316002)(11346002)(476003)(2616005)(446003)(54906003)(44832011)(486006)(52116002)(72206003)(6916009)(6486002)(68736007)(386003)(6506007)(6512007)(76176011)(256004)(14444005)(99286004)(53936002)(71190400001)(71200400001)(6436002)(478600001)(118296001)(186003)(8936002)(107886003)(105586002)(50226002)(106356001)(66066001)(102836004)(36756003)(26005)(448954002); DIR:OUT; SFP:1101; SCL:1; SRVR:DM6PR11MB3659; H:DM6PR11MB3625.namprd11.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: qYUxve6z9NyUfP0anFbVPGUXK4YQB4cYKPHdzPIdjVJubpNo62wNoiOUb8h68geklug/pWsi8cxPfmO6uvOnWFAEqoP0OU4xvrJxdikDpmuRZwJqJMGfj6uH4qgUG+YS7pbuavOFHNyo8JoYW0V5Bnr6kWUCrvGLpKjP++if90wGT32w/WIN1CRnH2ZvAs3AygaEJSGpZxcUbZt3DnkXIvpH9BJw+wz4u3ZPW752d3p7sxHRk4Jlf2ZSw85YqAj6/RtlHQM4bfrfTzdXOclNl/HLV2xWuGoda82PN/HQtc2wDqKS8LFtwKvntD50k0WnBn2cDZKLPLuUgv9YADMNkRSLItmNE0HSy6FN3jZ5Pn41VBrEya6Sx5Pth/CtNaAqVeOSp4bz37S2FDYbB5vJKzT+zRW1oV45R108ZHLj0z8= MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 45ea9e7c-2e01-49cb-6be3-08d6afa382ac X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Mar 2019 15:23:33.0084 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR11MB3659 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org We introduce internal aq_rxpage wrapper over regular page where extra field is tracked: rxpage offset inside of allocated page. This offset allows to reuse one page for multiple packets. When needed (for example with large frames processing), allocated pageorder could be customized. This gives even larger page reuse efficiency. page_ref_count is used to track page users. If during rx refill underlying page has users, we increase pg_off by rx frame size thus the top half of the page is reused. Signed-off-by: Igor Russkikh --- .../net/ethernet/aquantia/atlantic/aq_cfg.h | 2 + .../net/ethernet/aquantia/atlantic/aq_nic.c | 1 + .../net/ethernet/aquantia/atlantic/aq_nic.h | 1 + .../net/ethernet/aquantia/atlantic/aq_ring.c | 166 +++++++++++++----- .../net/ethernet/aquantia/atlantic/aq_ring.h | 34 ++-- .../net/ethernet/aquantia/atlantic/aq_vec.c | 3 + .../aquantia/atlantic/hw_atl/hw_atl_a0.c | 4 - .../aquantia/atlantic/hw_atl/hw_atl_b0.c | 4 - 8 files changed, 152 insertions(+), 63 deletions(-) diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_cfg.h b/drivers/net/ethernet/aquantia/atlantic/aq_cfg.h index aba550770adf..80c16ab87771 100644 --- a/drivers/net/ethernet/aquantia/atlantic/aq_cfg.h +++ b/drivers/net/ethernet/aquantia/atlantic/aq_cfg.h @@ -40,6 +40,8 @@ #define AQ_CFG_RX_HDR_SIZE 256U +#define AQ_CFG_RX_PAGEORDER 0U + /* LRO */ #define AQ_CFG_IS_LRO_DEF 1U diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_nic.c b/drivers/net/ethernet/aquantia/atlantic/aq_nic.c index ff83667410bd..059df86e8e37 100644 --- a/drivers/net/ethernet/aquantia/atlantic/aq_nic.c +++ b/drivers/net/ethernet/aquantia/atlantic/aq_nic.c @@ -73,6 +73,7 @@ void aq_nic_cfg_start(struct aq_nic_s *self) cfg->tx_itr = aq_itr_tx; cfg->rx_itr = aq_itr_rx; + cfg->rxpageorder = AQ_CFG_RX_PAGEORDER; cfg->is_rss = AQ_CFG_IS_RSS_DEF; cfg->num_rss_queues = AQ_CFG_NUM_RSS_QUEUES_DEF; cfg->aq_rss.base_cpu_number = AQ_CFG_RSS_BASE_CPU_NUM_DEF; diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_nic.h b/drivers/net/ethernet/aquantia/atlantic/aq_nic.h index 8e34c1e49bf2..b1372430f62f 100644 --- a/drivers/net/ethernet/aquantia/atlantic/aq_nic.h +++ b/drivers/net/ethernet/aquantia/atlantic/aq_nic.h @@ -31,6 +31,7 @@ struct aq_nic_cfg_s { u32 itr; u16 rx_itr; u16 tx_itr; + u32 rxpageorder; u32 num_rss_queues; u32 mtu; u32 flow_control; diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_ring.c b/drivers/net/ethernet/aquantia/atlantic/aq_ring.c index 42163b5d1cac..1b258694144c 100644 --- a/drivers/net/ethernet/aquantia/atlantic/aq_ring.c +++ b/drivers/net/ethernet/aquantia/atlantic/aq_ring.c @@ -12,10 +12,89 @@ #include "aq_ring.h" #include "aq_nic.h" #include "aq_hw.h" +#include "aq_hw_utils.h" #include #include +static inline void aq_free_rxpage(struct aq_rxpage *rxpage, struct device *dev) +{ + unsigned int len = PAGE_SIZE << rxpage->order; + + dma_unmap_page(dev, rxpage->daddr, len, DMA_FROM_DEVICE); + + /* Drop the ref for being in the ring. */ + __free_pages(rxpage->page, rxpage->order); + rxpage->page = NULL; +} + +static int aq_get_rxpage(struct aq_rxpage *rxpage, unsigned int order, + struct device *dev) +{ + struct page *page; + dma_addr_t daddr; + int ret = -ENOMEM; + + page = dev_alloc_pages(order); + if (unlikely(!page)) + goto err_exit; + + daddr = dma_map_page(dev, page, 0, PAGE_SIZE << order, + DMA_FROM_DEVICE); + + if (unlikely(dma_mapping_error(dev, daddr))) + goto free_page; + + rxpage->page = page; + rxpage->daddr = daddr; + rxpage->order = order; + rxpage->pg_off = 0; + + return 0; + +free_page: + __free_pages(page, order); + +err_exit: + return ret; +} + +static int aq_get_rxpages(struct aq_ring_s *self, struct aq_ring_buff_s *rxbuf, + int order) +{ + int ret; + + if (rxbuf->rxdata.page) { + /* One means ring is the only user and can reuse */ + if (page_ref_count(rxbuf->rxdata.page) > 1) { + /* Try reuse buffer */ + rxbuf->rxdata.pg_off += AQ_CFG_RX_FRAME_MAX; + if (rxbuf->rxdata.pg_off + AQ_CFG_RX_FRAME_MAX <= + (PAGE_SIZE << order)) { + self->stats.rx.pg_flips++; + } else { + /* Buffer exhausted. We have other users and + * should release this page and realloc + */ + aq_free_rxpage(&rxbuf->rxdata, + aq_nic_get_dev(self->aq_nic)); + self->stats.rx.pg_losts++; + } + } else { + rxbuf->rxdata.pg_off = 0; + self->stats.rx.pg_reuses++; + } + } + + if (!rxbuf->rxdata.page) { + ret = aq_get_rxpage(&rxbuf->rxdata, order, + aq_nic_get_dev(self->aq_nic)); + return ret; + } + + return 0; +} + static struct aq_ring_s *aq_ring_alloc(struct aq_ring_s *self, struct aq_nic_s *aq_nic) { @@ -81,6 +160,11 @@ struct aq_ring_s *aq_ring_rx_alloc(struct aq_ring_s *self, self->idx = idx; self->size = aq_nic_cfg->rxds; self->dx_size = aq_nic_cfg->aq_hw_caps->rxd_size; + self->page_order = fls(AQ_CFG_RX_FRAME_MAX / PAGE_SIZE + + (AQ_CFG_RX_FRAME_MAX % PAGE_SIZE ? 1 : 0)) - 1; + + if (aq_nic_cfg->rxpageorder > self->page_order) + self->page_order = aq_nic_cfg->rxpageorder; self = aq_ring_alloc(self, aq_nic); if (!self) { @@ -213,10 +297,8 @@ int aq_ring_rx_clean(struct aq_ring_s *self, unsigned int i = 0U; u16 hdr_len; - if (buff->is_error) { - __free_pages(buff->page, 0); + if (buff->is_error) continue; - } if (buff->is_cleaned) continue; @@ -246,16 +328,22 @@ int aq_ring_rx_clean(struct aq_ring_s *self, } } + dma_sync_single_range_for_cpu(aq_nic_get_dev(self->aq_nic), + buff->rxdata.daddr, + buff->rxdata.pg_off, + buff->len, DMA_FROM_DEVICE); + /* for single fragment packets use build_skb() */ if (buff->is_eop && buff->len <= AQ_CFG_RX_FRAME_MAX - AQ_SKB_ALIGN) { - skb = build_skb(page_address(buff->page), + skb = build_skb(aq_buf_vaddr(&buff->rxdata), AQ_CFG_RX_FRAME_MAX); if (unlikely(!skb)) { err = -ENOMEM; goto err_exit; } skb_put(skb, buff->len); + page_ref_inc(buff->rxdata.page); } else { skb = napi_alloc_skb(napi, AQ_CFG_RX_HDR_SIZE); if (unlikely(!skb)) { @@ -265,34 +353,41 @@ int aq_ring_rx_clean(struct aq_ring_s *self, hdr_len = buff->len; if (hdr_len > AQ_CFG_RX_HDR_SIZE) - hdr_len = eth_get_headlen(page_address(buff->page), + hdr_len = eth_get_headlen(aq_buf_vaddr(&buff->rxdata), AQ_CFG_RX_HDR_SIZE); - memcpy(__skb_put(skb, hdr_len), page_address(buff->page), + memcpy(__skb_put(skb, hdr_len), aq_buf_vaddr(&buff->rxdata), ALIGN(hdr_len, sizeof(long))); if (buff->len - hdr_len > 0) { - skb_add_rx_frag(skb, 0, buff->page, - hdr_len, + skb_add_rx_frag(skb, 0, buff->rxdata.page, + buff->rxdata.pg_off + hdr_len, buff->len - hdr_len, - SKB_TRUESIZE(buff->len - hdr_len)); + AQ_CFG_RX_FRAME_MAX); + page_ref_inc(buff->rxdata.page); } if (!buff->is_eop) { - for (i = 1U, next_ = buff->next, - buff_ = &self->buff_ring[next_]; - true; next_ = buff_->next, - buff_ = &self->buff_ring[next_], ++i) { - skb_add_rx_frag(skb, i, - buff_->page, 0, + buff_ = buff; + i = 1U; + do { + next_ = buff_->next, + buff_ = &self->buff_ring[next_]; + + dma_sync_single_range_for_cpu( + aq_nic_get_dev(self->aq_nic), + buff_->rxdata.daddr, + buff_->rxdata.pg_off, + buff_->len, + DMA_FROM_DEVICE); + skb_add_rx_frag(skb, i++, + buff_->rxdata.page, + buff_->rxdata.pg_off, buff_->len, - SKB_TRUESIZE(buff->len - - ETH_HLEN)); + AQ_CFG_RX_FRAME_MAX); + page_ref_inc(buff_->rxdata.page); buff_->is_cleaned = 1; - - if (buff_->is_eop) - break; - } + } while (!buff_->is_eop); } } @@ -318,8 +413,7 @@ int aq_ring_rx_clean(struct aq_ring_s *self, int aq_ring_rx_fill(struct aq_ring_s *self) { - unsigned int pages_order = fls(AQ_CFG_RX_FRAME_MAX / PAGE_SIZE + - (AQ_CFG_RX_FRAME_MAX % PAGE_SIZE ? 1 : 0)) - 1; + unsigned int page_order = self->page_order; struct aq_ring_buff_s *buff = NULL; int err = 0; int i = 0; @@ -331,30 +425,15 @@ int aq_ring_rx_fill(struct aq_ring_s *self) buff->flags = 0U; buff->len = AQ_CFG_RX_FRAME_MAX; - buff->page = alloc_pages(GFP_ATOMIC | __GFP_COMP, pages_order); - if (!buff->page) { - err = -ENOMEM; + err = aq_get_rxpages(self, buff, page_order); + if (err) goto err_exit; - } - - buff->pa = dma_map_page(aq_nic_get_dev(self->aq_nic), - buff->page, 0, - AQ_CFG_RX_FRAME_MAX, DMA_FROM_DEVICE); - - if (dma_mapping_error(aq_nic_get_dev(self->aq_nic), buff->pa)) { - err = -ENOMEM; - goto err_exit; - } + buff->pa = aq_buf_daddr(&buff->rxdata); buff = NULL; } err_exit: - if (err < 0) { - if (buff && buff->page) - __free_pages(buff->page, 0); - } - return err; } @@ -367,10 +446,7 @@ void aq_ring_rx_deinit(struct aq_ring_s *self) self->sw_head = aq_ring_next_dx(self, self->sw_head)) { struct aq_ring_buff_s *buff = &self->buff_ring[self->sw_head]; - dma_unmap_page(aq_nic_get_dev(self->aq_nic), buff->pa, - AQ_CFG_RX_FRAME_MAX, DMA_FROM_DEVICE); - - __free_pages(buff->page, 0); + aq_free_rxpage(&buff->rxdata, aq_nic_get_dev(self->aq_nic)); } err_exit:; diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_ring.h b/drivers/net/ethernet/aquantia/atlantic/aq_ring.h index ac1329f4051d..cfffc301e746 100644 --- a/drivers/net/ethernet/aquantia/atlantic/aq_ring.h +++ b/drivers/net/ethernet/aquantia/atlantic/aq_ring.h @@ -17,6 +17,13 @@ struct page; struct aq_nic_cfg_s; +struct aq_rxpage { + struct page *page; + dma_addr_t daddr; + unsigned int order; + unsigned int pg_off; +}; + /* TxC SOP DX EOP * +----------+----------+----------+----------- * 8bytes|len l3,l4 | pa | pa | pa @@ -31,28 +38,21 @@ struct aq_nic_cfg_s; */ struct __packed aq_ring_buff_s { union { + /* RX/TX */ + dma_addr_t pa; /* RX */ struct { u32 rss_hash; u16 next; u8 is_hash_l4; u8 rsvd1; - struct page *page; + struct aq_rxpage rxdata; }; /* EOP */ struct { dma_addr_t pa_eop; struct sk_buff *skb; }; - /* DX */ - struct { - dma_addr_t pa; - }; - /* SOP */ - struct { - dma_addr_t pa_sop; - u32 len_pkt_sop; - }; /* TxC */ struct { u32 mss; @@ -91,6 +91,9 @@ struct aq_ring_stats_rx_s { u64 bytes; u64 lro_packets; u64 jumbo_packets; + u64 pg_losts; + u64 pg_flips; + u64 pg_reuses; }; struct aq_ring_stats_tx_s { @@ -116,6 +119,7 @@ struct aq_ring_s { unsigned int size; /* descriptors number */ unsigned int dx_size; /* TX or RX descriptor size, */ /* stored here for fater math */ + unsigned int page_order; union aq_ring_stats_s stats; dma_addr_t dx_ring_pa; }; @@ -126,6 +130,16 @@ struct aq_ring_param_s { cpumask_t affinity_mask; }; +static inline void *aq_buf_vaddr(struct aq_rxpage *rxpage) +{ + return page_to_virt(rxpage->page) + rxpage->pg_off; +} + +static inline dma_addr_t aq_buf_daddr(struct aq_rxpage *rxpage) +{ + return rxpage->daddr + rxpage->pg_off; +} + static inline unsigned int aq_ring_next_dx(struct aq_ring_s *self, unsigned int dx) { diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_vec.c b/drivers/net/ethernet/aquantia/atlantic/aq_vec.c index d335c334fa56..a2e4ca1782ae 100644 --- a/drivers/net/ethernet/aquantia/atlantic/aq_vec.c +++ b/drivers/net/ethernet/aquantia/atlantic/aq_vec.c @@ -353,6 +353,9 @@ void aq_vec_add_stats(struct aq_vec_s *self, stats_rx->errors += rx->errors; stats_rx->jumbo_packets += rx->jumbo_packets; stats_rx->lro_packets += rx->lro_packets; + stats_rx->pg_losts += rx->pg_losts; + stats_rx->pg_flips += rx->pg_flips; + stats_rx->pg_reuses += rx->pg_reuses; stats_tx->packets += tx->packets; stats_tx->bytes += tx->bytes; diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_a0.c b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_a0.c index f6f8338153a2..65ffaa7ad69e 100644 --- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_a0.c +++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_a0.c @@ -619,8 +619,6 @@ static int hw_atl_a0_hw_ring_tx_head_update(struct aq_hw_s *self, static int hw_atl_a0_hw_ring_rx_receive(struct aq_hw_s *self, struct aq_ring_s *ring) { - struct device *ndev = aq_nic_get_dev(ring->aq_nic); - for (; ring->hw_head != ring->sw_tail; ring->hw_head = aq_ring_next_dx(ring, ring->hw_head)) { struct aq_ring_buff_s *buff = NULL; @@ -687,8 +685,6 @@ static int hw_atl_a0_hw_ring_rx_receive(struct aq_hw_s *self, is_err &= ~0x18U; is_err &= ~0x04U; - dma_unmap_page(ndev, buff->pa, buff->len, DMA_FROM_DEVICE); - if (is_err || rxd_wb->type & 0x1000U) { /* status error or DMA error */ buff->is_error = 1U; diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c index b31dba1b1a55..f4e895906b1a 100644 --- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c +++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c @@ -654,8 +654,6 @@ static int hw_atl_b0_hw_ring_tx_head_update(struct aq_hw_s *self, static int hw_atl_b0_hw_ring_rx_receive(struct aq_hw_s *self, struct aq_ring_s *ring) { - struct device *ndev = aq_nic_get_dev(ring->aq_nic); - for (; ring->hw_head != ring->sw_tail; ring->hw_head = aq_ring_next_dx(ring, ring->hw_head)) { struct aq_ring_buff_s *buff = NULL; @@ -697,8 +695,6 @@ static int hw_atl_b0_hw_ring_rx_receive(struct aq_hw_s *self, buff->is_cso_err = 0U; } - dma_unmap_page(ndev, buff->pa, buff->len, DMA_FROM_DEVICE); - if ((rx_stat & BIT(0)) || rxd_wb->type & 0x1000U) { /* MAC error or DMA error */ buff->is_error = 1U; From patchwork Sat Mar 23 15:23:34 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 1062310 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=aquantia.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=AQUANTIA1COM.onmicrosoft.com header.i=@AQUANTIA1COM.onmicrosoft.com header.b="PZzXW3LY"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44RPSK31c4z9sSW for ; Sun, 24 Mar 2019 02:23:45 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727671AbfCWPXj (ORCPT ); Sat, 23 Mar 2019 11:23:39 -0400 Received: from mail-eopbgr760045.outbound.protection.outlook.com ([40.107.76.45]:15874 "EHLO NAM02-CY1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727494AbfCWPXi (ORCPT ); Sat, 23 Mar 2019 11:23:38 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=RWbuegG4bqkoABY/F0q1Qgl7lmKTwhIizPuVewPu7YU=; b=PZzXW3LYMN0EukhAbG/QaFjpszynSV9wR7mdmvt5UMiGGD88Fu+wfQVwayBlDLDzFi5i3QvqkIUJ5LeZx6fX8lQUFB6X9Dl7QGQIdVbrjyA/4yMjzdsJFJ/byIZXdBZIcdYnhag6N5oiJ4Uj0Jj8c01RQE1a8IZc2Y38v64wbs8= Received: from DM6PR11MB3625.namprd11.prod.outlook.com (20.178.230.149) by DM6PR11MB3659.namprd11.prod.outlook.com (20.178.231.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1730.15; Sat, 23 Mar 2019 15:23:34 +0000 Received: from DM6PR11MB3625.namprd11.prod.outlook.com ([fe80::d145:a1f4:ed34:e31b]) by DM6PR11MB3625.namprd11.prod.outlook.com ([fe80::d145:a1f4:ed34:e31b%3]) with mapi id 15.20.1730.017; Sat, 23 Mar 2019 15:23:34 +0000 From: Igor Russkikh To: "David S . Miller" CC: "netdev@vger.kernel.org" , Igor Russkikh Subject: [PATCH net-next 3/7] net: aquantia: Introduce rx refill threshold value Thread-Topic: [PATCH net-next 3/7] net: aquantia: Introduce rx refill threshold value Thread-Index: AQHU4YxhYqaY9YsJGkqEjdExbxadfw== Date: Sat, 23 Mar 2019 15:23:34 +0000 Message-ID: <61fab9293b89737afcdd8b848f1685ce8cb6eb8f.1553353914.git.igor.russkikh@aquantia.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: BY5PR13CA0013.namprd13.prod.outlook.com (2603:10b6:a03:180::26) To DM6PR11MB3625.namprd11.prod.outlook.com (2603:10b6:5:13a::21) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-mailer: git-send-email 2.17.1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: ebbcc6b3-1c44-4dae-53b6-08d6afa383c2 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600127)(711020)(4605104)(2017052603328)(7153060)(7193020); SRVR:DM6PR11MB3659; x-ms-traffictypediagnostic: DM6PR11MB3659: x-microsoft-antispam-prvs: x-forefront-prvs: 0985DA2459 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(366004)(136003)(396003)(376002)(39840400004)(346002)(199004)(189003)(14454004)(97736004)(25786009)(5660300002)(86362001)(81166006)(81156014)(8676002)(2906002)(4326008)(7736002)(305945005)(3846002)(6116002)(316002)(11346002)(476003)(2616005)(446003)(54906003)(44832011)(486006)(52116002)(72206003)(6916009)(6486002)(68736007)(386003)(6506007)(6512007)(76176011)(256004)(99286004)(53936002)(71190400001)(71200400001)(6436002)(478600001)(118296001)(186003)(8936002)(107886003)(105586002)(50226002)(106356001)(66066001)(102836004)(36756003)(26005)(181463001); DIR:OUT; SFP:1101; SCL:1; SRVR:DM6PR11MB3659; H:DM6PR11MB3625.namprd11.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: O7TG83IkIGFSEDUJXEfqfYvzcsrmeStIJlaSeqI25Gb10juU5vaFnhXy+F5RnolABPPlqePII9WAf8PcTWEo2/1vhXi7XkKhDBcNItDqASDBH/L3fwgflWrzkIV7Dg15hsEBgDHlmFrtpnR9A2bo0jCkR1jit5oiXrSZB+owzumrOOkfBIk/6atcCW3eEVMNiYjTjrvR2NKfH/CeqEztBzWUO9gAYlBxHmuLnQ6f9/RHpGAxN281vxfb9fZg7uk+KAqcxFNvR5pvp0IcVdMC6ymEqLxfzSh3aKDcUNbicm4V2JrabGtwUak6wbv+edzNycsCvFOxivJlERoZKpPfs260ZN8+eIVERlrghymnA6wZ70JLhLlDNY8yzHrgIsh4Bsev1G7je/fR23569FAkkekwI4ucAJ7pSVoXYhMWXf0= MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: ebbcc6b3-1c44-4dae-53b6-08d6afa383c2 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Mar 2019 15:23:34.7977 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR11MB3659 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Before that, we've refilled ring even on single descriptor move. Under high packet load that caused page allocation logic to be triggered too often. That made overall ring processing slower. Moreover, with page buffer reuse implemented, we should give a chance higher networking levels to process received packets faster, release the pages they consumed and therefore give a higher chance for these pages to be reused. RX ring is now refilled only when AQ_CFG_RX_REFILL_THRES or more descriptors were processed (32 by default). Under regular traffic this gives quite enough time for packet to be consumed and page to be reused. Signed-off-by: Igor Russkikh --- drivers/net/ethernet/aquantia/atlantic/aq_cfg.h | 2 ++ drivers/net/ethernet/aquantia/atlantic/aq_ring.c | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_cfg.h b/drivers/net/ethernet/aquantia/atlantic/aq_cfg.h index 80c16ab87771..551c5cc1714b 100644 --- a/drivers/net/ethernet/aquantia/atlantic/aq_cfg.h +++ b/drivers/net/ethernet/aquantia/atlantic/aq_cfg.h @@ -38,6 +38,8 @@ #define AQ_CFG_TX_CLEAN_BUDGET 256U +#define AQ_CFG_RX_REFILL_THRES 32U + #define AQ_CFG_RX_HDR_SIZE 256U #define AQ_CFG_RX_PAGEORDER 0U diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_ring.c b/drivers/net/ethernet/aquantia/atlantic/aq_ring.c index 1b258694144c..21c486cecbad 100644 --- a/drivers/net/ethernet/aquantia/atlantic/aq_ring.c +++ b/drivers/net/ethernet/aquantia/atlantic/aq_ring.c @@ -418,6 +418,10 @@ int aq_ring_rx_fill(struct aq_ring_s *self) int err = 0; int i = 0; + if (aq_ring_avail_dx(self) < min_t(unsigned int, AQ_CFG_RX_REFILL_THRES, + self->size / 2)) + return err; + for (i = aq_ring_avail_dx(self); i--; self->sw_tail = aq_ring_next_dx(self, self->sw_tail)) { buff = &self->buff_ring[self->sw_tail]; From patchwork Sat Mar 23 15:23:36 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 1062311 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=aquantia.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=AQUANTIA1COM.onmicrosoft.com header.i=@AQUANTIA1COM.onmicrosoft.com header.b="R7tke9PD"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44RPSK5tcgz9sSR for ; Sun, 24 Mar 2019 02:23:45 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727685AbfCWPXl (ORCPT ); Sat, 23 Mar 2019 11:23:41 -0400 Received: from mail-eopbgr760045.outbound.protection.outlook.com ([40.107.76.45]:15874 "EHLO NAM02-CY1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727364AbfCWPXj (ORCPT ); Sat, 23 Mar 2019 11:23:39 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=RwsSfHPtmbSzujUk4flWmKUw/fjbW1Gt/nQZ8x70ulU=; b=R7tke9PD0FE3cQCNDleY5NvamibbMNGo6Z8LgshgMJCRBTJ6Add/RVJU+6yGm8ETyL/N7P6TMPTvgb1Ik0/QL37hA8bVu94nAaufzifZW4SGVS/wBdZD65i/lFy75VeY+R7/tQRk8Nlpt6okyEmb2/ahAVP1Ey8bKyQDPqLhUVI= Received: from DM6PR11MB3625.namprd11.prod.outlook.com (20.178.230.149) by DM6PR11MB3659.namprd11.prod.outlook.com (20.178.231.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1730.15; Sat, 23 Mar 2019 15:23:36 +0000 Received: from DM6PR11MB3625.namprd11.prod.outlook.com ([fe80::d145:a1f4:ed34:e31b]) by DM6PR11MB3625.namprd11.prod.outlook.com ([fe80::d145:a1f4:ed34:e31b%3]) with mapi id 15.20.1730.017; Sat, 23 Mar 2019 15:23:36 +0000 From: Igor Russkikh To: "David S . Miller" CC: "netdev@vger.kernel.org" , Igor Russkikh Subject: [PATCH net-next 4/7] net: aquantia: Make RX default frame size 2K Thread-Topic: [PATCH net-next 4/7] net: aquantia: Make RX default frame size 2K Thread-Index: AQHU4Yxiyaj2Dyi5bEy6Ab+dD/gOJw== Date: Sat, 23 Mar 2019 15:23:36 +0000 Message-ID: <44c6600e9621aa0c5465bca6c97a1ddb7bd04d3c.1553353914.git.igor.russkikh@aquantia.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: BY5PR13CA0013.namprd13.prod.outlook.com (2603:10b6:a03:180::26) To DM6PR11MB3625.namprd11.prod.outlook.com (2603:10b6:5:13a::21) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-mailer: git-send-email 2.17.1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: fdf62106-b972-48e2-a6db-08d6afa384d3 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600127)(711020)(4605104)(2017052603328)(7153060)(7193020); SRVR:DM6PR11MB3659; x-ms-traffictypediagnostic: DM6PR11MB3659: x-microsoft-antispam-prvs: x-forefront-prvs: 0985DA2459 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(366004)(136003)(396003)(376002)(39840400004)(346002)(199004)(189003)(14454004)(97736004)(25786009)(5660300002)(86362001)(81166006)(81156014)(8676002)(2906002)(4744005)(4326008)(7736002)(305945005)(3846002)(6116002)(316002)(11346002)(476003)(2616005)(446003)(66574012)(54906003)(44832011)(486006)(52116002)(72206003)(6916009)(6486002)(68736007)(386003)(6506007)(6512007)(76176011)(256004)(14444005)(99286004)(53936002)(71190400001)(71200400001)(6436002)(478600001)(118296001)(186003)(8936002)(107886003)(105586002)(50226002)(106356001)(66066001)(102836004)(36756003)(26005); DIR:OUT; SFP:1101; SCL:1; SRVR:DM6PR11MB3659; H:DM6PR11MB3625.namprd11.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: nNFoLlKQr2t92I+18zcGpzgwEaS0X/XM9PFGowGgDZmAaAnPVDPOhdfZSpUfSRf8wwjXQlH7JXcDdrugwkRwJg1J7kZJU4uTdwH9aQaFoPhz/AqVMLa4qGTv3jiQt2c21A4boz3oQ8wpJQz+HfSYYtWlhkrmNKZWQ+0IE+vE9ldwEOgkHCFWLgXWURu6ZIyPHwuxVhU64t9ft6HIyi3DkHNNRadwTc9gJ+FU+cIw9z2qs5NJ/Ge6+YpaSo5Y7zYGmSg4dMMU34Opg7J8Cd5CzYv9CFOb50+wWnoI9sC3JZmQ6+V6J68063HLlnFSalGGTeZDPtUUFipZgcHTeBQgnOEAbLR9iVQYnmonaX5S09o4N+2eM79Fx6rMB+khDxwp1A4ueGmbYOoCiihfD/HcuHajgyppm3FPC40Eflpa48M= MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: fdf62106-b972-48e2-a6db-08d6afa384d3 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Mar 2019 15:23:36.5949 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR11MB3659 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This correlates with default internet MTU. This also allows page flip/reuse to be activated, since each allocated RX page now serves for two frags/packets. Signed-off-by: Igor Russkikh --- drivers/net/ethernet/aquantia/atlantic/aq_cfg.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_cfg.h b/drivers/net/ethernet/aquantia/atlantic/aq_cfg.h index 551c5cc1714b..0dc18f5f381d 100644 --- a/drivers/net/ethernet/aquantia/atlantic/aq_cfg.h +++ b/drivers/net/ethernet/aquantia/atlantic/aq_cfg.h @@ -34,7 +34,7 @@ #define AQ_CFG_TCS_MAX 8U #define AQ_CFG_TX_FRAME_MAX (16U * 1024U) -#define AQ_CFG_RX_FRAME_MAX (4U * 1024U) +#define AQ_CFG_RX_FRAME_MAX (2U * 1024U) #define AQ_CFG_TX_CLEAN_BUDGET 256U From patchwork Sat Mar 23 15:23:38 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 1062312 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=aquantia.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=AQUANTIA1COM.onmicrosoft.com header.i=@AQUANTIA1COM.onmicrosoft.com header.b="fJi6eX7K"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44RPSL2ZBPz9sSW for ; Sun, 24 Mar 2019 02:23:46 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727693AbfCWPXn (ORCPT ); Sat, 23 Mar 2019 11:23:43 -0400 Received: from mail-eopbgr760045.outbound.protection.outlook.com ([40.107.76.45]:15874 "EHLO NAM02-CY1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727494AbfCWPXk (ORCPT ); Sat, 23 Mar 2019 11:23:40 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=gGxNU7bJi5QmhI+gJ2a/qtOUrleQri92x3s8/YrFE2Q=; b=fJi6eX7KjvGqDm4C0yTKYodmkcBF8UUYt09WibjbOie40FimX+X4MptePrIECltdUPPTDzou0abMS4VHGa7XIFlepG1snYwCfbgUgMLHpYrAS4BkLxWNRcTJSl+6F3EHB9p2EFYVYiJ7zGYft1wDTWEada0tlD41Q6lrzQG1p5Q= Received: from DM6PR11MB3625.namprd11.prod.outlook.com (20.178.230.149) by DM6PR11MB3659.namprd11.prod.outlook.com (20.178.231.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1730.15; Sat, 23 Mar 2019 15:23:38 +0000 Received: from DM6PR11MB3625.namprd11.prod.outlook.com ([fe80::d145:a1f4:ed34:e31b]) by DM6PR11MB3625.namprd11.prod.outlook.com ([fe80::d145:a1f4:ed34:e31b%3]) with mapi id 15.20.1730.017; Sat, 23 Mar 2019 15:23:38 +0000 From: Igor Russkikh To: "David S . Miller" CC: "netdev@vger.kernel.org" , Igor Russkikh Subject: [PATCH net-next 5/7] net: aquantia: Increase rx ring default size from 1K to 2K Thread-Topic: [PATCH net-next 5/7] net: aquantia: Increase rx ring default size from 1K to 2K Thread-Index: AQHU4Yxj6LseubM+h0Of/tIo6bOofw== Date: Sat, 23 Mar 2019 15:23:38 +0000 Message-ID: <41f1bf9721dde082624a63aebfa8b338f1847443.1553353914.git.igor.russkikh@aquantia.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: BY5PR13CA0013.namprd13.prod.outlook.com (2603:10b6:a03:180::26) To DM6PR11MB3625.namprd11.prod.outlook.com (2603:10b6:5:13a::21) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-mailer: git-send-email 2.17.1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 643b031f-094e-4e72-327e-08d6afa385e6 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600127)(711020)(4605104)(2017052603328)(7153060)(7193020); SRVR:DM6PR11MB3659; x-ms-traffictypediagnostic: DM6PR11MB3659: x-microsoft-antispam-prvs: x-forefront-prvs: 0985DA2459 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(366004)(136003)(396003)(376002)(39840400004)(346002)(199004)(189003)(14454004)(97736004)(25786009)(5660300002)(86362001)(81166006)(81156014)(8676002)(2906002)(4744005)(4326008)(7736002)(305945005)(3846002)(6116002)(316002)(11346002)(476003)(2616005)(446003)(54906003)(44832011)(486006)(52116002)(72206003)(6916009)(6486002)(68736007)(386003)(6506007)(6512007)(76176011)(256004)(14444005)(99286004)(53936002)(71190400001)(71200400001)(6436002)(478600001)(118296001)(186003)(8936002)(107886003)(105586002)(50226002)(106356001)(66066001)(102836004)(36756003)(26005); DIR:OUT; SFP:1101; SCL:1; SRVR:DM6PR11MB3659; H:DM6PR11MB3625.namprd11.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: e5HurUkmpSTJlEEzauM8+SalMg9wTfW6HaY4BpGb7fv0etqgRcP3iTKt+4MQ2Ju/zgqH5hCkZtC06VhA4Mrt7QmejnxPE5C3w3TiEQHDdjTwTNohteUIFxbW2MQBA2XFpp7NnOKLZyIpfQrtQ+NM6ltrbFQyyZ56gYDxf/o1A1qOY6IEF5sJa4uO6BK5FYCST8FV6uePOw1Hpn9S5tVZKOQLIU3B8NfV9Fy9z+ngYkpdOUYt/UsYyXUUuH1EVQDy2zIOv9PchoGmQH3wSsZmfN2Qw23ElDqCnCNCIsf3PBBfs6dUUSTPVmYAG6Cu/jfxRpf/6S/2HzbyqvHh9A4VOLJWjnls3Z6nAscsHUI+XGenH2qRt5d2M4Py2CYdii+bhkKGk7+34u9j+QAkGO5DPq/5LEmjuOzdBiwrGMiGrjU= MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 643b031f-094e-4e72-327e-08d6afa385e6 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Mar 2019 15:23:38.3882 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR11MB3659 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org For multigig rates 1K ring size is often not enough and causes extra packet drops in hardware. Signed-off-by: Igor Russkikh --- drivers/net/ethernet/aquantia/atlantic/aq_cfg.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_cfg.h b/drivers/net/ethernet/aquantia/atlantic/aq_cfg.h index 0dc18f5f381d..8f35c3f883f0 100644 --- a/drivers/net/ethernet/aquantia/atlantic/aq_cfg.h +++ b/drivers/net/ethernet/aquantia/atlantic/aq_cfg.h @@ -16,7 +16,7 @@ #define AQ_CFG_TCS_DEF 1U #define AQ_CFG_TXDS_DEF 4096U -#define AQ_CFG_RXDS_DEF 1024U +#define AQ_CFG_RXDS_DEF 2048U #define AQ_CFG_IS_POLLING_DEF 0U From patchwork Sat Mar 23 15:23:40 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 1062313 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=aquantia.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=AQUANTIA1COM.onmicrosoft.com header.i=@AQUANTIA1COM.onmicrosoft.com header.b="SpIvzaR5"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44RPSP46lFz9sSR for ; Sun, 24 Mar 2019 02:23:49 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727702AbfCWPXq (ORCPT ); Sat, 23 Mar 2019 11:23:46 -0400 Received: from mail-eopbgr760045.outbound.protection.outlook.com ([40.107.76.45]:15874 "EHLO NAM02-CY1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727364AbfCWPXp (ORCPT ); Sat, 23 Mar 2019 11:23:45 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=vb/m8URblhDbMkeKdhDkI62IJgExBXJJ7r551qRVYmY=; b=SpIvzaR54cas7s3IcXi0Gs9AeI19DCYrNWZPp5LpovZmS8DcpIq/PlYs65n15E2FIr9s9cMt3cL4natCLF1fv3+xw3P+5spppcCAim9GqjOy44XYCSYjdgmgNrgtdXeFy5HXMWwc8HBCr1br8BQzzn6mQybbh87zjTBULGLEQn4= Received: from DM6PR11MB3625.namprd11.prod.outlook.com (20.178.230.149) by DM6PR11MB3659.namprd11.prod.outlook.com (20.178.231.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1730.15; Sat, 23 Mar 2019 15:23:40 +0000 Received: from DM6PR11MB3625.namprd11.prod.outlook.com ([fe80::d145:a1f4:ed34:e31b]) by DM6PR11MB3625.namprd11.prod.outlook.com ([fe80::d145:a1f4:ed34:e31b%3]) with mapi id 15.20.1730.017; Sat, 23 Mar 2019 15:23:40 +0000 From: Igor Russkikh To: "David S . Miller" CC: "netdev@vger.kernel.org" , Igor Russkikh , Nikita Danilov Subject: [PATCH net-next 6/7] net: aquantia: improve LRO configuration Thread-Topic: [PATCH net-next 6/7] net: aquantia: improve LRO configuration Thread-Index: AQHU4Yxk7SBthrAI3UC18rliRemChw== Date: Sat, 23 Mar 2019 15:23:40 +0000 Message-ID: <20c42fb19cdc58f2f10769ea6ce8dd795537cffd.1553353914.git.igor.russkikh@aquantia.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: BY5PR13CA0013.namprd13.prod.outlook.com (2603:10b6:a03:180::26) To DM6PR11MB3625.namprd11.prod.outlook.com (2603:10b6:5:13a::21) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-mailer: git-send-email 2.17.1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: b79e9d1b-5755-4d24-f281-08d6afa3871a x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600127)(711020)(4605104)(2017052603328)(7153060)(7193020); SRVR:DM6PR11MB3659; x-ms-traffictypediagnostic: DM6PR11MB3659: x-microsoft-antispam-prvs: x-forefront-prvs: 0985DA2459 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(366004)(136003)(396003)(376002)(39840400004)(346002)(199004)(189003)(14454004)(97736004)(25786009)(5660300002)(86362001)(81166006)(81156014)(8676002)(2906002)(4326008)(7736002)(305945005)(3846002)(6116002)(316002)(11346002)(476003)(2616005)(446003)(54906003)(44832011)(486006)(52116002)(72206003)(6916009)(6486002)(68736007)(386003)(6506007)(6512007)(76176011)(256004)(99286004)(53936002)(71190400001)(71200400001)(6436002)(478600001)(118296001)(186003)(8936002)(107886003)(105586002)(50226002)(106356001)(66066001)(102836004)(36756003)(26005); DIR:OUT; SFP:1101; SCL:1; SRVR:DM6PR11MB3659; H:DM6PR11MB3625.namprd11.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: 4/VoXwwrI5Viz4lCTYk56EyxLipnXCfyOv6om2d7y7vFvHbht+j5T5xOhxBbrOnegdTaNo+Q/GrTtgLlCPCpjW5ziagA/svtnSmzpGhhIPuZWJzhXZolfA2JwTPUVHZUo1RfjIICYiweBDIRHKKpwNvkpX/yaCJ2FHhNStMuCcpCKTFQ6awEsrWGwodyQOqoMY89timpJBmcl0M+A5ve80KlfRXwoSx6jaUMqLIZrkLyP0CjOlElU8ZOHfTxOc9qZbv1TO9zX/P4Nonn73RGI+AjD9SEdH3SqQyaAkK07rZ5RzHqiSmXibYfcHe6y4x8KBirSOaU+UgmhTDCuV8FSgn2VmcWrdU1m2iOCjjGGUXGYUP1zz1GHs8MHm8ilbmm/P4152SV+uPGQrLwoO9bzuz8t7+s8iSbbKWIGayYfjQ= MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: b79e9d1b-5755-4d24-f281-08d6afa3871a X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Mar 2019 15:23:40.2765 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR11MB3659 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Nikita Danilov Default LRO HW configuration was very conservative. Low Number of Descriptors per LRO Sequence, small session timeout, inefficient settings in interrupt generation logic. Change max number of LRO descriptors from 2 to 16 to increase performance. Increase maximum coalescing interval in HW to 250uS. Tune up HW LRO interrupt generation setting to prevent hw issues with long LRO sessions. Signed-off-by: Nikita Danilov Signed-off-by: Igor Russkikh --- .../ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c | 12 +++++++++++- .../aquantia/atlantic/hw_atl/hw_atl_b0_internal.h | 2 +- .../aquantia/atlantic/hw_atl/hw_atl_llh.c | 15 +++++++++++++++ .../aquantia/atlantic/hw_atl/hw_atl_llh.h | 6 ++++++ .../atlantic/hw_atl/hw_atl_llh_internal.h | 13 +++++++++++++ 5 files changed, 46 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c index f4e895906b1a..7e95804e2180 100644 --- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c +++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c @@ -259,7 +259,13 @@ static int hw_atl_b0_hw_offload_set(struct aq_hw_s *self, hw_atl_rpo_lro_time_base_divider_set(self, 0x61AU); hw_atl_rpo_lro_inactive_interval_set(self, 0); - hw_atl_rpo_lro_max_coalescing_interval_set(self, 2); + /* the LRO timebase divider is 5 uS (0x61a), + * which is multiplied by 50(0x32) + * to get a maximum coalescing interval of 250 uS, + * which is the default value + */ + hw_atl_rpo_lro_max_coalescing_interval_set(self, 50); + hw_atl_rpo_lro_qsessions_lim_set(self, 1U); @@ -273,6 +279,10 @@ static int hw_atl_b0_hw_offload_set(struct aq_hw_s *self, hw_atl_rpo_lro_en_set(self, aq_nic_cfg->is_lro ? 0xFFFFFFFFU : 0U); + hw_atl_itr_rsc_en_set(self, + aq_nic_cfg->is_lro ? 0xFFFFFFFFU : 0U); + + hw_atl_itr_rsc_delay_set(self, 1U); } return aq_hw_err_from_flags(self); } diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0_internal.h b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0_internal.h index b318eefd36ae..ea98a08d7820 100644 --- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0_internal.h +++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0_internal.h @@ -78,7 +78,7 @@ #define HW_ATL_B0_TC_MAX 1U #define HW_ATL_B0_RSS_MAX 8U -#define HW_ATL_B0_LRO_RXD_MAX 2U +#define HW_ATL_B0_LRO_RXD_MAX 16U #define HW_ATL_B0_RS_SLIP_ENABLED 0U /* (256k -1(max pay_len) - 54(header)) */ diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh.c b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh.c index 0722b8e01964..9442deff98a8 100644 --- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh.c +++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh.c @@ -315,6 +315,21 @@ void hw_atl_itr_res_irq_set(struct aq_hw_s *aq_hw, u32 res_irq) HW_ATL_ITR_RES_SHIFT, res_irq); } +/* set RSC interrupt */ +void hw_atl_itr_rsc_en_set(struct aq_hw_s *aq_hw, u32 enable) +{ + aq_hw_write_reg(aq_hw, HW_ATL_ITR_RSC_EN_ADR, enable); +} + +/* set RSC delay */ +void hw_atl_itr_rsc_delay_set(struct aq_hw_s *aq_hw, u32 delay) +{ + aq_hw_write_reg_bit(aq_hw, HW_ATL_ITR_RSC_DELAY_ADR, + HW_ATL_ITR_RSC_DELAY_MSK, + HW_ATL_ITR_RSC_DELAY_SHIFT, + delay); +} + /* rdm */ void hw_atl_rdm_cpu_id_set(struct aq_hw_s *aq_hw, u32 cpuid, u32 dca) { diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh.h b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh.h index d46351890b16..4cfa4bd80ad3 100644 --- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh.h +++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh.h @@ -152,6 +152,12 @@ u32 hw_atl_itr_res_irq_get(struct aq_hw_s *aq_hw); /* set reset interrupt */ void hw_atl_itr_res_irq_set(struct aq_hw_s *aq_hw, u32 res_irq); +/* set RSC interrupt */ +void hw_atl_itr_rsc_en_set(struct aq_hw_s *aq_hw, u32 enable); + +/* set RSC delay */ +void hw_atl_itr_rsc_delay_set(struct aq_hw_s *aq_hw, u32 delay); + /* rdm */ /* set cpu id */ diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh_internal.h b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh_internal.h index fb45bc2d99cf..430bbd45b2f0 100644 --- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh_internal.h +++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh_internal.h @@ -95,6 +95,19 @@ #define HW_ATL_ITR_RES_MSK 0x80000000 /* lower bit position of bitfield itr_reset */ #define HW_ATL_ITR_RES_SHIFT 31 + +/* register address for bitfield rsc_en */ +#define HW_ATL_ITR_RSC_EN_ADR 0x00002200 + +/* register address for bitfield rsc_delay */ +#define HW_ATL_ITR_RSC_DELAY_ADR 0x00002204 +/* bitmask for bitfield rsc_delay */ +#define HW_ATL_ITR_RSC_DELAY_MSK 0x0000000f +/* width of bitfield rsc_delay */ +#define HW_ATL_ITR_RSC_DELAY_WIDTH 4 +/* lower bit position of bitfield rsc_delay */ +#define HW_ATL_ITR_RSC_DELAY_SHIFT 0 + /* register address for bitfield dca{d}_cpuid[7:0] */ #define HW_ATL_RDM_DCADCPUID_ADR(dca) (0x00006100 + (dca) * 0x4) /* bitmask for bitfield dca{d}_cpuid[7:0] */ From patchwork Sat Mar 23 15:23:42 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 1062314 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=aquantia.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=AQUANTIA1COM.onmicrosoft.com header.i=@AQUANTIA1COM.onmicrosoft.com header.b="G0HwsROF"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44RPSQ2wkxz9sSW for ; Sun, 24 Mar 2019 02:23:50 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727718AbfCWPXs (ORCPT ); Sat, 23 Mar 2019 11:23:48 -0400 Received: from mail-eopbgr760045.outbound.protection.outlook.com ([40.107.76.45]:15874 "EHLO NAM02-CY1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727440AbfCWPXq (ORCPT ); Sat, 23 Mar 2019 11:23:46 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=oV+I/npYqGg2nbU15e3PXyci+cZ0sqJptZ1qRqYM9F0=; b=G0HwsROFO/rozzwOyrrrP5QUgvE2xY+SRCUyVRtPg8fr9RIDyQiNUzi/lYcfbtfKz2NrnPfbrp1cZoFy+jzJ48WMMK+v1fgqVEfxhrG5afNNb+iRY1CEwG5ssoKFeyG3M6om41XoISJSmV+SUju1EzrEzJkwyeLHB5IdDzo6kHU= Received: from DM6PR11MB3625.namprd11.prod.outlook.com (20.178.230.149) by DM6PR11MB3659.namprd11.prod.outlook.com (20.178.231.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1730.15; Sat, 23 Mar 2019 15:23:42 +0000 Received: from DM6PR11MB3625.namprd11.prod.outlook.com ([fe80::d145:a1f4:ed34:e31b]) by DM6PR11MB3625.namprd11.prod.outlook.com ([fe80::d145:a1f4:ed34:e31b%3]) with mapi id 15.20.1730.017; Sat, 23 Mar 2019 15:23:42 +0000 From: Igor Russkikh To: "David S . Miller" CC: "netdev@vger.kernel.org" , Igor Russkikh Subject: [PATCH net-next 7/7] net: aquantia: enable driver build for arm64 or compile_test Thread-Topic: [PATCH net-next 7/7] net: aquantia: enable driver build for arm64 or compile_test Thread-Index: AQHU4YxlPD9ccpeZFEKHS/EJv6VmfQ== Date: Sat, 23 Mar 2019 15:23:42 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: BY5PR13CA0013.namprd13.prod.outlook.com (2603:10b6:a03:180::26) To DM6PR11MB3625.namprd11.prod.outlook.com (2603:10b6:5:13a::21) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-mailer: git-send-email 2.17.1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 940e757a-ca48-4f50-e139-08d6afa38818 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600127)(711020)(4605104)(2017052603328)(7153060)(7193020); SRVR:DM6PR11MB3659; x-ms-traffictypediagnostic: DM6PR11MB3659: x-microsoft-antispam-prvs: x-forefront-prvs: 0985DA2459 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(366004)(136003)(396003)(376002)(39840400004)(346002)(199004)(189003)(14454004)(97736004)(25786009)(5660300002)(86362001)(81166006)(81156014)(8676002)(2906002)(4744005)(4326008)(7736002)(305945005)(3846002)(6116002)(316002)(11346002)(476003)(2616005)(446003)(54906003)(44832011)(486006)(52116002)(72206003)(6916009)(6486002)(68736007)(386003)(6506007)(6512007)(76176011)(256004)(14444005)(99286004)(53936002)(71190400001)(71200400001)(6436002)(478600001)(118296001)(186003)(8936002)(107886003)(105586002)(50226002)(106356001)(66066001)(102836004)(36756003)(26005); DIR:OUT; SFP:1101; SCL:1; SRVR:DM6PR11MB3659; H:DM6PR11MB3625.namprd11.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: HMZtx3t4npvQbkw1x8OifVUpnPJTjF0oeSFE10iompPyO7hh8zaC4lQrcXif/eaJV9riYtjJ4bZwmoCup+s483eB4mGBf07WGCLRtGnMP9nCHxfgo82VN0D2W/+6nludaKW04zLoK7ih/nYAokJuj4r03ftCLtQ7hLw7FcfcUQOS6jOFjmqwE8X4uOGxWMchvS+WgM3LRdSmVRrBfVGW61sp+kq20+ZM9Ci1lgHv7WiOL7NKKNMIiO9Yzx3/xTTdnfCYERni6/XB5O6PY3WBiLYm6Oj0b0am8HcgxOxRFtbhSvFmLBGc1paLCavOSxQby59esZGOvYZUirnUqfVkv1Y9EMzkD/q59+J00Q3luBdn/07D+3nbBe8m5iSkjLHNxFdQ2H485KZj9j1gZ7qo2qDZlH+kUNUGJ4NfKi73Ef8= MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 940e757a-ca48-4f50-e139-08d6afa38818 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Mar 2019 15:23:42.0137 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR11MB3659 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The driver is now constantly tested in our lab on aarch64 hardware: Jetson tx2, Pascal and Xavier tegra based hardware. Many of tegra smmu related HW bugs were fixed or workarounded already. Thus, add ARM64 into Kconfig. Add also COMPILE_TEST dependency. Signed-off-by: Igor Russkikh --- drivers/net/ethernet/aquantia/Kconfig | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/aquantia/Kconfig b/drivers/net/ethernet/aquantia/Kconfig index 7d623e90dc19..12472c5bb34d 100644 --- a/drivers/net/ethernet/aquantia/Kconfig +++ b/drivers/net/ethernet/aquantia/Kconfig @@ -17,7 +17,8 @@ if NET_VENDOR_AQUANTIA config AQTION tristate "aQuantia AQtion(tm) Support" - depends on PCI && X86_64 + depends on PCI + depends on X86_64 || ARM64 || COMPILE_TEST ---help--- This enables the support for the aQuantia AQtion(tm) Ethernet card.