From patchwork Tue Jan 17 16:32:26 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander H Duyck X-Patchwork-Id: 716306 X-Patchwork-Delegate: jeffrey.t.kirsher@intel.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3v2wnR1wL0z9ryn for ; Wed, 18 Jan 2017 03:40:11 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="DDK3i7Vb"; dkim-atps=neutral Received: from localhost (localhost [127.0.0.1]) by fraxinus.osuosl.org (Postfix) with ESMTP id B5AED89450; Tue, 17 Jan 2017 16:40:09 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from fraxinus.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id XTo7hNY4YGnY; Tue, 17 Jan 2017 16:40:07 +0000 (UTC) Received: from ash.osuosl.org (ash.osuosl.org [140.211.166.34]) by fraxinus.osuosl.org (Postfix) with ESMTP id 5E94188A38; Tue, 17 Jan 2017 16:40:07 +0000 (UTC) X-Original-To: intel-wired-lan@lists.osuosl.org Delivered-To: intel-wired-lan@lists.osuosl.org Received: from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133]) by ash.osuosl.org (Postfix) with ESMTP id 4619F1C2279 for ; Tue, 17 Jan 2017 16:40:06 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by hemlock.osuosl.org (Postfix) with ESMTP id 424EE8ADAA for ; Tue, 17 Jan 2017 16:40:06 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from hemlock.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id rQlM1dkfahHA for ; Tue, 17 Jan 2017 16:40:05 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mail-pg0-f66.google.com (mail-pg0-f66.google.com [74.125.83.66]) by hemlock.osuosl.org (Postfix) with ESMTPS id 675EB8AD27 for ; Tue, 17 Jan 2017 16:40:05 +0000 (UTC) Received: by mail-pg0-f66.google.com with SMTP id 204so8411206pge.2 for ; Tue, 17 Jan 2017 08:40:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:from:to:date:message-id:in-reply-to:references:user-agent :mime-version:content-transfer-encoding; bh=XHtOABxzjyZsLTheP74tzeta4MCSc5fERnyWb74etZw=; b=DDK3i7VbyhI2zoBjZ0+rnlzht5ifVirNL5/ktCdyMkQxrEoqK8DSbB+FxwTDKnLZu/ t7nyJLBFZk2amo3qAAgULqwzNHuVftjQxGy+6ZT8+TIHV3Mt3Zacd7UOnCzVnMKvqpCl w8hNaBbkH+pLm2ir7FpnbPoWVVSz+/tez0MhuPXlbB7X/nrBV5P1MxUTGb7tc7Nx8XRj h3ly2XnUG+8FMVaiVhtal6ZZoPgox/xKPHWf47i2LpQprVXM8q+6rpniXPl4l1Vrib+i zZiHwkN2Oe0el7seEdp6yW9MeCmj1NJ3rrs8JRwj2d2Wko6yargeCUsxw2OLNR0KXBpp /lyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:date:message-id:in-reply-to :references:user-agent:mime-version:content-transfer-encoding; bh=XHtOABxzjyZsLTheP74tzeta4MCSc5fERnyWb74etZw=; b=JyrPhPMHfHwisTTTSkih7O+gZc/Rq3QOMs0OnKqfzjebrDwaZyZ0iwIfXoWdReYo4v Pwp5T248FFi6GGLJR5Fim+O6212EkYAIpjMGTZoeyIBdW0P6XOciI0zvGTSzugGif/3S Sf1NtzkudpVzhe2Em71+9Jkyh+bloBMT9hyyBX4RcvNv8amBDBZOth/3LHvt2vu0+GcO mglKLR7DfFZHu0/GFPBx7akUTf/wOOq9dye+gIn81y8pwuTMfXoDsptwVRiGtskbnV3L 9v9hku12R0lWKELfmYdCEe4FdfnMGg8r8EvGK9AjiUvyULi+ascm9WXJq9gv5cvAS7ma ki7Q== X-Gm-Message-State: AIkVDXJ/r/w42aKrjmh8sbqwIysKQohH9U1hBaWtKQ/KZFX0KodkSVk+5pRju+EF8nM6wA== X-Received: by 10.84.241.207 with SMTP id t15mr25363846plm.136.1484670747835; Tue, 17 Jan 2017 08:32:27 -0800 (PST) Received: from localhost.localdomain ([2001:470:b:9c3:9e5c:8eff:fe4f:f2d0]) by smtp.gmail.com with ESMTPSA id o126sm57255199pga.34.2017.01.17.08.32.27 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 17 Jan 2017 08:32:27 -0800 (PST) From: Alexander Duyck To: intel-wired-lan@lists.osuosl.org, jeffrey.t.kirsher@intel.com Date: Tue, 17 Jan 2017 08:32:26 -0800 Message-ID: <20170117163222.5184.92903.stgit@localhost.localdomain> In-Reply-To: <20170117163010.5184.65449.stgit@localhost.localdomain> References: <20170117163010.5184.65449.stgit@localhost.localdomain> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Subject: [Intel-wired-lan] [next PATCH v2 5/9] igb: Limit maximum frame Rx based on MTU X-BeenThere: intel-wired-lan@lists.osuosl.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: Intel Wired Ethernet Linux Kernel Driver Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-wired-lan-bounces@lists.osuosl.org Sender: "Intel-wired-lan" From: Alexander Duyck In order to support the use of build_skb going forward it will be necessary to place a maximum limit on the amount of data we can receive when jumbo frames is not enabled. In order to do this I am adding a new upper limit for receive based on the size of a 2K buffer minus padding. Signed-off-by: Alexander Duyck --- drivers/net/ethernet/intel/igb/igb.h | 10 +++++++++- drivers/net/ethernet/intel/igb/igb_main.c | 16 ++++++++++++---- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/drivers/net/ethernet/intel/igb/igb.h b/drivers/net/ethernet/intel/igb/igb.h index a638254f4e06..a74928cc0e58 100644 --- a/drivers/net/ethernet/intel/igb/igb.h +++ b/drivers/net/ethernet/intel/igb/igb.h @@ -143,8 +143,17 @@ struct vf_data_storage { #define IGB_RXBUFFER_256 256 #define IGB_RXBUFFER_2048 2048 #define IGB_RX_HDR_LEN IGB_RXBUFFER_256 +#define IGB_TS_HDR_LEN 16 #define IGB_RX_BUFSZ IGB_RXBUFFER_2048 +#define IGB_SKB_PAD (NET_SKB_PAD + NET_IP_ALIGN) +#if (PAGE_SIZE < 8192) +#define IGB_MAX_FRAME_BUILD_SKB \ + (SKB_WITH_OVERHEAD(IGB_RXBUFFER_2048) - IGB_SKB_PAD - IGB_TS_HDR_LEN) +#else +#define IGB_MAX_FRAME_BUILD_SKB (IGB_RXBUFFER_2048 - IGB_TS_HDR_LEN) +#endif + /* How many Rx Buffers do we bundle into one write to the hardware ? */ #define IGB_RX_BUFFER_WRITE 16 /* Must be power of 2 */ @@ -561,7 +570,6 @@ struct igb_adapter { #define IGB_DMCTLX_DCFLUSH_DIS 0x80000000 /* Disable DMA Coal Flush */ #define IGB_82576_TSYNC_SHIFT 19 -#define IGB_TS_HDR_LEN 16 enum e1000_state_t { __IGB_TESTING, __IGB_RESETTING, diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c index 3f3ae098e39a..d881c51ef162 100644 --- a/drivers/net/ethernet/intel/igb/igb_main.c +++ b/drivers/net/ethernet/intel/igb/igb_main.c @@ -4250,7 +4250,7 @@ static void igb_set_rx_mode(struct net_device *netdev) struct igb_adapter *adapter = netdev_priv(netdev); struct e1000_hw *hw = &adapter->hw; unsigned int vfn = adapter->vfs_allocated_count; - u32 rctl = 0, vmolr = 0; + u32 rctl = 0, vmolr = 0, rlpml = MAX_JUMBO_FRAME_SIZE; int count; /* Check for Promiscuous and All Multicast modes */ @@ -4322,12 +4322,20 @@ static void igb_set_rx_mode(struct net_device *netdev) vmolr |= rd32(E1000_VMOLR(vfn)) & ~(E1000_VMOLR_ROPE | E1000_VMOLR_MPME | E1000_VMOLR_ROMPE); - /* enable Rx jumbo frames, no need for restriction */ + /* enable Rx jumbo frames, restrict as needed to support build_skb */ vmolr &= ~E1000_VMOLR_RLPML_MASK; - vmolr |= MAX_JUMBO_FRAME_SIZE | E1000_VMOLR_LPE; +#if (PAGE_SIZE < 8192) + if (adapter->max_frame_size <= IGB_MAX_FRAME_BUILD_SKB) { + if (!adapter->vfs_allocated_count) + rlpml = IGB_MAX_FRAME_BUILD_SKB; + vmolr |= IGB_MAX_FRAME_BUILD_SKB; + } else +#endif + vmolr |= MAX_JUMBO_FRAME_SIZE; + vmolr |= E1000_VMOLR_LPE; wr32(E1000_VMOLR(vfn), vmolr); - wr32(E1000_RLPML, MAX_JUMBO_FRAME_SIZE); + wr32(E1000_RLPML, rlpml); igb_restore_vf_multicasts(adapter); }